commit 48f2d9c0aa7c0dd829a2a46834b23165047788a8
parent 5e77cab491db041827c13c9822d774628aee4c5b
Author: mcarare <48995920+mcarare@users.noreply.github.com>
Date: Fri, 21 Nov 2025 11:41:54 +0000
Bug 2001372 - Refactor CreateEngineSessionMiddlewareTest 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/D273550
Diffstat:
1 file changed, 32 insertions(+), 38 deletions(-)
diff --git a/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/CreateEngineSessionMiddlewareTest.kt b/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/CreateEngineSessionMiddlewareTest.kt
@@ -4,6 +4,7 @@
package mozilla.components.browser.state.engine.middleware
+import kotlinx.coroutines.test.runTest
import mozilla.components.browser.state.action.ContentAction
import mozilla.components.browser.state.action.EngineAction
import mozilla.components.browser.state.selector.findCustomTab
@@ -17,12 +18,9 @@ import mozilla.components.concept.engine.EngineSession
import mozilla.components.concept.engine.EngineSessionState
import mozilla.components.support.test.any
import mozilla.components.support.test.mock
-import mozilla.components.support.test.rule.MainCoroutineRule
-import mozilla.components.support.test.rule.runTestOnMain
import mozilla.components.support.test.whenever
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
-import org.junit.Rule
import org.junit.Test
import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.ArgumentMatchers.anyString
@@ -33,18 +31,14 @@ import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
class CreateEngineSessionMiddlewareTest {
- @get:Rule
- val coroutinesTestRule = MainCoroutineRule()
- private val dispatcher = coroutinesTestRule.testDispatcher
- private val scope = coroutinesTestRule.scope
@Test
- fun `creates engine session if needed`() = runTestOnMain {
+ fun `creates engine session if needed`() = runTest {
val engine: Engine = mock()
val engineSession: EngineSession = mock()
whenever(engine.createSession(anyBoolean(), any())).thenReturn(engineSession)
- val middleware = CreateEngineSessionMiddleware(engine, scope)
+ val middleware = CreateEngineSessionMiddleware(engine, this)
val tab = createTab("https://www.mozilla.org", id = "1")
val store = BrowserStore(
initialState = BrowserState(tabs = listOf(tab)),
@@ -53,24 +47,24 @@ class CreateEngineSessionMiddlewareTest {
assertNull(store.state.findTab(tab.id)?.engineState?.engineSession)
store.dispatch(EngineAction.CreateEngineSessionAction(tab.id))
- dispatcher.scheduler.advanceUntilIdle()
+ testScheduler.advanceUntilIdle()
verify(engine, times(1)).createSession(false)
assertEquals(engineSession, store.state.findTab(tab.id)?.engineState?.engineSession)
store.dispatch(EngineAction.CreateEngineSessionAction(tab.id))
- dispatcher.scheduler.advanceUntilIdle()
+ testScheduler.advanceUntilIdle()
verify(engine, times(1)).createSession(false)
assertEquals(engineSession, store.state.findTab(tab.id)?.engineState?.engineSession)
}
@Test
- fun `restores engine session state if available`() = runTestOnMain {
+ fun `restores engine session state if available`() = runTest {
val engine: Engine = mock()
val engineSession: EngineSession = mock()
whenever(engine.createSession(anyBoolean(), any())).thenReturn(engineSession)
val engineSessionState: EngineSessionState = mock()
- val middleware = CreateEngineSessionMiddleware(engine, scope)
+ val middleware = CreateEngineSessionMiddleware(engine, this)
val tab = createTab("https://www.mozilla.org", id = "1")
val store = BrowserStore(
initialState = BrowserState(tabs = listOf(tab)),
@@ -80,36 +74,36 @@ class CreateEngineSessionMiddlewareTest {
store.dispatch(EngineAction.UpdateEngineSessionStateAction(tab.id, engineSessionState))
store.dispatch(EngineAction.CreateEngineSessionAction(tab.id))
- dispatcher.scheduler.advanceUntilIdle()
+ testScheduler.advanceUntilIdle()
verify(engineSession).restoreState(engineSessionState)
Unit
}
@Test
- fun `creates no engine session if tab does not exist`() = runTestOnMain {
+ fun `creates no engine session if tab does not exist`() = runTest {
val engine: Engine = mock()
`when`(engine.createSession(anyBoolean(), anyString())).thenReturn(mock())
- val middleware = CreateEngineSessionMiddleware(engine, scope)
+ val middleware = CreateEngineSessionMiddleware(engine, this)
val store = BrowserStore(
initialState = BrowserState(tabs = listOf()),
middleware = listOf(middleware),
)
store.dispatch(EngineAction.CreateEngineSessionAction("invalid"))
- dispatcher.scheduler.advanceUntilIdle()
+ testScheduler.advanceUntilIdle()
verify(engine, never()).createSession(anyBoolean(), any())
Unit
}
@Test
- fun `creates no engine session if session does not exist`() = runTestOnMain {
+ fun `creates no engine session if session does not exist`() = runTest {
val engine: Engine = mock()
`when`(engine.createSession(anyBoolean(), anyString())).thenReturn(mock())
- val middleware = CreateEngineSessionMiddleware(engine, scope)
+ val middleware = CreateEngineSessionMiddleware(engine, this)
val tab = createTab("https://www.mozilla.org", id = "1")
val store = BrowserStore(
@@ -121,19 +115,19 @@ class CreateEngineSessionMiddlewareTest {
EngineAction.CreateEngineSessionAction("non-existent"),
)
- dispatcher.scheduler.advanceUntilIdle()
+ testScheduler.advanceUntilIdle()
verify(engine, never()).createSession(anyBoolean(), any())
Unit
}
@Test
- fun `dispatches follow-up action after engine session is created`() = runTestOnMain {
+ fun `dispatches follow-up action after engine session is created`() = runTest {
val engine: Engine = mock()
val engineSession: EngineSession = mock()
whenever(engine.createSession(anyBoolean(), any())).thenReturn(engineSession)
- val middleware = CreateEngineSessionMiddleware(engine, scope)
+ val middleware = CreateEngineSessionMiddleware(engine, this)
val tab = createTab("https://www.mozilla.org", id = "1")
val store = BrowserStore(
initialState = BrowserState(tabs = listOf(tab)),
@@ -144,7 +138,7 @@ class CreateEngineSessionMiddlewareTest {
val followupAction = ContentAction.UpdateTitleAction(tab.id, "test")
store.dispatch(EngineAction.CreateEngineSessionAction(tab.id, followupAction = followupAction))
- dispatcher.scheduler.advanceUntilIdle()
+ testScheduler.advanceUntilIdle()
verify(engine, times(1)).createSession(false)
assertEquals(engineSession, store.state.findTab(tab.id)?.engineState?.engineSession)
@@ -152,12 +146,12 @@ class CreateEngineSessionMiddlewareTest {
}
@Test
- fun `dispatches follow-up action once engine session is created by pending action`() = runTestOnMain {
+ fun `dispatches follow-up action once engine session is created by pending action`() = runTest {
val engine: Engine = mock()
val engineSession: EngineSession = mock()
whenever(engine.createSession(anyBoolean(), any())).thenReturn(engineSession)
- val middleware = CreateEngineSessionMiddleware(engine, scope)
+ val middleware = CreateEngineSessionMiddleware(engine, this)
val tab = createTab("https://www.mozilla.org", id = "1")
val store = BrowserStore(
initialState = BrowserState(tabs = listOf(tab)),
@@ -171,7 +165,7 @@ class CreateEngineSessionMiddlewareTest {
store.dispatch(EngineAction.CreateEngineSessionAction(tab.id))
store.dispatch(EngineAction.CreateEngineSessionAction(tab.id, followupAction = followupAction))
- dispatcher.scheduler.advanceUntilIdle()
+ testScheduler.advanceUntilIdle()
verify(engine, times(1)).createSession(false)
assertEquals(engineSession, store.state.findTab(tab.id)?.engineState?.engineSession)
@@ -179,12 +173,12 @@ class CreateEngineSessionMiddlewareTest {
}
@Test
- fun `creating engine session for custom tab`() {
+ fun `creating engine session for custom tab`() = runTest {
val engine: Engine = mock()
val engineSession: EngineSession = mock()
whenever(engine.createSession(anyBoolean(), any())).thenReturn(engineSession)
- val middleware = CreateEngineSessionMiddleware(engine, scope)
+ val middleware = CreateEngineSessionMiddleware(engine, this)
val customTab = createCustomTab("https://www.mozilla.org", id = "1")
val store = BrowserStore(
initialState = BrowserState(customTabs = listOf(customTab)),
@@ -195,7 +189,7 @@ class CreateEngineSessionMiddlewareTest {
val followupAction = ContentAction.UpdateTitleAction(customTab.id, "test")
store.dispatch(EngineAction.CreateEngineSessionAction(customTab.id, followupAction = followupAction))
- dispatcher.scheduler.advanceUntilIdle()
+ testScheduler.advanceUntilIdle()
verify(engine, times(1)).createSession(false)
assertEquals(engineSession, store.state.findCustomTab(customTab.id)?.engineState?.engineSession)
@@ -203,12 +197,12 @@ class CreateEngineSessionMiddlewareTest {
}
@Test
- fun `creating engine session for custom tab with desktopMode enabled`() {
+ fun `creating engine session for custom tab with desktopMode enabled`() = runTest {
val engine: Engine = mock()
val engineSession: EngineSession = mock()
whenever(engine.createSession(anyBoolean(), any())).thenReturn(engineSession)
- val middleware = CreateEngineSessionMiddleware(engine, scope)
+ val middleware = CreateEngineSessionMiddleware(engine, this)
val customTab = createCustomTab("https://www.mozilla.org", id = "1", desktopMode = true)
val store = BrowserStore(
initialState = BrowserState(customTabs = listOf(customTab)),
@@ -219,7 +213,7 @@ class CreateEngineSessionMiddlewareTest {
val followupAction = ContentAction.UpdateTitleAction(customTab.id, "test")
store.dispatch(EngineAction.CreateEngineSessionAction(customTab.id, followupAction = followupAction))
- dispatcher.scheduler.advanceUntilIdle()
+ testScheduler.advanceUntilIdle()
verify(engine, times(1)).createSession(false)
assertEquals(engineSession, store.state.findCustomTab(customTab.id)?.engineState?.engineSession)
@@ -228,12 +222,12 @@ class CreateEngineSessionMiddlewareTest {
}
@Test
- fun `set desktop mode on based on tab's property once engine session is created`() = runTestOnMain {
+ fun `set desktop mode on based on tab's property once engine session is created`() = runTest {
val engine: Engine = mock()
val engineSession: EngineSession = mock()
whenever(engine.createSession(anyBoolean(), any())).thenReturn(engineSession)
- val middleware = CreateEngineSessionMiddleware(engine, scope)
+ val middleware = CreateEngineSessionMiddleware(engine, this)
val tabs = listOf(
createTab("https://www.mozilla.org", id = "1", desktopMode = true),
createTab("https://www.mozilla.com", id = "2", desktopMode = false),
@@ -245,17 +239,17 @@ class CreateEngineSessionMiddlewareTest {
assertNull(store.state.findTab(tabs[0].id)?.engineState?.engineSession)
store.dispatch(EngineAction.CreateEngineSessionAction(tabs[0].id))
- dispatcher.scheduler.advanceUntilIdle()
+ testScheduler.advanceUntilIdle()
verify(engineSession).toggleDesktopMode(eq(true), eq(false))
}
@Test
- fun `set desktop mode off based on tab's property once engine session is created`() = runTestOnMain {
+ fun `set desktop mode off based on tab's property once engine session is created`() = runTest {
val engine: Engine = mock()
val engineSession: EngineSession = mock()
whenever(engine.createSession(anyBoolean(), any())).thenReturn(engineSession)
- val middleware = CreateEngineSessionMiddleware(engine, scope)
+ val middleware = CreateEngineSessionMiddleware(engine, this)
val tabs = listOf(
createTab("https://www.mozilla.org", id = "1", desktopMode = true),
createTab("https://www.mozilla.com", id = "2", desktopMode = false),
@@ -267,7 +261,7 @@ class CreateEngineSessionMiddlewareTest {
assertNull(store.state.findTab(tabs[0].id)?.engineState?.engineSession)
store.dispatch(EngineAction.CreateEngineSessionAction(tabs[1].id))
- dispatcher.scheduler.advanceUntilIdle()
+ testScheduler.advanceUntilIdle()
verify(engineSession).toggleDesktopMode(eq(false), eq(false))
}
}