1
0
Fork 0

Add tests for browser helper classes (#12370)

master
Tiger Oakes 2020-07-07 19:46:25 -07:00 committed by GitHub
parent bedd1d452c
commit 720a590902
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 153 additions and 12 deletions

View File

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

View File

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

View File

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

View File

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