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;