diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 107876af..907e6a8d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,4 +1,3 @@ - import com.example.util.simpletimetracker.Base import com.example.util.simpletimetracker.Deps @@ -20,7 +19,7 @@ android { versionCode = Base.versionCode versionName = Base.versionName - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + testInstrumentationRunner = "com.example.util.simpletimetracker.utils.CustomTestRunner" } buildTypes { @@ -41,6 +40,15 @@ android { ) } } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } } dependencies { diff --git a/app/proguard-debug-rules.pro b/app/proguard-debug-rules.pro index 762968c2..0a3f0b7b 100644 --- a/app/proguard-debug-rules.pro +++ b/app/proguard-debug-rules.pro @@ -1,6 +1,7 @@ -dontobfuscate -keep class * implements dagger.MembersInjector { *; } +-keep class dagger.hilt.** { *; } -keepclassmembers class com.example.util.simpletimetracker.feature_records.view.RecordsContainerFragment$Companion { void setViewPagerSmoothScroll(boolean); } -keepclassmembers class com.example.util.simpletimetracker.feature_statistics.view.StatisticsContainerFragment$Companion { void setViewPagerSmoothScroll(boolean); } -keepclassmembers class com.example.util.simpletimetracker.core.mapper.ColorMapper$Companion { synthetic java.util.List getAvailableColors$default(com.example.util.simpletimetracker.core.mapper.ColorMapper$Companion,boolean,int,java.lang.Object); } diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/AddCategoryTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/AddCategoryTest.kt index 177b4414..b92d6162 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/AddCategoryTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/AddCategoryTest.kt @@ -21,11 +21,13 @@ import com.example.util.simpletimetracker.utils.longClickOnView import com.example.util.simpletimetracker.utils.scrollRecyclerToPosition import com.example.util.simpletimetracker.utils.typeTextIntoView import com.example.util.simpletimetracker.utils.withCardColor +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.hamcrest.Matcher import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class AddCategoryTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTagTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTagTest.kt index c5d64146..510a3c5f 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTagTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTagTest.kt @@ -19,11 +19,13 @@ import com.example.util.simpletimetracker.utils.tryAction import com.example.util.simpletimetracker.utils.typeTextIntoView import com.example.util.simpletimetracker.utils.withCardColor import com.example.util.simpletimetracker.utils.withTag +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.hamcrest.Matcher import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class AddRecordTagTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTest.kt index e9c3d34a..a743c40d 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTest.kt @@ -23,6 +23,7 @@ import com.example.util.simpletimetracker.utils.tryAction import com.example.util.simpletimetracker.utils.typeTextIntoView import com.example.util.simpletimetracker.utils.withCardColor import com.example.util.simpletimetracker.utils.withTag +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.hamcrest.CoreMatchers.equalTo import org.hamcrest.Matcher @@ -30,6 +31,7 @@ import org.junit.Test import org.junit.runner.RunWith import java.util.Calendar +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class AddRecordTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTypeTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTypeTest.kt index 51e76fd9..e736a6aa 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTypeTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTypeTest.kt @@ -1,6 +1,7 @@ package com.example.util.simpletimetracker import android.view.View +import androidx.test.espresso.Espresso.closeSoftKeyboard import androidx.test.espresso.Espresso.onView import androidx.test.espresso.Espresso.pressBack import androidx.test.espresso.assertion.PositionAssertions.isCompletelyAbove @@ -26,11 +27,13 @@ import com.example.util.simpletimetracker.utils.tryAction import com.example.util.simpletimetracker.utils.typeTextIntoView import com.example.util.simpletimetracker.utils.withCardColor import com.example.util.simpletimetracker.utils.withTag +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.hamcrest.Matcher import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class AddRecordTypeTest : BaseUiTest() { @@ -60,6 +63,7 @@ class AddRecordTypeTest : BaseUiTest() { checkViewIsNotDisplayed(withId(R.id.rvChangeRecordTypeIcon)) // Name is not selected + closeSoftKeyboard() clickOnViewWithText(R.string.change_record_type_save) // Typing name diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/ArchiveTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/ArchiveTest.kt index 8305b0e3..c1b49db2 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/ArchiveTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/ArchiveTest.kt @@ -21,10 +21,12 @@ import com.example.util.simpletimetracker.utils.longClickOnView import com.example.util.simpletimetracker.utils.nestedScrollTo import com.example.util.simpletimetracker.utils.tryAction import com.example.util.simpletimetracker.utils.unconstrainedClickOnView +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class ArchiveTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeCategoryTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeCategoryTest.kt index 38e852c0..5eb3ebaf 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeCategoryTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeCategoryTest.kt @@ -19,11 +19,13 @@ import com.example.util.simpletimetracker.utils.longClickOnView import com.example.util.simpletimetracker.utils.scrollRecyclerToView import com.example.util.simpletimetracker.utils.typeTextIntoView import com.example.util.simpletimetracker.utils.withCardColor +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.hamcrest.Matcher import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class ChangeCategoryTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRecordTagTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRecordTagTest.kt index 6256c06d..23e5d47b 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRecordTagTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRecordTagTest.kt @@ -13,11 +13,13 @@ import com.example.util.simpletimetracker.utils.clickOnViewWithText import com.example.util.simpletimetracker.utils.tryAction import com.example.util.simpletimetracker.utils.typeTextIntoView import com.example.util.simpletimetracker.utils.withCardColor +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.hamcrest.Matcher import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class ChangeRecordTagTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRecordTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRecordTest.kt index 34ace2c9..d48c83d3 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRecordTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRecordTest.kt @@ -24,6 +24,7 @@ import com.example.util.simpletimetracker.utils.clickOnViewWithText import com.example.util.simpletimetracker.utils.typeTextIntoView import com.example.util.simpletimetracker.utils.withCardColor import com.example.util.simpletimetracker.utils.withTag +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.hamcrest.CoreMatchers.equalTo import org.hamcrest.Matcher @@ -31,6 +32,7 @@ import org.junit.Test import org.junit.runner.RunWith import java.util.Calendar +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class ChangeRecordTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRecordTypeTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRecordTypeTest.kt index b3614d42..fb53e493 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRecordTypeTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRecordTypeTest.kt @@ -24,11 +24,13 @@ import com.example.util.simpletimetracker.utils.scrollRecyclerToView import com.example.util.simpletimetracker.utils.typeTextIntoView import com.example.util.simpletimetracker.utils.withCardColor import com.example.util.simpletimetracker.utils.withTag +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.hamcrest.Matcher import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class ChangeRecordTypeTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRunningRecordTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRunningRecordTest.kt index 848814f8..efd5a5a6 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRunningRecordTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRunningRecordTest.kt @@ -24,6 +24,7 @@ import com.example.util.simpletimetracker.utils.tryAction import com.example.util.simpletimetracker.utils.typeTextIntoView import com.example.util.simpletimetracker.utils.withCardColor import com.example.util.simpletimetracker.utils.withTag +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.hamcrest.CoreMatchers.equalTo import org.hamcrest.Matcher @@ -32,6 +33,7 @@ import org.junit.runner.RunWith import java.util.Calendar import java.util.concurrent.TimeUnit +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class ChangeRunningRecordTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeUntrackedTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeUntrackedTest.kt index 0dd658b2..c0de82c6 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeUntrackedTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/ChangeUntrackedTest.kt @@ -18,11 +18,13 @@ import com.example.util.simpletimetracker.utils.clickOnViewWithId import com.example.util.simpletimetracker.utils.clickOnViewWithText import com.example.util.simpletimetracker.utils.withCardColor import com.example.util.simpletimetracker.utils.withTag +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.hamcrest.Matcher import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class ChangeUntrackedTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/DeleteRecordTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/DeleteRecordTest.kt index 97663d37..06e17c32 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/DeleteRecordTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/DeleteRecordTest.kt @@ -15,11 +15,13 @@ import com.example.util.simpletimetracker.utils.clickOnViewWithId import com.example.util.simpletimetracker.utils.clickOnViewWithText import com.example.util.simpletimetracker.utils.withCardColor import com.example.util.simpletimetracker.utils.withTag +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers import org.hamcrest.Matchers.allOf import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class DeleteRecordTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/DeleteRecordTypeTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/DeleteRecordTypeTest.kt index 357e1558..03a337f4 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/DeleteRecordTypeTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/DeleteRecordTypeTest.kt @@ -16,10 +16,12 @@ import com.example.util.simpletimetracker.utils.longClickOnView import com.example.util.simpletimetracker.utils.tryAction import com.example.util.simpletimetracker.utils.withCardColor import com.example.util.simpletimetracker.utils.withTag +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class DeleteRecordTypeTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/IconTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/IconTest.kt index 40e77c22..ef3f0076 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/IconTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/IconTest.kt @@ -21,10 +21,12 @@ import com.example.util.simpletimetracker.utils.scrollRecyclerToView import com.example.util.simpletimetracker.utils.tryAction import com.example.util.simpletimetracker.utils.typeTextIntoView import com.example.util.simpletimetracker.utils.withTag +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class IconTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/MainScreenEmptyTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/MainScreenEmptyTest.kt index db081e3d..beb2903e 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/MainScreenEmptyTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/MainScreenEmptyTest.kt @@ -20,10 +20,12 @@ import com.example.util.simpletimetracker.utils.clickOnViewWithText import com.example.util.simpletimetracker.utils.longClickOnViewWithId import com.example.util.simpletimetracker.utils.tryAction import com.example.util.simpletimetracker.utils.typeTextIntoView +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class MainScreenEmptyTest : BaseUiTest() { @@ -149,7 +151,7 @@ class MainScreenEmptyTest : BaseUiTest() { private fun checkRanges() { checkViewIsDisplayed( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), hasDescendant(withText(R.string.untracked_time_name)), hasDescendant(withSubstring("100%")), isCompletelyDisplayed() diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/MainScreenTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/MainScreenTest.kt index 8ea7755e..0f5e8771 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/MainScreenTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/MainScreenTest.kt @@ -17,10 +17,12 @@ import com.example.util.simpletimetracker.utils.clickOnViewWithText import com.example.util.simpletimetracker.utils.longClickOnViewWithId import com.example.util.simpletimetracker.utils.tryAction import com.example.util.simpletimetracker.utils.typeTextIntoView +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class MainScreenTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/MessagesTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/MessagesTest.kt index 1217938d..47b17884 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/MessagesTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/MessagesTest.kt @@ -7,15 +7,18 @@ import com.example.util.simpletimetracker.utils.clickOnViewWithId import com.example.util.simpletimetracker.utils.clickOnViewWithText import com.example.util.simpletimetracker.utils.toastTextShowing import com.example.util.simpletimetracker.utils.tryAction +import dagger.hilt.android.testing.HiltAndroidTest import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class MessagesTest : BaseUiTest() { @Test fun messageRecordTypeName() { tryAction { clickOnViewWithText(R.string.running_records_add_type) } + clickOnViewWithId(R.id.fieldChangeRecordTypeColor) clickOnViewWithText(R.string.change_record_type_save) toastTextShowing(R.string.change_record_message_choose_name) } diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/RecordTypeCategoryTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/RecordTypeCategoryTest.kt index 2dd7e885..13a0613c 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/RecordTypeCategoryTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/RecordTypeCategoryTest.kt @@ -12,9 +12,11 @@ import com.example.util.simpletimetracker.utils.NavUtils import com.example.util.simpletimetracker.utils.clickOnRecyclerItem import com.example.util.simpletimetracker.utils.clickOnViewWithText import com.example.util.simpletimetracker.utils.longClickOnView +import dagger.hilt.android.testing.HiltAndroidTest import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class RecordTypeCategoryTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/RecordsAllTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/RecordsAllTest.kt index b24e10fc..f83c0d63 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/RecordsAllTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/RecordsAllTest.kt @@ -22,10 +22,12 @@ import com.example.util.simpletimetracker.utils.clickOnViewWithIdOnPager import com.example.util.simpletimetracker.utils.clickOnViewWithText import com.example.util.simpletimetracker.utils.nestedScrollTo import com.example.util.simpletimetracker.utils.withPluralText +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class RecordsAllTest : BaseUiTest() { @@ -172,7 +174,13 @@ class RecordsAllTest : BaseUiTest() { checkViewIsDisplayed(withId(R.id.btnChangeRecordDelete)) clickOnViewWithId(R.id.btnChangeRecordDelete) - // TODO Check message + // Check message + checkViewIsDisplayed( + allOf( + withText("Record $name removed"), + withId(com.google.android.material.R.id.snackbar_text) + ) + ) // Record is deleted checkViewDoesNotExist(firstRecord) diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/RecordsRangesTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/RecordsRangesTest.kt index 609de4ba..8082c73e 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/RecordsRangesTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/RecordsRangesTest.kt @@ -17,6 +17,7 @@ import com.example.util.simpletimetracker.utils.clickOnView import com.example.util.simpletimetracker.utils.clickOnViewWithId import com.example.util.simpletimetracker.utils.clickOnViewWithText import com.example.util.simpletimetracker.utils.longClickOnViewWithId +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.hamcrest.CoreMatchers.equalTo import org.junit.Test @@ -25,6 +26,7 @@ import java.text.SimpleDateFormat import java.util.Calendar import java.util.Locale +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class RecordsRangesTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/SettingsTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/SettingsTest.kt index 243a2219..38cbea0d 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/SettingsTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/SettingsTest.kt @@ -34,6 +34,7 @@ import com.example.util.simpletimetracker.utils.nestedScrollTo import com.example.util.simpletimetracker.utils.tryAction import com.example.util.simpletimetracker.utils.unconstrainedClickOnView import com.example.util.simpletimetracker.utils.withPluralText +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.hamcrest.Matcher import org.junit.Test @@ -41,6 +42,7 @@ import org.junit.runner.RunWith import java.util.Calendar import java.util.concurrent.TimeUnit +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class SettingsTest : BaseUiTest() { @@ -596,7 +598,7 @@ class SettingsTest : BaseUiTest() { clickOnViewWithText(R.string.range_week) clickOnView( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), hasDescendant(withText(name)), isCompletelyDisplayed() ) @@ -640,7 +642,7 @@ class SettingsTest : BaseUiTest() { NavUtils.openStatisticsScreen() checkViewDoesNotExist( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), hasDescendant(withText(name)), isCompletelyDisplayed() ) @@ -648,7 +650,7 @@ class SettingsTest : BaseUiTest() { clickOnViewWithId(R.id.btnStatisticsContainerPrevious) clickOnView( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), hasDescendant(withText(name)), isCompletelyDisplayed() ) diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/StartRecordTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/StartRecordTest.kt index 55f041ab..75589e19 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/StartRecordTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/StartRecordTest.kt @@ -20,11 +20,13 @@ import com.example.util.simpletimetracker.utils.tryAction import com.example.util.simpletimetracker.utils.typeTextIntoView import com.example.util.simpletimetracker.utils.withCardColor import com.example.util.simpletimetracker.utils.withTag +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.junit.Test import org.junit.runner.RunWith import java.util.concurrent.TimeUnit +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class StartRecordTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsDetailTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsDetailTest.kt index 223c7958..fc275daa 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsDetailTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsDetailTest.kt @@ -25,12 +25,14 @@ import com.example.util.simpletimetracker.utils.tryAction import com.example.util.simpletimetracker.utils.withCardColor import com.example.util.simpletimetracker.utils.withPluralText import com.example.util.simpletimetracker.utils.withTag +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.junit.Test import org.junit.runner.RunWith import java.util.Calendar import java.util.concurrent.TimeUnit +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class StatisticsDetailTest : BaseUiTest() { @@ -401,7 +403,7 @@ class StatisticsDetailTest : BaseUiTest() { // Check detailed statistics NavUtils.openStatisticsScreen() tryAction { clickOnView(allOf(withText(name1), isCompletelyDisplayed())) } - checkViewIsDisplayed(allOf(withId(R.id.layoutStatisticsDetailItem), hasDescendant(withText(name1)))) + checkViewIsDisplayed(allOf(withId(R.id.viewStatisticsDetailItem), hasDescendant(withText(name1)))) checkRecordsCard(1) // Change filter @@ -451,7 +453,7 @@ class StatisticsDetailTest : BaseUiTest() { clickOnViewWithText(R.string.chart_filter_type_category) pressBack() tryAction { clickOnView(allOf(withText(categoryName1), isCompletelyDisplayed())) } - checkViewIsDisplayed(allOf(withId(R.id.layoutStatisticsDetailItem), hasDescendant(withText(categoryName1)))) + checkViewIsDisplayed(allOf(withId(R.id.viewStatisticsDetailItem), hasDescendant(withText(categoryName1)))) checkRecordsCard(2) // Change filter @@ -491,7 +493,7 @@ class StatisticsDetailTest : BaseUiTest() { // Check detailed statistics NavUtils.openStatisticsScreen() tryAction { clickOnView(allOf(withText(name1), isCompletelyDisplayed())) } - checkViewIsDisplayed(allOf(withId(R.id.layoutStatisticsDetailItem), hasDescendant(withText(name1)))) + checkViewIsDisplayed(allOf(withId(R.id.viewStatisticsDetailItem), hasDescendant(withText(name1)))) checkRecordsCard(3) // Change filter @@ -522,7 +524,7 @@ class StatisticsDetailTest : BaseUiTest() { private fun checkPreview(color: Int, icon: Int, name: String) { checkViewIsDisplayed( allOf( - withId(R.id.layoutStatisticsDetailItem), + withId(R.id.viewStatisticsDetailItem), withCardColor(color), hasDescendant(withTag(icon)), hasDescendant(withText(name)), @@ -614,7 +616,7 @@ class StatisticsDetailTest : BaseUiTest() { private fun checkTagItem(color: Int, name: String, duration: String, percentage: String) { checkViewIsDisplayed( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), withCardColor(color), hasDescendant(withText(name)), hasDescendant(withText(duration)), @@ -626,7 +628,7 @@ class StatisticsDetailTest : BaseUiTest() { private fun checkNoTagItem(name: String) { checkViewDoesNotExist( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), hasDescendant(withText(name)) ) ) diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsFilterTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsFilterTest.kt index 4ead0503..9712e2d5 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsFilterTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsFilterTest.kt @@ -14,10 +14,12 @@ import com.example.util.simpletimetracker.utils.clickOnView import com.example.util.simpletimetracker.utils.clickOnViewWithIdOnPager import com.example.util.simpletimetracker.utils.clickOnViewWithText import com.example.util.simpletimetracker.utils.tryAction +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class StatisticsFilterTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsRangesTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsRangesTest.kt index 1363587d..d0610932 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsRangesTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsRangesTest.kt @@ -21,6 +21,7 @@ import com.example.util.simpletimetracker.utils.clickOnViewWithId import com.example.util.simpletimetracker.utils.clickOnViewWithText import com.example.util.simpletimetracker.utils.longClickOnViewWithId import com.example.util.simpletimetracker.utils.tryAction +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.hamcrest.CoreMatchers.equalTo import org.junit.Test @@ -29,6 +30,7 @@ import java.text.SimpleDateFormat import java.util.Calendar import java.util.Locale +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class StatisticsRangesTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsTest.kt index 5ea72704..a3106c81 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsTest.kt @@ -18,10 +18,12 @@ import com.example.util.simpletimetracker.utils.clickOnViewWithIdOnPager import com.example.util.simpletimetracker.utils.clickOnViewWithText import com.example.util.simpletimetracker.utils.withCardColor import com.example.util.simpletimetracker.utils.withTag +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class StatisticsTest : BaseUiTest() { @@ -77,7 +79,7 @@ class StatisticsTest : BaseUiTest() { checkViewDoesNotExist(allOf(withText("1h 0m"), isCompletelyDisplayed())) checkViewIsDisplayed( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), withCardColor(firstColor), hasDescendant(withTag(firstIcon)), hasDescendant(withText(name)), @@ -87,7 +89,7 @@ class StatisticsTest : BaseUiTest() { ) checkViewIsDisplayed( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), withCardColor(lastColor), hasDescendant(withTag(lastIcon)), hasDescendant(withText(newName)), @@ -174,7 +176,7 @@ class StatisticsTest : BaseUiTest() { checkViewDoesNotExist(allOf(withText("3h 0m"), isCompletelyDisplayed())) checkViewIsDisplayed( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), withCardColor(firstColor), hasDescendant(withText(categoryName1)), hasDescendant(withSubstring("60%")), @@ -183,7 +185,7 @@ class StatisticsTest : BaseUiTest() { ) checkViewIsDisplayed( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), withCardColor(lastColor), hasDescendant(withText(categoryName2)), hasDescendant(withSubstring("40%")), @@ -204,7 +206,7 @@ class StatisticsTest : BaseUiTest() { ) checkViewDoesNotExist( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), hasDescendant(withText(categoryName3)) ) ) @@ -220,7 +222,7 @@ class StatisticsTest : BaseUiTest() { ) { checkViewIsDisplayed( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), hasDescendant(withText(R.string.untracked_time_name)), hasDescendant(withSubstring("%")), isCompletelyDisplayed() @@ -228,7 +230,7 @@ class StatisticsTest : BaseUiTest() { ) checkViewIsDisplayed( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), withCardColor(firstColor), hasDescendant(withTag(firstIcon)), hasDescendant(withText(name)), @@ -239,7 +241,7 @@ class StatisticsTest : BaseUiTest() { ) checkViewIsDisplayed( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), withCardColor(lastColor), hasDescendant(withTag(lastIcon)), hasDescendant(withText(newName)), @@ -265,7 +267,7 @@ class StatisticsTest : BaseUiTest() { clickOnViewWithId(R.id.btnStatisticsContainerPrevious) checkViewIsDisplayed( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), hasDescendant(withText(R.string.untracked_time_name)), hasDescendant(withText("100%")), hasDescendant(withSubstring("h 0m")), @@ -298,7 +300,7 @@ class StatisticsTest : BaseUiTest() { ) { checkViewIsDisplayed( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), withCardColor(firstColor), hasDescendant(withText(categoryName1)), hasDescendant(withText("3h 0m")), @@ -308,7 +310,7 @@ class StatisticsTest : BaseUiTest() { ) checkViewIsDisplayed( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), withCardColor(lastColor), hasDescendant(withText(categoryName2)), hasDescendant(withText("2h 0m")), @@ -324,7 +326,7 @@ class StatisticsTest : BaseUiTest() { ) checkViewDoesNotExist( allOf( - withId(R.id.layoutStatisticsItem), + withId(R.id.viewStatisticsItem), hasDescendant(withText(categoryName3)) ) ) diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/Widget.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/Widget.kt index cacbdd2b..beadd542 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/Widget.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/Widget.kt @@ -10,10 +10,12 @@ import com.example.util.simpletimetracker.utils.BaseUiTest import com.example.util.simpletimetracker.utils.checkViewDoesNotExist import com.example.util.simpletimetracker.utils.checkViewIsDisplayed import com.example.util.simpletimetracker.utils.withCardColor +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class Widget : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/WidgetTagSelection.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/WidgetTagSelection.kt index 5383acd6..6e9ab996 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/WidgetTagSelection.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/WidgetTagSelection.kt @@ -9,9 +9,11 @@ import com.example.util.simpletimetracker.navigation.params.RecordTagSelectionPa import com.example.util.simpletimetracker.utils.BaseUiTest import com.example.util.simpletimetracker.utils.checkViewDoesNotExist import com.example.util.simpletimetracker.utils.checkViewIsDisplayed +import dagger.hilt.android.testing.HiltAndroidTest import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class WidgetTagSelection : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/WidgetUniversal.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/WidgetUniversal.kt index 08b98308..506e9c92 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/WidgetUniversal.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/WidgetUniversal.kt @@ -11,11 +11,13 @@ import com.example.util.simpletimetracker.utils.checkViewDoesNotExist import com.example.util.simpletimetracker.utils.checkViewIsDisplayed import com.example.util.simpletimetracker.utils.clickOnViewWithText import com.example.util.simpletimetracker.utils.withCardColor +import dagger.hilt.android.testing.HiltAndroidTest import kotlinx.coroutines.runBlocking import org.hamcrest.CoreMatchers.allOf import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class WidgetUniversal : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/ZeroDurationRecordTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/ZeroDurationRecordTest.kt index 6a83dd2e..d9331586 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/ZeroDurationRecordTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/ZeroDurationRecordTest.kt @@ -17,10 +17,12 @@ import com.example.util.simpletimetracker.utils.clickOnView import com.example.util.simpletimetracker.utils.clickOnViewWithIdOnPager import com.example.util.simpletimetracker.utils.nestedScrollTo import com.example.util.simpletimetracker.utils.withPluralText +import dagger.hilt.android.testing.HiltAndroidTest import org.hamcrest.CoreMatchers.allOf import org.junit.Test import org.junit.runner.RunWith +@HiltAndroidTest @RunWith(AndroidJUnit4::class) class ZeroDurationRecordTest : BaseUiTest() { diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/utils/BaseUiTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/utils/BaseUiTest.kt index 04ffac5a..0e5f28aa 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/utils/BaseUiTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/utils/BaseUiTest.kt @@ -1,5 +1,9 @@ package com.example.util.simpletimetracker.utils +import android.content.Context +import androidx.emoji.bundled.BundledEmojiCompatConfig +import androidx.emoji.text.EmojiCompat +import androidx.test.core.app.ApplicationProvider import androidx.test.espresso.IdlingRegistry import androidx.test.ext.junit.rules.ActivityScenarioRule import com.example.util.simpletimetracker.core.mapper.ColorMapper @@ -12,11 +16,14 @@ import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor import com.example.util.simpletimetracker.feature_records.view.RecordsContainerFragment import com.example.util.simpletimetracker.feature_statistics.view.StatisticsContainerFragment import com.example.util.simpletimetracker.ui.MainActivity +import dagger.hilt.android.testing.HiltAndroidRule +import dagger.hilt.android.testing.HiltAndroidTest import org.junit.After import org.junit.Before import org.junit.Rule import javax.inject.Inject +@HiltAndroidTest open class BaseUiTest { @Inject @@ -34,14 +41,15 @@ open class BaseUiTest { @Inject lateinit var prefsInteractor: PrefsInteractor - @Rule - @JvmField - val activityScenarioRule = ActivityScenarioRule(MainActivity::class.java) + @get:Rule(order = 0) + var hiltRule = HiltAndroidRule(this) - @Rule - @JvmField + @get:Rule(order = 1) val mRetryTestRule = RetryTestRule() + @get:Rule(order = 2) + val activityScenarioRule = ActivityScenarioRule(MainActivity::class.java) + val firstColor: Int get() = ColorMapper.getAvailableColors().first() val lastColor: Int @@ -60,11 +68,14 @@ open class BaseUiTest { ?.last().orEmpty() init { - inject() + val app = ApplicationProvider.getApplicationContext() as Context + val config = BundledEmojiCompatConfig(app).setReplaceAll(true) + EmojiCompat.init(config) } @Before open fun setUp() { + if (!this::testUtils.isInitialized) hiltRule.inject() clearData() disableAnimations() registerIdlingResource() diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/utils/CustomTestRunner.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/utils/CustomTestRunner.kt new file mode 100644 index 00000000..6f6564a1 --- /dev/null +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/utils/CustomTestRunner.kt @@ -0,0 +1,14 @@ +package com.example.util.simpletimetracker.utils + +import android.app.Application +import android.content.Context +import androidx.test.runner.AndroidJUnitRunner +import dagger.hilt.android.testing.HiltTestApplication + +// A custom runner to set up the instrumented application class for tests. +class CustomTestRunner : AndroidJUnitRunner() { + + override fun newApplication(cl: ClassLoader?, name: String?, context: Context?): Application { + return super.newApplication(cl, HiltTestApplication::class.java.name, context) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/util/simpletimetracker/di/AppComponent.kt b/app/src/main/java/com/example/util/simpletimetracker/di/AppComponent.kt index 0f748a30..2f4f107b 100644 --- a/app/src/main/java/com/example/util/simpletimetracker/di/AppComponent.kt +++ b/app/src/main/java/com/example/util/simpletimetracker/di/AppComponent.kt @@ -8,6 +8,7 @@ import dagger.Module import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent +// TODO remove @InstallIn(SingletonComponent::class) @Module( includes = [ diff --git a/buildSrc/src/main/kotlin/com/example/util/simpletimetracker/Versions.kt b/buildSrc/src/main/kotlin/com/example/util/simpletimetracker/Versions.kt index b94767cb..acb5c60b 100644 --- a/buildSrc/src/main/kotlin/com/example/util/simpletimetracker/Versions.kt +++ b/buildSrc/src/main/kotlin/com/example/util/simpletimetracker/Versions.kt @@ -1,7 +1,7 @@ package com.example.util.simpletimetracker object Versions { - const val gradle = "4.0.0" + const val gradle = "4.2.0" const val kotlin = "1.3.71" const val ktlint = "9.2.1" @@ -29,7 +29,7 @@ object Versions { const val roomKtx = "2.2.5" const val navigationKtx = "2.3.5" - const val junit = "4.12" + const val junit = "4.13" const val junitUi = "1.1.1" const val espresso = "3.2.0" } \ No newline at end of file diff --git a/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/dateTime/DateTimeDialogFragment.kt b/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/dateTime/DateTimeDialogFragment.kt index 7044052a..719c2ae5 100644 --- a/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/dateTime/DateTimeDialogFragment.kt +++ b/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/dateTime/DateTimeDialogFragment.kt @@ -19,6 +19,7 @@ import com.example.util.simpletimetracker.domain.model.DayOfWeek import com.example.util.simpletimetracker.feature_dialogs.R import com.example.util.simpletimetracker.navigation.params.DateTimeDialogParams import com.example.util.simpletimetracker.navigation.params.DateTimeDialogType +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.date_time_dialog_fragment.btnDateTimeDialogPositive import kotlinx.android.synthetic.main.date_time_dialog_fragment.datePickerContainer import kotlinx.android.synthetic.main.date_time_dialog_fragment.tabsDateTimeDialog @@ -26,6 +27,7 @@ import kotlinx.android.synthetic.main.date_time_dialog_fragment.timePickerContai import java.util.Calendar import javax.inject.Inject +@AndroidEntryPoint class DateTimeDialogFragment : AppCompatDialogFragment(), DateDialogFragment.OnDateSetListener, TimeDialogFragment.OnTimeSetListener { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 90ff0eb9..3b366b33 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip