Add tests for ReaderModeController (#11049)
parent
98bf27fdd4
commit
749c95e0f0
|
@ -22,7 +22,6 @@ import androidx.navigation.fragment.findNavController
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import kotlinx.android.synthetic.main.fragment_browser.*
|
import kotlinx.android.synthetic.main.fragment_browser.*
|
||||||
import kotlinx.android.synthetic.main.fragment_browser.view.*
|
import kotlinx.android.synthetic.main.fragment_browser.view.*
|
||||||
import kotlinx.android.synthetic.main.tab_header.view.*
|
|
||||||
import kotlinx.coroutines.Dispatchers.IO
|
import kotlinx.coroutines.Dispatchers.IO
|
||||||
import kotlinx.coroutines.Dispatchers.Main
|
import kotlinx.coroutines.Dispatchers.Main
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
|
@ -85,8 +84,8 @@ import org.mozilla.fenix.components.toolbar.BrowserToolbarViewInteractor
|
||||||
import org.mozilla.fenix.components.toolbar.DefaultBrowserToolbarController
|
import org.mozilla.fenix.components.toolbar.DefaultBrowserToolbarController
|
||||||
import org.mozilla.fenix.components.toolbar.SwipeRefreshScrollingViewBehavior
|
import org.mozilla.fenix.components.toolbar.SwipeRefreshScrollingViewBehavior
|
||||||
import org.mozilla.fenix.components.toolbar.ToolbarIntegration
|
import org.mozilla.fenix.components.toolbar.ToolbarIntegration
|
||||||
import org.mozilla.fenix.downloads.DynamicDownloadDialog
|
|
||||||
import org.mozilla.fenix.downloads.DownloadService
|
import org.mozilla.fenix.downloads.DownloadService
|
||||||
|
import org.mozilla.fenix.downloads.DynamicDownloadDialog
|
||||||
import org.mozilla.fenix.ext.components
|
import org.mozilla.fenix.ext.components
|
||||||
import org.mozilla.fenix.ext.enterToImmersiveMode
|
import org.mozilla.fenix.ext.enterToImmersiveMode
|
||||||
import org.mozilla.fenix.ext.hideToolbar
|
import org.mozilla.fenix.ext.hideToolbar
|
||||||
|
@ -200,8 +199,8 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
|
||||||
navController = findNavController(),
|
navController = findNavController(),
|
||||||
readerModeController = DefaultReaderModeController(
|
readerModeController = DefaultReaderModeController(
|
||||||
readerViewFeature,
|
readerViewFeature,
|
||||||
(activity as HomeActivity).browsingModeManager.mode.isPrivate,
|
view.readerViewControlsBar,
|
||||||
view.readerViewControlsBar
|
isPrivate = (activity as HomeActivity).browsingModeManager.mode.isPrivate
|
||||||
),
|
),
|
||||||
sessionManager = requireComponents.core.sessionManager,
|
sessionManager = requireComponents.core.sessionManager,
|
||||||
findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } },
|
findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } },
|
||||||
|
|
|
@ -23,8 +23,8 @@ interface ReaderModeController {
|
||||||
|
|
||||||
class DefaultReaderModeController(
|
class DefaultReaderModeController(
|
||||||
private val readerViewFeature: ViewBoundFeatureWrapper<ReaderViewFeature>,
|
private val readerViewFeature: ViewBoundFeatureWrapper<ReaderViewFeature>,
|
||||||
private val isPrivate: Boolean,
|
private val readerViewControlsBar: View,
|
||||||
private val readerViewControlsBar: View
|
private val isPrivate: Boolean = false
|
||||||
) : ReaderModeController {
|
) : ReaderModeController {
|
||||||
override fun hideReaderView() {
|
override fun hideReaderView() {
|
||||||
readerViewFeature.withFeature { it.hideReaderView() }
|
readerViewFeature.withFeature { it.hideReaderView() }
|
||||||
|
@ -35,12 +35,11 @@ class DefaultReaderModeController(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun showControls() {
|
override fun showControls() {
|
||||||
readerViewFeature.withFeature { it.showControls() }.also {
|
readerViewFeature.withFeature { it.showControls() }
|
||||||
if (isPrivate) {
|
if (isPrivate) {
|
||||||
// We need to update styles for private mode programmatically for now:
|
// We need to update styles for private mode programmatically for now:
|
||||||
// https://github.com/mozilla-mobile/android-components/issues/3400
|
// https://github.com/mozilla-mobile/android-components/issues/3400
|
||||||
themeReaderViewControlsForPrivateMode(readerViewControlsBar)
|
themeReaderViewControlsForPrivateMode(readerViewControlsBar)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
package org.mozilla.fenix.browser.readermode
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import io.mockk.Called
|
||||||
|
import io.mockk.every
|
||||||
|
import io.mockk.mockk
|
||||||
|
import io.mockk.spyk
|
||||||
|
import io.mockk.verify
|
||||||
|
import mozilla.components.browser.state.state.BrowserState
|
||||||
|
import mozilla.components.browser.state.state.createTab
|
||||||
|
import mozilla.components.browser.state.store.BrowserStore
|
||||||
|
import mozilla.components.feature.readerview.ReaderViewFeature
|
||||||
|
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
|
||||||
|
import mozilla.components.support.test.robolectric.testContext
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
|
||||||
|
|
||||||
|
@RunWith(FenixRobolectricTestRunner::class)
|
||||||
|
class DefaultReaderModeControllerTest {
|
||||||
|
|
||||||
|
private lateinit var readerViewFeature: ReaderViewFeature
|
||||||
|
private lateinit var featureWrapper: ViewBoundFeatureWrapper<ReaderViewFeature>
|
||||||
|
private lateinit var readerViewControlsBar: View
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setup() {
|
||||||
|
val tab = createTab("https://mozilla.org")
|
||||||
|
val store = BrowserStore(
|
||||||
|
BrowserState(
|
||||||
|
tabs = listOf(tab),
|
||||||
|
selectedTabId = tab.id
|
||||||
|
)
|
||||||
|
)
|
||||||
|
readerViewFeature = spyk(ReaderViewFeature(testContext, mockk(), store, mockk()))
|
||||||
|
|
||||||
|
featureWrapper = ViewBoundFeatureWrapper(
|
||||||
|
feature = readerViewFeature,
|
||||||
|
owner = mockk(relaxed = true),
|
||||||
|
view = mockk(relaxed = true)
|
||||||
|
)
|
||||||
|
readerViewControlsBar = mockk(relaxed = true)
|
||||||
|
|
||||||
|
every { readerViewFeature.hideReaderView() } returns Unit
|
||||||
|
every { readerViewFeature.showReaderView() } returns Unit
|
||||||
|
every { readerViewFeature.showControls() } returns Unit
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testHideReaderView() {
|
||||||
|
val controller = DefaultReaderModeController(featureWrapper, readerViewControlsBar)
|
||||||
|
controller.hideReaderView()
|
||||||
|
verify { readerViewFeature.hideReaderView() }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testShowReaderView() {
|
||||||
|
val controller = DefaultReaderModeController(featureWrapper, readerViewControlsBar)
|
||||||
|
controller.showReaderView()
|
||||||
|
verify { readerViewFeature.showReaderView() }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testShowControlsNormalTab() {
|
||||||
|
val controller = DefaultReaderModeController(
|
||||||
|
featureWrapper,
|
||||||
|
readerViewControlsBar,
|
||||||
|
isPrivate = false
|
||||||
|
)
|
||||||
|
|
||||||
|
controller.showControls()
|
||||||
|
verify { readerViewFeature.showControls() }
|
||||||
|
verify { readerViewControlsBar wasNot Called }
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue