[fenix] Add tests for browser helper classes (https://github.com/mozilla-mobile/fenix/pull/12370)

pull/600/head
Tiger Oakes 4 years ago committed by GitHub
parent fb79db8011
commit 9d875c7cca

@ -9,8 +9,8 @@ import androidx.annotation.StringRes
import mozilla.components.feature.contextmenu.ContextMenuCandidate import mozilla.components.feature.contextmenu.ContextMenuCandidate
import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.FenixSnackbar
class FenixSnackbarDelegate(val view: View) : class FenixSnackbarDelegate(private val view: View) : ContextMenuCandidate.SnackbarDelegate {
ContextMenuCandidate.SnackbarDelegate {
override fun show( override fun show(
snackBarParentView: View, snackBarParentView: View,
@StringRes text: Int, @StringRes text: Int,

@ -0,0 +1,112 @@
/* 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
import android.view.View
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.mockk
import io.mockk.mockkObject
import io.mockk.unmockkObject
import io.mockk.verify
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.mozilla.fenix.R
import org.mozilla.fenix.components.FenixSnackbar
import org.mozilla.fenix.components.FenixSnackbar.Companion.LENGTH_SHORT
class FenixSnackbarDelegateTest {
@MockK private lateinit var view: View
@MockK(relaxed = true) private lateinit var snackbar: FenixSnackbar
private lateinit var delegate: FenixSnackbarDelegate
@Before
fun setup() {
MockKAnnotations.init(this)
mockkObject(FenixSnackbar.Companion)
delegate = FenixSnackbarDelegate(view)
every {
FenixSnackbar.make(view, LENGTH_SHORT, isDisplayedWithBrowserToolbar = true)
} returns snackbar
every { snackbar.setText(any()) } returns snackbar
every { snackbar.setAction(any(), any()) } returns snackbar
every { view.context.getString(R.string.app_name) } returns "Firefox"
every { view.context.getString(R.string.edit) } returns "Edit"
}
@After
fun teardown() {
unmockkObject(FenixSnackbar.Companion)
}
@Test
fun `show with no listener nor action`() {
delegate.show(
snackBarParentView = mockk(),
text = R.string.app_name,
duration = 0,
action = 0,
listener = null
)
verify { snackbar.setText("Firefox") }
verify(exactly = 0) { snackbar.setAction(any(), any()) }
verify { snackbar.show() }
}
@Test
fun `show with listener but no action`() {
delegate.show(
snackBarParentView = mockk(),
text = R.string.app_name,
duration = 0,
action = 0,
listener = {}
)
verify { snackbar.setText("Firefox") }
verify(exactly = 0) { snackbar.setAction(any(), any()) }
verify { snackbar.show() }
}
@Test
fun `show with action but no listener`() {
delegate.show(
snackBarParentView = mockk(),
text = R.string.app_name,
duration = 0,
action = R.string.edit,
listener = null
)
verify { snackbar.setText("Firefox") }
verify(exactly = 0) { snackbar.setAction(any(), any()) }
verify { snackbar.show() }
}
@Test
fun `show with listener and action`() {
val listener = mockk<(View) -> Unit>(relaxed = true)
delegate.show(
snackBarParentView = mockk(),
text = R.string.app_name,
duration = 0,
action = R.string.edit,
listener = listener
)
verify { snackbar.setText("Firefox") }
verify { snackbar.setAction("Edit", withArg {
verify(exactly = 0) { listener(view) }
it.invoke()
verify { listener(view) }
}) }
verify { snackbar.show() }
}
}

@ -10,7 +10,8 @@ import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
import mozilla.components.browser.session.Session import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager import mozilla.components.browser.session.SessionManager
import org.junit.Assert import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.Event
@ -59,8 +60,8 @@ class TelemetrySessionObserverTest {
triggeredByRedirect = false, triggeredByRedirect = false,
triggeredByWebContent = false triggeredByWebContent = false
) )
Assert.assertEquals(sessionUrl, singleSessionObserver.originSessionUrl) assertEquals(sessionUrl, singleSessionObserver.originSessionUrl)
Assert.assertEquals(url, singleSessionObserver.redirectChain[0]) assertEquals(url, singleSessionObserver.redirectChain[0])
} }
@Test @Test
@ -77,9 +78,9 @@ class TelemetrySessionObserverTest {
triggeredByRedirect = false, triggeredByRedirect = false,
triggeredByWebContent = false triggeredByWebContent = false
) )
Assert.assertEquals(url, singleSessionObserver.originSessionUrl) assertEquals(url, singleSessionObserver.originSessionUrl)
Assert.assertEquals(url, singleSessionObserver.redirectChain[0]) assertEquals(url, singleSessionObserver.redirectChain[0])
Assert.assertEquals(newUrl, singleSessionObserver.redirectChain[1]) assertEquals(newUrl, singleSessionObserver.redirectChain[1])
} }
@Test @Test
@ -93,8 +94,8 @@ class TelemetrySessionObserverTest {
triggeredByRedirect = false, triggeredByRedirect = false,
triggeredByWebContent = false triggeredByWebContent = false
) )
Assert.assertNull(singleSessionObserver.originSessionUrl) assertNull(singleSessionObserver.originSessionUrl)
Assert.assertEquals(0, singleSessionObserver.redirectChain.size) assertEquals(0, singleSessionObserver.redirectChain.size)
} }
@Test @Test
@ -116,7 +117,7 @@ class TelemetrySessionObserverTest {
redirectChain redirectChain
) )
} }
Assert.assertNull(singleSessionObserver.originSessionUrl) assertNull(singleSessionObserver.originSessionUrl)
Assert.assertEquals(0, singleSessionObserver.redirectChain.size) assertEquals(0, singleSessionObserver.redirectChain.size)
} }
} }

@ -5,6 +5,7 @@
package org.mozilla.fenix.browser package org.mozilla.fenix.browser
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
import mozilla.components.browser.session.Session import mozilla.components.browser.session.Session
@ -41,7 +42,34 @@ class UriOpenedObserverTest {
observer.onSessionAdded(session) observer.onSessionAdded(session)
verify { session.register(observer.singleSessionObserver, owner) } verify { session.register(observer.singleSessionObserver, owner) }
observer.onSessionSelected(session)
verify { session.register(observer.singleSessionObserver, owner) }
observer.onSessionRemoved(session) observer.onSessionRemoved(session)
verify { session.unregister(observer.singleSessionObserver) } verify { session.unregister(observer.singleSessionObserver) }
} }
@Test
fun `registers when all sessions are restored`() {
val session1: Session = mockk(relaxed = true)
val session2: Session = mockk(relaxed = true)
every { sessionManager.sessions } returns listOf(session1, session2)
observer.onSessionsRestored()
verify { session1.register(observer.singleSessionObserver, owner) }
verify { session2.register(observer.singleSessionObserver, owner) }
}
@Test
fun `unregisters when all sessions are removed`() {
val session1: Session = mockk(relaxed = true)
val session2: Session = mockk(relaxed = true)
every { sessionManager.sessions } returns listOf(session1, session2)
observer.onAllSessionsRemoved()
verify { session1.unregister(observer.singleSessionObserver) }
verify { session2.unregister(observer.singleSessionObserver) }
}
} }

Loading…
Cancel
Save