tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit cfd9cdbaaa52e870fdd81349e826d6e73743df70
parent 231c20bbdffc785521f438c0545bef6a5b4d0a53
Author: mcarare <48995920+mcarare@users.noreply.github.com>
Date:   Tue, 30 Dec 2025 12:23:20 +0000

Bug 2007984 - Refactor DefaultTopSiteControllerTest to use runTest and explicit CoroutineScope. r=android-reviewers,giorga

Differential Revision: https://phabricator.services.mozilla.com/D277639

Diffstat:
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/topsites/controller/DefaultTopSiteControllerTest.kt | 137++++++++++++++++++++++++++++++++++++++-----------------------------------------
1 file changed, 66 insertions(+), 71 deletions(-)

diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/topsites/controller/DefaultTopSiteControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/topsites/controller/DefaultTopSiteControllerTest.kt @@ -10,6 +10,8 @@ import io.mockk.every import io.mockk.mockk import io.mockk.spyk import io.mockk.verify +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.test.runTest import mozilla.components.browser.state.action.SearchAction import mozilla.components.browser.state.search.RegionState import mozilla.components.browser.state.search.SearchEngine @@ -20,9 +22,7 @@ import mozilla.components.browser.state.store.BrowserStore import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.feature.top.sites.TopSite import mozilla.components.feature.top.sites.TopSitesUseCases -import mozilla.components.support.test.ext.joinBlocking import mozilla.components.support.test.robolectric.testContext -import mozilla.components.support.test.rule.MainCoroutineRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -51,9 +51,6 @@ import java.lang.ref.WeakReference class DefaultTopSiteControllerTest { @get:Rule - val coroutinesTestRule = MainCoroutineRule() - - @get:Rule val gleanTestRule = FenixGleanTestRule(testContext) private val activity: HomeActivity = mockk(relaxed = true) @@ -66,8 +63,6 @@ class DefaultTopSiteControllerTest { private val settings: Settings = mockk(relaxed = true) private val analytics: Analytics = mockk(relaxed = true) - private val scope = coroutinesTestRule.scope - private val searchEngine = SearchEngine( id = "test", name = "Test Engine", @@ -97,7 +92,7 @@ class DefaultTopSiteControllerTest { private lateinit var store: BrowserStore @Before - fun setup() { + fun setup() = runTest { store = BrowserStore( BrowserState( search = SearchState( @@ -113,14 +108,14 @@ class DefaultTopSiteControllerTest { } @Test - fun handleSelectDefaultTopSite() { + fun handleSelectDefaultTopSite() = runTest { val topSite = TopSite.Default( id = 1L, title = "Mozilla", url = "mozilla.org", createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) @@ -145,14 +140,14 @@ class DefaultTopSiteControllerTest { } @Test - fun handleSelectNonDefaultTopSite() { + fun handleSelectNonDefaultTopSite() = runTest { val topSite = TopSite.Frecent( id = 1L, title = "Mozilla", url = "mozilla.org", createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) @@ -173,14 +168,14 @@ class DefaultTopSiteControllerTest { } @Test - fun `GIVEN homepage as a new tab is enabled WHEN Default TopSite is selected THEN open top site in existing tab`() { + fun `GIVEN homepage as a new tab is enabled WHEN Default TopSite is selected THEN open top site in existing tab`() = runTest { val topSite = TopSite.Default( id = 1L, title = "Mozilla", url = "mozilla.org", createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) every { settings.enableHomepageAsNewTab } returns true @@ -198,7 +193,7 @@ class DefaultTopSiteControllerTest { } @Test - fun `GIVEN current destination is the shortcuts fragment WHEN a top site is selected THEN open top site in a new tab`() { + fun `GIVEN current destination is the shortcuts fragment WHEN a top site is selected THEN open top site in a new tab`() = runTest { every { navController.currentDestination } returns mockk { every { id } returns R.id.shortcutsFragment } @@ -209,7 +204,7 @@ class DefaultTopSiteControllerTest { url = "mozilla.org", createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) @@ -226,7 +221,7 @@ class DefaultTopSiteControllerTest { } @Test - fun `GIVEN existing tab for url WHEN Default TopSite selected THEN open new tab`() { + fun `GIVEN existing tab for url WHEN Default TopSite selected THEN open new tab`() = runTest { val url = "mozilla.org" val existingTabForUrl = createTab(url = url) @@ -245,7 +240,7 @@ class DefaultTopSiteControllerTest { url = url, createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) @@ -270,7 +265,7 @@ class DefaultTopSiteControllerTest { } @Test - fun `GIVEN existing tab for url WHEN Provided TopSite selected THEN open new tab`() { + fun `GIVEN existing tab for url WHEN Provided TopSite selected THEN open new tab`() = runTest { val url = "mozilla.org" val existingTabForUrl = createTab(url = url) @@ -293,7 +288,7 @@ class DefaultTopSiteControllerTest { createdAt = 0, ) val position = 0 - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) @@ -319,7 +314,7 @@ class DefaultTopSiteControllerTest { } @Test - fun `GIVEN existing tab for url WHEN Frecent TopSite selected THEN navigate to tab`() { + fun `GIVEN existing tab for url WHEN Frecent TopSite selected THEN navigate to tab`() = runTest { val url = "mozilla.org" val existingTabForUrl = createTab(url = url) @@ -338,7 +333,7 @@ class DefaultTopSiteControllerTest { url = url, createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) @@ -357,7 +352,7 @@ class DefaultTopSiteControllerTest { } @Test - fun `GIVEN existing tab for url WHEN Pinned TopSite selected THEN navigate to tab`() { + fun `GIVEN existing tab for url WHEN Pinned TopSite selected THEN navigate to tab`() = runTest { val url = "mozilla.org" val existingTabForUrl = createTab(url = url) @@ -376,7 +371,7 @@ class DefaultTopSiteControllerTest { url = url, createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) @@ -395,14 +390,14 @@ class DefaultTopSiteControllerTest { } @Test - fun handleSelectGoogleDefaultTopSiteUS() { + fun handleSelectGoogleDefaultTopSiteUS() = runTest { val topSite = TopSite.Default( id = 1L, title = "Google", url = SupportUtils.GOOGLE_URL, createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) @@ -433,14 +428,14 @@ class DefaultTopSiteControllerTest { } @Test - fun handleSelectGoogleDefaultTopSiteXX() { + fun handleSelectGoogleDefaultTopSiteXX() = runTest { val topSite = TopSite.Default( id = 1L, title = "Google", url = SupportUtils.GOOGLE_URL, createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) @@ -471,7 +466,7 @@ class DefaultTopSiteControllerTest { } @Test - fun handleSelectGoogleDefaultTopSite_EventPerformedSearchTopSite() { + fun handleSelectGoogleDefaultTopSite_EventPerformedSearchTopSite() = runTest { assertNull(Events.performedSearch.testGetValue()) val topSite = TopSite.Default( @@ -480,7 +475,7 @@ class DefaultTopSiteControllerTest { url = SupportUtils.GOOGLE_URL, createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf(googleSearchEngine) @@ -498,7 +493,7 @@ class DefaultTopSiteControllerTest { } @Test - fun handleSelectDuckDuckGoTopSite_EventPerformedSearchTopSite() { + fun handleSelectDuckDuckGoTopSite_EventPerformedSearchTopSite() = runTest { assertNull(Events.performedSearch.testGetValue()) val topSite = TopSite.Pinned( @@ -507,7 +502,7 @@ class DefaultTopSiteControllerTest { url = "https://duckduckgo.com", createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf( googleSearchEngine, @@ -520,14 +515,14 @@ class DefaultTopSiteControllerTest { } @Test - fun handleSelectGooglePinnedTopSiteUS() { + fun handleSelectGooglePinnedTopSiteUS() = runTest { val topSite = TopSite.Pinned( id = 1L, title = "Google", url = SupportUtils.GOOGLE_URL, createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) @@ -558,14 +553,14 @@ class DefaultTopSiteControllerTest { } @Test - fun handleSelectGooglePinnedTopSiteXX() { + fun handleSelectGooglePinnedTopSiteXX() = runTest { val topSite = TopSite.Pinned( id = 1L, title = "Google", url = SupportUtils.GOOGLE_URL, createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) @@ -596,14 +591,14 @@ class DefaultTopSiteControllerTest { } @Test - fun handleSelectGoogleFrecentTopSiteUS() { + fun handleSelectGoogleFrecentTopSiteUS() = runTest { val topSite = TopSite.Frecent( id = 1L, title = "Google", url = SupportUtils.GOOGLE_URL, createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) @@ -634,14 +629,14 @@ class DefaultTopSiteControllerTest { } @Test - fun handleSelectGoogleFrecentTopSiteXX() { + fun handleSelectGoogleFrecentTopSiteXX() = runTest { val topSite = TopSite.Frecent( id = 1L, title = "Google", url = SupportUtils.GOOGLE_URL, createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) @@ -672,7 +667,7 @@ class DefaultTopSiteControllerTest { } @Test - fun handleSelectProvidedTopSite() { + fun handleSelectProvidedTopSite() = runTest { val topSite = TopSite.Provided( id = 1L, title = "Mozilla", @@ -683,7 +678,7 @@ class DefaultTopSiteControllerTest { createdAt = 0, ) val position = 0 - val controller = spyk(createController()) + val controller = spyk(createController(this)) every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) @@ -709,8 +704,8 @@ class DefaultTopSiteControllerTest { } @Test - fun `WHEN the provided top site is clicked THEN send a click callback request`() { - val controller = spyk(createController()) + fun `WHEN the provided top site is clicked THEN send a click callback request`() = runTest { + val controller = spyk(createController(this)) val topSite = TopSite.Provided( id = 3, title = "Mozilla", @@ -752,8 +747,8 @@ class DefaultTopSiteControllerTest { } @Test - fun `WHEN the provided top site is seen THEN send a impression callback request`() { - val controller = spyk(createController()) + fun `WHEN the provided top site is seen THEN send a impression callback request`() = runTest { + val controller = spyk(createController(this)) val topSite = TopSite.Provided( id = 3, title = "Mozilla", @@ -795,8 +790,8 @@ class DefaultTopSiteControllerTest { } @Test - fun `WHEN the default Google top site is removed THEN the correct metric is recorded`() { - val controller = spyk(createController()) + fun `WHEN the default Google top site is removed THEN the correct metric is recorded`() = runTest { + val controller = spyk(createController(this)) val topSite = TopSite.Default( id = 1L, title = "Google", @@ -818,7 +813,7 @@ class DefaultTopSiteControllerTest { } @Test - fun `WHEN the frecent top site is updated THEN add the frecent top site as a pinned top site`() { + fun `WHEN the frecent top site is updated THEN add the frecent top site as a pinned top site`() = runTest { val topSite = TopSite.Frecent( id = 1L, title = "Mozilla", @@ -826,7 +821,7 @@ class DefaultTopSiteControllerTest { createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) val title = "Firefox" val url = "firefox.com" @@ -838,7 +833,7 @@ class DefaultTopSiteControllerTest { } @Test - fun `WHEN the pinned top site is updated THEN update the pinned top site in storage`() { + fun `WHEN the pinned top site is updated THEN update the pinned top site in storage`() = runTest { val topSite = TopSite.Pinned( id = 1L, title = "Mozilla", @@ -846,7 +841,7 @@ class DefaultTopSiteControllerTest { createdAt = 0, ) - val controller = spyk(createController()) + val controller = spyk(createController(this)) val title = "Firefox" val url = "firefox.com" @@ -858,8 +853,8 @@ class DefaultTopSiteControllerTest { } @Test - fun `WHEN handleTopSiteSettingsClicked is called THEN navigate to the HomeSettingsFragment AND report the interaction`() { - createController().handleTopSiteSettingsClicked() + fun `WHEN handleTopSiteSettingsClicked is called THEN navigate to the HomeSettingsFragment AND report the interaction`() = runTest { + createController(this).handleTopSiteSettingsClicked() assertNotNull(TopSites.contileSettings.testGetValue()) assertEquals(1, TopSites.contileSettings.testGetValue()!!.size) @@ -869,8 +864,8 @@ class DefaultTopSiteControllerTest { } @Test - fun `WHEN handleSponsorPrivacyClicked is called THEN navigate to the privacy webpage AND report the interaction`() { - createController().handleSponsorPrivacyClicked() + fun `WHEN handleSponsorPrivacyClicked is called THEN navigate to the privacy webpage AND report the interaction`() = runTest { + createController(this).handleSponsorPrivacyClicked() assertNotNull(TopSites.contileSponsorsAndPrivacy.testGetValue()) assertEquals(1, TopSites.contileSponsorsAndPrivacy.testGetValue()!!.size) @@ -887,12 +882,12 @@ class DefaultTopSiteControllerTest { } @Test - fun `GIVEN current destination is the shortcuts fragmentWHEN handleSponsorPrivacyClicked is called THEN navigate to the privacy webpage AND report the interaction`() { + fun `GIVEN current destination is the shortcuts fragmentWHEN handleSponsorPrivacyClicked is called THEN navigate to the privacy webpage AND report the interaction`() = runTest { every { navController.currentDestination } returns mockk { every { id } returns R.id.shortcutsFragment } - createController().handleSponsorPrivacyClicked() + createController(this).handleSponsorPrivacyClicked() assertNotNull(TopSites.contileSponsorsAndPrivacy.testGetValue()) assertEquals(1, TopSites.contileSponsorsAndPrivacy.testGetValue()!!.size) @@ -909,7 +904,7 @@ class DefaultTopSiteControllerTest { } @Test - fun `WHEN top site long clicked is called THEN report the top site long click telemetry`() { + fun `WHEN top site long clicked is called THEN report the top site long click telemetry`() = runTest { assertNull(TopSites.longPress.testGetValue()) val topSite = TopSite.Provided( @@ -922,13 +917,13 @@ class DefaultTopSiteControllerTest { createdAt = 0, ) - createController().handleTopSiteLongClicked(topSite) + createController(this).handleTopSiteLongClicked(topSite) assertEquals(topSite.type, TopSites.longPress.testGetValue()!!.single().extra!!["type"]) } @Test - fun `WHEN handleOpenInPrivateTabClicked is called with a TopSite#Provided site THEN navigate to the top site and record telemetry`() { + fun `WHEN handleOpenInPrivateTabClicked is called with a TopSite#Provided site THEN navigate to the top site and record telemetry`() = runTest { val topSite = TopSite.Provided( id = 1L, title = "Mozilla", @@ -938,7 +933,7 @@ class DefaultTopSiteControllerTest { impressionUrl = "", createdAt = 0, ) - createController().handleOpenInPrivateTabClicked(topSite) + createController(this).handleOpenInPrivateTabClicked(topSite) assertNotNull(TopSites.openContileInPrivateTab.testGetValue()) assertEquals(1, TopSites.openContileInPrivateTab.testGetValue()!!.size) @@ -955,7 +950,7 @@ class DefaultTopSiteControllerTest { } @Test - fun `GIVEN current destination is the shortcuts fragment WHEN handleOpenInPrivateTabClicked is called with a TopSite#Provided site THEN navigate to the top site and record telemetry`() { + fun `GIVEN current destination is the shortcuts fragment WHEN handleOpenInPrivateTabClicked is called with a TopSite#Provided site THEN navigate to the top site and record telemetry`() = runTest { every { navController.currentDestination } returns mockk { every { id } returns R.id.shortcutsFragment } @@ -969,7 +964,7 @@ class DefaultTopSiteControllerTest { impressionUrl = "", createdAt = 0, ) - createController().handleOpenInPrivateTabClicked(topSite) + createController(this).handleOpenInPrivateTabClicked(topSite) assertNotNull(TopSites.openContileInPrivateTab.testGetValue()) assertEquals(1, TopSites.openContileInPrivateTab.testGetValue()!!.size) @@ -986,7 +981,7 @@ class DefaultTopSiteControllerTest { } @Test - fun `GIVEN homepage as a new tab is enabled WHEN handleOpenInPrivateTabClicked is called with a TopSite#Provided site THEN navigate to the top site and record telemetry`() { + fun `GIVEN homepage as a new tab is enabled WHEN handleOpenInPrivateTabClicked is called with a TopSite#Provided site THEN navigate to the top site and record telemetry`() = runTest { every { settings.enableHomepageAsNewTab } returns true val topSite = TopSite.Provided( @@ -998,7 +993,7 @@ class DefaultTopSiteControllerTest { impressionUrl = "", createdAt = 0, ) - createController().handleOpenInPrivateTabClicked(topSite) + createController(this).handleOpenInPrivateTabClicked(topSite) assertNotNull(TopSites.openContileInPrivateTab.testGetValue()) assertEquals(1, TopSites.openContileInPrivateTab.testGetValue()!!.size) @@ -1015,8 +1010,8 @@ class DefaultTopSiteControllerTest { } @Test - fun `WHEN handleOpenInPrivateTabClicked is called with a Default, Pinned, or Frecent top site THEN openInPrivateTab event is recorded`() { - val controller = createController() + fun `WHEN handleOpenInPrivateTabClicked is called with a Default, Pinned, or Frecent top site THEN openInPrivateTab event is recorded`() = runTest { + val controller = createController(this) val topSite1 = TopSite.Default( id = 1L, title = "Mozilla", @@ -1048,14 +1043,14 @@ class DefaultTopSiteControllerTest { } } - fun `WHEN screen is shown THEN impression is logged`() { + fun `WHEN screen is shown THEN impression is logged`() = runTest { assertNull(ShortcutsLibrary.viewed.testGetValue()) - val controller = createController() + val controller = createController(this) controller.handleShortcutsLibraryViewed() assertNotNull(ShortcutsLibrary.viewed.testGetValue()) } - private fun createController(): DefaultTopSiteController = + private fun createController(scope: CoroutineScope): DefaultTopSiteController = DefaultTopSiteController( activityRef = WeakReference(activity), navControllerRef = WeakReference(navController),