|
|
|
@ -4,6 +4,7 @@
|
|
|
|
|
|
|
|
|
|
package org.mozilla.fenix.helpers
|
|
|
|
|
|
|
|
|
|
import android.util.Log
|
|
|
|
|
import androidx.test.espresso.IdlingResourceTimeoutException
|
|
|
|
|
import androidx.test.espresso.NoMatchingViewException
|
|
|
|
|
import androidx.test.uiautomator.UiObjectNotFoundException
|
|
|
|
@ -13,7 +14,9 @@ import org.junit.rules.TestRule
|
|
|
|
|
import org.junit.runner.Description
|
|
|
|
|
import org.junit.runners.model.Statement
|
|
|
|
|
import org.mozilla.fenix.components.PermissionStorage
|
|
|
|
|
import org.mozilla.fenix.ext.settings
|
|
|
|
|
import org.mozilla.fenix.helpers.AppAndSystemHelper.setNetworkEnabled
|
|
|
|
|
import org.mozilla.fenix.helpers.Constants.TAG
|
|
|
|
|
import org.mozilla.fenix.helpers.IdlingResourceHelper.unregisterAllIdlingResources
|
|
|
|
|
import org.mozilla.fenix.helpers.TestHelper.appContext
|
|
|
|
|
|
|
|
|
@ -32,68 +35,83 @@ class RetryTestRule(private val retryCount: Int = 5) : TestRule {
|
|
|
|
|
return statement {
|
|
|
|
|
for (i in 1..retryCount) {
|
|
|
|
|
try {
|
|
|
|
|
Log.i(TAG, "RetryTestRule: Started try #$i.")
|
|
|
|
|
base.evaluate()
|
|
|
|
|
break
|
|
|
|
|
} catch (t: AssertionError) {
|
|
|
|
|
setNetworkEnabled(true)
|
|
|
|
|
unregisterAllIdlingResources()
|
|
|
|
|
runBlocking {
|
|
|
|
|
appContext.settings().alwaysOpenTheHomepageWhenOpeningTheApp = true
|
|
|
|
|
permissionStorage.deleteAllSitePermissions()
|
|
|
|
|
}
|
|
|
|
|
if (i == retryCount) {
|
|
|
|
|
Log.i(TAG, "RetryTestRule: Max numbers of retries reached.")
|
|
|
|
|
throw t
|
|
|
|
|
}
|
|
|
|
|
} catch (t: AssertionFailedError) {
|
|
|
|
|
unregisterAllIdlingResources()
|
|
|
|
|
runBlocking {
|
|
|
|
|
appContext.settings().alwaysOpenTheHomepageWhenOpeningTheApp = true
|
|
|
|
|
permissionStorage.deleteAllSitePermissions()
|
|
|
|
|
}
|
|
|
|
|
if (i == retryCount) {
|
|
|
|
|
Log.i(TAG, "RetryTestRule: Max numbers of retries reached.")
|
|
|
|
|
throw t
|
|
|
|
|
}
|
|
|
|
|
} catch (t: UiObjectNotFoundException) {
|
|
|
|
|
setNetworkEnabled(true)
|
|
|
|
|
unregisterAllIdlingResources()
|
|
|
|
|
runBlocking {
|
|
|
|
|
appContext.settings().alwaysOpenTheHomepageWhenOpeningTheApp = true
|
|
|
|
|
permissionStorage.deleteAllSitePermissions()
|
|
|
|
|
}
|
|
|
|
|
if (i == retryCount) {
|
|
|
|
|
Log.i(TAG, "RetryTestRule: Max numbers of retries reached.")
|
|
|
|
|
throw t
|
|
|
|
|
}
|
|
|
|
|
} catch (t: NoMatchingViewException) {
|
|
|
|
|
setNetworkEnabled(true)
|
|
|
|
|
unregisterAllIdlingResources()
|
|
|
|
|
runBlocking {
|
|
|
|
|
appContext.settings().alwaysOpenTheHomepageWhenOpeningTheApp = true
|
|
|
|
|
permissionStorage.deleteAllSitePermissions()
|
|
|
|
|
}
|
|
|
|
|
if (i == retryCount) {
|
|
|
|
|
Log.i(TAG, "RetryTestRule: Max numbers of retries reached.")
|
|
|
|
|
throw t
|
|
|
|
|
}
|
|
|
|
|
} catch (t: IdlingResourceTimeoutException) {
|
|
|
|
|
setNetworkEnabled(true)
|
|
|
|
|
unregisterAllIdlingResources()
|
|
|
|
|
runBlocking {
|
|
|
|
|
appContext.settings().alwaysOpenTheHomepageWhenOpeningTheApp = true
|
|
|
|
|
permissionStorage.deleteAllSitePermissions()
|
|
|
|
|
}
|
|
|
|
|
if (i == retryCount) {
|
|
|
|
|
Log.i(TAG, "RetryTestRule: Max numbers of retries reached.")
|
|
|
|
|
throw t
|
|
|
|
|
}
|
|
|
|
|
} catch (t: RuntimeException) {
|
|
|
|
|
setNetworkEnabled(true)
|
|
|
|
|
unregisterAllIdlingResources()
|
|
|
|
|
runBlocking {
|
|
|
|
|
appContext.settings().alwaysOpenTheHomepageWhenOpeningTheApp = true
|
|
|
|
|
permissionStorage.deleteAllSitePermissions()
|
|
|
|
|
}
|
|
|
|
|
if (i == retryCount) {
|
|
|
|
|
Log.i(TAG, "RetryTestRule: Max numbers of retries reached.")
|
|
|
|
|
throw t
|
|
|
|
|
}
|
|
|
|
|
} catch (t: NullPointerException) {
|
|
|
|
|
setNetworkEnabled(true)
|
|
|
|
|
unregisterAllIdlingResources()
|
|
|
|
|
runBlocking {
|
|
|
|
|
appContext.settings().alwaysOpenTheHomepageWhenOpeningTheApp = true
|
|
|
|
|
permissionStorage.deleteAllSitePermissions()
|
|
|
|
|
}
|
|
|
|
|
if (i == retryCount) {
|
|
|
|
|
Log.i(TAG, "RetryTestRule: Max numbers of retries reached.")
|
|
|
|
|
throw t
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|