1
0
Fork 0
fenix/app/src/test/java/org/mozilla/fenix/components/InflationAwareFeatureTest.kt

103 lines
3.0 KiB
Kotlin

package org.mozilla.fenix.components
import android.view.View
import android.view.ViewStub
import mozilla.components.support.base.feature.UserInteractionHandler
import mozilla.components.support.base.feature.LifecycleAwareFeature
import mozilla.components.support.test.any
import mozilla.components.support.test.mock
import org.junit.Test
import org.mockito.Mockito.never
import org.mockito.Mockito.spy
import org.mockito.Mockito.verify
import java.lang.ref.WeakReference
class InflationAwareFeatureTest {
@Test
fun `stub inflates if no feature or view exists`() {
val stub: ViewStub = mock()
val feature: InflationAwareFeature = spy(TestableInflationAwareFeature(stub))
feature.launch()
verify(stub).setOnInflateListener(any())
verify(stub).inflate()
}
@Test
fun `stub immediately launches if the feature is available`() {
val stub: ViewStub = mock()
val feature: InflationAwareFeature = spy(TestableInflationAwareFeature(stub))
feature.feature = mock()
feature.view = WeakReference(mock())
feature.launch()
verify(stub, never()).setOnInflateListener(any())
verify(stub, never()).inflate()
verify(feature).onLaunch(any(), any())
}
@Test
fun `feature calls stop if created`() {
val stub: ViewStub = mock()
val inflationFeature: InflationAwareFeature = spy(TestableInflationAwareFeature(stub))
val innerFeature: LifecycleAwareFeature = mock()
inflationFeature.stop()
verify(innerFeature, never()).stop()
inflationFeature.feature = innerFeature
inflationFeature.stop()
verify(innerFeature).stop()
}
@Test
fun `start should be delegated to the inner feature`() {
val inflationFeature: InflationAwareFeature = spy(TestableInflationAwareFeature(mock()))
val innerFeature: LifecycleAwareFeature = mock()
inflationFeature.feature = innerFeature
inflationFeature.start()
verify(innerFeature).start()
}
@Test
fun `if feature has implemented UserInteractionHandler invoke it`() {
val stub: ViewStub = mock()
val inflationFeature: InflationAwareFeature = spy(TestableInflationAwareFeature(stub))
val innerFeature: LifecycleAwareFeature = mock()
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 {
return mock()
}
override fun onLaunch(view: View, feature: LifecycleAwareFeature) {
}
}