1
0
Fork 0

Add tests for ReaderModeController (#11049)

master
Tiger Oakes 2020-05-29 11:46:31 -07:00 committed by GitHub
parent 98bf27fdd4
commit 749c95e0f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 90 additions and 12 deletions

View File

@ -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() } },

View File

@ -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)
}
}

View File

@ -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 }
}
}