diff options
| author | 2024-04-26 13:29:47 +0000 | |
|---|---|---|
| committer | 2024-04-26 13:29:47 +0000 | |
| commit | 1f447a8eea6988c44efa87e4b7a68b68aeada64d (patch) | |
| tree | d64590d4f54c6bc5e86cf038c0e80ed690b672df | |
| parent | a4641776f4a4854146d274e42e44b9eda8dfe403 (diff) | |
| parent | 4b616b1d3a053cd9e481da8e200b51d446c3a151 (diff) | |
Merge "Parameterize communal hub tests for scene container flag" into main
3 files changed, 93 insertions, 14 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/view/viewmodel/CommunalViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/view/viewmodel/CommunalViewModelTest.kt index 779e79ed80c9..0f8f1a216f3f 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/view/viewmodel/CommunalViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/view/viewmodel/CommunalViewModelTest.kt @@ -20,9 +20,9 @@ import android.app.smartspace.SmartspaceTarget  import android.appwidget.AppWidgetProviderInfo  import android.content.pm.UserInfo  import android.os.UserHandle +import android.platform.test.flag.junit.FlagsParameterization  import android.provider.Settings  import android.widget.RemoteViews -import androidx.test.ext.junit.runners.AndroidJUnit4  import androidx.test.filters.SmallTest  import com.android.systemui.Flags.FLAG_COMMUNAL_HUB  import com.android.systemui.SysuiTestCase @@ -41,6 +41,7 @@ import com.android.systemui.communal.ui.viewmodel.CommunalViewModel.Companion.PO  import com.android.systemui.coroutines.collectLastValue  import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor  import com.android.systemui.flags.Flags.COMMUNAL_SERVICE_ENABLED +import com.android.systemui.flags.andSceneContainer  import com.android.systemui.flags.fakeFeatureFlagsClassic  import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository  import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository @@ -50,8 +51,9 @@ import com.android.systemui.log.logcatLogBuffer  import com.android.systemui.media.controls.ui.controller.MediaHierarchyManager  import com.android.systemui.media.controls.ui.view.MediaHost  import com.android.systemui.settings.fakeUserTracker -import com.android.systemui.shade.data.repository.fakeShadeRepository +import com.android.systemui.shade.ShadeTestUtil  import com.android.systemui.shade.domain.interactor.shadeInteractor +import com.android.systemui.shade.shadeTestUtil  import com.android.systemui.smartspace.data.repository.FakeSmartspaceRepository  import com.android.systemui.smartspace.data.repository.fakeSmartspaceRepository  import com.android.systemui.testKosmos @@ -70,11 +72,13 @@ import org.mockito.Mock  import org.mockito.Mockito  import org.mockito.Mockito.verify  import org.mockito.MockitoAnnotations +import platform.test.runner.parameterized.ParameterizedAndroidJunit4 +import platform.test.runner.parameterized.Parameters  @OptIn(ExperimentalCoroutinesApi::class)  @SmallTest -@RunWith(AndroidJUnit4::class) -class CommunalViewModelTest : SysuiTestCase() { +@RunWith(ParameterizedAndroidJunit4::class) +class CommunalViewModelTest(flags: FlagsParameterization?) : SysuiTestCase() {      @Mock private lateinit var mediaHost: MediaHost      @Mock private lateinit var user: UserInfo      @Mock private lateinit var providerInfo: AppWidgetProviderInfo @@ -88,9 +92,14 @@ class CommunalViewModelTest : SysuiTestCase() {      private lateinit var smartspaceRepository: FakeSmartspaceRepository      private lateinit var mediaRepository: FakeCommunalMediaRepository      private lateinit var userRepository: FakeUserRepository +    private lateinit var shadeTestUtil: ShadeTestUtil      private lateinit var underTest: CommunalViewModel +    init { +        mSetFlagsRule.setFlagsParameterization(flags!!) +    } +      @Before      fun setUp() {          MockitoAnnotations.initMocks(this) @@ -101,6 +110,7 @@ class CommunalViewModelTest : SysuiTestCase() {          smartspaceRepository = kosmos.fakeSmartspaceRepository          mediaRepository = kosmos.fakeCommunalMediaRepository          userRepository = kosmos.fakeUserRepository +        shadeTestUtil = kosmos.shadeTestUtil          kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, true)          mSetFlagsRule.enableFlags(FLAG_COMMUNAL_HUB) @@ -274,7 +284,7 @@ class CommunalViewModelTest : SysuiTestCase() {          testScope.runTest {              // On keyguard without any shade expansion.              kosmos.fakeKeyguardRepository.setStatusBarState(StatusBarState.KEYGUARD) -            kosmos.fakeShadeRepository.setLockscreenShadeExpansion(0f) +            shadeTestUtil.setLockscreenShadeExpansion(0f)              runCurrent()              assertThat(underTest.canChangeScene()).isTrue()          } @@ -284,7 +294,7 @@ class CommunalViewModelTest : SysuiTestCase() {          testScope.runTest {              // On keyguard with shade fully expanded.              kosmos.fakeKeyguardRepository.setStatusBarState(StatusBarState.KEYGUARD) -            kosmos.fakeShadeRepository.setLockscreenShadeExpansion(1f) +            shadeTestUtil.setLockscreenShadeExpansion(1f)              runCurrent()              assertThat(underTest.canChangeScene()).isFalse()          } @@ -297,5 +307,11 @@ class CommunalViewModelTest : SysuiTestCase() {      private companion object {          val MAIN_USER_INFO = UserInfo(0, "primary", UserInfo.FLAG_MAIN) + +        @JvmStatic +        @Parameters(name = "{0}") +        fun getParams(): List<FlagsParameterization> { +            return FlagsParameterization.allCombinationsOf().andSceneContainer() +        }      }  } diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt index 7b5c1d3fe139..19b137c01ce4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt @@ -18,7 +18,7 @@ package com.android.systemui.shade  import android.graphics.Rect  import android.os.PowerManager -import android.testing.AndroidTestingRunner +import android.platform.test.flag.junit.FlagsParameterization  import android.testing.TestableLooper  import android.testing.ViewUtils  import android.view.MotionEvent @@ -41,6 +41,7 @@ import com.android.systemui.communal.shared.model.CommunalScenes  import com.android.systemui.communal.ui.viewmodel.CommunalViewModel  import com.android.systemui.communal.util.CommunalColors  import com.android.systemui.coroutines.collectLastValue +import com.android.systemui.flags.andSceneContainer  import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository  import com.android.systemui.keyguard.domain.interactor.keyguardInteractor  import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor @@ -49,8 +50,10 @@ import com.android.systemui.kosmos.Kosmos  import com.android.systemui.kosmos.testDispatcher  import com.android.systemui.kosmos.testScope  import com.android.systemui.res.R +import com.android.systemui.scene.domain.interactor.sceneInteractor +import com.android.systemui.scene.shared.flag.SceneContainerFlag +import com.android.systemui.scene.shared.model.Scenes  import com.android.systemui.scene.shared.model.sceneDataSourceDelegator -import com.android.systemui.shade.data.repository.fakeShadeRepository  import com.android.systemui.shade.domain.interactor.shadeInteractor  import com.android.systemui.statusbar.phone.SystemUIDialogFactory  import com.android.systemui.testKosmos @@ -69,12 +72,14 @@ import org.mockito.Mock  import org.mockito.Mockito.times  import org.mockito.Mockito.verify  import org.mockito.MockitoAnnotations +import platform.test.runner.parameterized.ParameterizedAndroidJunit4 +import platform.test.runner.parameterized.Parameters  @ExperimentalCoroutinesApi -@RunWith(AndroidTestingRunner::class) +@RunWith(ParameterizedAndroidJunit4::class)  @TestableLooper.RunWithLooper(setAsMainLooper = true)  @SmallTest -class GlanceableHubContainerControllerTest : SysuiTestCase() { +class GlanceableHubContainerControllerTest(flags: FlagsParameterization?) : SysuiTestCase() {      private val kosmos: Kosmos =          testKosmos().apply {              // UnconfinedTestDispatcher makes testing simpler due to CommunalInteractor flows using @@ -96,6 +101,10 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() {      private lateinit var communalRepository: FakeCommunalRepository      private lateinit var underTest: GlanceableHubContainerController +    init { +        mSetFlagsRule.setFlagsParameterization(flags!!) +    } +      @Before      fun setUp() {          MockitoAnnotations.initMocks(this) @@ -251,7 +260,7 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() {                  goToScene(CommunalScenes.Communal)                  // Shade shows up. -                fakeShadeRepository.setQsExpansion(1.0f) +                shadeTestUtil.setQsExpansion(1.0f)                  testableLooper.processAllMessages()                  // Touch events are not intercepted. @@ -405,7 +414,7 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() {                  goToScene(CommunalScenes.Communal)                  // Shade shows up. -                fakeShadeRepository.setQsExpansion(1.0f) +                shadeTestUtil.setQsExpansion(1.0f)                  testableLooper.processAllMessages()                  assertThat(underTest.lifecycle.currentState).isEqualTo(Lifecycle.State.STARTED) @@ -458,6 +467,13 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() {      }      private fun goToScene(scene: SceneKey) { +        if (SceneContainerFlag.isEnabled) { +            if (scene == CommunalScenes.Communal) { +                kosmos.sceneInteractor.changeScene(Scenes.Communal, "test") +            } else { +                kosmos.sceneInteractor.changeScene(Scenes.Lockscreen, "test") +            } +        }          communalRepository.changeScene(scene)          testableLooper.processAllMessages()      } @@ -486,5 +502,11 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() {              MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, CONTAINER_WIDTH.toFloat(), 0f, 0)          private val MOVE_EVENT = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_MOVE, 0f, 0f, 0)          private val UP_EVENT = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_UP, 0f, 0f, 0) + +        @JvmStatic +        @Parameters(name = "{0}") +        fun getParams(): List<FlagsParameterization> { +            return FlagsParameterization.allCombinationsOf().andSceneContainer() +        }      }  } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtil.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtil.kt index 4b85a42b3b9b..d17dd6c518a4 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtil.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtil.kt @@ -31,6 +31,16 @@ import org.junit.Assert  /** Sets up shade state for tests for either value of the scene container flag. */  class ShadeTestUtil constructor(val delegate: ShadeTestUtilDelegate) { +    /** Sets shade expansion to a value between 0-1. */ +    fun setShadeExpansion(shadeExpansion: Float) { +        setShadeAndQsExpansion(shadeExpansion, 0f) +    } + +    /** Sets QS expansion to a value between 0-1. */ +    fun setQsExpansion(qsExpansion: Float) { +        setShadeAndQsExpansion(0f, qsExpansion) +    } +      /** Sets both shade and QS expansion. One value must be zero or values must add up to 1f. */      fun setShadeAndQsExpansion(shadeExpansion: Float, qsExpansion: Float) {          Assert.assertTrue( @@ -40,15 +50,24 @@ class ShadeTestUtil constructor(val delegate: ShadeTestUtilDelegate) {          delegate.assertFlagValid()          delegate.setShadeAndQsExpansionInternal(shadeExpansion, qsExpansion)      } + +    /** Sets the shade expansion on the lockscreen to the given amount from 0-1. */ +    fun setLockscreenShadeExpansion(lockscreenShadeExpansion: Float) { +        delegate.assertFlagValid() +        delegate.setLockscreenShadeExpansion(lockscreenShadeExpansion) +    }  }  /** Sets up shade state for tests for a specific value of the scene container flag. */  interface ShadeTestUtilDelegate { +    /** Asserts that the scene container flag matches this implementation. */ +    fun assertFlagValid() +      /** Sets both shade and QS expansion. One value must be zero or values must add up to 1f. */      fun setShadeAndQsExpansionInternal(shadeExpansion: Float, qsExpansion: Float) -    /** Asserts that the scene container flag matches this implementation. */ -    fun assertFlagValid() +    /** Sets the shade expansion on the lockscreen to the given amount from 0-1. */ +    fun setLockscreenShadeExpansion(lockscreenShadeExpansion: Float)  }  /** Sets up shade state for tests when the scene container flag is disabled. */ @@ -60,6 +79,10 @@ class ShadeTestUtilLegacyImpl(val testScope: TestScope, val shadeRepository: Fak          testScope.runCurrent()      } +    override fun setLockscreenShadeExpansion(lockscreenShadeExpansion: Float) { +        shadeRepository.setLockscreenShadeExpansion(lockscreenShadeExpansion) +    } +      override fun assertFlagValid() {          Assert.assertFalse(SceneContainerFlag.isEnabled)      } @@ -78,6 +101,24 @@ class ShadeTestUtilSceneImpl(val testScope: TestScope, val sceneInteractor: Scen          }      } +    override fun setLockscreenShadeExpansion(lockscreenShadeExpansion: Float) { +        if (lockscreenShadeExpansion == 0f) { +            setIdleScene(Scenes.Lockscreen) +        } else if (lockscreenShadeExpansion == 1f) { +            setIdleScene(Scenes.Shade) +        } else { +            setTransitionProgress(Scenes.Lockscreen, Scenes.Shade, lockscreenShadeExpansion) +        } +    } + +    private fun setIdleScene(scene: SceneKey) { +        sceneInteractor.changeScene(scene, "test") +        val transitionState = +            MutableStateFlow<ObservableTransitionState>(ObservableTransitionState.Idle(scene)) +        sceneInteractor.setTransitionState(transitionState) +        testScope.runCurrent() +    } +      private fun setTransitionProgress(from: SceneKey, to: SceneKey, progress: Float) {          sceneInteractor.changeScene(from, "test")          val transitionState =  |