[components] For https://github.com/mozilla-mobile/android-components/issues/11670: Use shadowOf(getMainLooper()).idle() to execute all posted tasks.
This is needed due to the new default Looper Mode - PAUSED in Robolectric.
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
package mozilla.components.browser.domains
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Looper.getMainLooper
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import mozilla.components.browser.domains.autocomplete.BaseDomainAutocompleteProvider
|
||||
@@ -17,6 +18,7 @@ import org.junit.Assert.assertNull
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class BaseDomainAutocompleteProviderTest {
|
||||
@@ -60,6 +62,7 @@ class BaseDomainAutocompleteProviderTest {
|
||||
val domainsCount = domains.size
|
||||
|
||||
val provider = createAndInitProvider(testContext, list) { domains }
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertCompletion(provider, list, domainsCount, "m", "m", "mozilla.org", "http://mozilla.org")
|
||||
assertCompletion(provider, list, domainsCount, "moz", "moz", "mozilla.org", "http://mozilla.org")
|
||||
@@ -83,6 +86,7 @@ class BaseDomainAutocompleteProviderTest {
|
||||
val domainsCount = domains.size
|
||||
|
||||
val provider = createAndInitProvider(testContext, list) { domains }
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertCompletion(provider, list, domainsCount, "m", "m", "mozilla.org", "http://mozilla.org")
|
||||
assertCompletion(provider, list, domainsCount, "moz", "moz", "mozilla.org", "http://mozilla.org")
|
||||
|
||||
@@ -7,6 +7,7 @@ package mozilla.components.browser.engine.gecko
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.os.Handler
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.os.Message
|
||||
import android.view.WindowManager
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
@@ -89,6 +90,7 @@ import org.mozilla.geckoview.WebRequestError.ERROR_CATEGORY_UNKNOWN
|
||||
import org.mozilla.geckoview.WebRequestError.ERROR_MALFORMED_URI
|
||||
import org.mozilla.geckoview.WebRequestError.ERROR_UNKNOWN
|
||||
import org.mozilla.geckoview.WebResponse
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
import java.security.Principal
|
||||
import java.security.cert.X509Certificate
|
||||
|
||||
@@ -1291,6 +1293,7 @@ class GeckoEngineSessionTest {
|
||||
|
||||
val policy = TrackingProtectionPolicy.recommended()
|
||||
session.updateTrackingProtection(policy)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(session).updateContentBlocking(policy)
|
||||
assertTrue(session.etpEnabled!!)
|
||||
@@ -1420,16 +1423,19 @@ class GeckoEngineSessionTest {
|
||||
session.updateTrackingProtection(policy)
|
||||
|
||||
observers.forEach { session.register(it) }
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
observers.forEach {
|
||||
verify(it).onTrackerBlockingEnabledChange(true)
|
||||
}
|
||||
|
||||
observers.forEach { session.unregister(it) }
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
session.updateTrackingProtection(TrackingProtectionPolicy.none())
|
||||
|
||||
observers.forEach { session.register(it) }
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
observers.forEach {
|
||||
verify(it).onTrackerBlockingEnabledChange(false)
|
||||
@@ -2169,6 +2175,7 @@ class GeckoEngineSessionTest {
|
||||
})
|
||||
|
||||
engineSession.findAll("mozilla")
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertEquals("mozilla", findObserved)
|
||||
assertTrue(findResultObserved)
|
||||
@@ -2200,10 +2207,14 @@ class GeckoEngineSessionTest {
|
||||
})
|
||||
|
||||
engineSession.findNext(true)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(findResultObserved)
|
||||
verify(sessionFinder).find(null, 0)
|
||||
|
||||
engineSession.findNext(false)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(findResultObserved)
|
||||
verify(sessionFinder).find(null, GeckoSession.FINDER_FIND_BACKWARDS)
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ package mozilla.components.browser.engine.gecko
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.os.Looper.getMainLooper
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import mozilla.components.browser.engine.gecko.ext.getAntiTrackingPolicy
|
||||
import mozilla.components.browser.engine.gecko.mediaquery.toGeckoValue
|
||||
@@ -77,6 +78,7 @@ import org.mozilla.geckoview.WebExtension.InstallException.ErrorCodes.ERROR_USER
|
||||
import org.mozilla.geckoview.WebExtensionController
|
||||
import org.mozilla.geckoview.WebPushController
|
||||
import org.robolectric.Robolectric
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
import java.io.IOException
|
||||
import org.mozilla.geckoview.WebExtension as GeckoWebExtension
|
||||
|
||||
@@ -698,6 +700,8 @@ class GeckoEngineTest {
|
||||
)
|
||||
result.complete(mockNativeWebExtension(extId, extUrl))
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
val extUrlCaptor = argumentCaptor<String>()
|
||||
val extIdCaptor = argumentCaptor<String>()
|
||||
verify(extensionController).ensureBuiltIn(extUrlCaptor.capture(), extIdCaptor.capture())
|
||||
@@ -730,6 +734,8 @@ class GeckoEngineTest {
|
||||
)
|
||||
result.complete(mockNativeWebExtension(extId, extUrl))
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
val extCaptor = argumentCaptor<String>()
|
||||
verify(extensionController).install(extCaptor.capture())
|
||||
assertEquals(extUrl, extCaptor.value)
|
||||
@@ -759,6 +765,8 @@ class GeckoEngineTest {
|
||||
}
|
||||
result.completeExceptionally(expected)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(onErrorCalled)
|
||||
assertEquals(expected, throwable)
|
||||
}
|
||||
@@ -785,6 +793,8 @@ class GeckoEngineTest {
|
||||
}
|
||||
result.completeExceptionally(expected)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(onErrorCalled)
|
||||
assertEquals(expected, throwable)
|
||||
}
|
||||
@@ -816,6 +826,9 @@ class GeckoEngineTest {
|
||||
onError = { _, _ -> onErrorCalled = true }
|
||||
)
|
||||
result.complete(null)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(webExtensionsDelegate).onUninstalled(ext)
|
||||
|
||||
val extCaptor = argumentCaptor<GeckoWebExtension>()
|
||||
@@ -855,6 +868,9 @@ class GeckoEngineTest {
|
||||
throwable = e
|
||||
}
|
||||
result.completeExceptionally(expected)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(webExtensionsDelegate, never()).onUninstalled(ext)
|
||||
|
||||
assertTrue(onErrorCalled)
|
||||
@@ -878,6 +894,8 @@ class GeckoEngineTest {
|
||||
engine.installWebExtension(extId, extUrl)
|
||||
result.complete(mockNativeWebExtension(extId, extUrl))
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
val extCaptor = argumentCaptor<WebExtension>()
|
||||
verify(webExtensionsDelegate).onInstalled(extCaptor.capture())
|
||||
assertEquals(extId, extCaptor.value.id)
|
||||
@@ -901,6 +919,8 @@ class GeckoEngineTest {
|
||||
engine.installWebExtension(extId, extUrl)
|
||||
result.complete(mockNativeWebExtension(extId, extUrl))
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
val extCaptor = argumentCaptor<WebExtension>()
|
||||
verify(webExtensionsDelegate).onInstalled(extCaptor.capture())
|
||||
assertEquals(extId, extCaptor.value.id)
|
||||
@@ -1034,6 +1054,8 @@ class GeckoEngineTest {
|
||||
val extension = mockNativeWebExtension(extId, extUrl)
|
||||
result.complete(extension)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
val actionDelegateCaptor = argumentCaptor<org.mozilla.geckoview.WebExtension.ActionDelegate>()
|
||||
verify(extension).setActionDelegate(actionDelegateCaptor.capture())
|
||||
|
||||
@@ -1068,6 +1090,8 @@ class GeckoEngineTest {
|
||||
val extension = mockNativeWebExtension(extId, extUrl)
|
||||
result.complete(extension)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
val actionDelegateCaptor = argumentCaptor<org.mozilla.geckoview.WebExtension.ActionDelegate>()
|
||||
verify(extension).setActionDelegate(actionDelegateCaptor.capture())
|
||||
|
||||
@@ -1102,6 +1126,8 @@ class GeckoEngineTest {
|
||||
val extension = mockNativeWebExtension(extId, extUrl)
|
||||
result.complete(extension)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
val tabDelegateCaptor = argumentCaptor<org.mozilla.geckoview.WebExtension.TabDelegate>()
|
||||
verify(extension).tabDelegate = tabDelegateCaptor.capture()
|
||||
|
||||
@@ -1132,6 +1158,8 @@ class GeckoEngineTest {
|
||||
val extension = mockNativeWebExtension(extId, extUrl)
|
||||
result.complete(extension)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
val actionDelegateCaptor = argumentCaptor<org.mozilla.geckoview.WebExtension.ActionDelegate>()
|
||||
verify(extension).setActionDelegate(actionDelegateCaptor.capture())
|
||||
|
||||
@@ -1166,6 +1194,8 @@ class GeckoEngineTest {
|
||||
val extension = mockNativeWebExtension(extId, extUrl)
|
||||
result.complete(extension)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
val actionDelegateCaptor = argumentCaptor<org.mozilla.geckoview.WebExtension.ActionDelegate>()
|
||||
verify(extension).setActionDelegate(actionDelegateCaptor.capture())
|
||||
|
||||
@@ -1200,6 +1230,8 @@ class GeckoEngineTest {
|
||||
val extension = mockNativeWebExtension(extId, extUrl)
|
||||
result.complete(extension)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
val tabDelegateCaptor = argumentCaptor<org.mozilla.geckoview.WebExtension.TabDelegate>()
|
||||
verify(extension).tabDelegate = tabDelegateCaptor.capture()
|
||||
|
||||
@@ -1256,6 +1288,8 @@ class GeckoEngineTest {
|
||||
)
|
||||
updateExtensionResult.complete(updatedExtension)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(onErrorCalled)
|
||||
assertNotNull(result)
|
||||
}
|
||||
@@ -1319,6 +1353,8 @@ class GeckoEngineTest {
|
||||
)
|
||||
updateExtensionResult.completeExceptionally(expected)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertSame(expected, throwable!!.cause)
|
||||
assertNull(result)
|
||||
}
|
||||
@@ -1347,6 +1383,9 @@ class GeckoEngineTest {
|
||||
)
|
||||
|
||||
updateExtensionResult.completeExceptionally(exception)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
throwable!!
|
||||
}
|
||||
|
||||
@@ -1398,6 +1437,8 @@ class GeckoEngineTest {
|
||||
)
|
||||
installedExtensionResult.complete(installedExtensions)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(onErrorCalled)
|
||||
assertNotNull(extensions)
|
||||
}
|
||||
@@ -1422,6 +1463,8 @@ class GeckoEngineTest {
|
||||
)
|
||||
installedExtensionResult.completeExceptionally(expected)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertSame(expected, throwable)
|
||||
assertNull(extensions)
|
||||
}
|
||||
@@ -1454,6 +1497,8 @@ class GeckoEngineTest {
|
||||
)
|
||||
enableExtensionResult.complete(enabledExtension)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(onErrorCalled)
|
||||
assertNotNull(result)
|
||||
verify(webExtensionsDelegate).onEnabled(result!!)
|
||||
@@ -1487,6 +1532,8 @@ class GeckoEngineTest {
|
||||
)
|
||||
enableExtensionResult.completeExceptionally(expected)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertSame(expected, throwable)
|
||||
assertNull(result)
|
||||
verify(webExtensionsDelegate, never()).onEnabled(any())
|
||||
@@ -1520,6 +1567,8 @@ class GeckoEngineTest {
|
||||
)
|
||||
disableExtensionResult.complete(disabledExtension)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(onErrorCalled)
|
||||
assertNotNull(result)
|
||||
verify(webExtensionsDelegate).onDisabled(result!!)
|
||||
@@ -1553,6 +1602,8 @@ class GeckoEngineTest {
|
||||
)
|
||||
disableExtensionResult.completeExceptionally(expected)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertSame(expected, throwable)
|
||||
assertNull(result)
|
||||
verify(webExtensionsDelegate, never()).onEnabled(any())
|
||||
@@ -1587,6 +1638,8 @@ class GeckoEngineTest {
|
||||
)
|
||||
allowedInPrivateBrowsingExtensionResult.complete(allowedInPrivateBrowsing)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(onErrorCalled)
|
||||
assertNotNull(result)
|
||||
verify(webExtensionsDelegate).onAllowedInPrivateBrowsingChanged(result!!)
|
||||
@@ -1621,6 +1674,8 @@ class GeckoEngineTest {
|
||||
)
|
||||
allowedInPrivateBrowsingExtensionResult.completeExceptionally(expected)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertSame(expected, throwable)
|
||||
assertNull(result)
|
||||
verify(webExtensionsDelegate, never()).onAllowedInPrivateBrowsingChanged(any())
|
||||
@@ -1654,6 +1709,9 @@ class GeckoEngineTest {
|
||||
|
||||
val engine = GeckoEngine(context, runtime = runtime)
|
||||
engine.clearData(data = Engine.BrowsingData.all(), onSuccess = { onSuccessCalled = true })
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(onSuccessCalled)
|
||||
}
|
||||
|
||||
@@ -1679,6 +1737,9 @@ class GeckoEngineTest {
|
||||
throwable = it
|
||||
}
|
||||
)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(onErrorCalled)
|
||||
assertSame(exception, throwable)
|
||||
}
|
||||
@@ -1702,6 +1763,9 @@ class GeckoEngineTest {
|
||||
|
||||
val engine = GeckoEngine(context, runtime = runtime)
|
||||
engine.clearData(data = Engine.BrowsingData.all(), host = "mozilla.org", onSuccess = { onSuccessCalled = true })
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(onSuccessCalled)
|
||||
}
|
||||
|
||||
@@ -1732,6 +1796,9 @@ class GeckoEngineTest {
|
||||
throwable = it
|
||||
}
|
||||
)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(onErrorCalled)
|
||||
assertSame(exception, throwable)
|
||||
}
|
||||
@@ -1781,6 +1848,8 @@ class GeckoEngineTest {
|
||||
|
||||
logEntriesResult.complete(createDummyLogEntryList())
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
val trackerLog = trackersLog!!.first()
|
||||
assertTrue(trackerLog.cookiesHasBeenBlocked)
|
||||
assertEquals("www.tracker.com", trackerLog.url)
|
||||
@@ -1810,6 +1879,8 @@ class GeckoEngineTest {
|
||||
onError = { onErrorCalled = true }
|
||||
)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(onErrorCalled)
|
||||
}
|
||||
|
||||
@@ -1839,6 +1910,8 @@ class GeckoEngineTest {
|
||||
|
||||
logEntriesResult.complete(createShimmedEntryList())
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
val trackerLog = trackersLog!!.first()
|
||||
assertEquals("www.tracker.com", trackerLog.url)
|
||||
assertTrue(trackerLog.blockedCategories.contains(TrackingCategory.SCRIPTS_AND_SUB_RESOURCES))
|
||||
@@ -1867,6 +1940,8 @@ class GeckoEngineTest {
|
||||
engine.getTrackersLog(mockSession, onSuccess = { trackersLog = it })
|
||||
logEntriesResult.complete(createSocialTrackersLogEntryList())
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
var trackerLog = trackersLog!!.first()
|
||||
assertTrue(trackerLog.cookiesHasBeenBlocked)
|
||||
assertEquals("www.tracker.com", trackerLog.url)
|
||||
@@ -1936,6 +2011,8 @@ class GeckoEngineTest {
|
||||
)
|
||||
logEntriesResult.complete(createDummyLogEntryList())
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
val trackerLog = trackersLog!![1]
|
||||
assertTrue(trackerLog.loadedCategories.contains(TrackingCategory.SCRIPTS_AND_SUB_RESOURCES))
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Color
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.view.View
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import mozilla.components.browser.engine.gecko.GeckoEngineView.Companion.DARK_COVER
|
||||
@@ -32,6 +33,7 @@ import org.mockito.Mockito.verify
|
||||
import org.mozilla.geckoview.GeckoResult
|
||||
import org.mozilla.geckoview.GeckoSession
|
||||
import org.robolectric.Robolectric.buildActivity
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class GeckoEngineViewTest {
|
||||
@@ -73,6 +75,8 @@ class GeckoEngineViewTest {
|
||||
}
|
||||
verify(mockGeckoView).capturePixels()
|
||||
geckoResult.complete(mock())
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertNotNull(thumbnail)
|
||||
|
||||
geckoResult = GeckoResult()
|
||||
@@ -83,6 +87,8 @@ class GeckoEngineViewTest {
|
||||
thumbnail = it
|
||||
}
|
||||
geckoResult.completeExceptionally(mock())
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertNull(thumbnail)
|
||||
|
||||
// Test GeckoView throwing an exception
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
package mozilla.components.browser.engine.gecko
|
||||
|
||||
import android.os.Looper.getMainLooper
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@@ -30,6 +31,7 @@ import org.mozilla.geckoview.GeckoSession.PermissionDelegate.ContentPermission.V
|
||||
import org.mozilla.geckoview.GeckoSession.PermissionDelegate.ContentPermission.VALUE_DENY
|
||||
import org.mozilla.geckoview.GeckoSession.PermissionDelegate.PERMISSION_TRACKING
|
||||
import org.mozilla.geckoview.StorageController
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class GeckoTrackingProtectionExceptionStorageTest {
|
||||
@@ -169,6 +171,7 @@ class GeckoTrackingProtectionExceptionStorageTest {
|
||||
storage.remove("https://example.com/")
|
||||
|
||||
geckoResult.complete(listOf(contentPermission))
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(storageController).setPermission(contentPermission, VALUE_DENY)
|
||||
}
|
||||
@@ -196,6 +199,7 @@ class GeckoTrackingProtectionExceptionStorageTest {
|
||||
storage.removeAll(listOf(session))
|
||||
|
||||
geckoResult.complete(listOf(contentPermission))
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(storageController).setPermission(contentPermission, VALUE_DENY)
|
||||
assertFalse(excludedOnTrackingProtection)
|
||||
@@ -217,6 +221,7 @@ class GeckoTrackingProtectionExceptionStorageTest {
|
||||
}
|
||||
|
||||
geckoResult.complete(listOf(contentPermission))
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(exceptionList!!.isNotEmpty())
|
||||
val exception = exceptionList!!.first() as GeckoTrackingProtectionException
|
||||
@@ -246,6 +251,7 @@ class GeckoTrackingProtectionExceptionStorageTest {
|
||||
}
|
||||
|
||||
geckoResult.complete(listOf(contentPermission))
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(containsException)
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ package mozilla.components.browser.engine.gecko
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.view.MotionEvent
|
||||
import android.view.MotionEvent.ACTION_CANCEL
|
||||
import android.view.MotionEvent.ACTION_DOWN
|
||||
@@ -30,6 +31,7 @@ import org.mockito.Mockito.times
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mozilla.geckoview.PanZoomController.INPUT_RESULT_HANDLED
|
||||
import org.robolectric.Robolectric.buildActivity
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class NestedGeckoViewTest {
|
||||
@@ -83,6 +85,7 @@ class NestedGeckoViewTest {
|
||||
nestedWebView.childHelper = mockChildHelper
|
||||
|
||||
nestedWebView.onTouchEvent(downEvent)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
// We pass a deep copy to `updateInputResult`.
|
||||
// Can't easily check for equality, `eventTime` should be good enough.
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
package mozilla.components.browser.engine.gecko.prompt
|
||||
|
||||
import android.net.Uri
|
||||
import android.os.Looper.getMainLooper
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import mozilla.components.browser.engine.gecko.GeckoEngineSession
|
||||
import mozilla.components.browser.engine.gecko.ext.toAutocompleteCreditCard
|
||||
@@ -51,6 +52,7 @@ import org.mozilla.geckoview.GeckoSession.PromptDelegate.DateTimePrompt.Type.WEE
|
||||
import org.mozilla.geckoview.GeckoSession.PromptDelegate.FilePrompt.Capture.ANY
|
||||
import org.mozilla.geckoview.GeckoSession.PromptDelegate.FilePrompt.Capture.NONE
|
||||
import org.mozilla.geckoview.GeckoSession.PromptDelegate.FilePrompt.Capture.USER
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
import java.io.FileInputStream
|
||||
import java.security.InvalidParameterException
|
||||
import java.util.Calendar
|
||||
@@ -106,11 +108,13 @@ class GeckoPromptDelegateTest {
|
||||
val request = promptRequestSingleChoice as SingleChoice
|
||||
|
||||
request.onConfirm(request.choices.first())
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(confirmWasCalled)
|
||||
whenever(geckoPrompt.isComplete).thenReturn(true)
|
||||
|
||||
confirmWasCalled = false
|
||||
request.onConfirm(request.choices.first())
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertFalse(confirmWasCalled)
|
||||
}
|
||||
|
||||
@@ -143,11 +147,13 @@ class GeckoPromptDelegateTest {
|
||||
assertTrue(promptRequestSingleChoice is MultipleChoice)
|
||||
|
||||
(promptRequestSingleChoice as MultipleChoice).onConfirm(arrayOf())
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(confirmWasCalled)
|
||||
whenever(geckoPrompt.isComplete).thenReturn(true)
|
||||
|
||||
confirmWasCalled = false
|
||||
(promptRequestSingleChoice as MultipleChoice).onConfirm(arrayOf())
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertFalse(confirmWasCalled)
|
||||
}
|
||||
|
||||
@@ -181,11 +187,13 @@ class GeckoPromptDelegateTest {
|
||||
val request = promptRequestSingleChoice as PromptRequest.MenuChoice
|
||||
|
||||
request.onConfirm(request.choices.first())
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(confirmWasCalled)
|
||||
whenever(geckoPrompt.isComplete).thenReturn(true)
|
||||
|
||||
confirmWasCalled = false
|
||||
request.onConfirm(request.choices.first())
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertFalse(confirmWasCalled)
|
||||
}
|
||||
|
||||
@@ -222,6 +230,7 @@ class GeckoPromptDelegateTest {
|
||||
assertTrue(alertRequest is PromptRequest.Alert)
|
||||
|
||||
(alertRequest as PromptRequest.Alert).onDismiss()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(dismissWasCalled)
|
||||
|
||||
assertEquals((alertRequest as PromptRequest.Alert).title, "title")
|
||||
@@ -319,8 +328,13 @@ class GeckoPromptDelegateTest {
|
||||
geckoResult!!.accept {
|
||||
confirmCalled = true
|
||||
}
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(dateRequest is PromptRequest.TimeSelection)
|
||||
(dateRequest as PromptRequest.TimeSelection).onConfirm(Date())
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(confirmCalled)
|
||||
assertEquals((dateRequest as PromptRequest.TimeSelection).title, "title")
|
||||
}
|
||||
@@ -377,8 +391,11 @@ class GeckoPromptDelegateTest {
|
||||
confirmCalled = true
|
||||
}
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(dateRequest is PromptRequest.TimeSelection)
|
||||
(dateRequest as PromptRequest.TimeSelection).onConfirm(Date())
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(confirmCalled)
|
||||
assertEquals((dateRequest as PromptRequest.TimeSelection).title, "title")
|
||||
}
|
||||
@@ -438,6 +455,7 @@ class GeckoPromptDelegateTest {
|
||||
|
||||
assertTrue(dateRequest is PromptRequest.TimeSelection)
|
||||
(dateRequest as PromptRequest.TimeSelection).onConfirm(Date())
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(confirmCalled)
|
||||
assertEquals((dateRequest as PromptRequest.TimeSelection).title, "title")
|
||||
}
|
||||
@@ -497,6 +515,8 @@ class GeckoPromptDelegateTest {
|
||||
|
||||
assertTrue(dateRequest is PromptRequest.TimeSelection)
|
||||
(dateRequest as PromptRequest.TimeSelection).onConfirm(Date())
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(confirmCalled)
|
||||
assertEquals((dateRequest as PromptRequest.TimeSelection).title, "title")
|
||||
}
|
||||
@@ -596,11 +616,15 @@ class GeckoPromptDelegateTest {
|
||||
}
|
||||
|
||||
filePickerRequest.onSingleFileSelected(context, mockUri)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(onSingleFileSelectedWasCalled)
|
||||
whenever(geckoPrompt.isComplete).thenReturn(true)
|
||||
|
||||
onSingleFileSelectedWasCalled = false
|
||||
filePickerRequest.onSingleFileSelected(context, mockUri)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(onSingleFileSelectedWasCalled)
|
||||
|
||||
geckoPrompt = geckoFilePrompt(type = GECKO_PROMPT_FILE_TYPE.MULTIPLE, capture = ANY)
|
||||
@@ -610,6 +634,8 @@ class GeckoPromptDelegateTest {
|
||||
}
|
||||
|
||||
filePickerRequest.onMultipleFilesSelected(context, arrayOf(mockUri))
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(onMultipleFilesSelectedWasCalled)
|
||||
|
||||
geckoPrompt = geckoFilePrompt(type = GECKO_PROMPT_FILE_TYPE.SINGLE, capture = NONE)
|
||||
@@ -619,6 +645,8 @@ class GeckoPromptDelegateTest {
|
||||
}
|
||||
|
||||
filePickerRequest.onDismiss()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(onDismissWasCalled)
|
||||
|
||||
assertTrue(filePickerRequest.mimeTypes.isEmpty())
|
||||
@@ -664,6 +692,8 @@ class GeckoPromptDelegateTest {
|
||||
}
|
||||
|
||||
loginSaveRequest.onDismiss()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(onDismissWasCalled)
|
||||
|
||||
val geckoPrompt = geckoLoginSavePrompt(arrayOf(saveOption))
|
||||
@@ -674,12 +704,15 @@ class GeckoPromptDelegateTest {
|
||||
}
|
||||
|
||||
loginSaveRequest.onConfirm(entry)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(onLoginSaved)
|
||||
whenever(geckoPrompt.isComplete).thenReturn(true)
|
||||
|
||||
onLoginSaved = false
|
||||
|
||||
loginSaveRequest.onConfirm(entry)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(onLoginSaved)
|
||||
}
|
||||
@@ -737,6 +770,7 @@ class GeckoPromptDelegateTest {
|
||||
}
|
||||
|
||||
loginSelectRequest.onDismiss()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(onDismissWasCalled)
|
||||
|
||||
val geckoPrompt = geckoLoginSelectPrompt(arrayOf(loginSelectOption, secondLoginSelectOption))
|
||||
@@ -750,11 +784,14 @@ class GeckoPromptDelegateTest {
|
||||
}
|
||||
|
||||
loginSelectRequest.onConfirm(login)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(onLoginSelected)
|
||||
whenever(geckoPrompt.isComplete).thenReturn(true)
|
||||
|
||||
onLoginSelected = false
|
||||
loginSelectRequest.onConfirm(login)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(onLoginSelected)
|
||||
}
|
||||
@@ -845,6 +882,7 @@ class GeckoPromptDelegateTest {
|
||||
}
|
||||
|
||||
selectCreditCardPrompt.onDismiss()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(onDismissWasCalled)
|
||||
|
||||
val geckoPrompt =
|
||||
@@ -856,6 +894,7 @@ class GeckoPromptDelegateTest {
|
||||
}
|
||||
|
||||
selectCreditCardPrompt.onConfirm(creditCard1)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(onConfirmWasCalled)
|
||||
|
||||
@@ -952,11 +991,13 @@ class GeckoPromptDelegateTest {
|
||||
with(colorRequest) {
|
||||
assertEquals(defaultColor, "#e66465")
|
||||
onConfirm("#f6b73c")
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(onConfirmWasCalled)
|
||||
whenever(geckoPrompt.isComplete).thenReturn(true)
|
||||
|
||||
onConfirmWasCalled = false
|
||||
onConfirm("#f6b73c")
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertFalse(onConfirmWasCalled)
|
||||
}
|
||||
|
||||
@@ -966,6 +1007,7 @@ class GeckoPromptDelegateTest {
|
||||
}
|
||||
|
||||
colorRequest.onDismiss()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(onDismissWasCalled)
|
||||
|
||||
with(colorRequest) {
|
||||
@@ -999,6 +1041,7 @@ class GeckoPromptDelegateTest {
|
||||
assertEquals(inputValue, "defaultValue")
|
||||
|
||||
onDismiss()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(dismissWasCalled)
|
||||
}
|
||||
|
||||
@@ -1009,11 +1052,13 @@ class GeckoPromptDelegateTest {
|
||||
}
|
||||
|
||||
request.onConfirm(true, "newInput")
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(confirmWasCalled)
|
||||
whenever(geckoPrompt.isComplete).thenReturn(true)
|
||||
|
||||
confirmWasCalled = false
|
||||
request.onConfirm(true, "newInput")
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertFalse(confirmWasCalled)
|
||||
}
|
||||
|
||||
@@ -1141,11 +1186,13 @@ class GeckoPromptDelegateTest {
|
||||
assertEquals(data.url, "https://example.com")
|
||||
|
||||
onSuccess()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(onSuccessWasCalled)
|
||||
whenever(geckoPrompt.isComplete).thenReturn(true)
|
||||
|
||||
onSuccessWasCalled = false
|
||||
onSuccess()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertFalse(onSuccessWasCalled)
|
||||
}
|
||||
|
||||
@@ -1156,11 +1203,13 @@ class GeckoPromptDelegateTest {
|
||||
}
|
||||
|
||||
request!!.onFailure()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(onFailureWasCalled)
|
||||
whenever(geckoPrompt.isComplete).thenReturn(true)
|
||||
|
||||
onFailureWasCalled = false
|
||||
request!!.onFailure()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(onFailureWasCalled)
|
||||
|
||||
@@ -1171,6 +1220,7 @@ class GeckoPromptDelegateTest {
|
||||
}
|
||||
|
||||
request!!.onDismiss()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(onDismissWasCalled)
|
||||
}
|
||||
|
||||
@@ -1204,11 +1254,13 @@ class GeckoPromptDelegateTest {
|
||||
assertEquals(message, "message")
|
||||
|
||||
onConfirmPositiveButton(false)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(onPositiveButtonWasCalled)
|
||||
|
||||
whenever(geckoPrompt.isComplete).thenReturn(true)
|
||||
onPositiveButtonWasCalled = false
|
||||
onConfirmPositiveButton(false)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(onPositiveButtonWasCalled)
|
||||
}
|
||||
@@ -1220,6 +1272,7 @@ class GeckoPromptDelegateTest {
|
||||
}
|
||||
|
||||
request.onConfirmNeutralButton(false)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(onNeutralButtonWasCalled)
|
||||
|
||||
geckoPrompt = geckoButtonPrompt()
|
||||
@@ -1229,11 +1282,13 @@ class GeckoPromptDelegateTest {
|
||||
}
|
||||
|
||||
request.onConfirmNegativeButton(false)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(onNegativeButtonWasCalled)
|
||||
whenever(geckoPrompt.isComplete).thenReturn(true)
|
||||
|
||||
onNegativeButtonWasCalled = false
|
||||
request.onConfirmNegativeButton(false)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(onNegativeButtonWasCalled)
|
||||
|
||||
@@ -1243,6 +1298,7 @@ class GeckoPromptDelegateTest {
|
||||
}
|
||||
|
||||
request.onDismiss()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(dismissWasCalled)
|
||||
}
|
||||
|
||||
@@ -1267,11 +1323,13 @@ class GeckoPromptDelegateTest {
|
||||
onPositiveButtonWasCalled = true
|
||||
}
|
||||
request.onConfirm()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(onPositiveButtonWasCalled)
|
||||
whenever(geckoPrompt.isComplete).thenReturn(true)
|
||||
|
||||
onPositiveButtonWasCalled = false
|
||||
request.onConfirm()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(onPositiveButtonWasCalled)
|
||||
|
||||
@@ -1281,11 +1339,13 @@ class GeckoPromptDelegateTest {
|
||||
onNegativeButtonWasCalled = true
|
||||
}
|
||||
request.onDismiss()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(onNegativeButtonWasCalled)
|
||||
whenever(geckoPrompt.isComplete).thenReturn(true)
|
||||
|
||||
onNegativeButtonWasCalled = false
|
||||
request.onDismiss()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(onNegativeButtonWasCalled)
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ package mozilla.components.browser.icons
|
||||
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.widget.ImageView
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import kotlinx.coroutines.CompletableDeferred
|
||||
@@ -35,6 +36,7 @@ import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.never
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.verify
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
import java.io.OutputStream
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
@@ -223,6 +225,7 @@ class BrowserIconsTest {
|
||||
verify(view, never()).setImageBitmap(any())
|
||||
|
||||
result.complete(mockedIcon)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
job.joinBlocking()
|
||||
|
||||
verify(view).setImageBitmap(mockedBitmap)
|
||||
@@ -247,6 +250,7 @@ class BrowserIconsTest {
|
||||
verify(view).setImageDrawable(placeholder)
|
||||
|
||||
result.cancel()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
job.joinBlocking()
|
||||
|
||||
verify(view).setImageDrawable(error)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
package mozilla.components.feature.accounts.push
|
||||
|
||||
import android.os.Looper.getMainLooper
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import mozilla.components.concept.base.crash.CrashReporting
|
||||
@@ -28,6 +29,7 @@ import org.mockito.Mockito.reset
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.Mockito.verifyNoMoreInteractions
|
||||
import org.robolectric.RobolectricTestRunner
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(RobolectricTestRunner::class)
|
||||
class AccountObserverTest {
|
||||
@@ -63,12 +65,14 @@ class AccountObserverTest {
|
||||
`when`(lifecycleOwner.lifecycle).thenReturn(lifecycle)
|
||||
|
||||
observer.onAuthenticated(account, AuthType.Existing)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(constellation).registerDeviceObserver(any(), eq(lifecycleOwner), anyBoolean())
|
||||
|
||||
reset(constellation)
|
||||
|
||||
observer.onAuthenticated(account, AuthType.Recovered)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(constellation).registerDeviceObserver(any(), eq(lifecycleOwner), anyBoolean())
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
package mozilla.components.feature.accounts
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Looper.getMainLooper
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import kotlinx.coroutines.CompletableDeferred
|
||||
import kotlinx.coroutines.runBlocking
|
||||
@@ -34,6 +35,7 @@ import org.mockito.ArgumentMatchers.anyString
|
||||
import org.mockito.Mockito.`when`
|
||||
import org.mockito.Mockito.never
|
||||
import org.mockito.Mockito.verify
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
import org.robolectric.annotation.Config
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
|
||||
@@ -183,6 +185,9 @@ class FirefoxAccountsAuthFeatureTest {
|
||||
RequestInterceptor.InterceptionResponse.Url(redirectUrl),
|
||||
feature.interceptor.onLoadRequest(mock(), "https://accounts.firefox.com/oauth/success/123/?code=testCode1&state=testState1", null, false, false, false, false, false)
|
||||
)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(manager).finishAuthentication(
|
||||
FxaAuthData(authType = AuthType.OtherExternal(null), code = "testCode1", state = "testState1")
|
||||
)
|
||||
@@ -192,6 +197,9 @@ class FirefoxAccountsAuthFeatureTest {
|
||||
RequestInterceptor.InterceptionResponse.Url(redirectUrl),
|
||||
feature.interceptor.onLoadRequest(mock(), "https://accounts.firefox.com/oauth/success/123/?code=testCode2&state=testState2&action=signin", null, false, false, false, false, false)
|
||||
)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(manager).finishAuthentication(
|
||||
FxaAuthData(authType = AuthType.Signin, code = "testCode2", state = "testState2")
|
||||
)
|
||||
@@ -201,6 +209,9 @@ class FirefoxAccountsAuthFeatureTest {
|
||||
RequestInterceptor.InterceptionResponse.Url(redirectUrl),
|
||||
feature.interceptor.onLoadRequest(mock(), "https://accounts.firefox.com/oauth/success/123/?code=testCode3&state=testState3&action=signup", null, false, false, false, false, false)
|
||||
)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(manager).finishAuthentication(
|
||||
FxaAuthData(authType = AuthType.Signup, code = "testCode3", state = "testState3")
|
||||
)
|
||||
@@ -210,6 +221,9 @@ class FirefoxAccountsAuthFeatureTest {
|
||||
RequestInterceptor.InterceptionResponse.Url(redirectUrl),
|
||||
feature.interceptor.onLoadRequest(mock(), "https://accounts.firefox.com/oauth/success/123/?code=testCode4&state=testState4&action=pairing", null, false, false, false, false, false)
|
||||
)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(manager).finishAuthentication(
|
||||
FxaAuthData(authType = AuthType.Pairing, code = "testCode4", state = "testState4")
|
||||
)
|
||||
@@ -219,6 +233,9 @@ class FirefoxAccountsAuthFeatureTest {
|
||||
RequestInterceptor.InterceptionResponse.Url(redirectUrl),
|
||||
feature.interceptor.onLoadRequest(mock(), "https://accounts.firefox.com/oauth/success/123/?code=testCode5&state=testState5&action=someNewActionType", null, false, false, false, false, false)
|
||||
)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(manager).finishAuthentication(
|
||||
FxaAuthData(authType = AuthType.OtherExternal("someNewActionType"), code = "testCode5", state = "testState5")
|
||||
)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
package mozilla.components.feature.accounts
|
||||
|
||||
import android.os.Looper.getMainLooper
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import mozilla.components.browser.state.state.BrowserState
|
||||
@@ -42,6 +43,7 @@ import org.mockito.Mockito.never
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.times
|
||||
import org.mockito.Mockito.verify
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class FxaWebChannelFeatureTest {
|
||||
@@ -165,6 +167,8 @@ class FxaWebChannelFeatureTest {
|
||||
webchannelFeature.extensionController = controller
|
||||
|
||||
webchannelFeature.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(controller).registerContentMessageHandler(eq(engineSession), any(), any())
|
||||
}
|
||||
|
||||
@@ -178,6 +182,7 @@ class FxaWebChannelFeatureTest {
|
||||
val webchannelFeature = prepareFeatureForTest(ext, port, engineSession, expectedEngines)
|
||||
whenever(port.senderUrl()).thenReturn("https://bar.foo/email")
|
||||
webchannelFeature.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(ext).registerContentMessageHandler(
|
||||
eq(engineSession),
|
||||
@@ -213,6 +218,7 @@ class FxaWebChannelFeatureTest {
|
||||
setOf(FxaCapability.CHOOSE_WHAT_TO_SYNC)
|
||||
)
|
||||
webchannelFeature.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(ext).registerContentMessageHandler(
|
||||
eq(engineSession),
|
||||
@@ -246,6 +252,7 @@ class FxaWebChannelFeatureTest {
|
||||
val responseToTheWebChannel = argumentCaptor<JSONObject>()
|
||||
val webchannelFeature = prepareFeatureForTest(ext, port, engineSession, expectedEngines)
|
||||
webchannelFeature.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(ext).registerContentMessageHandler(
|
||||
eq(engineSession),
|
||||
@@ -285,6 +292,7 @@ class FxaWebChannelFeatureTest {
|
||||
val responseToTheWebChannel = argumentCaptor<JSONObject>()
|
||||
val webchannelFeature = prepareFeatureForTest(ext, port, engineSession, expectedEngines)
|
||||
webchannelFeature.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(ext).registerContentMessageHandler(
|
||||
eq(engineSession),
|
||||
@@ -337,6 +345,7 @@ class FxaWebChannelFeatureTest {
|
||||
|
||||
val webchannelFeature = prepareFeatureForTest(ext, port, engineSession, expectedEngines, emptySet(), accountManager)
|
||||
webchannelFeature.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(ext).registerContentMessageHandler(
|
||||
eq(engineSession),
|
||||
@@ -392,6 +401,7 @@ class FxaWebChannelFeatureTest {
|
||||
|
||||
val webchannelFeature = prepareFeatureForTest(ext, port, engineSession, expectedEngines, emptySet(), accountManager)
|
||||
webchannelFeature.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(ext).registerContentMessageHandler(
|
||||
eq(engineSession),
|
||||
@@ -446,6 +456,8 @@ class FxaWebChannelFeatureTest {
|
||||
|
||||
val webchannelFeature = prepareFeatureForTest(ext, port, engineSession, expectedEngines, emptySet(), accountManager)
|
||||
webchannelFeature.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(ext).registerContentMessageHandler(
|
||||
eq(engineSession),
|
||||
eq(FxaWebChannelFeature.WEB_CHANNEL_MESSAGING_ID),
|
||||
@@ -492,6 +504,7 @@ class FxaWebChannelFeatureTest {
|
||||
|
||||
val webchannelFeature = prepareFeatureForTest(ext, port, engineSession, expectedEngines, emptySet(), accountManager)
|
||||
webchannelFeature.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(ext).registerContentMessageHandler(
|
||||
eq(engineSession),
|
||||
@@ -538,6 +551,7 @@ class FxaWebChannelFeatureTest {
|
||||
|
||||
val webchannelFeature = prepareFeatureForTest(ext, port, engineSession, null, emptySet(), accountManager)
|
||||
webchannelFeature.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(ext).registerContentMessageHandler(
|
||||
eq(engineSession),
|
||||
@@ -578,6 +592,7 @@ class FxaWebChannelFeatureTest {
|
||||
|
||||
val webchannelFeature = prepareFeatureForTest(ext, port, engineSession, null, emptySet(), accountManager)
|
||||
webchannelFeature.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(ext).registerContentMessageHandler(
|
||||
eq(engineSession),
|
||||
@@ -610,6 +625,7 @@ class FxaWebChannelFeatureTest {
|
||||
|
||||
val webchannelFeature = prepareFeatureForTest(ext, port, engineSession, null, emptySet(), accountManager)
|
||||
webchannelFeature.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(ext).registerContentMessageHandler(
|
||||
eq(engineSession),
|
||||
@@ -644,6 +660,7 @@ class FxaWebChannelFeatureTest {
|
||||
|
||||
val webchannelFeature = prepareFeatureForTest(ext, port, engineSession, expectedEngines, emptySet(), accountManager)
|
||||
webchannelFeature.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(ext).registerContentMessageHandler(
|
||||
eq(engineSession),
|
||||
@@ -757,6 +774,8 @@ class FxaWebChannelFeatureTest {
|
||||
state = state,
|
||||
declinedEngines = declined ?: emptySet()
|
||||
)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(accountManager).finishAuthentication(expectedAuthData)
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
package mozilla.components.feature.app.links
|
||||
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.widget.Button
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.fragment.app.FragmentTransaction
|
||||
@@ -17,6 +18,7 @@ import org.junit.runner.RunWith
|
||||
import org.mockito.Mockito.doNothing
|
||||
import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.spy
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class SimpleRedirectDialogFragmentTest {
|
||||
@@ -46,6 +48,8 @@ class SimpleRedirectDialogFragmentTest {
|
||||
|
||||
val confirmButton = dialog.findViewById<Button>(android.R.id.button1)
|
||||
confirmButton?.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(onConfirmCalled)
|
||||
assertFalse(onCancelCalled)
|
||||
}
|
||||
@@ -74,6 +78,8 @@ class SimpleRedirectDialogFragmentTest {
|
||||
|
||||
val confirmButton = dialog.findViewById<Button>(android.R.id.button2)
|
||||
confirmButton?.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(onConfirmCalled)
|
||||
assertTrue(onCancelCalled)
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import android.app.DownloadManager.ACTION_DOWNLOAD_COMPLETE
|
||||
import android.app.DownloadManager.Request
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Looper.getMainLooper
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import mozilla.components.browser.state.state.content.DownloadState
|
||||
import mozilla.components.browser.state.store.BrowserStore
|
||||
@@ -29,6 +30,7 @@ import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.Mockito.verifyNoInteractions
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class AndroidDownloadManagerTest {
|
||||
@@ -67,6 +69,7 @@ class AndroidDownloadManagerTest {
|
||||
assertEquals(download.copy(id = id), store.state.downloads[id])
|
||||
|
||||
notifyDownloadCompleted(id)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(downloadCompleted)
|
||||
}
|
||||
|
||||
@@ -78,13 +81,14 @@ class AndroidDownloadManagerTest {
|
||||
grantPermissions()
|
||||
|
||||
val id = downloadManager.download(download)!!
|
||||
store.waitUntilIdle()
|
||||
notifyDownloadFailed(id)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(downloadStopped)
|
||||
|
||||
downloadStopped = false
|
||||
downloadManager.tryAgain(id)
|
||||
notifyDownloadCompleted(id)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(downloadStopped)
|
||||
}
|
||||
|
||||
@@ -131,7 +135,6 @@ class AndroidDownloadManagerTest {
|
||||
downloadWithFileName,
|
||||
cookie = "yummy_cookie=choco"
|
||||
)!!
|
||||
store.waitUntilIdle()
|
||||
|
||||
downloadManager.onDownloadStopped = { _, _, status ->
|
||||
downloadStatus = status
|
||||
@@ -139,6 +142,7 @@ class AndroidDownloadManagerTest {
|
||||
}
|
||||
|
||||
notifyDownloadCompleted(id)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(downloadCompleted)
|
||||
assertEquals(DownloadState.Status.COMPLETED, downloadStatus)
|
||||
@@ -162,7 +166,7 @@ class AndroidDownloadManagerTest {
|
||||
assertEquals(downloadWithFileName.copy(id = id), store.state.downloads[id])
|
||||
|
||||
notifyDownloadCompleted(id)
|
||||
store.waitUntilIdle()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertEquals(DownloadState.Status.COMPLETED, downloadStatus)
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import android.app.DownloadManager.EXTRA_DOWNLOAD_ID
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Looper.getMainLooper
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import mozilla.components.browser.state.state.content.DownloadState
|
||||
@@ -35,6 +36,7 @@ import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.never
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.verify
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class FetchDownloadManagerTest {
|
||||
@@ -79,6 +81,8 @@ class FetchDownloadManagerTest {
|
||||
assertEquals(download, store.state.downloads[download.id])
|
||||
|
||||
notifyDownloadCompleted(id)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(downloadStopped)
|
||||
}
|
||||
|
||||
@@ -95,12 +99,15 @@ class FetchDownloadManagerTest {
|
||||
val id = downloadManager.download(download)!!
|
||||
store.waitUntilIdle()
|
||||
notifyDownloadFailed(id)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(downloadStopped)
|
||||
|
||||
downloadStopped = false
|
||||
downloadManager.tryAgain(id)
|
||||
verify(context).startService(any())
|
||||
notifyDownloadCompleted(id)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(downloadStopped)
|
||||
}
|
||||
|
||||
@@ -178,6 +185,8 @@ class FetchDownloadManagerTest {
|
||||
store.waitUntilIdle()
|
||||
|
||||
notifyDownloadCompleted(id)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(downloadStopped)
|
||||
assertEquals(DownloadState.Status.COMPLETED, downloadStatus)
|
||||
}
|
||||
@@ -200,6 +209,8 @@ class FetchDownloadManagerTest {
|
||||
assertEquals(downloadWithFileName, store.state.downloads[downloadWithFileName.id])
|
||||
|
||||
notifyDownloadCompleted(id)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
store.waitUntilIdle()
|
||||
assertEquals(DownloadState.Status.COMPLETED, downloadStatus)
|
||||
}
|
||||
@@ -224,6 +235,7 @@ class FetchDownloadManagerTest {
|
||||
val id = downloadManager.download(downloadWithFileName)!!
|
||||
store.waitUntilIdle()
|
||||
notifyDownloadCompleted(id)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(downloadStopped)
|
||||
assertEquals("5MB.zip", downloadName)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
package mozilla.components.feature.prompts.dialog
|
||||
|
||||
import android.content.DialogInterface.BUTTON_POSITIVE
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.widget.CheckBox
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
@@ -26,6 +27,7 @@ import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.MockitoAnnotations.openMocks
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class AlertDialogFragmentTest {
|
||||
@@ -99,6 +101,7 @@ class AlertDialogFragmentTest {
|
||||
|
||||
val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
|
||||
positiveButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onCancel("sessionId", "uid")
|
||||
}
|
||||
@@ -122,6 +125,7 @@ class AlertDialogFragmentTest {
|
||||
|
||||
val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
|
||||
positiveButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onConfirm("sessionId", "uid", true)
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
package mozilla.components.feature.prompts.dialog
|
||||
|
||||
import android.content.DialogInterface
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.view.View.GONE
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
@@ -21,6 +22,7 @@ import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.MockitoAnnotations.openMocks
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class AuthenticationDialogFragmentTest {
|
||||
@@ -164,6 +166,7 @@ class AuthenticationDialogFragmentTest {
|
||||
|
||||
val positiveButton = (dialog as AlertDialog).getButton(DialogInterface.BUTTON_POSITIVE)
|
||||
positiveButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onConfirm("sessionId", "uid", "username" to "password")
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ package mozilla.components.feature.prompts.dialog
|
||||
|
||||
import android.content.DialogInterface.BUTTON_NEGATIVE
|
||||
import android.content.DialogInterface.BUTTON_POSITIVE
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.os.Parcelable
|
||||
import android.view.LayoutInflater
|
||||
import android.widget.LinearLayout
|
||||
@@ -45,6 +46,7 @@ import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.times
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.MockitoAnnotations.openMocks
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class ChoiceDialogFragmentTest {
|
||||
@@ -318,9 +320,11 @@ class ChoiceDialogFragmentTest {
|
||||
adapter.bindViewHolder(holder, 0)
|
||||
|
||||
holder.itemView.performClick()
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
verify(mockFeature).onConfirm("sessionId", "uid", choices.first())
|
||||
|
||||
dialog.dismiss()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
verify(mockFeature).onCancel("sessionId", "uid")
|
||||
}
|
||||
|
||||
@@ -346,9 +350,13 @@ class ChoiceDialogFragmentTest {
|
||||
adapter.bindViewHolder(holder, 0)
|
||||
|
||||
holder.itemView.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onConfirm("sessionId", "uid", choices.first())
|
||||
|
||||
dialog.dismiss()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onCancel("sessionId", "uid")
|
||||
}
|
||||
|
||||
@@ -378,11 +386,13 @@ class ChoiceDialogFragmentTest {
|
||||
|
||||
val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
|
||||
positiveButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onConfirm("sessionId", "uid", fragment.mapSelectChoice.keys.toTypedArray())
|
||||
|
||||
val negativeButton = dialog.getButton(BUTTON_NEGATIVE)
|
||||
negativeButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature, times(2)).onCancel("sessionId", "uid")
|
||||
}
|
||||
@@ -416,6 +426,7 @@ class ChoiceDialogFragmentTest {
|
||||
|
||||
val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
|
||||
positiveButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onConfirm("sessionId", "uid", fragment.mapSelectChoice.keys.toTypedArray())
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
package mozilla.components.feature.prompts.dialog
|
||||
|
||||
import android.content.DialogInterface
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
@@ -23,6 +24,7 @@ import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.MockitoAnnotations.openMocks
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class ColorPickerDialogFragmentTest {
|
||||
@@ -70,6 +72,7 @@ class ColorPickerDialogFragmentTest {
|
||||
|
||||
val positiveButton = (dialog as AlertDialog).getButton(DialogInterface.BUTTON_POSITIVE)
|
||||
positiveButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onConfirm("sessionId", "uid", "#4f4663")
|
||||
}
|
||||
@@ -90,6 +93,7 @@ class ColorPickerDialogFragmentTest {
|
||||
|
||||
val negativeButton = (dialog as AlertDialog).getButton(DialogInterface.BUTTON_NEGATIVE)
|
||||
negativeButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onCancel("sessionId", "uid")
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
package mozilla.components.feature.prompts.dialog
|
||||
|
||||
import android.content.DialogInterface
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
@@ -21,6 +22,7 @@ import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.MockitoAnnotations.openMocks
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class ConfirmDialogFragmentTest {
|
||||
@@ -81,6 +83,7 @@ class ConfirmDialogFragmentTest {
|
||||
|
||||
val positiveButton = (dialog as AlertDialog).getButton(DialogInterface.BUTTON_POSITIVE)
|
||||
positiveButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onConfirm("sessionId", "uid", false)
|
||||
}
|
||||
@@ -97,6 +100,7 @@ class ConfirmDialogFragmentTest {
|
||||
|
||||
val negativeButton = (dialog as AlertDialog).getButton(DialogInterface.BUTTON_NEGATIVE)
|
||||
negativeButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onCancel("sessionId", "uid", false)
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ package mozilla.components.feature.prompts.dialog
|
||||
|
||||
import android.content.DialogInterface
|
||||
import android.content.DialogInterface.BUTTON_POSITIVE
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.widget.CheckBox
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
@@ -26,6 +27,7 @@ import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.MockitoAnnotations.openMocks
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class MultiButtonDialogFragmentTest {
|
||||
@@ -134,6 +136,7 @@ class MultiButtonDialogFragmentTest {
|
||||
|
||||
val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
|
||||
positiveButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onConfirm("sessionId", "uid", false to MultiButtonDialogFragment.ButtonType.POSITIVE)
|
||||
}
|
||||
@@ -162,6 +165,7 @@ class MultiButtonDialogFragmentTest {
|
||||
|
||||
val negativeButton = (dialog as AlertDialog).getButton(DialogInterface.BUTTON_NEGATIVE)
|
||||
negativeButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onConfirm("sessionId", "uid", false to MultiButtonDialogFragment.ButtonType.NEGATIVE)
|
||||
}
|
||||
@@ -190,6 +194,7 @@ class MultiButtonDialogFragmentTest {
|
||||
|
||||
val neutralButton = (dialog as AlertDialog).getButton(DialogInterface.BUTTON_NEUTRAL)
|
||||
neutralButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onConfirm("sessionId", "uid", false to MultiButtonDialogFragment.ButtonType.NEUTRAL)
|
||||
}
|
||||
@@ -222,6 +227,7 @@ class MultiButtonDialogFragmentTest {
|
||||
|
||||
val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
|
||||
positiveButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onConfirm("sessionId", "uid", true to MultiButtonDialogFragment.ButtonType.POSITIVE)
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
package mozilla.components.feature.prompts.dialog
|
||||
|
||||
import android.content.DialogInterface.BUTTON_POSITIVE
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.widget.CheckBox
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
@@ -24,6 +25,7 @@ import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.MockitoAnnotations
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class TextPromptDialogFragmentTest {
|
||||
@@ -107,6 +109,7 @@ class TextPromptDialogFragmentTest {
|
||||
|
||||
val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
|
||||
positiveButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onConfirm("sessionId", "uid", false to "defaultValue")
|
||||
}
|
||||
@@ -131,6 +134,7 @@ class TextPromptDialogFragmentTest {
|
||||
|
||||
val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
|
||||
positiveButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onConfirm("sessionId", "uid", true to "defaultValue")
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import android.app.TimePickerDialog
|
||||
import android.content.DialogInterface.BUTTON_NEUTRAL
|
||||
import android.content.DialogInterface.BUTTON_POSITIVE
|
||||
import android.os.Build.VERSION_CODES.LOLLIPOP
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.widget.DatePicker
|
||||
import android.widget.NumberPicker
|
||||
import android.widget.TimePicker
|
||||
@@ -37,6 +38,7 @@ import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.MockitoAnnotations.openMocks
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
import org.robolectric.annotation.Config
|
||||
import java.util.Calendar
|
||||
import java.util.Date
|
||||
@@ -90,10 +92,14 @@ class TimePickerDialogFragmentTest {
|
||||
|
||||
val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
|
||||
positiveButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onConfirm(eq("sessionId"), eq("uid"), any())
|
||||
|
||||
val neutralButton = dialog.getButton(BUTTON_NEUTRAL)
|
||||
neutralButton.performClick()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockFeature).onClear("sessionId", "uid")
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ package mozilla.components.feature.pwa.feature
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.pm.ActivityInfo
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.view.View
|
||||
import android.view.Window
|
||||
import android.view.WindowManager
|
||||
@@ -24,6 +25,7 @@ import org.mockito.Mockito.`when`
|
||||
import org.mockito.Mockito.never
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.MockitoAnnotations.openMocks
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class WebAppActivityFeatureTest {
|
||||
@@ -83,6 +85,7 @@ class WebAppActivityFeatureTest {
|
||||
`when`(icons.loadIcon(any())).thenReturn(CompletableDeferred(icon))
|
||||
|
||||
WebAppActivityFeature(activity, icons, manifest).onResume(mock())
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(activity).setTaskDescription(any())
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import android.hardware.camera2.CameraManager
|
||||
import android.hardware.camera2.params.SessionConfiguration
|
||||
import android.media.Image
|
||||
import android.os.Build
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.util.Size
|
||||
import android.view.Display
|
||||
import android.view.Surface
|
||||
@@ -49,6 +50,7 @@ import org.mockito.Mockito.never
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.times
|
||||
import org.mockito.Mockito.verify
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
import org.robolectric.annotation.Config
|
||||
import java.nio.ByteBuffer
|
||||
|
||||
@@ -61,6 +63,7 @@ class QrFragmentTest {
|
||||
val qrFragment = spy(QrFragment.newInstance(scanCompleteListener))
|
||||
|
||||
qrFragment.scanCompleteListener?.onScanComplete("result")
|
||||
shadowOf(getMainLooper()).idle()
|
||||
verify(scanCompleteListener).onScanComplete("result")
|
||||
}
|
||||
|
||||
@@ -203,6 +206,7 @@ class QrFragmentTest {
|
||||
QrFragment.qrState = QrFragment.STATE_DECODE_PROGRESS
|
||||
|
||||
qrFragment.tryScanningSource(source)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(listener).onScanComplete(eq("qrcode-result"))
|
||||
assertEquals(QrFragment.STATE_QRCODE_EXIST, QrFragment.qrState)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
package mozilla.components.feature.session
|
||||
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.view.View
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import com.google.android.material.appbar.AppBarLayout
|
||||
@@ -21,6 +22,7 @@ import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mockito.Mockito.any
|
||||
import org.mockito.Mockito.verify
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class CoordinateScrollingFeatureTest {
|
||||
@@ -51,6 +53,7 @@ class CoordinateScrollingFeatureTest {
|
||||
@Test
|
||||
fun `when session loading StateChanged and engine canScrollVertically is false must remove scrollFlags`() {
|
||||
scrollFeature.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
store.dispatch(ContentAction.UpdateLoadingStateAction("mozilla", true)).joinBlocking()
|
||||
|
||||
@@ -63,6 +66,7 @@ class CoordinateScrollingFeatureTest {
|
||||
whenever(mockEngineView.canScrollVerticallyDown()).thenReturn(true)
|
||||
|
||||
scrollFeature.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
store.dispatch(ContentAction.UpdateLoadingStateAction("mozilla", true)).joinBlocking()
|
||||
|
||||
@@ -75,6 +79,7 @@ class CoordinateScrollingFeatureTest {
|
||||
whenever(mockEngineView.canScrollVerticallyDown()).thenReturn(true)
|
||||
scrollFeature = CoordinateScrollingFeature(store, mockEngineView, mockView, 12)
|
||||
scrollFeature.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
store.dispatch(ContentAction.UpdateLoadingStateAction("mozilla", true)).joinBlocking()
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
package mozilla.components.feature.sitepermissions
|
||||
|
||||
import android.os.Looper.getMainLooper
|
||||
import androidx.paging.DataSource
|
||||
import androidx.room.DatabaseConfiguration
|
||||
import androidx.room.InvalidationTracker
|
||||
@@ -38,6 +39,7 @@ import org.junit.runner.RunWith
|
||||
import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.verify
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class OnDiskSitePermissionsStorageTest {
|
||||
@@ -71,6 +73,7 @@ class OnDiskSitePermissionsStorageTest {
|
||||
val sitePermissions = createNewSitePermission()
|
||||
|
||||
storage.update(sitePermissions)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockDAO).update(any())
|
||||
verify(mockDataCleanable).clearData(BrowsingData.select(BrowsingData.PERMISSIONS), sitePermissions.origin)
|
||||
@@ -108,6 +111,8 @@ class OnDiskSitePermissionsStorageTest {
|
||||
|
||||
storage.remove(sitePermissions)
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockDAO).deleteSitePermissions(any())
|
||||
verify(mockDataCleanable).clearData(BrowsingData.select(BrowsingData.PERMISSIONS), sitePermissions.origin)
|
||||
}
|
||||
@@ -115,6 +120,7 @@ class OnDiskSitePermissionsStorageTest {
|
||||
@Test
|
||||
fun `remove all SitePermissions`() = runBlockingTest {
|
||||
storage.removeAll()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(mockDAO).deleteAllSitePermissions()
|
||||
verify(mockDataCleanable).clearData(BrowsingData.select(BrowsingData.PERMISSIONS))
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
package mozilla.components.feature.syncedtabs.presenter
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Looper.getMainLooper
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import kotlinx.coroutines.test.runBlockingTest
|
||||
@@ -20,6 +21,7 @@ import org.junit.runner.RunWith
|
||||
import org.mockito.Mockito.`when`
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.Mockito.verifyNoInteractions
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class DefaultPresenterTest {
|
||||
@@ -135,6 +137,7 @@ class DefaultPresenterTest {
|
||||
)
|
||||
|
||||
presenter.accountObserver.onLoggedOut()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(view).onError(ErrorType.SYNC_UNAVAILABLE)
|
||||
}
|
||||
@@ -150,6 +153,7 @@ class DefaultPresenterTest {
|
||||
)
|
||||
|
||||
presenter.accountObserver.onAuthenticated(mock(), mock())
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(controller).refreshSyncedTabs()
|
||||
}
|
||||
@@ -165,6 +169,7 @@ class DefaultPresenterTest {
|
||||
)
|
||||
|
||||
presenter.accountObserver.onAuthenticationProblems()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(view).onError(ErrorType.SYNC_NEEDS_REAUTHENTICATION)
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
package mozilla.components.feature.toolbar
|
||||
|
||||
import android.os.Looper.getMainLooper
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import kotlinx.coroutines.isActive
|
||||
import mozilla.components.browser.state.action.ContentAction
|
||||
@@ -24,6 +25,7 @@ import org.mockito.Mockito.never
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.times
|
||||
import org.mockito.Mockito.verify
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class ToolbarBehaviorControllerTest {
|
||||
@@ -45,6 +47,7 @@ class ToolbarBehaviorControllerTest {
|
||||
assertNull(controller.updatesScope)
|
||||
|
||||
controller.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertNotNull(controller.updatesScope)
|
||||
verify(customTabContent, times(3)).loading
|
||||
@@ -68,6 +71,7 @@ class ToolbarBehaviorControllerTest {
|
||||
assertNull(controller.updatesScope)
|
||||
|
||||
controller.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertNotNull(controller.updatesScope)
|
||||
verify(customTabContent, never()).loading
|
||||
@@ -86,6 +90,7 @@ class ToolbarBehaviorControllerTest {
|
||||
val controller = spy(ToolbarBehaviorController(mock(), store))
|
||||
|
||||
controller.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(controller).disableScrolling()
|
||||
}
|
||||
@@ -102,6 +107,7 @@ class ToolbarBehaviorControllerTest {
|
||||
val controller = spy(ToolbarBehaviorController(mock(), store))
|
||||
|
||||
controller.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(controller).enableScrolling()
|
||||
}
|
||||
@@ -111,6 +117,7 @@ class ToolbarBehaviorControllerTest {
|
||||
val controller = spy(ToolbarBehaviorController(mock(), BrowserStore(BrowserState())))
|
||||
|
||||
controller.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(controller.updatesScope!!.isActive)
|
||||
|
||||
controller.stop()
|
||||
@@ -151,6 +158,7 @@ class ToolbarBehaviorControllerTest {
|
||||
val controller = spy(ToolbarBehaviorController(mock(), store))
|
||||
|
||||
controller.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(controller).expandToolbar()
|
||||
verify(store).dispatch(ContentAction.UpdateExpandedToolbarStateAction("123", false))
|
||||
@@ -168,6 +176,7 @@ class ToolbarBehaviorControllerTest {
|
||||
val controller = spy(ToolbarBehaviorController(mock(), store))
|
||||
|
||||
controller.start()
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(controller, never()).expandToolbar()
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
package mozilla.components.lib.state.ext
|
||||
|
||||
import android.app.Activity
|
||||
import android.os.Looper
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import androidx.lifecycle.Lifecycle
|
||||
@@ -35,6 +37,7 @@ import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.robolectric.Robolectric
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
import java.util.concurrent.CountDownLatch
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
@@ -485,6 +488,7 @@ class StoreExtensionsKtTest {
|
||||
val activity = Robolectric.buildActivity(Activity::class.java).create().get()
|
||||
val view = View(testContext)
|
||||
activity.windowManager.addView(view, WindowManager.LayoutParams(100, 100))
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(view.isAttachedToWindow)
|
||||
|
||||
@@ -502,6 +506,7 @@ class StoreExtensionsKtTest {
|
||||
assertTrue(stateObserved)
|
||||
|
||||
activity.windowManager.removeView(view)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertFalse(view.isAttachedToWindow)
|
||||
|
||||
stateObserved = false
|
||||
@@ -530,6 +535,7 @@ class StoreExtensionsKtTest {
|
||||
assertFalse(stateObserved)
|
||||
|
||||
activity.windowManager.addView(view, WindowManager.LayoutParams(100, 100))
|
||||
shadowOf(Looper.getMainLooper()).idle()
|
||||
assertTrue(view.isAttachedToWindow)
|
||||
assertTrue(stateObserved)
|
||||
|
||||
@@ -542,6 +548,8 @@ class StoreExtensionsKtTest {
|
||||
assertTrue(stateObserved)
|
||||
|
||||
activity.windowManager.removeView(view)
|
||||
shadowOf(Looper.getMainLooper()).idle()
|
||||
|
||||
assertFalse(view.isAttachedToWindow)
|
||||
|
||||
stateObserved = false
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
package mozilla.components.support.base.dialog
|
||||
|
||||
import android.content.DialogInterface.BUTTON_POSITIVE
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
@@ -18,6 +19,7 @@ import org.mockito.Mockito.doNothing
|
||||
import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.verify
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class DeniedPermissionDialogFragmentTest {
|
||||
@@ -58,6 +60,8 @@ class DeniedPermissionDialogFragmentTest {
|
||||
val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
|
||||
positiveButton.performClick()
|
||||
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(fragment).openSettingsPage()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ package mozilla.components.support.base.feature
|
||||
import android.app.Activity
|
||||
import android.app.Activity.RESULT_OK
|
||||
import android.content.Intent
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import androidx.lifecycle.Lifecycle
|
||||
@@ -26,6 +27,7 @@ import org.mockito.Mockito.reset
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.verify
|
||||
import org.robolectric.Robolectric
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class ViewBoundFeatureWrapperTest {
|
||||
@@ -161,6 +163,7 @@ class ViewBoundFeatureWrapperTest {
|
||||
val activity = Robolectric.buildActivity(Activity::class.java).create().get()
|
||||
val view = View(activity)
|
||||
activity.windowManager.addView(view, WindowManager.LayoutParams(100, 100))
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(view.isAttachedToWindow)
|
||||
|
||||
@@ -175,6 +178,7 @@ class ViewBoundFeatureWrapperTest {
|
||||
verify(wrapper, never()).clear()
|
||||
|
||||
activity.windowManager.removeView(view)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
verify(wrapper).clear()
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
package mozilla.components.support.base.observer
|
||||
|
||||
import android.app.Activity
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import androidx.lifecycle.Lifecycle
|
||||
@@ -25,6 +26,7 @@ import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.times
|
||||
import org.mockito.Mockito.verify
|
||||
import org.robolectric.Robolectric
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class ObserverRegistryTest {
|
||||
@@ -227,6 +229,7 @@ class ObserverRegistryTest {
|
||||
registry.register(observer3, MockedLifecycleOwner(Lifecycle.State.CREATED))
|
||||
registry.register(observer4, view)
|
||||
activity.windowManager.addView(view, WindowManager.LayoutParams(100, 100))
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(observer1.notified)
|
||||
assertFalse(observer2.notified)
|
||||
@@ -352,6 +355,7 @@ class ObserverRegistryTest {
|
||||
assertFalse(observer.notified)
|
||||
|
||||
activity.windowManager.addView(view, WindowManager.LayoutParams(100, 100))
|
||||
shadowOf(getMainLooper()).idle()
|
||||
assertTrue(view.isAttachedToWindow)
|
||||
|
||||
registry.notifyObservers {
|
||||
@@ -366,6 +370,7 @@ class ObserverRegistryTest {
|
||||
val activity = Robolectric.buildActivity(Activity::class.java).create().get()
|
||||
val view = View(testContext)
|
||||
activity.windowManager.addView(view, WindowManager.LayoutParams(100, 100))
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
val registry = ObserverRegistry<TestObserver>()
|
||||
val observer = TestObserver()
|
||||
@@ -385,6 +390,8 @@ class ObserverRegistryTest {
|
||||
observer.notified = false
|
||||
|
||||
activity.windowManager.removeView(view)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(view.isAttachedToWindow)
|
||||
|
||||
registry.notifyObservers {
|
||||
|
||||
@@ -7,6 +7,7 @@ package mozilla.components.support.ktx.android.view
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.os.Build
|
||||
import android.os.Looper.getMainLooper
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
@@ -37,6 +38,7 @@ import org.mockito.Mockito.never
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.verify
|
||||
import org.robolectric.Robolectric
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
import org.robolectric.annotation.Config
|
||||
import org.robolectric.shadows.ShadowLooper
|
||||
import java.util.concurrent.CountDownLatch
|
||||
@@ -148,6 +150,7 @@ class ViewTest {
|
||||
val activity = Robolectric.buildActivity(Activity::class.java).create().get()
|
||||
val view = View(testContext)
|
||||
activity.windowManager.addView(view, WindowManager.LayoutParams(100, 100))
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertTrue(view.isAttachedToWindow)
|
||||
|
||||
@@ -169,6 +172,7 @@ class ViewTest {
|
||||
val activity = Robolectric.buildActivity(Activity::class.java).create().get()
|
||||
val view = View(testContext)
|
||||
activity.windowManager.addView(view, WindowManager.LayoutParams(100, 100))
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
val scope = view.toScope()
|
||||
|
||||
@@ -176,6 +180,7 @@ class ViewTest {
|
||||
assertTrue(scope.isActive)
|
||||
|
||||
activity.windowManager.removeView(view)
|
||||
shadowOf(getMainLooper()).idle()
|
||||
|
||||
assertFalse(view.isAttachedToWindow)
|
||||
assertFalse(scope.isActive)
|
||||
|
||||
Reference in New Issue
Block a user