From cd3944b90ff74b66dad6b2021c4c0eb474eaf336 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sat, 20 May 2017 20:05:12 -0400 Subject: [PATCH] Add Robolectric dependency; implement a basic test --- app/build.gradle | 22 +++-- .../org/isoron/uhabits/BaseAndroidTest.java | 2 +- .../org/isoron/uhabits/HabitLoggerTest.java | 2 +- .../isoron/uhabits/HabitsApplicationTest.java | 2 +- .../habits/list/views/HintViewTest.java | 2 +- .../list/views/NumberButtonViewTest.java | 2 +- .../org/isoron/uhabits/io/ImportTest.java | 2 +- .../sqlite/SQLiteCheckmarkListTest.java | 2 +- .../sqlite/SQLiteRepetitionListTest.java | 2 +- .../models/sqlite/SQLiteScoreListTest.java | 2 +- .../uhabits/tasks/ExportCSVTaskTest.java | 2 +- .../uhabits/tasks/ExportDBTaskTest.java | 2 +- .../uhabits/widgets/CheckmarkWidgetTest.java | 2 +- .../isoron/uhabits/activities/BaseMenu.java | 8 +- .../uhabits/activities/BaseActivityTest.java | 81 +++++++++++++++++++ 15 files changed, 106 insertions(+), 29 deletions(-) create mode 100644 app/src/test/java/org/isoron/uhabits/activities/BaseActivityTest.java diff --git a/app/build.gradle b/app/build.gradle index 8d1e3ce1f..8dbeffb25 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,6 +45,9 @@ android { outputs.upToDateWhen { false } showStandardStreams = true } + jacoco { + includeNoLocationClasses = true + } } } } @@ -60,6 +63,7 @@ dependencies { androidTestCompile "com.google.dexmaker:dexmaker:1.2" androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2' androidTestCompile 'org.mockito:mockito-core:1.10.19' + androidTestCompile 'com.google.guava:guava:20.0' apt 'com.google.dagger:dagger-compiler:2.2' apt 'com.jakewharton:butterknife-compiler:8.0.1' @@ -79,6 +83,7 @@ dependencies { compile 'org.jetbrains:annotations-java5:15.0' compile 'com.google.code.gson:gson:2.8.0' compile 'com.google.code.findbugs:jsr305:2.0.1' + compile 'com.google.guava:guava:20.0' provided 'javax.annotation:jsr250-api:1.0' @@ -87,23 +92,13 @@ dependencies { } testApt 'com.google.dagger:dagger-compiler:2.2' + testApt 'com.google.guava:guava:20.0' testCompile 'junit:junit:4.12' testCompile 'org.hamcrest:hamcrest-library:1.3' testCompile 'org.mockito:mockito-core:1.10.19' testCompile 'org.json:json:20160810' - - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.1') { - exclude group: 'com.android.support' - } - - androidTestCompile('com.android.support.test.espresso:espresso-intents:2.2.1') { - exclude group: 'com.android.support' - } - - androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.1') { - exclude group: 'com.android.support' - } + testCompile 'org.robolectric:robolectric:3.3.2' } retrolambda { @@ -111,7 +106,7 @@ retrolambda { } jacoco { - toolVersion = "0.7.5.201505241946" + toolVersion = "0.7.6.201602180812" } task coverageReport(type: JacocoReport, dependsOn: ['testDebugUnitTest']) { @@ -133,6 +128,7 @@ task coverageReport(type: JacocoReport, dependsOn: ['testDebugUnitTest']) { '**/*$ViewBinder*', '**/*MembersInjector*', '**/*_Provide*', + '**/*Module_*', '**/com/android/**/*', 'android/**/*', '**/*Dagger*', diff --git a/app/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java b/app/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java index f42f6d526..38258775d 100644 --- a/app/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java +++ b/app/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java @@ -38,7 +38,7 @@ import java.util.concurrent.*; import static junit.framework.Assert.*; import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.CoreMatchers.*; public class BaseAndroidTest { diff --git a/app/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java b/app/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java index 05c2c85c6..bf252ef61 100644 --- a/app/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java +++ b/app/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java @@ -31,7 +31,7 @@ import org.junit.runner.*; import java.io.*; import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.CoreMatchers.*; @RunWith(AndroidJUnit4.class) @MediumTest diff --git a/app/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java b/app/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java index 46b3c03c3..dea8f5867 100644 --- a/app/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java +++ b/app/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java @@ -30,7 +30,7 @@ import org.junit.runner.*; import java.io.*; import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.CoreMatchers.*; @RunWith(AndroidJUnit4.class) @MediumTest diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java b/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java index 0427c07a0..7c04cd1f1 100644 --- a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java +++ b/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java @@ -28,7 +28,7 @@ import org.junit.*; import org.junit.runner.*; import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.CoreMatchers.*; import static org.mockito.Mockito.*; @RunWith(AndroidJUnit4.class) diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.java b/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.java index 8e84ad582..4e3ccd64a 100644 --- a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.java +++ b/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.java @@ -29,7 +29,7 @@ import org.junit.*; import org.junit.runner.*; import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.CoreMatchers.*; import static org.mockito.Mockito.*; @RunWith(AndroidJUnit4.class) diff --git a/app/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java b/app/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java index a63bbd865..343e64ea2 100644 --- a/app/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java +++ b/app/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java @@ -33,7 +33,7 @@ import org.junit.runner.*; import java.io.*; import java.util.*; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; @RunWith(AndroidJUnit4.class) diff --git a/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java b/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java index 32e6df853..f4f779950 100644 --- a/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java +++ b/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java @@ -34,7 +34,7 @@ import org.junit.runner.*; import java.util.*; import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.CoreMatchers.*; @RunWith(AndroidJUnit4.class) @MediumTest diff --git a/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java b/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java index 766271ada..08eea948b 100644 --- a/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java +++ b/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java @@ -35,7 +35,7 @@ import org.junit.runner.*; import java.util.*; import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.core.IsNot.not; import static org.isoron.uhabits.models.Checkmark.*; diff --git a/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java b/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java index db3f1aaa8..a4214933c 100644 --- a/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java +++ b/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java @@ -33,8 +33,8 @@ import org.junit.runner.*; import java.util.*; +import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.Matchers.*; @SuppressWarnings("JavaDoc") @RunWith(AndroidJUnit4.class) diff --git a/app/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java b/app/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java index daaf5e425..aa999d7b3 100644 --- a/app/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java +++ b/app/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java @@ -32,7 +32,7 @@ import java.util.*; import static junit.framework.Assert.*; import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.core.IsNot.not; @RunWith(AndroidJUnit4.class) diff --git a/app/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java b/app/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java index e3f7e4a7c..76f5e2315 100644 --- a/app/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java +++ b/app/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java @@ -30,7 +30,7 @@ import java.io.*; import static junit.framework.Assert.*; import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.core.IsNot.not; @RunWith(AndroidJUnit4.class) diff --git a/app/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java b/app/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java index 10d7bd870..9e25e12ef 100644 --- a/app/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java +++ b/app/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java @@ -29,7 +29,7 @@ import org.junit.*; import org.junit.runner.*; import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.CoreMatchers.*; import static org.isoron.uhabits.models.Checkmark.*; @RunWith(AndroidJUnit4.class) diff --git a/app/src/main/java/org/isoron/uhabits/activities/BaseMenu.java b/app/src/main/java/org/isoron/uhabits/activities/BaseMenu.java index f9d7bf077..0a1e8026c 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/BaseMenu.java +++ b/app/src/main/java/org/isoron/uhabits/activities/BaseMenu.java @@ -64,14 +64,14 @@ public abstract class BaseMenu /** * Called when the menu is first displayed. *

- * This method cannot be overridden. The application should override the - * methods onCreate(Menu) and getMenuResourceId instead. + * This method should not be overridden. The application should override + * the methods onCreate(Menu) and getMenuResourceId instead. * * @param inflater a menu inflater, for creating the menu * @param menu the menu that is being created. */ - public final void onCreate(@NonNull MenuInflater inflater, - @NonNull Menu menu) + public void onCreate(@NonNull MenuInflater inflater, + @NonNull Menu menu) { menu.clear(); inflater.inflate(getMenuResourceId(), menu); diff --git a/app/src/test/java/org/isoron/uhabits/activities/BaseActivityTest.java b/app/src/test/java/org/isoron/uhabits/activities/BaseActivityTest.java new file mode 100644 index 000000000..e034422b1 --- /dev/null +++ b/app/src/test/java/org/isoron/uhabits/activities/BaseActivityTest.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2016 Á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.activities; + +import android.os.*; +import android.support.v7.widget.Toolbar; +import android.view.*; +import android.widget.*; + +import org.isoron.uhabits.*; +import org.junit.*; +import org.junit.runner.*; +import org.robolectric.*; +import org.robolectric.annotation.*; + +import static org.mockito.Mockito.*; +import static org.robolectric.Robolectric.*; + +@RunWith(RobolectricTestRunner.class) +@Config(constants = BuildConfig.class) +public class BaseActivityTest +{ + @Test + public void menuTest() + { + MenuActivity activity = setupActivity(MenuActivity.class); + verify(activity.baseMenu).onCreate( + eq(activity.getMenuInflater()), any()); + + Menu menu = activity.toolbar.getMenu(); + MenuItem item = menu.getItem(0); + activity.onMenuItemSelected(0, item); + verify(activity.baseMenu).onItemSelected(item); + } + + public static class MenuActivity extends BaseActivity + { + public BaseMenu baseMenu; + + public Toolbar toolbar; + + @Override + protected void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + toolbar = new Toolbar(this); + LinearLayout layout = new LinearLayout(this); + layout.addView(toolbar); + setContentView(layout); + setSupportActionBar(toolbar); + + baseMenu = spy(new BaseMenu(this) + { + @Override + protected int getMenuResourceId() + { + return R.menu.list_habits; + } + }); + + setBaseMenu(baseMenu); + } + } +}