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 kotlinx.android.synthetic.main.fragment_browser.*
|
||||
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.Main
|
||||
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.SwipeRefreshScrollingViewBehavior
|
||||
import org.mozilla.fenix.components.toolbar.ToolbarIntegration
|
||||
import org.mozilla.fenix.downloads.DynamicDownloadDialog
|
||||
import org.mozilla.fenix.downloads.DownloadService
|
||||
import org.mozilla.fenix.downloads.DynamicDownloadDialog
|
||||
import org.mozilla.fenix.ext.components
|
||||
import org.mozilla.fenix.ext.enterToImmersiveMode
|
||||
import org.mozilla.fenix.ext.hideToolbar
|
||||
|
@ -200,8 +199,8 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
|
|||
navController = findNavController(),
|
||||
readerModeController = DefaultReaderModeController(
|
||||
readerViewFeature,
|
||||
(activity as HomeActivity).browsingModeManager.mode.isPrivate,
|
||||
view.readerViewControlsBar
|
||||
view.readerViewControlsBar,
|
||||
isPrivate = (activity as HomeActivity).browsingModeManager.mode.isPrivate
|
||||
),
|
||||
sessionManager = requireComponents.core.sessionManager,
|
||||
findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } },
|
||||
|
|
|
@ -23,8 +23,8 @@ interface ReaderModeController {
|
|||
|
||||
class DefaultReaderModeController(
|
||||
private val readerViewFeature: ViewBoundFeatureWrapper<ReaderViewFeature>,
|
||||
private val isPrivate: Boolean,
|
||||
private val readerViewControlsBar: View
|
||||
private val readerViewControlsBar: View,
|
||||
private val isPrivate: Boolean = false
|
||||
) : ReaderModeController {
|
||||
override fun hideReaderView() {
|
||||
readerViewFeature.withFeature { it.hideReaderView() }
|
||||
|
@ -35,12 +35,11 @@ class DefaultReaderModeController(
|
|||
}
|
||||
|
||||
override fun showControls() {
|
||||
readerViewFeature.withFeature { it.showControls() }.also {
|
||||
if (isPrivate) {
|
||||
// We need to update styles for private mode programmatically for now:
|
||||
// https://github.com/mozilla-mobile/android-components/issues/3400
|
||||
themeReaderViewControlsForPrivateMode(readerViewControlsBar)
|
||||
}
|
||||
readerViewFeature.withFeature { it.showControls() }
|
||||
if (isPrivate) {
|
||||
// We need to update styles for private mode programmatically for now:
|
||||
// https://github.com/mozilla-mobile/android-components/issues/3400
|
||||
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