From f23b9fcb896130fd6cfa2e20db658f10ca428f92 Mon Sep 17 00:00:00 2001 From: Aaron Train Date: Tue, 24 Mar 2020 10:47:11 -0400 Subject: [PATCH] Closes #9346: Add ViewIdlingResource for Reader View UI tests (#9347) --- .../helpers/ViewVisibilityIdlingResource.kt | 32 +++++++++++++++++++ .../org/mozilla/fenix/ui/ReaderViewTest.kt | 32 +++++++++++++++---- 2 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 app/src/androidTest/java/org/mozilla/fenix/helpers/ViewVisibilityIdlingResource.kt diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/ViewVisibilityIdlingResource.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/ViewVisibilityIdlingResource.kt new file mode 100644 index 000000000..e3f54107e --- /dev/null +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/ViewVisibilityIdlingResource.kt @@ -0,0 +1,32 @@ +package org.mozilla.fenix.helpers + +import android.view.View +import androidx.test.espresso.IdlingResource + +class ViewVisibilityIdlingResource( + private val view: View, + private val expectedVisibility: Int +) : IdlingResource { + private var resourceCallback: IdlingResource.ResourceCallback? = null + private var isIdle: Boolean = false + + override fun getName(): String { + return ViewVisibilityIdlingResource::class.java.name + ":" + view.id + ":" + expectedVisibility + } + + override fun isIdleNow(): Boolean { + if (isIdle) return true + + isIdle = view.visibility == expectedVisibility + + if (isIdle) { + resourceCallback?.onTransitionToIdle() + } + + return isIdle + } + + override fun registerIdleTransitionCallback(callback: IdlingResource.ResourceCallback?) { + this.resourceCallback = callback + } +} diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/ReaderViewTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/ReaderViewTest.kt index 334983000..e227dbca8 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/ReaderViewTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/ReaderViewTest.kt @@ -4,19 +4,20 @@ package org.mozilla.fenix.ui -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.uiautomator.UiDevice +import android.view.View import okhttp3.mockwebserver.MockWebServer import org.junit.After import org.junit.Before -import org.junit.Ignore import org.junit.Rule import org.junit.Test +import org.mozilla.fenix.ui.robots.navigationToolbar +import org.mozilla.fenix.ui.robots.readerViewRobot +import androidx.test.espresso.IdlingRegistry +import org.mozilla.fenix.R import org.mozilla.fenix.helpers.AndroidAssetDispatcher +import org.mozilla.fenix.helpers.ViewVisibilityIdlingResource import org.mozilla.fenix.helpers.HomeActivityIntentTestRule import org.mozilla.fenix.helpers.TestAssetHelper -import org.mozilla.fenix.ui.robots.navigationToolbar -import org.mozilla.fenix.ui.robots.readerViewRobot /** * Tests for verifying basic functionality of content context menus @@ -29,7 +30,7 @@ import org.mozilla.fenix.ui.robots.readerViewRobot class ReaderViewTest { private lateinit var mockWebServer: MockWebServer - val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) + private var readerViewNotificationDot: ViewVisibilityIdlingResource? = null @get:Rule val activityIntentTestRule = HomeActivityIntentTestRule() @@ -40,11 +41,17 @@ class ReaderViewTest { setDispatcher(AndroidAssetDispatcher()) start() } + + readerViewNotificationDot = ViewVisibilityIdlingResource( + activityIntentTestRule.activity.findViewById(R.id.notification_dot), + View.VISIBLE + ) } @After fun tearDown() { mockWebServer.shutdown() + IdlingRegistry.getInstance().unregister(readerViewNotificationDot) } /** @@ -64,6 +71,8 @@ class ReaderViewTest { verifyPageContent(readerViewPage.content) } + IdlingRegistry.getInstance().register(readerViewNotificationDot) + readerViewRobot { verifyReaderViewDetected(true) } @@ -112,6 +121,8 @@ class ReaderViewTest { verifyPageContent(readerViewPage.content) } + IdlingRegistry.getInstance().register(readerViewNotificationDot) + readerViewRobot { verifyReaderViewDetected(true) } @@ -142,6 +153,8 @@ class ReaderViewTest { verifyPageContent(readerViewPage.content) } + IdlingRegistry.getInstance().register(readerViewNotificationDot) + readerViewRobot { verifyReaderViewDetected(true) } @@ -166,7 +179,6 @@ class ReaderViewTest { } @Test - @Ignore("Intermittent failure. Fix in https://github.com/mozilla-mobile/fenix/issues/9188") fun verifyReaderViewAppearanceFontToggle() { val readerViewPage = TestAssetHelper.getLoremIpsumAsset(mockWebServer) @@ -176,6 +188,8 @@ class ReaderViewTest { verifyPageContent(readerViewPage.content) } + IdlingRegistry.getInstance().register(readerViewNotificationDot) + readerViewRobot { verifyReaderViewDetected(true) } @@ -209,6 +223,8 @@ class ReaderViewTest { verifyPageContent(readerViewPage.content) } + IdlingRegistry.getInstance().register(readerViewNotificationDot) + readerViewRobot { verifyReaderViewDetected(true) } @@ -248,6 +264,8 @@ class ReaderViewTest { verifyPageContent(readerViewPage.content) } + IdlingRegistry.getInstance().register(readerViewNotificationDot) + readerViewRobot { verifyReaderViewDetected(true) }