Loading packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt +26 −41 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import com.android.systemui.kosmos.collectLastValue import com.android.systemui.kosmos.runCurrent import com.android.systemui.kosmos.runTest import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.lifecycle.activateIn import com.android.systemui.power.data.repository.fakePowerRepository import com.android.systemui.scene.domain.interactor.sceneInteractor Loading @@ -48,7 +49,6 @@ import com.android.systemui.statusbar.data.repository.fakeRemoteInputRepository import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertWithMessage import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.Job import org.junit.Before import org.junit.Test Loading @@ -56,15 +56,12 @@ import org.junit.runner.RunWith import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock @OptIn(ExperimentalCoroutinesApi::class) @SmallTest @RunWith(AndroidJUnit4::class) @EnableSceneContainer class SceneContainerViewModelTest : SysuiTestCase() { private val kosmos = testKosmos() private val testScope by lazy { kosmos.testScope } private val falsingManager by lazy { kosmos.fakeFalsingManager } private val kosmos = testKosmos().useUnconfinedTestDispatcher() private val view = mock<View>() private lateinit var underTest: SceneContainerViewModel Loading @@ -75,28 +72,21 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Before fun setUp() { underTest = kosmos.sceneContainerViewModelFactory.create( view, { motionEventHandler -> kosmos.sceneContainerViewModelFactory.create(view) { motionEventHandler -> this@SceneContainerViewModelTest.motionEventHandler = motionEventHandler }, ) } activationJob = Job() underTest.activateIn(testScope, activationJob) underTest.activateIn(kosmos.testScope, activationJob) } @Test fun activate_setsMotionEventHandler() = kosmos.runTest { runCurrent() assertThat(motionEventHandler).isNotNull() } kosmos.runTest { assertThat(motionEventHandler).isNotNull() } @Test fun deactivate_clearsMotionEventHandler() = kosmos.runTest { activationJob.cancel() runCurrent() assertThat(motionEventHandler).isNull() } Loading @@ -107,17 +97,16 @@ class SceneContainerViewModelTest : SysuiTestCase() { assertThat(underTest.isVisible).isTrue() sceneInteractor.setVisible(false, "reason") runCurrent() assertThat(underTest.isVisible).isFalse() sceneInteractor.setVisible(true, "reason") runCurrent() assertThat(underTest.isVisible).isTrue() } @Test fun sceneTransition() = kosmos.runTest { enableSingleShade() val currentScene by collectLastValue(underTest.currentScene) assertThat(currentScene).isEqualTo(Scenes.Lockscreen) Loading @@ -131,7 +120,6 @@ class SceneContainerViewModelTest : SysuiTestCase() { kosmos.runTest { val currentScene by collectLastValue(underTest.currentScene) fakeSceneDataSource.changeScene(toScene = Scenes.Gone) runCurrent() assertThat(currentScene).isEqualTo(Scenes.Gone) sceneContainerConfig.sceneKeys Loading @@ -148,7 +136,6 @@ class SceneContainerViewModelTest : SysuiTestCase() { kosmos.runTest { val currentScene by collectLastValue(underTest.currentScene) fakeSceneDataSource.changeScene(toScene = Scenes.Lockscreen) runCurrent() assertThat(currentScene).isEqualTo(Scenes.Lockscreen) sceneContainerConfig.sceneKeys Loading @@ -163,7 +150,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun canChangeScene_whenNotAllowed_fromLockscreen_toFalsingProtectedScenes_returnsFalse() = kosmos.runTest { falsingManager.setIsFalseTouch(true) fakeFalsingManager.setIsFalseTouch(true) val currentScene by collectLastValue(underTest.currentScene) fakeSceneDataSource.changeScene(toScene = Scenes.Lockscreen) runCurrent() Loading @@ -185,7 +172,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun canChangeScene_whenNotAllowed_fromLockscreen_toFalsingUnprotectedScenes_returnsTrue() = kosmos.runTest { falsingManager.setIsFalseTouch(true) fakeFalsingManager.setIsFalseTouch(true) val currentScene by collectLastValue(underTest.currentScene) fakeSceneDataSource.changeScene(toScene = Scenes.Lockscreen) runCurrent() Loading @@ -206,7 +193,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun canChangeScene_whenNotAllowed_fromGone_toAnyOtherScene_returnsTrue() = kosmos.runTest { falsingManager.setIsFalseTouch(true) fakeFalsingManager.setIsFalseTouch(true) val currentScene by collectLastValue(underTest.currentScene) fakeSceneDataSource.changeScene(toScene = Scenes.Gone) runCurrent() Loading Loading @@ -254,7 +241,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun canShowOrReplaceOverlay_whenNotAllowed_whileOnLockscreen_returnsFalse() = kosmos.runTest { falsingManager.setIsFalseTouch(true) fakeFalsingManager.setIsFalseTouch(true) val currentScene by collectLastValue(underTest.currentScene) fakeSceneDataSource.changeScene(toScene = Scenes.Lockscreen) runCurrent() Loading @@ -270,7 +257,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun canShowOrReplaceOverlay_whenNotAllowed_whileOnGone_returnsTrue() = kosmos.runTest { falsingManager.setIsFalseTouch(true) fakeFalsingManager.setIsFalseTouch(true) val currentScene by collectLastValue(underTest.currentScene) fakeSceneDataSource.changeScene(toScene = Scenes.Gone) runCurrent() Loading @@ -286,9 +273,9 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun userInput() = kosmos.runTest { assertThat(kosmos.fakePowerRepository.userTouchRegistered).isFalse() assertThat(fakePowerRepository.userTouchRegistered).isFalse() underTest.onMotionEvent(mock()) assertThat(kosmos.fakePowerRepository.userTouchRegistered).isTrue() assertThat(fakePowerRepository.userTouchRegistered).isTrue() } @Test Loading Loading @@ -324,14 +311,11 @@ class SceneContainerViewModelTest : SysuiTestCase() { fun remoteUserInteraction_keepsContainerVisible() = kosmos.runTest { sceneInteractor.setVisible(false, "reason") runCurrent() assertThat(underTest.isVisible).isFalse() sceneInteractor.onRemoteUserInputStarted("reason") runCurrent() assertThat(underTest.isVisible).isTrue() underTest.onMotionEvent(mock { on { actionMasked } doReturn MotionEvent.ACTION_UP }) runCurrent() assertThat(underTest.isVisible).isFalse() } Loading @@ -348,7 +332,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { underTest.getActionableContentKey( currentScene = checkNotNull(currentScene), currentOverlays = checkNotNull(currentOverlays), overlayByKey = kosmos.fakeOverlaysByKeys, overlayByKey = fakeOverlaysByKeys, ) assertThat(actionableContentKey).isEqualTo(Scenes.Lockscreen) Loading @@ -357,6 +341,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun getActionableContentKey_multipleOverlays_returnsTopOverlay() = kosmos.runTest { enableDualShade() val currentScene by collectLastValue(underTest.currentScene) val currentOverlays by collectLastValue(sceneInteractor.currentOverlays) fakeSceneDataSource.showOverlay(Overlays.QuickSettingsShade) Loading @@ -369,7 +354,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { underTest.getActionableContentKey( currentScene = checkNotNull(currentScene), currentOverlays = checkNotNull(currentOverlays), overlayByKey = kosmos.fakeOverlaysByKeys, overlayByKey = fakeOverlaysByKeys, ) assertThat(actionableContentKey).isEqualTo(Overlays.QuickSettingsShade) Loading @@ -378,8 +363,8 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun edgeDetector_singleShade_usesDefaultEdgeDetector() = kosmos.runTest { val shadeMode by collectLastValue(kosmos.shadeMode) kosmos.enableSingleShade() val shadeMode by collectLastValue(shadeMode) enableSingleShade() assertThat(shadeMode).isEqualTo(ShadeMode.Single) assertThat(underTest.swipeSourceDetector).isEqualTo(DefaultEdgeDetector) Loading @@ -388,8 +373,8 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun edgeDetector_splitShade_usesDefaultEdgeDetector() = kosmos.runTest { val shadeMode by collectLastValue(kosmos.shadeMode) kosmos.enableSplitShade() val shadeMode by collectLastValue(shadeMode) enableSplitShade() assertThat(shadeMode).isEqualTo(ShadeMode.Split) assertThat(underTest.swipeSourceDetector).isEqualTo(DefaultEdgeDetector) Loading @@ -398,8 +383,8 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun edgeDetector_dualShade_narrowScreen_usesSceneContainerSwipeDetector() = kosmos.runTest { val shadeMode by collectLastValue(kosmos.shadeMode) kosmos.enableDualShade(wideLayout = false) val shadeMode by collectLastValue(shadeMode) enableDualShade(wideLayout = false) assertThat(shadeMode).isEqualTo(ShadeMode.Dual) assertThat(underTest.swipeSourceDetector) Loading @@ -409,8 +394,8 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun edgeDetector_dualShade_wideScreen_usesSceneContainerSwipeDetector() = kosmos.runTest { val shadeMode by collectLastValue(kosmos.shadeMode) kosmos.enableDualShade(wideLayout = true) val shadeMode by collectLastValue(shadeMode) enableDualShade(wideLayout = true) assertThat(shadeMode).isEqualTo(ShadeMode.Dual) assertThat(underTest.swipeSourceDetector) Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt +26 −41 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import com.android.systemui.kosmos.collectLastValue import com.android.systemui.kosmos.runCurrent import com.android.systemui.kosmos.runTest import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.lifecycle.activateIn import com.android.systemui.power.data.repository.fakePowerRepository import com.android.systemui.scene.domain.interactor.sceneInteractor Loading @@ -48,7 +49,6 @@ import com.android.systemui.statusbar.data.repository.fakeRemoteInputRepository import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertWithMessage import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.Job import org.junit.Before import org.junit.Test Loading @@ -56,15 +56,12 @@ import org.junit.runner.RunWith import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock @OptIn(ExperimentalCoroutinesApi::class) @SmallTest @RunWith(AndroidJUnit4::class) @EnableSceneContainer class SceneContainerViewModelTest : SysuiTestCase() { private val kosmos = testKosmos() private val testScope by lazy { kosmos.testScope } private val falsingManager by lazy { kosmos.fakeFalsingManager } private val kosmos = testKosmos().useUnconfinedTestDispatcher() private val view = mock<View>() private lateinit var underTest: SceneContainerViewModel Loading @@ -75,28 +72,21 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Before fun setUp() { underTest = kosmos.sceneContainerViewModelFactory.create( view, { motionEventHandler -> kosmos.sceneContainerViewModelFactory.create(view) { motionEventHandler -> this@SceneContainerViewModelTest.motionEventHandler = motionEventHandler }, ) } activationJob = Job() underTest.activateIn(testScope, activationJob) underTest.activateIn(kosmos.testScope, activationJob) } @Test fun activate_setsMotionEventHandler() = kosmos.runTest { runCurrent() assertThat(motionEventHandler).isNotNull() } kosmos.runTest { assertThat(motionEventHandler).isNotNull() } @Test fun deactivate_clearsMotionEventHandler() = kosmos.runTest { activationJob.cancel() runCurrent() assertThat(motionEventHandler).isNull() } Loading @@ -107,17 +97,16 @@ class SceneContainerViewModelTest : SysuiTestCase() { assertThat(underTest.isVisible).isTrue() sceneInteractor.setVisible(false, "reason") runCurrent() assertThat(underTest.isVisible).isFalse() sceneInteractor.setVisible(true, "reason") runCurrent() assertThat(underTest.isVisible).isTrue() } @Test fun sceneTransition() = kosmos.runTest { enableSingleShade() val currentScene by collectLastValue(underTest.currentScene) assertThat(currentScene).isEqualTo(Scenes.Lockscreen) Loading @@ -131,7 +120,6 @@ class SceneContainerViewModelTest : SysuiTestCase() { kosmos.runTest { val currentScene by collectLastValue(underTest.currentScene) fakeSceneDataSource.changeScene(toScene = Scenes.Gone) runCurrent() assertThat(currentScene).isEqualTo(Scenes.Gone) sceneContainerConfig.sceneKeys Loading @@ -148,7 +136,6 @@ class SceneContainerViewModelTest : SysuiTestCase() { kosmos.runTest { val currentScene by collectLastValue(underTest.currentScene) fakeSceneDataSource.changeScene(toScene = Scenes.Lockscreen) runCurrent() assertThat(currentScene).isEqualTo(Scenes.Lockscreen) sceneContainerConfig.sceneKeys Loading @@ -163,7 +150,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun canChangeScene_whenNotAllowed_fromLockscreen_toFalsingProtectedScenes_returnsFalse() = kosmos.runTest { falsingManager.setIsFalseTouch(true) fakeFalsingManager.setIsFalseTouch(true) val currentScene by collectLastValue(underTest.currentScene) fakeSceneDataSource.changeScene(toScene = Scenes.Lockscreen) runCurrent() Loading @@ -185,7 +172,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun canChangeScene_whenNotAllowed_fromLockscreen_toFalsingUnprotectedScenes_returnsTrue() = kosmos.runTest { falsingManager.setIsFalseTouch(true) fakeFalsingManager.setIsFalseTouch(true) val currentScene by collectLastValue(underTest.currentScene) fakeSceneDataSource.changeScene(toScene = Scenes.Lockscreen) runCurrent() Loading @@ -206,7 +193,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun canChangeScene_whenNotAllowed_fromGone_toAnyOtherScene_returnsTrue() = kosmos.runTest { falsingManager.setIsFalseTouch(true) fakeFalsingManager.setIsFalseTouch(true) val currentScene by collectLastValue(underTest.currentScene) fakeSceneDataSource.changeScene(toScene = Scenes.Gone) runCurrent() Loading Loading @@ -254,7 +241,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun canShowOrReplaceOverlay_whenNotAllowed_whileOnLockscreen_returnsFalse() = kosmos.runTest { falsingManager.setIsFalseTouch(true) fakeFalsingManager.setIsFalseTouch(true) val currentScene by collectLastValue(underTest.currentScene) fakeSceneDataSource.changeScene(toScene = Scenes.Lockscreen) runCurrent() Loading @@ -270,7 +257,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun canShowOrReplaceOverlay_whenNotAllowed_whileOnGone_returnsTrue() = kosmos.runTest { falsingManager.setIsFalseTouch(true) fakeFalsingManager.setIsFalseTouch(true) val currentScene by collectLastValue(underTest.currentScene) fakeSceneDataSource.changeScene(toScene = Scenes.Gone) runCurrent() Loading @@ -286,9 +273,9 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun userInput() = kosmos.runTest { assertThat(kosmos.fakePowerRepository.userTouchRegistered).isFalse() assertThat(fakePowerRepository.userTouchRegistered).isFalse() underTest.onMotionEvent(mock()) assertThat(kosmos.fakePowerRepository.userTouchRegistered).isTrue() assertThat(fakePowerRepository.userTouchRegistered).isTrue() } @Test Loading Loading @@ -324,14 +311,11 @@ class SceneContainerViewModelTest : SysuiTestCase() { fun remoteUserInteraction_keepsContainerVisible() = kosmos.runTest { sceneInteractor.setVisible(false, "reason") runCurrent() assertThat(underTest.isVisible).isFalse() sceneInteractor.onRemoteUserInputStarted("reason") runCurrent() assertThat(underTest.isVisible).isTrue() underTest.onMotionEvent(mock { on { actionMasked } doReturn MotionEvent.ACTION_UP }) runCurrent() assertThat(underTest.isVisible).isFalse() } Loading @@ -348,7 +332,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { underTest.getActionableContentKey( currentScene = checkNotNull(currentScene), currentOverlays = checkNotNull(currentOverlays), overlayByKey = kosmos.fakeOverlaysByKeys, overlayByKey = fakeOverlaysByKeys, ) assertThat(actionableContentKey).isEqualTo(Scenes.Lockscreen) Loading @@ -357,6 +341,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun getActionableContentKey_multipleOverlays_returnsTopOverlay() = kosmos.runTest { enableDualShade() val currentScene by collectLastValue(underTest.currentScene) val currentOverlays by collectLastValue(sceneInteractor.currentOverlays) fakeSceneDataSource.showOverlay(Overlays.QuickSettingsShade) Loading @@ -369,7 +354,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { underTest.getActionableContentKey( currentScene = checkNotNull(currentScene), currentOverlays = checkNotNull(currentOverlays), overlayByKey = kosmos.fakeOverlaysByKeys, overlayByKey = fakeOverlaysByKeys, ) assertThat(actionableContentKey).isEqualTo(Overlays.QuickSettingsShade) Loading @@ -378,8 +363,8 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun edgeDetector_singleShade_usesDefaultEdgeDetector() = kosmos.runTest { val shadeMode by collectLastValue(kosmos.shadeMode) kosmos.enableSingleShade() val shadeMode by collectLastValue(shadeMode) enableSingleShade() assertThat(shadeMode).isEqualTo(ShadeMode.Single) assertThat(underTest.swipeSourceDetector).isEqualTo(DefaultEdgeDetector) Loading @@ -388,8 +373,8 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun edgeDetector_splitShade_usesDefaultEdgeDetector() = kosmos.runTest { val shadeMode by collectLastValue(kosmos.shadeMode) kosmos.enableSplitShade() val shadeMode by collectLastValue(shadeMode) enableSplitShade() assertThat(shadeMode).isEqualTo(ShadeMode.Split) assertThat(underTest.swipeSourceDetector).isEqualTo(DefaultEdgeDetector) Loading @@ -398,8 +383,8 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun edgeDetector_dualShade_narrowScreen_usesSceneContainerSwipeDetector() = kosmos.runTest { val shadeMode by collectLastValue(kosmos.shadeMode) kosmos.enableDualShade(wideLayout = false) val shadeMode by collectLastValue(shadeMode) enableDualShade(wideLayout = false) assertThat(shadeMode).isEqualTo(ShadeMode.Dual) assertThat(underTest.swipeSourceDetector) Loading @@ -409,8 +394,8 @@ class SceneContainerViewModelTest : SysuiTestCase() { @Test fun edgeDetector_dualShade_wideScreen_usesSceneContainerSwipeDetector() = kosmos.runTest { val shadeMode by collectLastValue(kosmos.shadeMode) kosmos.enableDualShade(wideLayout = true) val shadeMode by collectLastValue(shadeMode) enableDualShade(wideLayout = true) assertThat(shadeMode).isEqualTo(ShadeMode.Dual) assertThat(underTest.swipeSourceDetector) Loading