Skip to content

Commit

Permalink
Merge pull request #188 from caarmen/omg-what-happened
Browse files Browse the repository at this point in the history
Make some tests run on roblectric
  • Loading branch information
caarmen authored Apr 17, 2024
2 parents 0c3693c + 9dee2bb commit c45b91a
Show file tree
Hide file tree
Showing 49 changed files with 991 additions and 457 deletions.
22 changes: 19 additions & 3 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ android {
// "pm clear" command after each test invocation. This command ensures
// that the app's state is completely cleared between tests.
// https://developer.android.com/training/testing/instrumented-tests/androidx-test-libraries/runner#use-android
testInstrumentationRunnerArguments coverage: 'true', coverageFilePath: '/data/data/ca.rmen.android.poetassistant.test/'
testInstrumentationRunnerArguments clearPackageData: 'true', coverage: 'true', coverageFilePath: '/data/data/ca.rmen.android.poetassistant.test/'


// used by Room, to test migrations
Expand All @@ -86,8 +86,12 @@ android {
test {
manifest.srcFile "src/test/AndroidManifest.xml"
java.srcDirs += "$projectDir/src/test/kotlin"
java.srcDirs += "$projectDir/src/sharedTest/java"
java.srcDirs += "$projectDir/src/sharedTest/kotlin"
}
androidTest.java.srcDirs += "$projectDir/src/androidTest/kotlin"
androidTest.java.srcDirs += "$projectDir/src/sharedTest/java"
androidTest.java.srcDirs += "$projectDir/src/sharedTest/kotlin"
}

// used by Room, to test migrations
Expand All @@ -102,7 +106,7 @@ android {
buildTypes {
debug {
testCoverageEnabled = project.gradle.startParameter.taskNames.any {
it.contains("testDebugUnitTest") || it.contains("connectedDebugAndroidTest") || it.contains("jacocoTestReport")
it.contains("jacocoTestReport")
}
applicationIdSuffix = ".test"
resValue "string", "search_provider_authority", android.defaultConfig.applicationId + applicationIdSuffix + ".SuggestionsProvider"
Expand Down Expand Up @@ -219,7 +223,16 @@ dependencies {
kaptAndroidTest "com.google.dagger:dagger-compiler:$dagger_version"

testImplementation "junit:junit:$junit_version"
testImplementation "androidx.test.ext:junit:$androidx_junit_version"
testImplementation "org.robolectric:robolectric:$robolectric_version"
testImplementation "androidx.test:runner:$androidx_test_runner_version"
testImplementation "androidx.test.espresso:espresso-core:$espresso_version"
testImplementation "androidx.test.espresso:espresso-contrib:$espresso_version"
testImplementation "androidx.test:rules:$androidx_test_rules_version"
testImplementation "androidx.test.espresso:espresso-intents:$espresso_version"
testImplementation group: "org.easytesting", name: "fest-reflect", version: "$festreflect_version"
testImplementation "androidx.arch.core:core-testing:2.2.0"
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$kotlin_coroutines_version"
kaptTest "com.google.dagger:dagger-compiler:$dagger_version"

androidTestImplementation group: "org.easytesting", name: "fest-reflect", version: "$festreflect_version"
Expand All @@ -232,6 +245,7 @@ dependencies {
androidTestImplementation "androidx.test:core:$androidx_test_core_version"
androidTestImplementation "androidx.test.ext:junit:$androidx_junit_version"
androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'
androidTestImplementation "org.robolectric:annotations:$robolectric_version"

androidTestUtil "androidx.test:orchestrator:$androidx_test_orchestrator_version"

Expand All @@ -254,7 +268,9 @@ dependencyUpdates.resolutionStrategy {
}
}
}
task jacocoTestReport(type: JacocoReport, dependsOn: ["testDebugUnitTest", "createDebugCoverageReport"]) {
task jacocoTestReport(type: JacocoReport) {
mustRunAfter "testDebugUnitTest"
mustRunAfter "createDebugCoverageReport"
getClassDirectories().setFrom(fileTree(
dir: "${buildDir}",
includes: ["tmp/kotlin-classes/debug/ca/rmen/android/poetassistant/**/*.class",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,53 +20,37 @@
package ca.rmen.android.poetassistant.main;


import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import androidx.test.espresso.IdlingRegistry;
import androidx.test.filters.LargeTest;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.runner.lifecycle.Stage;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.EnumSet;
import java.util.Set;

import ca.rmen.android.poetassistant.R;
import ca.rmen.android.poetassistant.main.rules.ActivityStageIdlingResource;
import ca.rmen.android.poetassistant.main.rules.PoetAssistantActivityTestRule;
import ca.rmen.android.poetassistant.main.rules.RetryTestRule;
import ca.rmen.android.poetassistant.settings.SettingsActivity;

import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.matcher.ViewMatchers.hasSibling;
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.Matchers.allOf;
import static ca.rmen.android.poetassistant.main.CustomChecks.checkAllStarredWords;
import static ca.rmen.android.poetassistant.main.TestAppUtils.clearStarredWords;
import static ca.rmen.android.poetassistant.main.TestAppUtils.search;
import static ca.rmen.android.poetassistant.main.TestAppUtils.starQueryWord;
import static ca.rmen.android.poetassistant.main.TestAppUtils.unStarQueryWord;
import static ca.rmen.android.poetassistant.main.TestUiUtils.clickPreference;
import static ca.rmen.android.poetassistant.main.TestUiUtils.openMenuItem;
import static ca.rmen.android.poetassistant.main.TestUiUtils.swipeViewPagerLeft;
import static ca.rmen.android.poetassistant.main.TestUiUtils.swipeViewPagerRight;
import static org.hamcrest.Matchers.allOf;
import static org.junit.Assert.assertTrue;

import android.content.Context;

import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import ca.rmen.android.poetassistant.R;
import ca.rmen.android.poetassistant.main.rules.PoetAssistantActivityTestRule;

@LargeTest
@RunWith(AndroidJUnit4.class)
public class FavoritesTest {

@Rule
public RetryTestRule retry = new RetryTestRule();

@Rule
public PoetAssistantActivityTestRule<MainActivity> mActivityTestRule = new PoetAssistantActivityTestRule<>(MainActivity.class, true);

Expand All @@ -91,39 +75,5 @@ public void favoritesTest() {
clearStarredWords();
checkAllStarredWords(context);
}

@TargetApi(Build.VERSION_CODES.KITKAT)
@Test
public void exportTest() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return;
}
openMenuItem(R.string.action_settings);
clickPreference(R.string.action_export_favorites);
checkActivityHidden(SettingsActivity.class.getName());
}

@TargetApi(Build.VERSION_CODES.KITKAT)
@Test
public void importTest() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return;
}
openMenuItem(R.string.action_settings);
clickPreference(R.string.action_import_favorites);
checkActivityHidden(SettingsActivity.class.getName());
}

private void checkActivityHidden(String activityClassName) {
// Wait for the activity to pause
Set<Stage> stages = EnumSet.of(Stage.PAUSED, Stage.STOPPED, Stage.DESTROYED);
ActivityStageIdlingResource waitForActivityPause =
new ActivityStageIdlingResource(activityClassName, stages);
IdlingRegistry.getInstance().register(waitForActivityPause);
getInstrumentation().runOnMainSync(() -> {
assertTrue("activity " + activityClassName + " not paused or stopped", ActivityStageIdlingResource.isActivityInStages(activityClassName, stages));
IdlingRegistry.getInstance().unregister(waitForActivityPause);
});
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import android.content.Context;
import androidx.annotation.IdRes;
import androidx.annotation.StringRes;
import androidx.test.espresso.ViewInteraction;
import androidx.test.filters.LargeTest;
import androidx.test.ext.junit.runners.AndroidJUnit4;

Expand All @@ -33,13 +32,11 @@

import ca.rmen.android.poetassistant.R;
import ca.rmen.android.poetassistant.main.rules.PoetAssistantActivityTestRule;
import ca.rmen.android.poetassistant.main.rules.RetryTestRule;

import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.Espresso.pressBack;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard;
import static androidx.test.espresso.action.ViewActions.scrollTo;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.isChecked;
Expand All @@ -56,10 +53,8 @@
import static ca.rmen.android.poetassistant.main.TestAppUtils.clearPoem;
import static ca.rmen.android.poetassistant.main.TestAppUtils.clearSearchHistory;
import static ca.rmen.android.poetassistant.main.TestAppUtils.clearStarredWords;
import static ca.rmen.android.poetassistant.main.TestAppUtils.clickDialogPositiveButton;
import static ca.rmen.android.poetassistant.main.TestAppUtils.openDictionary;
import static ca.rmen.android.poetassistant.main.TestAppUtils.openDictionaryCleanLayout;
import static ca.rmen.android.poetassistant.main.TestAppUtils.openFilter;
import static ca.rmen.android.poetassistant.main.TestAppUtils.openThesaurus;
import static ca.rmen.android.poetassistant.main.TestAppUtils.openThesaurusCleanLayout;
import static ca.rmen.android.poetassistant.main.TestAppUtils.search;
Expand All @@ -77,9 +72,6 @@
@RunWith(AndroidJUnit4.class)
public class IntegrationTest {

@Rule
public RetryTestRule retry = new RetryTestRule();

@Rule
public PoetAssistantActivityTestRule<MainActivity> mActivityTestRule = new PoetAssistantActivityTestRule<>(MainActivity.class, true);

Expand Down Expand Up @@ -205,16 +197,6 @@ public void cleanLayout2Test() {
runCleanLayoutIntegrationTest(SCENARIO2);
}

@Test
public void copyTest() {
Context context = mActivityTestRule.getActivity();
search("donkey");
String wordToCopy = "swanky";
onView(allOf(withText(wordToCopy), isDisplayed())).perform(click());
onView(allOf(withText(endsWith(context.getString(R.string.menu_copy))), isDisplayed())).perform(click());
getInstrumentation().runOnMainSync(() -> checkClipboard(context, wordToCopy));
}

@Test
public void copyCleanLayoutTest() {
Context context = mActivityTestRule.getActivity();
Expand Down Expand Up @@ -264,15 +246,6 @@ public void openAboutScreenTest() {
.check(matches(withText(R.string.about_projectUrl)));
}

@Test
public void saveFilterTest() {
search("pugnacious");
addFilter("vulturous", "rapacious");
ViewInteraction filterView = openFilter("vulturous");
filterView.perform(closeSoftKeyboard());
clickDialogPositiveButton(android.R.string.ok);
}

private void checkLicense(@IdRes int linkResId, @StringRes int linkTitle, String licenseContent) {
onView(withId(linkResId))
.check(matches(withText(linkTitle)))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@

import ca.rmen.android.poetassistant.R;
import ca.rmen.android.poetassistant.main.rules.PoetAssistantActivityTestRule;
import ca.rmen.android.poetassistant.main.rules.RetryTestRule;

import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import static androidx.test.espresso.Espresso.onView;
Expand All @@ -56,9 +55,6 @@
@RunWith(AndroidJUnit4.class)
public class PoemSaveTest {

@Rule
public RetryTestRule retry = new RetryTestRule();

@Rule
public PoetAssistantActivityTestRule<MainActivity> mActivityTestRule = new PoetAssistantActivityTestRule<MainActivity>(MainActivity.class, true) {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@
import ca.rmen.android.poetassistant.R;
import ca.rmen.android.poetassistant.main.reader.WordCounter;
import ca.rmen.android.poetassistant.main.rules.PoetAssistantActivityTestRule;
import ca.rmen.android.poetassistant.main.rules.RetryTestRule;

import static androidx.test.espresso.Espresso.closeSoftKeyboard;
import static androidx.test.espresso.Espresso.onView;
Expand Down Expand Up @@ -83,9 +82,6 @@
@RunWith(AndroidJUnit4.class)
public class PoemTest {

@Rule
public RetryTestRule retry = new RetryTestRule();

@Rule
public PoetAssistantActivityTestRule<MainActivity> mActivityTestRule = new PoetAssistantActivityTestRule<>(MainActivity.class, true);

Expand Down
Loading

0 comments on commit c45b91a

Please sign in to comment.