2020-02-06 05:37:49 +01:00
|
|
|
/* 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/. */
|
|
|
|
|
2019-09-12 19:44:37 +02:00
|
|
|
package org.mozilla.fenix.ext
|
|
|
|
|
|
|
|
import androidx.fragment.app.Fragment
|
2019-12-17 21:26:46 +01:00
|
|
|
import androidx.navigation.NavController
|
|
|
|
import androidx.navigation.NavDestination
|
2019-09-12 19:44:37 +02:00
|
|
|
import androidx.navigation.NavDirections
|
|
|
|
import androidx.navigation.NavOptions
|
|
|
|
import androidx.navigation.Navigator.Extras
|
2019-12-17 21:26:46 +01:00
|
|
|
import androidx.navigation.fragment.NavHostFragment
|
|
|
|
import io.mockk.Runs
|
|
|
|
import io.mockk.confirmVerified
|
|
|
|
import io.mockk.every
|
|
|
|
import io.mockk.just
|
|
|
|
import io.mockk.mockk
|
|
|
|
import io.mockk.mockkStatic
|
|
|
|
import io.mockk.spyk
|
|
|
|
import io.mockk.verify
|
|
|
|
import mozilla.components.support.test.robolectric.testContext
|
2019-11-07 22:20:51 +01:00
|
|
|
import org.junit.Before
|
2019-12-17 21:26:46 +01:00
|
|
|
import org.junit.Test
|
|
|
|
import org.junit.runner.RunWith
|
2020-04-01 23:00:32 +02:00
|
|
|
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
|
2019-09-12 19:44:37 +02:00
|
|
|
|
2020-04-01 23:00:32 +02:00
|
|
|
@RunWith(FenixRobolectricTestRunner::class)
|
2019-09-12 19:44:37 +02:00
|
|
|
class FragmentTest {
|
|
|
|
|
2020-02-06 05:37:49 +01:00
|
|
|
private val navDirections: NavDirections = mockk(relaxed = true)
|
|
|
|
private val mockDestination = spyk(NavDestination("hi"))
|
|
|
|
private val mockExtras: Extras = mockk(relaxed = true)
|
|
|
|
private val mockId = 4
|
|
|
|
private val navController = spyk(NavController(testContext))
|
|
|
|
private val mockFragment: Fragment = mockk(relaxed = true)
|
|
|
|
private val mockOptions: NavOptions = mockk(relaxed = true)
|
2019-09-12 19:44:37 +02:00
|
|
|
|
2019-11-07 22:20:51 +01:00
|
|
|
@Before
|
|
|
|
fun setup() {
|
2019-09-12 19:44:37 +02:00
|
|
|
mockkStatic(NavHostFragment::class)
|
|
|
|
every { (NavHostFragment.findNavController(mockFragment)) } returns navController
|
2020-02-06 05:37:49 +01:00
|
|
|
every { (NavHostFragment.findNavController(mockFragment).currentDestination) } returns mockDestination
|
|
|
|
every { (mockDestination.id) } returns mockId
|
|
|
|
every { (navController.currentDestination) } returns mockDestination
|
|
|
|
every { (NavHostFragment.findNavController(mockFragment).currentDestination?.id) } answers { (mockDestination.id) }
|
2019-11-07 22:20:51 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun `Test nav fun with ID and directions`() {
|
2019-12-17 21:26:46 +01:00
|
|
|
every { (NavHostFragment.findNavController(mockFragment).navigate(navDirections, null)) } just Runs
|
2019-09-12 19:44:37 +02:00
|
|
|
|
|
|
|
mockFragment.nav(mockId, navDirections)
|
2020-02-06 05:37:49 +01:00
|
|
|
verify { (NavHostFragment.findNavController(mockFragment).currentDestination) }
|
2019-12-17 21:26:46 +01:00
|
|
|
verify { (NavHostFragment.findNavController(mockFragment).navigate(navDirections, null)) }
|
2019-09-12 19:44:37 +02:00
|
|
|
confirmVerified(mockFragment)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun `Test nav fun with ID, directions, and extras`() {
|
|
|
|
every { (NavHostFragment.findNavController(mockFragment).navigate(navDirections, mockExtras)) } just Runs
|
|
|
|
|
|
|
|
mockFragment.nav(mockId, navDirections, mockExtras)
|
2020-02-06 05:37:49 +01:00
|
|
|
verify { (NavHostFragment.findNavController(mockFragment).currentDestination) }
|
2019-09-12 19:44:37 +02:00
|
|
|
verify { (NavHostFragment.findNavController(mockFragment).navigate(navDirections, mockExtras)) }
|
|
|
|
confirmVerified(mockFragment)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun `Test nav fun with ID, directions, and options`() {
|
|
|
|
every { (NavHostFragment.findNavController(mockFragment).navigate(navDirections, mockOptions)) } just Runs
|
|
|
|
|
|
|
|
mockFragment.nav(mockId, navDirections, mockOptions)
|
2020-02-06 05:37:49 +01:00
|
|
|
verify { (NavHostFragment.findNavController(mockFragment).currentDestination) }
|
2019-09-12 19:44:37 +02:00
|
|
|
verify { (NavHostFragment.findNavController(mockFragment).navigate(navDirections, mockOptions)) }
|
|
|
|
confirmVerified(mockFragment)
|
|
|
|
}
|
|
|
|
}
|