diff --git a/build.sh b/build.sh
index dbc78e436..152104e7d 100755
--- a/build.sh
+++ b/build.sh
@@ -19,7 +19,7 @@ ADB="${ANDROID_HOME}/platform-tools/adb"
EMULATOR="${ANDROID_HOME}/tools/emulator"
GRADLE="./gradlew --stacktrace"
PACKAGE_NAME=org.isoron.uhabits
-OUTPUTS_DIR=app/build/outputs
+OUTPUTS_DIR=uhabits-android/build/outputs
KEYFILE="TestKeystore.jks"
KEY_ALIAS="default"
@@ -128,14 +128,14 @@ install_apk() {
log_info "Installing APK"
if [ ! -z $RELEASE ]; then
- $ADB install -r ${OUTPUTS_DIR}/apk/release/app-release.apk || fail
+ $ADB install -r ${OUTPUTS_DIR}/apk/release/uhabits-android-release.apk || fail
else
- $ADB install -r ${OUTPUTS_DIR}/apk/debug/app-debug.apk || fail
+ $ADB install -r ${OUTPUTS_DIR}/apk/debug/uhabits-android-debug.apk || fail
fi
}
install_test_apk() {
- $ADB install -r ${OUTPUTS_DIR}/apk/androidTest/debug/app-debug-androidTest.apk || fail
+ $ADB install -r ${OUTPUTS_DIR}/apk/androidTest/debug/uhabits-android-debug-androidTest.apk || fail
}
run_instrumented_tests() {
@@ -158,7 +158,7 @@ parse_instrumentation_results() {
generate_coverage_badge() {
log_info "Generating code coverage badge"
- python tools/coverage-badge/badge.py -i app/build/reports/jacoco/coverageReport/coverageReport.xml -o ${OUTPUTS_DIR}/coverage-badge
+ python tools/coverage-badge/badge.py -i uhabits-android/build/reports/jacoco/coverageReport/coverageReport.xml -o ${OUTPUTS_DIR}/coverage-badge
}
fetch_artifacts() {
@@ -199,8 +199,8 @@ run_local_tests() {
parse_instrumentation_results
fetch_artifacts
fetch_logcat
- run_jvm_tests
- generate_coverage_badge
+ #run_jvm_tests
+ #generate_coverage_badge
uninstall_test_apk
}
diff --git a/uhabits-android/build.gradle b/uhabits-android/build.gradle
index bd78b5ba9..0186097a7 100644
--- a/uhabits-android/build.gradle
+++ b/uhabits-android/build.gradle
@@ -73,9 +73,6 @@ dependencies {
androidTestImplementation 'com.android.support:support-annotations:25.3.1'
androidTestImplementation 'com.android.support.test:rules:0.5'
androidTestImplementation 'com.android.support.test:runner:0.5'
- androidTestImplementation "com.google.dexmaker:dexmaker:1.2"
- androidTestImplementation 'com.linkedin.dexmaker:dexmaker-mockito:2.2.0'
- androidTestImplementation 'org.mockito:mockito-core:2.8.9'
androidTestImplementation 'com.google.guava:guava:20.0'
androidTestCompileOnly 'com.google.auto.factory:auto-factory:1.0-beta3'
androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2'
@@ -86,6 +83,11 @@ dependencies {
testAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3'
testAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT'
+ testCompile "org.mockito:mockito-core:2.8.9"
+ testCompile "org.mockito:mockito-inline:2.8.9"
+ androidTestCompile "org.mockito:mockito-android:2.8.9"
+ androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
+
implementation('com.opencsv:opencsv:3.9') {
exclude group: 'commons-logging', module: 'commons-logging'
}
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java
index 0b3e7a8c3..9b0b82efa 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java
@@ -43,7 +43,7 @@ public class FrequencyCardTest extends BaseViewTest
public void setUp()
{
super.setUp();
- habit = fixtures.createLongHabit();
+ habit = fixtures.createLongHabit();
view = (FrequencyCard) LayoutInflater
.from(targetContext)
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/HabitsCSVExporterTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java
similarity index 98%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/HabitsCSVExporterTest.java
rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java
index 48f173bc3..a2a63680c 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/HabitsCSVExporterTest.java
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java
@@ -17,7 +17,7 @@
* with this program. If not, see .
*/
-package org.isoron.uhabits.core.io;
+package org.isoron.uhabits.io;
import android.content.*;
import android.support.test.*;
@@ -26,6 +26,7 @@ import android.test.suitebuilder.annotation.*;
import org.isoron.androidbase.utils.*;
import org.isoron.uhabits.*;
+import org.isoron.uhabits.core.io.*;
import org.isoron.uhabits.core.models.*;
import org.junit.*;
import org.junit.runner.*;
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/ImportTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java
similarity index 98%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/ImportTest.java
rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java
index d1ef5f053..51a35e52c 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/ImportTest.java
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java
@@ -17,7 +17,7 @@
* with this program. If not, see .
*/
-package org.isoron.uhabits.core.io;
+package org.isoron.uhabits.io;
import android.content.*;
import android.support.test.*;
@@ -28,7 +28,6 @@ import org.isoron.androidbase.utils.*;
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
import org.isoron.uhabits.core.utils.*;
-import org.isoron.uhabits.io.*;
import org.junit.*;
import org.junit.runner.*;
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/HabitListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/HabitListTest.java
similarity index 98%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/HabitListTest.java
rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/HabitListTest.java
index 28e5cffc7..82d083bb3 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/HabitListTest.java
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/HabitListTest.java
@@ -17,13 +17,14 @@
* with this program. If not, see .
*/
-package org.isoron.uhabits.core.models;
+package org.isoron.uhabits.models;
import android.support.test.runner.*;
import android.test.suitebuilder.annotation.*;
import org.hamcrest.*;
import org.isoron.uhabits.*;
+import org.isoron.uhabits.core.models.*;
import org.junit.*;
import org.junit.runner.*;
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/HabitRecordTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/HabitRecordTest.java
similarity index 98%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/HabitRecordTest.java
rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/HabitRecordTest.java
index 4435bb961..872b3382c 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/HabitRecordTest.java
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/HabitRecordTest.java
@@ -17,7 +17,7 @@
* with this program. If not, see .
*/
-package org.isoron.uhabits.core.models.sqlite;
+package org.isoron.uhabits.models.sqlite;
import android.support.test.runner.*;
import android.test.suitebuilder.annotation.*;
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteCheckmarkListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java
similarity index 98%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteCheckmarkListTest.java
rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java
index 1817c338c..1efac3177 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteCheckmarkListTest.java
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java
@@ -17,7 +17,7 @@
* with this program. If not, see .
*/
-package org.isoron.uhabits.core.models.sqlite;
+package org.isoron.uhabits.models.sqlite;
import android.support.test.runner.*;
import android.test.suitebuilder.annotation.*;
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteHabitListTest.java
similarity index 98%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitListTest.java
rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteHabitListTest.java
index 211a6838d..a7b308c73 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitListTest.java
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteHabitListTest.java
@@ -17,7 +17,7 @@
* with this program. If not, see .
*/
-package org.isoron.uhabits.core.models.sqlite;
+package org.isoron.uhabits.models.sqlite;
import android.support.test.runner.*;
import android.test.suitebuilder.annotation.*;
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java
similarity index 98%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionListTest.java
rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java
index 3964aca1d..06ebca674 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionListTest.java
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java
@@ -17,7 +17,7 @@
* with this program. If not, see .
*/
-package org.isoron.uhabits.core.models.sqlite;
+package org.isoron.uhabits.models.sqlite;
import android.support.annotation.*;
import android.support.test.runner.*;
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteScoreListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java
similarity index 98%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteScoreListTest.java
rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java
index f71172894..3108ab96a 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteScoreListTest.java
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java
@@ -17,7 +17,7 @@
* with this program. If not, see .
*/
-package org.isoron.uhabits.core.models.sqlite;
+package org.isoron.uhabits.models.sqlite;
import android.support.test.runner.*;
import android.test.suitebuilder.annotation.*;
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java
index cfb914f9f..a4157ee71 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java
@@ -42,7 +42,6 @@ import static org.hamcrest.core.IsEqual.*;
@MediumTest
public class PebbleReceiverTest extends BaseAndroidTest
{
-
private Habit habit1;
private Habit habit2;
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportCSVTaskTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java
similarity index 96%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportCSVTaskTest.java
rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java
index 1f9664960..2c268b4f8 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportCSVTaskTest.java
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java
@@ -17,13 +17,14 @@
* with this program. If not, see .
*/
-package org.isoron.uhabits.core.tasks;
+package org.isoron.uhabits.tasks;
import android.support.test.runner.*;
import android.test.suitebuilder.annotation.*;
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
+import org.isoron.uhabits.core.tasks.*;
import org.junit.*;
import org.junit.runner.*;
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportDBTaskTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java
similarity index 95%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportDBTaskTest.java
rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java
index 316486f97..71ac1ffb4 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportDBTaskTest.java
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java
@@ -17,13 +17,12 @@
* with this program. If not, see .
*/
-package org.isoron.uhabits.core.tasks;
+package org.isoron.uhabits.tasks;
import android.support.test.runner.*;
import android.test.suitebuilder.annotation.*;
import org.isoron.uhabits.*;
-import org.isoron.uhabits.tasks.*;
import org.junit.*;
import org.junit.runner.*;
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/utils/ReminderSchedulerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java
similarity index 85%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/utils/ReminderSchedulerTest.java
rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java
index c9ea5b6be..d409121f1 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/utils/ReminderSchedulerTest.java
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java
@@ -17,27 +17,26 @@
* with this program. If not, see .
*/
-package org.isoron.uhabits.core.utils;
+package org.isoron.uhabits.utils;
import android.app.*;
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.commands.*;
import org.isoron.uhabits.core.models.*;
+import org.isoron.uhabits.core.utils.*;
import org.isoron.uhabits.intents.*;
-import org.isoron.uhabits.utils.*;
import org.junit.*;
import java.util.*;
+import static java.util.Arrays.asList;
import static org.mockito.Mockito.*;
public class ReminderSchedulerTest extends BaseAndroidTest
{
private Habit habit;
- private PendingIntent intent;
-
private ReminderScheduler reminderScheduler;
private HabitLogger logger;
@@ -53,11 +52,11 @@ public class ReminderSchedulerTest extends BaseAndroidTest
public void setUp()
{
super.setUp();
- intent = mock(PendingIntent.class);
logger = mock(HabitLogger.class);
- pendingIntentFactory = mock(PendingIntentFactory.class);
intentScheduler = mock(IntentScheduler.class);
commandRunner = mock(CommandRunner.class);
+ pendingIntentFactory =
+ new PendingIntentFactory(targetContext, new IntentFactory());
reminderScheduler =
new ReminderScheduler(pendingIntentFactory, intentScheduler, logger,
@@ -92,26 +91,23 @@ public class ReminderSchedulerTest extends BaseAndroidTest
}
@Test
- public void testSchedule_list()
+ public void testScheduleAll()
{
long now = timestamp(2015, 1, 26, 13, 0);
DateUtils.setFixedLocalTime(now);
Habit h1 = fixtures.createEmptyHabit();
- h1.setReminder(new Reminder(8, 30, WeekdayList.EVERY_DAY));
- habitList.add(h1);
-
Habit h2 = fixtures.createEmptyHabit();
- h2.setReminder(new Reminder(18, 30, WeekdayList.EVERY_DAY));
- habitList.add(h2);
-
Habit h3 = fixtures.createEmptyHabit();
- habitList.add(h3);
+ h1.setReminder(new Reminder(8, 30, WeekdayList.EVERY_DAY));
+ h2.setReminder(new Reminder(18, 30, WeekdayList.EVERY_DAY));
+ h3.setReminder(null);
+ habitList.update(asList(h1, h2, h3));
reminderScheduler.scheduleAll();
- verify(intentScheduler).schedule(timestamp(2015, 1, 27, 12, 30), null);
- verify(intentScheduler).schedule(timestamp(2015, 1, 26, 22, 30), null);
+ verify(intentScheduler).schedule(eq(timestamp(2015, 1, 27, 12, 30)), any());
+ verify(intentScheduler).schedule(eq(timestamp(2015, 1, 26, 22, 30)), any());
verifyNoMoreInteractions(intentScheduler);
}
@@ -146,15 +142,13 @@ public class ReminderSchedulerTest extends BaseAndroidTest
long expectedCheckmarkTime,
long expectedReminderTime)
{
- when(pendingIntentFactory.showReminder(habit, expectedReminderTime,
- expectedCheckmarkTime)).thenReturn(intent);
+ PendingIntent intent =
+ pendingIntentFactory.showReminder(habit, expectedReminderTime,
+ expectedCheckmarkTime);
reminderScheduler.schedule(habit, atTime);
verify(logger).logReminderScheduled(habit, expectedReminderTime);
-
- verify(pendingIntentFactory).showReminder(habit, expectedReminderTime,
- expectedCheckmarkTime);
verify(intentScheduler).schedule(expectedReminderTime, intent);
}
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java
index 189a60ade..66cfc8c62 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java
@@ -24,7 +24,6 @@ import android.util.*;
import org.isoron.androidbase.*;
import org.isoron.uhabits.*;
-import org.isoron.uhabits.commands.*;
import org.isoron.uhabits.core.*;
import org.isoron.uhabits.core.commands.*;
import org.isoron.uhabits.preferences.*;
diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/BaseAndroidUnitTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/BaseAndroidUnitTest.java
new file mode 100644
index 000000000..95a6ac9db
--- /dev/null
+++ b/uhabits-android/src/test/java/org/isoron/uhabits/BaseAndroidUnitTest.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2017 Álinson Santos Xavier
+ *
+ * This file is part of Loop Habit Tracker.
+ *
+ * Loop Habit Tracker is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or (at your
+ * option) any later version.
+ *
+ * Loop Habit Tracker is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see .
+ */
+
+package org.isoron.uhabits;
+
+import org.isoron.uhabits.core.commands.*;
+import org.isoron.uhabits.core.models.*;
+import org.isoron.uhabits.core.models.memory.*;
+import org.isoron.uhabits.core.tasks.*;
+import org.isoron.uhabits.core.test.*;
+import org.isoron.uhabits.core.utils.*;
+import org.junit.*;
+import org.junit.runner.*;
+import org.mockito.junit.*;
+
+import java.util.*;
+
+import static org.mockito.Mockito.*;
+
+@RunWith(MockitoJUnitRunner.class)
+public class BaseAndroidUnitTest
+{
+ protected HabitList habitList;
+
+ protected HabitFixtures fixtures;
+
+ protected MemoryModelFactory modelFactory;
+
+ protected SingleThreadTaskRunner taskRunner;
+
+ protected CommandRunner commandRunner;
+
+ @Before
+ public void setUp()
+ {
+ long fixed_local_time = 1422172800000L;
+ DateUtils.setFixedLocalTime(fixed_local_time);
+
+ modelFactory = new MemoryModelFactory();
+ habitList = spy(modelFactory.buildHabitList());
+ fixtures = new HabitFixtures(modelFactory);
+ taskRunner = new SingleThreadTaskRunner();
+ commandRunner = new CommandRunner(taskRunner);
+ }
+
+ @After
+ public void tearDown()
+ {
+ DateUtils.setFixedLocalTime(null);
+ }
+
+ public long timestamp(int year, int month, int day)
+ {
+ GregorianCalendar cal = DateUtils.getStartOfTodayCalendar();
+ cal.set(year, month, day);
+ return cal.getTimeInMillis();
+ }
+
+ @Test
+ public void nothing()
+ {
+
+ }
+}
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java
similarity index 68%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java
rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java
index de5823212..f0a3d32a5 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java
+++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java
@@ -23,56 +23,36 @@ import android.view.*;
import org.isoron.androidbase.activities.*;
import org.isoron.uhabits.*;
-import org.isoron.uhabits.activities.habits.list.model.*;
-import org.isoron.uhabits.core.models.*;
import org.isoron.uhabits.core.ui.*;
import org.isoron.uhabits.core.ui.screens.habits.list.*;
import org.isoron.uhabits.preferences.*;
import org.junit.*;
-import org.mockito.*;
import static org.mockito.Mockito.*;
-public class ListHabitsMenuTest extends BaseAndroidTest
+public class ListHabitsMenuTest extends BaseAndroidUnitTest
{
private BaseActivity activity;
- private ListHabitsScreen screen;
-
- private HabitCardListAdapter adapter;
-
private AndroidPreferences preferences;
private ThemeSwitcher themeSwitcher;
private ListHabitsMenu menu;
- private ArgumentCaptor matcherCaptor;
-
private ListHabitsMenuBehavior behavior;
+ @Before
@Override
public void setUp()
{
- super.setUp();
-
activity = mock(BaseActivity.class);
- screen = mock(ListHabitsScreen.class);
- adapter = mock(HabitCardListAdapter.class);
preferences = mock(AndroidPreferences.class);
themeSwitcher = mock(ThemeSwitcher.class);
behavior = mock(ListHabitsMenuBehavior.class);
- when(preferences.getShowArchived()).thenReturn(false);
- when(preferences.getShowCompleted()).thenReturn(false);
- when(themeSwitcher.isNightMode()).thenReturn(false);
-
menu = new ListHabitsMenu(activity, preferences,
themeSwitcher, behavior);
-
- matcherCaptor = ArgumentCaptor.forClass(HabitMatcher.class);
-
- reset(adapter);
}
@Test
@@ -89,84 +69,75 @@ public class ListHabitsMenuTest extends BaseAndroidTest
when(androidMenu.findItem(R.id.actionHideCompleted)).thenReturn(
hideCompletedItem);
+ when(preferences.getShowArchived()).thenReturn(false);
+ when(preferences.getShowCompleted()).thenReturn(false);
+ when(themeSwitcher.isNightMode()).thenReturn(false);
+
menu.onCreate(androidMenu);
+
verify(nightModeItem).setChecked(false);
verify(hideArchivedItem).setChecked(true);
verify(hideCompletedItem).setChecked(true);
reset(nightModeItem, hideArchivedItem, hideCompletedItem);
+ when(preferences.getShowArchived()).thenReturn(true);
+ when(preferences.getShowCompleted()).thenReturn(true);
when(themeSwitcher.isNightMode()).thenReturn(true);
+
menu.onCreate(androidMenu);
+
verify(nightModeItem).setChecked(true);
+ verify(hideArchivedItem).setChecked(false);
+ verify(hideCompletedItem).setChecked(false);
}
@Test
public void testOnSelected_about()
{
onItemSelected(R.id.actionAbout);
- verify(screen).showAboutScreen();
+ verify(behavior).onViewAbout();
}
@Test
public void testOnSelected_add()
{
onItemSelected(R.id.actionAdd);
- verify(screen).showCreateHabitScreen();
+ verify(behavior).onCreateHabit();
}
@Test
public void testOnSelected_faq()
{
onItemSelected(R.id.actionFAQ);
- verify(screen).showFAQScreen();
+ verify(behavior).onViewFAQ();
}
@Test
public void testOnSelected_nightMode()
{
onItemSelected(R.id.actionToggleNightMode);
- verify(screen).applyTheme();
+ verify(behavior).onToggleNightMode();
}
@Test
public void testOnSelected_settings()
{
onItemSelected(R.id.actionSettings);
- verify(screen).showSettingsScreen();
+ verify(behavior).onViewSettings();
}
@Test
public void testOnSelected_showArchived()
{
onItemSelected(R.id.actionHideArchived);
- verify(preferences).setShowArchived(true);
- verify(adapter).setFilter(matcherCaptor.capture());
- verify(adapter).refresh();
- assertTrue(matcherCaptor.getValue().isArchivedAllowed());
- reset(adapter);
-
- onItemSelected(R.id.actionHideArchived);
- verify(preferences).setShowArchived(false);
- verify(adapter).setFilter(matcherCaptor.capture());
- verify(adapter).refresh();
- assertFalse(matcherCaptor.getValue().isArchivedAllowed());
+ verify(behavior).onToggleShowArchived();
}
@Test
public void testOnSelected_showCompleted()
{
onItemSelected(R.id.actionHideCompleted);
- verify(preferences).setShowCompleted(true);
- verify(adapter).setFilter(matcherCaptor.capture());
- verify(adapter).refresh();
- assertTrue(matcherCaptor.getValue().isCompletedAllowed());
- reset(adapter);
-
- onItemSelected(R.id.actionHideCompleted);
- verify(preferences).setShowCompleted(false);
- verify(adapter).setFilter(matcherCaptor.capture());
- verify(adapter).refresh();
- assertFalse(matcherCaptor.getValue().isCompletedAllowed());
+ verify(behavior).onToggleShowCompleted();
}
protected void onItemSelected(int actionId)
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java
similarity index 95%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java
rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java
index 31857e61c..a86048c26 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java
+++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java
@@ -26,24 +26,26 @@ import org.isoron.androidbase.activities.*;
import org.isoron.uhabits.*;
import org.isoron.uhabits.activities.common.dialogs.*;
import org.isoron.uhabits.activities.habits.edit.*;
-import org.isoron.uhabits.commands.*;
import org.isoron.uhabits.core.commands.*;
-import org.isoron.uhabits.intents.*;
import org.isoron.uhabits.core.models.*;
import org.isoron.uhabits.core.ui.*;
import org.isoron.uhabits.core.ui.callbacks.*;
+import org.isoron.uhabits.intents.*;
import org.isoron.uhabits.preferences.*;
import org.junit.*;
import org.junit.runner.*;
-import org.junit.runners.*;
+import org.mockito.junit.*;
import java.util.*;
import static org.isoron.uhabits.activities.habits.list.ListHabitsScreen.*;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.any;
import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.eq;
-@RunWith(JUnit4.class)
-public class ListHabitsScreenTest extends BaseAndroidTest
+@RunWith(MockitoJUnitRunner.class)
+public class ListHabitsScreenTest
{
private BaseActivity activity;
@@ -74,12 +76,9 @@ public class ListHabitsScreenTest extends BaseAndroidTest
private CommandParser commandParser;
@Before
- @Override
public void setUp()
{
- super.setUp();
-
- activity = mock(BaseActivity.class);
+ activity = mock(ListHabitsActivity.class);
commandRunner = mock(CommandRunner.class);
rootView = mock(ListHabitsRootView.class);
intentFactory = mock(IntentFactory.class);
@@ -99,7 +98,7 @@ public class ListHabitsScreenTest extends BaseAndroidTest
controller = mock(ListHabitsController.class);
screen.setController(controller);
- habit = fixtures.createEmptyHabit();
+ habit = mock(Habit.class);
intent = mock(Intent.class);
}
@@ -124,7 +123,7 @@ public class ListHabitsScreenTest extends BaseAndroidTest
@Test
public void testOnCommand()
{
- Command c = mock(Command.class);
+ Command c = mock(DeleteHabitsCommand.class);
screen.onCommandExecuted(c, null);
verify(screen).showMessage(R.string.toast_habit_deleted);
}
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java
similarity index 97%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java
rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java
index 864adbb77..57aa937fa 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java
+++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java
@@ -27,7 +27,7 @@ import org.junit.*;
import static org.mockito.Mockito.*;
-public class CheckmarkButtonControllerTest extends BaseAndroidTest
+public class CheckmarkButtonControllerTest extends BaseAndroidUnitTest
{
private CheckmarkButtonController controller;
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java
similarity index 96%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java
rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java
index 8b0886c0b..6f639f187 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java
+++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java
@@ -27,7 +27,7 @@ import org.junit.*;
import static org.mockito.Mockito.*;
-public class HabitCardControllerTest extends BaseAndroidTest
+public class HabitCardControllerTest extends BaseAndroidUnitTest
{
private Habit habit;
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java
similarity index 97%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java
rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java
index 528d3675b..d1f9d97b9 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java
+++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java
@@ -29,7 +29,7 @@ import java.util.*;
import static org.mockito.Mockito.*;
-public class HabitCardListControllerTest extends BaseAndroidTest
+public class HabitCardListControllerTest extends BaseAndroidUnitTest
{
private LinkedList habits;
@@ -66,6 +66,7 @@ public class HabitCardListControllerTest extends BaseAndroidTest
resetMocks();
+ when(adapter.getObservable()).thenReturn(new ModelObservable());
this.controller = new HabitCardListController(adapter);
controller.setHabitListener(habitListener);
controller.setSelectionListener(selectionListener);
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java
similarity index 100%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java
rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java
similarity index 97%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java
rename to uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java
index 7e4c8ddd1..2626a138a 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java
+++ b/uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java
@@ -29,7 +29,7 @@ import org.junit.*;
import static org.mockito.Mockito.*;
-public class ReminderControllerTest extends BaseAndroidTest
+public class ReminderControllerTest extends BaseAndroidUnitTest
{
private ReminderController controller;
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java
similarity index 92%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java
rename to uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java
index e51f222d1..3e988fef6 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java
+++ b/uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java
@@ -32,7 +32,7 @@ import static org.hamcrest.core.IsEqual.*;
import static org.isoron.uhabits.core.models.Checkmark.*;
import static org.mockito.Mockito.*;
-public class WidgetControllerTest extends BaseAndroidTest
+public class WidgetControllerTest extends BaseAndroidUnitTest
{
private WidgetBehavior controller;
@@ -51,7 +51,6 @@ public class WidgetControllerTest extends BaseAndroidTest
today = DateUtils.getStartOfToday();
habit = fixtures.createEmptyHabit();
- habitList.add(habit);
commandRunner = mock(CommandRunner.class);
notificationTray = mock(AndroidNotificationTray.class);
controller = new WidgetBehavior(commandRunner, notificationTray);
@@ -73,7 +72,7 @@ public class WidgetControllerTest extends BaseAndroidTest
int todayValue = habit.getCheckmarks().getTodayValue();
assertThat(todayValue, equalTo(UNCHECKED));
controller.onAddRepetition(habit, today);
- verify(commandRunner).execute(any(), anyLong());
+ verify(commandRunner).execute(any(), isNull());
verify(notificationTray).cancel(habit);
}
@@ -84,7 +83,7 @@ public class WidgetControllerTest extends BaseAndroidTest
int todayValue = habit.getCheckmarks().getTodayValue();
assertThat(todayValue, equalTo(CHECKED_EXPLICITLY));
controller.onRemoveRepetition(habit, today);
- verify(commandRunner).execute(any(), anyLong());
+ verify(commandRunner).execute(any(), isNull());
}
@Test
@@ -100,6 +99,6 @@ public class WidgetControllerTest extends BaseAndroidTest
public void testOnToggleRepetition() throws Exception
{
controller.onToggleRepetition(habit, today);
- verify(commandRunner).execute(any(), anyLong());
+ verify(commandRunner).execute(any(), isNull());
}
}
\ No newline at end of file
diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommand.java
index 69797821b..47433650e 100644
--- a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommand.java
+++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommand.java
@@ -49,18 +49,18 @@ public class ArchiveHabitsCommand extends Command
habitList.update(selected);
}
+ @NonNull
@Override
- public void undo()
+ public Record toRecord()
{
- for (Habit h : selected) h.setArchived(false);
- habitList.update(selected);
+ return new Record(this);
}
- @NonNull
@Override
- public Record toRecord()
+ public void undo()
{
- return new Record(this);
+ for (Habit h : selected) h.setArchived(false);
+ habitList.update(selected);
}
public static class Record
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandParser.java
similarity index 91%
rename from uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java
rename to uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandParser.java
index 8c228a716..da7d24678 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java
+++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandParser.java
@@ -17,15 +17,13 @@
* with this program. If not, see .
*/
-package org.isoron.uhabits.commands;
+package org.isoron.uhabits.core.commands;
import android.support.annotation.*;
import com.google.gson.*;
-import org.isoron.uhabits.core.commands.*;
import org.isoron.uhabits.core.models.*;
-import org.json.*;
import javax.inject.*;
@@ -44,9 +42,10 @@ public class CommandParser
}
@NonNull
- public Command parse(@NonNull String json) throws JSONException
+ public Command parse(@NonNull String json)
{
- String event = new JSONObject(json).getString("event");
+ JsonObject parsed = new JsonParser().parse(json).getAsJsonObject();
+ String event = parsed.get("event").getAsString();
Gson gson = new GsonBuilder().create();
if (event.equals("Archive")) return gson
diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitFixtures.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java
similarity index 97%
rename from uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitFixtures.java
rename to uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java
index 87066ed6a..6c6ac612c 100644
--- a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitFixtures.java
+++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java
@@ -17,8 +17,9 @@
* with this program. If not, see .
*/
-package org.isoron.uhabits.core.models;
+package org.isoron.uhabits.core.test;
+import org.isoron.uhabits.core.models.*;
import org.isoron.uhabits.core.utils.*;
public class HabitFixtures
diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java
index 384eadbb4..0cc34b800 100644
--- a/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java
+++ b/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java
@@ -23,6 +23,7 @@ import org.isoron.uhabits.core.commands.*;
import org.isoron.uhabits.core.models.*;
import org.isoron.uhabits.core.models.memory.*;
import org.isoron.uhabits.core.tasks.*;
+import org.isoron.uhabits.core.test.*;
import org.isoron.uhabits.core.utils.*;
import org.junit.*;
import org.junit.runner.*;
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/commands/CommandParserTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CommandParserTest.java
similarity index 98%
rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/commands/CommandParserTest.java
rename to uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CommandParserTest.java
index d8eca8ea1..07ad02c02 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/commands/CommandParserTest.java
+++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CommandParserTest.java
@@ -23,7 +23,6 @@ import android.support.annotation.*;
import org.hamcrest.*;
import org.isoron.uhabits.*;
-import org.isoron.uhabits.commands.*;
import org.isoron.uhabits.core.models.*;
import org.json.*;
import org.junit.*;
@@ -32,7 +31,7 @@ import java.util.*;
import static org.hamcrest.CoreMatchers.*;
-public class CommandParserTest extends BaseAndroidTest
+public class CommandParserTest extends BaseUnitTest
{
@NonNull
private CommandParser parser;