You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iceraven-browser/app/src/test/java/org/mozilla/fenix/components/InflationAwareFeatureTest.kt

102 lines
3.2 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 android.view.View
import android.view.ViewStub
import io.mockk.mockk
import io.mockk.spyk
import io.mockk.verify
import mozilla.components.support.base.feature.LifecycleAwareFeature
import mozilla.components.support.base.feature.UserInteractionHandler
import org.junit.Test
import java.lang.ref.WeakReference
class InflationAwareFeatureTest {
@Test
fun `stub inflates if no feature or view exists`() {
val stub: ViewStub = mockk(relaxed = true)
val feature: InflationAwareFeature = spyk(TestableInflationAwareFeature(stub))
feature.launch()
verify { stub.setOnInflateListener(any()) }
verify { stub.inflate() }
}
@Test
fun `stub immediately launches if the feature is available`() {
val stub: ViewStub = mockk()
val feature: InflationAwareFeature = spyk(TestableInflationAwareFeature(stub))
feature.feature = mockk(relaxed = true)
feature.view = WeakReference(mockk())
feature.launch()
verify(exactly = 0) { stub.setOnInflateListener(any()) }
verify(exactly = 0) { stub.inflate() }
verify { feature.onLaunch(any(), any()) }
}
@Test
fun `feature calls stop if created`() {
val stub: ViewStub = mockk()
val inflationFeature: InflationAwareFeature = spyk(TestableInflationAwareFeature(stub))
val innerFeature: LifecycleAwareFeature = mockk(relaxed = true)
inflationFeature.stop()
verify(exactly = 0) { innerFeature.stop() }
inflationFeature.feature = innerFeature
inflationFeature.stop()
verify { innerFeature.stop() }
}
@Test
fun `start should be delegated to the inner feature`() {
val inflationFeature: InflationAwareFeature = spyk(TestableInflationAwareFeature(mockk()))
val innerFeature: LifecycleAwareFeature = mockk(relaxed = true)
inflationFeature.feature = innerFeature
inflationFeature.start()
verify { innerFeature.start() }
}
@Test
fun `if feature has implemented UserInteractionHandler invoke it`() {
val stub: ViewStub = mockk()
val inflationFeature: InflationAwareFeature = spyk(TestableInflationAwareFeature(stub))
val innerFeature: LifecycleAwareFeature = mockk()
val userInteractionHandlerFeature = object : LifecycleAwareFeature, UserInteractionHandler {
override fun onBackPressed() = true
override fun start() {}
override fun stop() {}
}
assert(!inflationFeature.onBackPressed())
inflationFeature.feature = innerFeature
assert(!inflationFeature.onBackPressed())
inflationFeature.feature = userInteractionHandlerFeature
assert(inflationFeature.onBackPressed())
}
}
class TestableInflationAwareFeature(stub: ViewStub) : InflationAwareFeature(stub) {
override fun onViewInflated(view: View): LifecycleAwareFeature = mockk()
override fun onLaunch(view: View, feature: LifecycleAwareFeature) = Unit
}