95 lines
2.6 KiB
Kotlin
95 lines
2.6 KiB
Kotlin
/* 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.components
|
|
|
|
import androidx.fragment.app.Fragment
|
|
import androidx.fragment.app.FragmentActivity
|
|
import kotlinx.coroutines.ObsoleteCoroutinesApi
|
|
import mozilla.components.lib.state.Action
|
|
import mozilla.components.lib.state.State
|
|
import mozilla.components.lib.state.Store
|
|
import org.junit.Assert.assertEquals
|
|
import org.junit.Assert.assertFalse
|
|
import org.junit.Assert.assertTrue
|
|
import org.junit.Test
|
|
import org.junit.runner.RunWith
|
|
import org.mozilla.fenix.TestApplication
|
|
import org.robolectric.Robolectric
|
|
import org.robolectric.RobolectricTestRunner
|
|
import org.robolectric.annotation.Config
|
|
|
|
@ObsoleteCoroutinesApi
|
|
@RunWith(RobolectricTestRunner::class)
|
|
@Config(application = TestApplication::class)
|
|
class StoreProviderTest {
|
|
|
|
private class BasicState : State
|
|
|
|
private val basicStore = Store(BasicState()) { state, _: Action -> state }
|
|
|
|
@Test
|
|
fun `factory returns store provider`() {
|
|
var createCalled = false
|
|
val factory = StoreProviderFactory {
|
|
createCalled = true
|
|
basicStore
|
|
}
|
|
|
|
assertFalse(createCalled)
|
|
|
|
assertEquals(basicStore, factory.create(StoreProvider::class.java).store)
|
|
|
|
assertTrue(createCalled)
|
|
}
|
|
|
|
@Test
|
|
fun `get returns store`() {
|
|
val activity = Robolectric.buildActivity(FragmentActivity::class.java)
|
|
.create()
|
|
.start()
|
|
.resume()
|
|
.get()
|
|
|
|
val fragment = Fragment()
|
|
|
|
activity.supportFragmentManager.beginTransaction().apply {
|
|
add(fragment, "test")
|
|
commitNow()
|
|
}
|
|
|
|
val store = StoreProvider.get(fragment) { basicStore }
|
|
assertEquals(basicStore, store)
|
|
}
|
|
|
|
@Test
|
|
fun `get only calls createStore if needed`() {
|
|
val activity = Robolectric.buildActivity(FragmentActivity::class.java)
|
|
.create()
|
|
.start()
|
|
.resume()
|
|
.get()
|
|
|
|
val fragment = Fragment()
|
|
|
|
activity.supportFragmentManager.beginTransaction().apply {
|
|
add(fragment, "test")
|
|
commitNow()
|
|
}
|
|
|
|
var createCalled = false
|
|
val createStore = {
|
|
createCalled = true
|
|
basicStore
|
|
}
|
|
|
|
StoreProvider.get(fragment, createStore)
|
|
assertTrue(createCalled)
|
|
|
|
createCalled = false
|
|
StoreProvider.get(fragment, createStore)
|
|
assertFalse(createCalled)
|
|
}
|
|
}
|