1717package com.duckduckgo.browsermode.impl
1818
1919import android.webkit.WebView
20+ import androidx.webkit.WebViewFeature
2021import com.duckduckgo.browsermode.api.BrowserMode
21- import com.duckduckgo.browsermode.api.FireModeAvailability
2222import com.duckduckgo.browsermode.api.profileName
23+ import org.junit.After
2324import org.junit.Assert.assertEquals
2425import org.junit.Assert.assertSame
2526import org.junit.Assert.assertTrue
27+ import org.junit.Before
2628import org.junit.Test
29+ import org.mockito.MockedStatic
30+ import org.mockito.Mockito.mockStatic
2731import org.mockito.kotlin.mock
2832
2933class RealWebViewModeInitializerTest {
3034
3135 private val webView: WebView = mock()
32- private val fireModeAvailability = FakeFireModeAvailability ()
3336 private val webViewProfileBinder = FakeWebViewProfileBinder ()
34- private val testee = RealWebViewModeInitializer (
35- fireModeAvailability = fireModeAvailability,
36- webViewProfileBinder = webViewProfileBinder,
37- )
37+ private val testee = RealWebViewModeInitializer (webViewProfileBinder)
38+
39+ private lateinit var webViewFeatureMock: MockedStatic <WebViewFeature >
40+
41+ @Before
42+ fun setUp () {
43+ webViewFeatureMock = mockStatic(WebViewFeature ::class .java)
44+ setMultiProfileSupported(true )
45+ }
46+
47+ @After
48+ fun tearDown () {
49+ webViewFeatureMock.close()
50+ }
3851
3952 @Test
40- fun `bind returns success when Fire mode is available and Fire profile binding succeeds` () {
53+ fun `bind returns success when MULTI_PROFILE is supported and Fire profile binding succeeds` () {
4154 val result = testee.bind(webView, BrowserMode .FIRE )
4255
4356 assertTrue(result.isSuccess)
4457 assertEquals(listOf (BoundProfile (webView, BrowserMode .FIRE .profileName)), webViewProfileBinder.boundProfiles)
4558 }
4659
4760 @Test
48- fun `bind returns success when Fire mode is available and regular profile binding succeeds` () {
61+ fun `bind returns success when MULTI_PROFILE is supported and regular profile binding succeeds` () {
4962 val result = testee.bind(webView, BrowserMode .REGULAR )
5063
5164 assertTrue(result.isSuccess)
@@ -64,8 +77,8 @@ class RealWebViewModeInitializerTest {
6477 }
6578
6679 @Test
67- fun `bind returns failure and skips profile binding when Fire mode is unavailable for Fire profile` () {
68- fireModeAvailability.available = false
80+ fun `bind returns failure and skips profile binding when MULTI_PROFILE is unsupported for Fire profile` () {
81+ setMultiProfileSupported( false )
6982
7083 val result = testee.bind(webView, BrowserMode .FIRE )
7184
@@ -75,8 +88,8 @@ class RealWebViewModeInitializerTest {
7588 }
7689
7790 @Test
78- fun `bind returns failure and skips profile binding when Fire mode is unavailable for regular profile` () {
79- fireModeAvailability.available = false
91+ fun `bind returns failure and skips profile binding when MULTI_PROFILE is unsupported for regular profile` () {
92+ setMultiProfileSupported( false )
8093
8194 val result = testee.bind(webView, BrowserMode .REGULAR )
8295
@@ -85,10 +98,10 @@ class RealWebViewModeInitializerTest {
8598 assertTrue(webViewProfileBinder.boundProfiles.isEmpty())
8699 }
87100
88- private class FakeFireModeAvailability : FireModeAvailability {
89- var available = true
90-
91- override fun isAvailable (): Boolean = available
101+ private fun setMultiProfileSupported ( supported : Boolean ) {
102+ webViewFeatureMock.` when `< Boolean > {
103+ WebViewFeature .isFeatureSupported( WebViewFeature . MULTI_PROFILE )
104+ }.thenReturn(supported)
92105 }
93106
94107 private class FakeWebViewProfileBinder : WebViewProfileBinder {
0 commit comments