From 990d05dc0fdd334e61446f14fb130088e05b21c1 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 14 Aug 2018 16:45:09 +0200 Subject: [PATCH] skip Espresso tests on ARM emulators ARM emulators are too slow to run these tests in a useful way. The sad thing is that it would probably work if Android didn't put up the ANR "Process system isn't responding" on boot each time. There seems to be no way to increase the ANR timeout. --- .../fdroid/MainActivityEspressoTest.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/app/src/androidTest/java/org/fdroid/fdroid/MainActivityEspressoTest.java b/app/src/androidTest/java/org/fdroid/fdroid/MainActivityEspressoTest.java index 44034d45d..5f4871240 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/MainActivityEspressoTest.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/MainActivityEspressoTest.java @@ -1,6 +1,7 @@ package org.fdroid.fdroid; import android.app.Instrumentation; +import android.os.Build; import android.support.test.InstrumentationRegistry; import android.support.test.espresso.IdlingPolicies; import android.support.test.espresso.ViewInteraction; @@ -43,8 +44,21 @@ import static org.junit.Assert.assertTrue; public class MainActivityEspressoTest { public static final String TAG = "MainActivityEspressoTest"; + /** + * ARM emulators are too slow to run these tests in a useful way. The sad + * thing is that it would probably work if Android didn't put up the ANR + * "Process system isn't responding" on boot each time. There seems to be no + * way to increase the ANR timeout. + */ @BeforeClass public static void classSetUp() { + Log.i(TAG, "setUp " + isEmulator() + " " + Build.SUPPORTED_ABIS[0]); + if (Build.SUPPORTED_ABIS[0].startsWith("arm") && isEmulator()) { + Log.e(TAG, "SKIPPING TEST: ARM emulators are too slow to run these tests in a useful way"); + org.junit.Assume.assumeTrue(false); + return; + } + IdlingPolicies.setIdlingResourceTimeout(10, TimeUnit.MINUTES); IdlingPolicies.setMasterPolicyTimeout(10, TimeUnit.MINUTES); Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); @@ -64,6 +78,17 @@ public class MainActivityEspressoTest { SystemAnimations.enableAll(InstrumentationRegistry.getTargetContext()); } + public static boolean isEmulator() { + return Build.FINGERPRINT.startsWith("generic") + || Build.FINGERPRINT.startsWith("unknown") + || Build.MODEL.contains("google_sdk") + || Build.MODEL.contains("Emulator") + || Build.MODEL.contains("Android SDK built for x86") + || Build.MANUFACTURER.contains("Genymotion") + || (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")) + || "google_sdk".equals(Build.PRODUCT); + } + @Rule public ActivityTestRule activityTestRule = new ActivityTestRule<>(MainActivity.class);