summaryrefslogtreecommitdiff
path: root/app/src/androidTest/java/de/test/antennapod/EspressoTestUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/androidTest/java/de/test/antennapod/EspressoTestUtils.java')
-rw-r--r--app/src/androidTest/java/de/test/antennapod/EspressoTestUtils.java102
1 files changed, 102 insertions, 0 deletions
diff --git a/app/src/androidTest/java/de/test/antennapod/EspressoTestUtils.java b/app/src/androidTest/java/de/test/antennapod/EspressoTestUtils.java
new file mode 100644
index 000000000..50109c71a
--- /dev/null
+++ b/app/src/androidTest/java/de/test/antennapod/EspressoTestUtils.java
@@ -0,0 +1,102 @@
+package de.test.antennapod;
+
+import android.content.Context;
+import android.support.annotation.StringRes;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.espresso.PerformException;
+import android.support.test.espresso.UiController;
+import android.support.test.espresso.ViewAction;
+import android.support.test.espresso.contrib.DrawerActions;
+import android.support.test.espresso.contrib.RecyclerViewActions;
+import android.support.test.espresso.util.HumanReadables;
+import android.support.test.espresso.util.TreeIterables;
+import android.view.View;
+import de.danoeh.antennapod.R;
+import org.hamcrest.Matcher;
+
+import java.io.File;
+import java.util.concurrent.TimeoutException;
+
+import static android.support.test.espresso.Espresso.onView;
+import static android.support.test.espresso.action.ViewActions.click;
+import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant;
+import static android.support.test.espresso.matcher.ViewMatchers.isRoot;
+import static android.support.test.espresso.matcher.ViewMatchers.withId;
+import static android.support.test.espresso.matcher.ViewMatchers.withText;
+
+public class EspressoTestUtils {
+ /**
+ * Perform action of waiting for a specific view id.
+ * https://stackoverflow.com/a/49814995/
+ * @param viewMatcher The view to wait for.
+ * @param millis The timeout of until when to wait for.
+ */
+ public static ViewAction waitForView(final Matcher<View> viewMatcher, final long millis) {
+ return new ViewAction() {
+ @Override
+ public Matcher<View> getConstraints() {
+ return isRoot();
+ }
+
+ @Override
+ public String getDescription() {
+ return "wait for a specific view for" + millis + " millis.";
+ }
+
+ @Override
+ public void perform(final UiController uiController, final View view) {
+ uiController.loopMainThreadUntilIdle();
+ final long startTime = System.currentTimeMillis();
+ final long endTime = startTime + millis;
+
+ do {
+ for (View child : TreeIterables.breadthFirstViewTraversal(view)) {
+ // found view with required ID
+ if (viewMatcher.matches(child)) {
+ return;
+ }
+ }
+
+ uiController.loopMainThreadForAtLeast(50);
+ }
+ while (System.currentTimeMillis() < endTime);
+
+ // timeout happens
+ throw new PerformException.Builder()
+ .withActionDescription(this.getDescription())
+ .withViewDescription(HumanReadables.describe(view))
+ .withCause(new TimeoutException())
+ .build();
+ }
+ };
+ }
+
+ /**
+ * Clear all app databases
+ */
+ public static void clearAppData() {
+ File root = InstrumentationRegistry.getTargetContext().getFilesDir().getParentFile();
+ String[] sharedPreferencesFileNames = new File(root, "shared_prefs").list();
+ for (String fileName : sharedPreferencesFileNames) {
+ System.out.println("Cleared database: " + fileName);
+ InstrumentationRegistry.getTargetContext().
+ getSharedPreferences(fileName.replace(".xml", ""), Context.MODE_PRIVATE).edit().clear().commit();
+ }
+ }
+
+ public static void clickPreference(@StringRes int title) {
+ onView(withId(R.id.list)).perform(
+ RecyclerViewActions.actionOnItem(hasDescendant(withText(title)),
+ click()));
+ }
+
+ public static void openNavDrawer() {
+ onView(isRoot()).perform(waitForView(withId(R.id.drawer_layout), 1000));
+ onView(withId(R.id.drawer_layout)).perform(DrawerActions.open());
+ }
+
+ public static void closeNavDrawer() {
+ onView(isRoot()).perform(waitForView(withId(R.id.drawer_layout), 1000));
+ onView(withId(R.id.drawer_layout)).perform(DrawerActions.close());
+ }
+}