commit 290aae21ed299c8d9c294270294f0a6902fa6ac6
parent c6acc0cb971f8d0c32f65a573f12b5c5a6a0cffc
Author: mcarare <48995920+mcarare@users.noreply.github.com>
Date: Mon, 8 Dec 2025 11:10:37 +0000
Bug 2004366 - Refactor SessionPrioritizationMiddlewareTest to use StandardTestDispatcher. r=android-reviewers,giorga
This patch replaces the usage of `MainCoroutineRule` and `runTestOnMain` with `StandardTestDispatcher` and `runTest`.
Differential Revision: https://phabricator.services.mozilla.com/D275417
Diffstat:
1 file changed, 34 insertions(+), 23 deletions(-)
diff --git a/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/SessionPrioritizationMiddlewareTest.kt b/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/SessionPrioritizationMiddlewareTest.kt
@@ -4,6 +4,8 @@
package mozilla.components.browser.state.engine.middleware
+import kotlinx.coroutines.test.StandardTestDispatcher
+import kotlinx.coroutines.test.runTest
import mozilla.components.browser.state.action.AppLifecycleAction
import mozilla.components.browser.state.action.BrowserAction
import mozilla.components.browser.state.action.ContentAction
@@ -18,23 +20,18 @@ import mozilla.components.concept.engine.EngineSession.SessionPriority.HIGH
import mozilla.components.support.test.any
import mozilla.components.support.test.middleware.CaptureActionsMiddleware
import mozilla.components.support.test.mock
-import mozilla.components.support.test.rule.MainCoroutineRule
-import mozilla.components.support.test.rule.runTestOnMain
import org.junit.Assert.assertEquals
-import org.junit.Rule
import org.junit.Test
import org.mockito.Mockito.clearInvocations
import org.mockito.Mockito.never
import org.mockito.Mockito.verify
class SessionPrioritizationMiddlewareTest {
- @get:Rule
- val coroutinesTestRule = MainCoroutineRule()
- private val dispatcher = coroutinesTestRule.testDispatcher
+ private val testDispatcher = StandardTestDispatcher()
@Test
- fun `GIVEN a linked session WHEN UnlinkEngineSessionAction THEN set the DEFAULT priority to the unlinked tab`() {
- val middleware = SessionPrioritizationMiddleware()
+ fun `GIVEN a linked session WHEN UnlinkEngineSessionAction THEN set the DEFAULT priority to the unlinked tab`() = runTest(testDispatcher) {
+ val middleware = SessionPrioritizationMiddleware(mainScope = this, waitScope = this)
val store = BrowserStore(
initialState = BrowserState(
tabs = listOf(
@@ -53,8 +50,8 @@ class SessionPrioritizationMiddlewareTest {
}
@Test
- fun `GIVEN a linked session WHEN CheckForFormDataAction THEN update the selected linked tab priority to DEFAULT if there is no form data and HIGH when there is form data`() = runTestOnMain {
- val middleware = SessionPrioritizationMiddleware(updatePriorityAfterMillis = 0, waitScope = coroutinesTestRule.scope)
+ fun `GIVEN a linked session WHEN CheckForFormDataAction THEN update the selected linked tab priority to DEFAULT if there is no form data and HIGH when there is form data`() = runTest(testDispatcher) {
+ val middleware = SessionPrioritizationMiddleware(updatePriorityAfterMillis = 0, mainScope = this, waitScope = this)
val capture = CaptureActionsMiddleware<BrowserState, BrowserAction>()
val store = BrowserStore(
initialState = BrowserState(
@@ -73,14 +70,14 @@ class SessionPrioritizationMiddlewareTest {
store.dispatch(ContentAction.UpdateHasFormDataAction("1", true))
verify(engineSession1).updateSessionPriority(HIGH)
- dispatcher.scheduler.advanceUntilIdle()
+ testDispatcher.scheduler.advanceUntilIdle()
capture.assertLastAction(ContentAction.UpdatePriorityToDefaultAfterTimeoutAction::class) {}
}
@Test
- fun `GIVEN a linked session WHEN CheckForFormDataAction with adjustPriority = false THEN do nothing`() = runTestOnMain {
- val middleware = SessionPrioritizationMiddleware()
+ fun `GIVEN a linked session WHEN CheckForFormDataAction with adjustPriority = false THEN do nothing`() = runTest(testDispatcher) {
+ val middleware = SessionPrioritizationMiddleware(mainScope = this, waitScope = this)
val store = BrowserStore(
initialState = BrowserState(
tabs = listOf(
@@ -98,8 +95,8 @@ class SessionPrioritizationMiddlewareTest {
}
@Test
- fun `GIVEN a previous selected tab WHEN LinkEngineSessionAction THEN update the selected linked tab priority to HIGH`() = runTestOnMain {
- val middleware = SessionPrioritizationMiddleware()
+ fun `GIVEN a previous selected tab WHEN LinkEngineSessionAction THEN update the selected linked tab priority to HIGH`() = runTest(testDispatcher) {
+ val middleware = SessionPrioritizationMiddleware(mainScope = this, waitScope = this)
val store = BrowserStore(
initialState = BrowserState(
tabs = listOf(
@@ -111,18 +108,20 @@ class SessionPrioritizationMiddlewareTest {
val engineSession1: EngineSession = mock()
store.dispatch(TabListAction.SelectTabAction("1"))
+ testDispatcher.scheduler.advanceUntilIdle()
assertEquals("", middleware.previousHighestPriorityTabId)
store.dispatch(EngineAction.LinkEngineSessionAction("1", engineSession1))
+ testDispatcher.scheduler.advanceUntilIdle()
assertEquals("1", middleware.previousHighestPriorityTabId)
verify(engineSession1).updateSessionPriority(HIGH)
}
@Test
- fun `GIVEN a previous selected tab with priority DEFAULT WHEN selecting and linking a new tab THEN update the new one to HIGH and the previous tab based on if it contains form data`() = runTestOnMain {
- val middleware = SessionPrioritizationMiddleware()
+ fun `GIVEN a previous selected tab with priority DEFAULT WHEN selecting and linking a new tab THEN update the new one to HIGH and the previous tab based on if it contains form data`() = runTest(testDispatcher) {
+ val middleware = SessionPrioritizationMiddleware(mainScope = this, waitScope = this)
val store = BrowserStore(
initialState = BrowserState(
tabs = listOf(
@@ -140,15 +139,18 @@ class SessionPrioritizationMiddlewareTest {
assertEquals("", middleware.previousHighestPriorityTabId)
store.dispatch(EngineAction.LinkEngineSessionAction("1", engineSession1))
+ testDispatcher.scheduler.advanceUntilIdle()
assertEquals("1", middleware.previousHighestPriorityTabId)
verify(engineSession1).updateSessionPriority(HIGH)
store.dispatch(TabListAction.SelectTabAction("2"))
+ testDispatcher.scheduler.advanceUntilIdle()
assertEquals("1", middleware.previousHighestPriorityTabId)
store.dispatch(EngineAction.LinkEngineSessionAction("2", engineSession2))
+ testDispatcher.scheduler.advanceUntilIdle()
assertEquals("2", middleware.previousHighestPriorityTabId)
verify(engineSession1).checkForFormData()
@@ -156,8 +158,8 @@ class SessionPrioritizationMiddlewareTest {
}
@Test
- fun `GIVEN no linked tab WHEN SelectTabAction THEN no changes in priority show happened`() {
- val middleware = SessionPrioritizationMiddleware()
+ fun `GIVEN no linked tab WHEN SelectTabAction THEN no changes in priority show happened`() = runTest(testDispatcher) {
+ val middleware = SessionPrioritizationMiddleware(mainScope = this, waitScope = this)
val store = BrowserStore(
initialState = BrowserState(
tabs = listOf(
@@ -174,8 +176,8 @@ class SessionPrioritizationMiddlewareTest {
}
@Test
- fun `GIVEN selected tab WHEN PauseAction THEN checkForFormData should be called with adjustPriority = false`() = runTestOnMain {
- val middleware = SessionPrioritizationMiddleware()
+ fun `GIVEN selected tab WHEN PauseAction THEN checkForFormData should be called with adjustPriority = false`() = runTest(testDispatcher) {
+ val middleware = SessionPrioritizationMiddleware(mainScope = this, waitScope = this)
val store = BrowserStore(
initialState = BrowserState(
tabs = listOf(
@@ -189,15 +191,19 @@ class SessionPrioritizationMiddlewareTest {
store.dispatch(TabListAction.SelectTabAction("1"))
store.dispatch(EngineAction.LinkEngineSessionAction("1", engineSession1))
+ testDispatcher.scheduler.advanceUntilIdle()
+
verify(engineSession1).updateSessionPriority(HIGH)
store.dispatch(AppLifecycleAction.PauseAction)
+ testDispatcher.scheduler.advanceUntilIdle()
+
verify(engineSession1).checkForFormData(adjustPriority = false)
}
@Test
- fun `GIVEN a linked session WHEN UnlinkEngineSessionAction THEN reset previousHighestPriorityTabId`() = runTestOnMain {
- val middleware = SessionPrioritizationMiddleware()
+ fun `GIVEN a linked session WHEN UnlinkEngineSessionAction THEN reset previousHighestPriorityTabId`() = runTest(testDispatcher) {
+ val middleware = SessionPrioritizationMiddleware(mainScope = this, waitScope = this)
val store = BrowserStore(
initialState = BrowserState(
tabs = listOf(
@@ -211,6 +217,9 @@ class SessionPrioritizationMiddlewareTest {
store.dispatch(TabListAction.SelectTabAction("1"))
store.dispatch(EngineAction.LinkEngineSessionAction("1", engineSession1))
+
+ testDispatcher.scheduler.advanceUntilIdle()
+
verify(engineSession1).updateSessionPriority(HIGH)
assertEquals("1", middleware.previousHighestPriorityTabId)
@@ -227,6 +236,8 @@ class SessionPrioritizationMiddlewareTest {
// Previously, `updateSessionPriority` will never be called.
clearInvocations(engineSession1)
store.dispatch(EngineAction.LinkEngineSessionAction("1", engineSession1))
+ testDispatcher.scheduler.advanceUntilIdle()
+
verify(engineSession1).updateSessionPriority(HIGH)
assertEquals("1", middleware.previousHighestPriorityTabId)
}