diff options
Diffstat (limited to 'libs')
48 files changed, 1076 insertions, 1270 deletions
diff --git a/libs/WindowManager/Shell/tests/flicker/AndroidTest.xml b/libs/WindowManager/Shell/tests/flicker/AndroidTest.xml index 08913c6fde53..27fc381a10d1 100644 --- a/libs/WindowManager/Shell/tests/flicker/AndroidTest.xml +++ b/libs/WindowManager/Shell/tests/flicker/AndroidTest.xml @@ -19,6 +19,8 @@ <option name="run-command" value="locksettings set-disabled false" /> <!-- restart launcher to activate TAPL --> <option name="run-command" value="setprop ro.test_harness 1 ; am force-stop com.google.android.apps.nexuslauncher" /> + <!-- Ensure output directory is empty at the start --> + <option name="run-command" value="rm -rf /sdcard/flicker" /> </target_preparer> <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller"> <option name="cleanup-apks" value="true"/> diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/BaseTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/BaseTest.kt index 6370df4a0c35..8465678524f4 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/BaseTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/BaseTest.kt @@ -20,10 +20,10 @@ import android.app.Instrumentation import android.platform.test.annotations.Presubmit import androidx.test.platform.app.InstrumentationRegistry import com.android.launcher3.tapl.LauncherInstrumentation -import com.android.server.wm.flicker.FlickerBuilderProvider -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest import com.android.server.wm.flicker.entireScreenCovered +import com.android.server.wm.flicker.junit.FlickerBuilderProvider import com.android.server.wm.flicker.navBarLayerIsVisibleAtStartAndEnd import com.android.server.wm.flicker.navBarLayerPositionAtStartAndEnd import com.android.server.wm.flicker.navBarWindowIsAlwaysVisible @@ -45,12 +45,12 @@ import org.junit.Test abstract class BaseTest @JvmOverloads constructor( - protected val testSpec: FlickerTestParameter, + protected val flicker: FlickerTest, protected val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation(), protected val tapl: LauncherInstrumentation = LauncherInstrumentation() ) { init { - testSpec.setIsTablet( + flicker.scenario.setIsTablet( WindowManagerStateHelper(instrumentation, clearCacheAfterParsing = false) .currentState .wmState @@ -68,13 +68,13 @@ constructor( @FlickerBuilderProvider fun buildFlicker(): FlickerBuilder { return FlickerBuilder(instrumentation).apply { - setup { testSpec.setIsTablet(wmHelper.currentState.wmState.isTablet) } + setup { flicker.scenario.setIsTablet(wmHelper.currentState.wmState.isTablet) } transition() } } /** Checks that all parts of the screen are covered during the transition */ - @Presubmit @Test open fun entireScreenCovered() = testSpec.entireScreenCovered() + @Presubmit @Test open fun entireScreenCovered() = flicker.entireScreenCovered() /** * Checks that the [ComponentNameMatcher.NAV_BAR] layer is visible during the whole transition @@ -82,8 +82,8 @@ constructor( @Presubmit @Test open fun navBarLayerIsVisibleAtStartAndEnd() { - Assume.assumeFalse(testSpec.isTablet) - testSpec.navBarLayerIsVisibleAtStartAndEnd() + Assume.assumeFalse(flicker.scenario.isTablet) + flicker.navBarLayerIsVisibleAtStartAndEnd() } /** @@ -93,8 +93,8 @@ constructor( @Presubmit @Test open fun navBarLayerPositionAtStartAndEnd() { - Assume.assumeFalse(testSpec.isTablet) - testSpec.navBarLayerPositionAtStartAndEnd() + Assume.assumeFalse(flicker.scenario.isTablet) + flicker.navBarLayerPositionAtStartAndEnd() } /** @@ -105,8 +105,8 @@ constructor( @Presubmit @Test open fun navBarWindowIsAlwaysVisible() { - Assume.assumeFalse(testSpec.isTablet) - testSpec.navBarWindowIsAlwaysVisible() + Assume.assumeFalse(flicker.scenario.isTablet) + flicker.navBarWindowIsAlwaysVisible() } /** @@ -115,8 +115,8 @@ constructor( @Presubmit @Test open fun taskBarLayerIsVisibleAtStartAndEnd() { - Assume.assumeTrue(testSpec.isTablet) - testSpec.taskBarLayerIsVisibleAtStartAndEnd() + Assume.assumeTrue(flicker.scenario.isTablet) + flicker.taskBarLayerIsVisibleAtStartAndEnd() } /** @@ -127,8 +127,8 @@ constructor( @Presubmit @Test open fun taskBarWindowIsAlwaysVisible() { - Assume.assumeTrue(testSpec.isTablet) - testSpec.taskBarWindowIsAlwaysVisible() + Assume.assumeTrue(flicker.scenario.isTablet) + flicker.taskBarWindowIsAlwaysVisible() } /** @@ -137,8 +137,7 @@ constructor( */ @Presubmit @Test - open fun statusBarLayerIsVisibleAtStartAndEnd() = - testSpec.statusBarLayerIsVisibleAtStartAndEnd() + open fun statusBarLayerIsVisibleAtStartAndEnd() = flicker.statusBarLayerIsVisibleAtStartAndEnd() /** * Checks the position of the [ComponentNameMatcher.STATUS_BAR] at the start and end of the @@ -146,7 +145,7 @@ constructor( */ @Presubmit @Test - open fun statusBarLayerPositionAtStartAndEnd() = testSpec.statusBarLayerPositionAtStartAndEnd() + open fun statusBarLayerPositionAtStartAndEnd() = flicker.statusBarLayerPositionAtStartAndEnd() /** * Checks that the [ComponentNameMatcher.STATUS_BAR] window is visible during the whole @@ -154,7 +153,7 @@ constructor( */ @Presubmit @Test - open fun statusBarWindowIsAlwaysVisible() = testSpec.statusBarWindowIsAlwaysVisible() + open fun statusBarWindowIsAlwaysVisible() = flicker.statusBarWindowIsAlwaysVisible() /** * Checks that all layers that are visible on the trace, are visible for at least 2 consecutive @@ -163,7 +162,7 @@ constructor( @Presubmit @Test open fun visibleLayersShownMoreThanOneConsecutiveEntry() { - testSpec.assertLayers { this.visibleLayersShownMoreThanOneConsecutiveEntry() } + flicker.assertLayers { this.visibleLayersShownMoreThanOneConsecutiveEntry() } } /** @@ -173,6 +172,6 @@ constructor( @Presubmit @Test open fun visibleWindowsShownMoreThanOneConsecutiveEntry() { - testSpec.assertWm { this.visibleWindowsShownMoreThanOneConsecutiveEntry() } + flicker.assertWm { this.visibleWindowsShownMoreThanOneConsecutiveEntry() } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonAssertions.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonAssertions.kt index 8765ad1596a5..51869140e8fa 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonAssertions.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonAssertions.kt @@ -18,23 +18,23 @@ package com.android.wm.shell.flicker -import android.view.Surface -import com.android.server.wm.flicker.FlickerTestParameter +import com.android.server.wm.flicker.FlickerTest import com.android.server.wm.flicker.helpers.WindowUtils import com.android.server.wm.flicker.traces.layers.LayerTraceEntrySubject import com.android.server.wm.flicker.traces.layers.LayersTraceSubject import com.android.server.wm.traces.common.IComponentMatcher import com.android.server.wm.traces.common.region.Region +import com.android.server.wm.traces.common.service.PlatformConsts -fun FlickerTestParameter.appPairsDividerIsVisibleAtEnd() { +fun FlickerTest.appPairsDividerIsVisibleAtEnd() { assertLayersEnd { this.isVisible(APP_PAIR_SPLIT_DIVIDER_COMPONENT) } } -fun FlickerTestParameter.appPairsDividerIsInvisibleAtEnd() { +fun FlickerTest.appPairsDividerIsInvisibleAtEnd() { assertLayersEnd { this.notContains(APP_PAIR_SPLIT_DIVIDER_COMPONENT) } } -fun FlickerTestParameter.appPairsDividerBecomesVisible() { +fun FlickerTest.appPairsDividerBecomesVisible() { assertLayers { this.isInvisible(DOCKED_STACK_DIVIDER_COMPONENT) .then() @@ -42,7 +42,7 @@ fun FlickerTestParameter.appPairsDividerBecomesVisible() { } } -fun FlickerTestParameter.splitScreenEntered( +fun FlickerTest.splitScreenEntered( component1: IComponentMatcher, component2: IComponentMatcher, fromOtherApp: Boolean, @@ -69,7 +69,7 @@ fun FlickerTestParameter.splitScreenEntered( splitScreenDividerIsVisibleAtEnd() } -fun FlickerTestParameter.splitScreenDismissed( +fun FlickerTest.splitScreenDismissed( component1: IComponentMatcher, component2: IComponentMatcher, toHome: Boolean @@ -87,27 +87,27 @@ fun FlickerTestParameter.splitScreenDismissed( splitScreenDividerIsInvisibleAtEnd() } -fun FlickerTestParameter.splitScreenDividerIsVisibleAtStart() { +fun FlickerTest.splitScreenDividerIsVisibleAtStart() { assertLayersStart { this.isVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) } } -fun FlickerTestParameter.splitScreenDividerIsVisibleAtEnd() { +fun FlickerTest.splitScreenDividerIsVisibleAtEnd() { assertLayersEnd { this.isVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) } } -fun FlickerTestParameter.splitScreenDividerIsInvisibleAtStart() { +fun FlickerTest.splitScreenDividerIsInvisibleAtStart() { assertLayersStart { this.isInvisible(SPLIT_SCREEN_DIVIDER_COMPONENT) } } -fun FlickerTestParameter.splitScreenDividerIsInvisibleAtEnd() { +fun FlickerTest.splitScreenDividerIsInvisibleAtEnd() { assertLayersEnd { this.isInvisible(SPLIT_SCREEN_DIVIDER_COMPONENT) } } -fun FlickerTestParameter.splitScreenDividerBecomesVisible() { +fun FlickerTest.splitScreenDividerBecomesVisible() { layerBecomesVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) } -fun FlickerTestParameter.splitScreenDividerBecomesInvisible() { +fun FlickerTest.splitScreenDividerBecomesInvisible() { assertLayers { this.isVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) .then() @@ -115,23 +115,23 @@ fun FlickerTestParameter.splitScreenDividerBecomesInvisible() { } } -fun FlickerTestParameter.layerBecomesVisible(component: IComponentMatcher) { +fun FlickerTest.layerBecomesVisible(component: IComponentMatcher) { assertLayers { this.isInvisible(component).then().isVisible(component) } } -fun FlickerTestParameter.layerBecomesInvisible(component: IComponentMatcher) { +fun FlickerTest.layerBecomesInvisible(component: IComponentMatcher) { assertLayers { this.isVisible(component).then().isInvisible(component) } } -fun FlickerTestParameter.layerIsVisibleAtEnd(component: IComponentMatcher) { +fun FlickerTest.layerIsVisibleAtEnd(component: IComponentMatcher) { assertLayersEnd { this.isVisible(component) } } -fun FlickerTestParameter.layerKeepVisible(component: IComponentMatcher) { +fun FlickerTest.layerKeepVisible(component: IComponentMatcher) { assertLayers { this.isVisible(component) } } -fun FlickerTestParameter.splitAppLayerBoundsBecomesVisible( +fun FlickerTest.splitAppLayerBoundsBecomesVisible( component: IComponentMatcher, landscapePosLeft: Boolean, portraitPosTop: Boolean @@ -145,12 +145,12 @@ fun FlickerTestParameter.splitAppLayerBoundsBecomesVisible( component, landscapePosLeft, portraitPosTop, - endRotation + scenario.endRotation ) } } -fun FlickerTestParameter.splitAppLayerBoundsBecomesVisibleByDrag(component: IComponentMatcher) { +fun FlickerTest.splitAppLayerBoundsBecomesVisibleByDrag(component: IComponentMatcher) { assertLayers { this.notContains(SPLIT_SCREEN_DIVIDER_COMPONENT.or(component), isOptional = true) .then() @@ -161,7 +161,7 @@ fun FlickerTestParameter.splitAppLayerBoundsBecomesVisibleByDrag(component: ICom } } -fun FlickerTestParameter.splitAppLayerBoundsBecomesInvisible( +fun FlickerTest.splitAppLayerBoundsBecomesInvisible( component: IComponentMatcher, landscapePosLeft: Boolean, portraitPosTop: Boolean @@ -171,7 +171,7 @@ fun FlickerTestParameter.splitAppLayerBoundsBecomesInvisible( component, landscapePosLeft, portraitPosTop, - endRotation + scenario.endRotation ) .then() .isVisible(component, true) @@ -180,27 +180,37 @@ fun FlickerTestParameter.splitAppLayerBoundsBecomesInvisible( } } -fun FlickerTestParameter.splitAppLayerBoundsIsVisibleAtEnd( +fun FlickerTest.splitAppLayerBoundsIsVisibleAtEnd( component: IComponentMatcher, landscapePosLeft: Boolean, portraitPosTop: Boolean ) { assertLayersEnd { - splitAppLayerBoundsSnapToDivider(component, landscapePosLeft, portraitPosTop, endRotation) + splitAppLayerBoundsSnapToDivider( + component, + landscapePosLeft, + portraitPosTop, + scenario.endRotation + ) } } -fun FlickerTestParameter.splitAppLayerBoundsKeepVisible( +fun FlickerTest.splitAppLayerBoundsKeepVisible( component: IComponentMatcher, landscapePosLeft: Boolean, portraitPosTop: Boolean ) { assertLayers { - splitAppLayerBoundsSnapToDivider(component, landscapePosLeft, portraitPosTop, endRotation) + splitAppLayerBoundsSnapToDivider( + component, + landscapePosLeft, + portraitPosTop, + scenario.endRotation + ) } } -fun FlickerTestParameter.splitAppLayerBoundsChanges( +fun FlickerTest.splitAppLayerBoundsChanges( component: IComponentMatcher, landscapePosLeft: Boolean, portraitPosTop: Boolean @@ -211,14 +221,14 @@ fun FlickerTestParameter.splitAppLayerBoundsChanges( component, landscapePosLeft, portraitPosTop, - endRotation + scenario.endRotation ) } else { this.splitAppLayerBoundsSnapToDivider( component, landscapePosLeft, portraitPosTop, - endRotation + scenario.endRotation ) .then() .isInvisible(component) @@ -227,7 +237,7 @@ fun FlickerTestParameter.splitAppLayerBoundsChanges( component, landscapePosLeft, portraitPosTop, - endRotation + scenario.endRotation ) } } @@ -237,7 +247,7 @@ fun LayersTraceSubject.splitAppLayerBoundsSnapToDivider( component: IComponentMatcher, landscapePosLeft: Boolean, portraitPosTop: Boolean, - rotation: Int + rotation: PlatformConsts.Rotation ): LayersTraceSubject { return invoke("splitAppLayerBoundsSnapToDivider") { it.splitAppLayerBoundsSnapToDivider(component, landscapePosLeft, portraitPosTop, rotation) @@ -248,7 +258,7 @@ fun LayerTraceEntrySubject.splitAppLayerBoundsSnapToDivider( component: IComponentMatcher, landscapePosLeft: Boolean, portraitPosTop: Boolean, - rotation: Int + rotation: PlatformConsts.Rotation ): LayerTraceEntrySubject { val displayBounds = WindowUtils.getDisplayBounds(rotation) return invoke { @@ -292,7 +302,7 @@ fun LayerTraceEntrySubject.splitAppLayerBoundsSnapToDivider( } } -fun FlickerTestParameter.appWindowBecomesVisible(component: IComponentMatcher) { +fun FlickerTest.appWindowBecomesVisible(component: IComponentMatcher) { assertWm { this.isAppWindowInvisible(component) .then() @@ -304,39 +314,39 @@ fun FlickerTestParameter.appWindowBecomesVisible(component: IComponentMatcher) { } } -fun FlickerTestParameter.appWindowBecomesInvisible(component: IComponentMatcher) { +fun FlickerTest.appWindowBecomesInvisible(component: IComponentMatcher) { assertWm { this.isAppWindowVisible(component).then().isAppWindowInvisible(component) } } -fun FlickerTestParameter.appWindowIsVisibleAtStart(component: IComponentMatcher) { +fun FlickerTest.appWindowIsVisibleAtStart(component: IComponentMatcher) { assertWmStart { this.isAppWindowVisible(component) } } -fun FlickerTestParameter.appWindowIsVisibleAtEnd(component: IComponentMatcher) { +fun FlickerTest.appWindowIsVisibleAtEnd(component: IComponentMatcher) { assertWmEnd { this.isAppWindowVisible(component) } } -fun FlickerTestParameter.appWindowIsInvisibleAtStart(component: IComponentMatcher) { +fun FlickerTest.appWindowIsInvisibleAtStart(component: IComponentMatcher) { assertWmStart { this.isAppWindowInvisible(component) } } -fun FlickerTestParameter.appWindowIsInvisibleAtEnd(component: IComponentMatcher) { +fun FlickerTest.appWindowIsInvisibleAtEnd(component: IComponentMatcher) { assertWmEnd { this.isAppWindowInvisible(component) } } -fun FlickerTestParameter.appWindowIsNotContainAtStart(component: IComponentMatcher) { +fun FlickerTest.appWindowIsNotContainAtStart(component: IComponentMatcher) { assertWmStart { this.notContains(component) } } -fun FlickerTestParameter.appWindowKeepVisible(component: IComponentMatcher) { +fun FlickerTest.appWindowKeepVisible(component: IComponentMatcher) { assertWm { this.isAppWindowVisible(component) } } -fun FlickerTestParameter.dockedStackDividerIsVisibleAtEnd() { +fun FlickerTest.dockedStackDividerIsVisibleAtEnd() { assertLayersEnd { this.isVisible(DOCKED_STACK_DIVIDER_COMPONENT) } } -fun FlickerTestParameter.dockedStackDividerBecomesVisible() { +fun FlickerTest.dockedStackDividerBecomesVisible() { assertLayers { this.isInvisible(DOCKED_STACK_DIVIDER_COMPONENT) .then() @@ -344,7 +354,7 @@ fun FlickerTestParameter.dockedStackDividerBecomesVisible() { } } -fun FlickerTestParameter.dockedStackDividerBecomesInvisible() { +fun FlickerTest.dockedStackDividerBecomesInvisible() { assertLayers { this.isVisible(DOCKED_STACK_DIVIDER_COMPONENT) .then() @@ -352,12 +362,12 @@ fun FlickerTestParameter.dockedStackDividerBecomesInvisible() { } } -fun FlickerTestParameter.dockedStackDividerNotExistsAtEnd() { +fun FlickerTest.dockedStackDividerNotExistsAtEnd() { assertLayersEnd { this.notContains(DOCKED_STACK_DIVIDER_COMPONENT) } } -fun FlickerTestParameter.appPairsPrimaryBoundsIsVisibleAtEnd( - rotation: Int, +fun FlickerTest.appPairsPrimaryBoundsIsVisibleAtEnd( + rotation: PlatformConsts.Rotation, primaryComponent: IComponentMatcher ) { assertLayersEnd { @@ -366,8 +376,8 @@ fun FlickerTestParameter.appPairsPrimaryBoundsIsVisibleAtEnd( } } -fun FlickerTestParameter.dockedStackPrimaryBoundsIsVisibleAtEnd( - rotation: Int, +fun FlickerTest.dockedStackPrimaryBoundsIsVisibleAtEnd( + rotation: PlatformConsts.Rotation, primaryComponent: IComponentMatcher ) { assertLayersEnd { @@ -376,8 +386,8 @@ fun FlickerTestParameter.dockedStackPrimaryBoundsIsVisibleAtEnd( } } -fun FlickerTestParameter.appPairsSecondaryBoundsIsVisibleAtEnd( - rotation: Int, +fun FlickerTest.appPairsSecondaryBoundsIsVisibleAtEnd( + rotation: PlatformConsts.Rotation, secondaryComponent: IComponentMatcher ) { assertLayersEnd { @@ -386,8 +396,8 @@ fun FlickerTestParameter.appPairsSecondaryBoundsIsVisibleAtEnd( } } -fun FlickerTestParameter.dockedStackSecondaryBoundsIsVisibleAtEnd( - rotation: Int, +fun FlickerTest.dockedStackSecondaryBoundsIsVisibleAtEnd( + rotation: PlatformConsts.Rotation, secondaryComponent: IComponentMatcher ) { assertLayersEnd { @@ -396,38 +406,38 @@ fun FlickerTestParameter.dockedStackSecondaryBoundsIsVisibleAtEnd( } } -fun getPrimaryRegion(dividerRegion: Region, rotation: Int): Region { +fun getPrimaryRegion(dividerRegion: Region, rotation: PlatformConsts.Rotation): Region { val displayBounds = WindowUtils.getDisplayBounds(rotation) - return if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) { + return if (rotation.isRotated()) { Region.from( 0, 0, - displayBounds.bounds.right, - dividerRegion.bounds.top + WindowUtils.dockedStackDividerInset + dividerRegion.bounds.left + WindowUtils.dockedStackDividerInset, + displayBounds.bounds.bottom ) } else { Region.from( 0, 0, - dividerRegion.bounds.left + WindowUtils.dockedStackDividerInset, - displayBounds.bounds.bottom + displayBounds.bounds.right, + dividerRegion.bounds.top + WindowUtils.dockedStackDividerInset ) } } -fun getSecondaryRegion(dividerRegion: Region, rotation: Int): Region { +fun getSecondaryRegion(dividerRegion: Region, rotation: PlatformConsts.Rotation): Region { val displayBounds = WindowUtils.getDisplayBounds(rotation) - return if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) { + return if (rotation.isRotated()) { Region.from( + dividerRegion.bounds.right - WindowUtils.dockedStackDividerInset, 0, - dividerRegion.bounds.bottom - WindowUtils.dockedStackDividerInset, displayBounds.bounds.right, displayBounds.bounds.bottom ) } else { Region.from( - dividerRegion.bounds.right - WindowUtils.dockedStackDividerInset, 0, + dividerRegion.bounds.bottom - WindowUtils.dockedStackDividerInset, displayBounds.bounds.right, displayBounds.bounds.bottom ) diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/BaseBubbleScreen.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/BaseBubbleScreen.kt index 0fc2004ce7f9..996b677470fe 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/BaseBubbleScreen.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/BaseBubbleScreen.kt @@ -21,21 +21,21 @@ import android.app.NotificationManager import android.content.Context import android.content.pm.PackageManager import android.os.ServiceManager -import android.view.Surface import androidx.test.uiautomator.By import androidx.test.uiautomator.UiObject2 import androidx.test.uiautomator.Until -import com.android.server.wm.flicker.Flicker -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory +import com.android.server.wm.flicker.IFlickerTestData import com.android.server.wm.flicker.helpers.LaunchBubbleHelper import com.android.server.wm.flicker.helpers.SYSTEMUI_PACKAGE +import com.android.server.wm.traces.common.service.PlatformConsts import com.android.wm.shell.flicker.BaseTest import org.junit.runners.Parameterized /** Base configurations for Bubble flicker tests */ -abstract class BaseBubbleScreen(testSpec: FlickerTestParameter) : BaseTest(testSpec) { +abstract class BaseBubbleScreen(flicker: FlickerTest) : BaseTest(flicker) { protected val context: Context = instrumentation.context protected val testApp = LaunchBubbleHelper(instrumentation) @@ -79,17 +79,18 @@ abstract class BaseBubbleScreen(testSpec: FlickerTestParameter) : BaseTest(testS } } - protected fun Flicker.waitAndGetAddBubbleBtn(): UiObject2? = + protected fun IFlickerTestData.waitAndGetAddBubbleBtn(): UiObject2? = device.wait(Until.findObject(By.text("Add Bubble")), FIND_OBJECT_TIMEOUT) - protected fun Flicker.waitAndGetCancelAllBtn(): UiObject2? = + protected fun IFlickerTestData.waitAndGetCancelAllBtn(): UiObject2? = device.wait(Until.findObject(By.text("Cancel All Bubble")), FIND_OBJECT_TIMEOUT) companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests(supportedRotations = listOf(Surface.ROTATION_0)) + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + supportedRotations = listOf(PlatformConsts.Rotation.ROTATION_0) + ) } const val FIND_OBJECT_TIMEOUT = 2000L diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/DismissBubbleScreen.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/DismissBubbleScreen.kt index ab721173763e..7fc12f06f530 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/DismissBubbleScreen.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/DismissBubbleScreen.kt @@ -25,9 +25,9 @@ import android.view.WindowManager import androidx.test.filters.RequiresDevice import androidx.test.uiautomator.By import androidx.test.uiautomator.Until -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.Parameterized @@ -45,7 +45,7 @@ import org.junit.runners.Parameterized @RequiresDevice @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) -open class DismissBubbleScreen(testSpec: FlickerTestParameter) : BaseBubbleScreen(testSpec) { +open class DismissBubbleScreen(flicker: FlickerTest) : BaseBubbleScreen(flicker) { private val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager private val displaySize = DisplayMetrics() @@ -72,7 +72,7 @@ open class DismissBubbleScreen(testSpec: FlickerTestParameter) : BaseBubbleScree @Presubmit @Test open fun testAppIsAlwaysVisible() { - testSpec.assertLayers { this.isVisible(testApp) } + flicker.assertLayers { this.isVisible(testApp) } } /** {@inheritDoc} */ diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/ExpandBubbleScreen.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/ExpandBubbleScreen.kt index 226eab89920f..0cda626f8286 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/ExpandBubbleScreen.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/ExpandBubbleScreen.kt @@ -20,9 +20,9 @@ import android.platform.test.annotations.Presubmit import androidx.test.filters.RequiresDevice import androidx.test.uiautomator.By import androidx.test.uiautomator.Until -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.Parameterized @@ -42,7 +42,7 @@ import org.junit.runners.Parameterized @RequiresDevice @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) -open class ExpandBubbleScreen(testSpec: FlickerTestParameter) : BaseBubbleScreen(testSpec) { +open class ExpandBubbleScreen(flicker: FlickerTest) : BaseBubbleScreen(flicker) { /** {@inheritDoc} */ override val transition: FlickerBuilder.() -> Unit @@ -64,6 +64,6 @@ open class ExpandBubbleScreen(testSpec: FlickerTestParameter) : BaseBubbleScreen @Presubmit @Test open fun testAppIsAlwaysVisible() { - testSpec.assertLayers { this.isVisible(testApp) } + flicker.assertLayers { this.isVisible(testApp) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/LaunchBubbleFromLockScreen.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/LaunchBubbleFromLockScreen.kt index 47167b8b469e..04b1bdd3fd46 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/LaunchBubbleFromLockScreen.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/LaunchBubbleFromLockScreen.kt @@ -23,9 +23,9 @@ import android.view.WindowManager import androidx.test.filters.RequiresDevice import androidx.test.uiautomator.By import androidx.test.uiautomator.Until -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.Parameterized @@ -43,7 +43,7 @@ import org.junit.runners.Parameterized @RequiresDevice @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) -class LaunchBubbleFromLockScreen(testSpec: FlickerTestParameter) : BaseBubbleScreen(testSpec) { +class LaunchBubbleFromLockScreen(flicker: FlickerTest) : BaseBubbleScreen(flicker) { /** {@inheritDoc} */ override val transition: FlickerBuilder.() -> Unit @@ -88,7 +88,7 @@ class LaunchBubbleFromLockScreen(testSpec: FlickerTestParameter) : BaseBubbleScr @FlakyTest(bugId = 242088970) @Test fun testAppIsVisibleAtEnd() { - testSpec.assertLayersEnd { this.isVisible(testApp) } + flicker.assertLayersEnd { this.isVisible(testApp) } } /** {@inheritDoc} */ diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/LaunchBubbleScreen.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/LaunchBubbleScreen.kt index b86599913649..9b4e39c42d11 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/LaunchBubbleScreen.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/LaunchBubbleScreen.kt @@ -19,9 +19,9 @@ package com.android.wm.shell.flicker.bubble import android.platform.test.annotations.RequiresDevice import androidx.test.uiautomator.By import androidx.test.uiautomator.Until -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.Parameterized @@ -40,7 +40,7 @@ import org.junit.runners.Parameterized @RequiresDevice @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) -open class LaunchBubbleScreen(testSpec: FlickerTestParameter) : BaseBubbleScreen(testSpec) { +open class LaunchBubbleScreen(flicker: FlickerTest) : BaseBubbleScreen(flicker) { /** {@inheritDoc} */ override val transition: FlickerBuilder.() -> Unit @@ -59,6 +59,6 @@ open class LaunchBubbleScreen(testSpec: FlickerTestParameter) : BaseBubbleScreen @Test open fun testAppIsAlwaysVisible() { - testSpec.assertLayers { this.isVisible(testApp) } + flicker.assertLayers { this.isVisible(testApp) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/MultiBubblesScreen.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/MultiBubblesScreen.kt index bf4d7d4e7734..b3a2ad309b27 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/MultiBubblesScreen.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/MultiBubblesScreen.kt @@ -22,10 +22,10 @@ import androidx.test.filters.RequiresDevice import androidx.test.uiautomator.By import androidx.test.uiautomator.UiObject2 import androidx.test.uiautomator.Until -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest import com.android.server.wm.flicker.helpers.isShellTransitionsEnabled +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import org.junit.Assume import org.junit.Before import org.junit.Test @@ -45,7 +45,7 @@ import org.junit.runners.Parameterized @RequiresDevice @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) -open class MultiBubblesScreen(testSpec: FlickerTestParameter) : BaseBubbleScreen(testSpec) { +open class MultiBubblesScreen(flicker: FlickerTest) : BaseBubbleScreen(flicker) { @Before open fun before() { @@ -87,6 +87,6 @@ open class MultiBubblesScreen(testSpec: FlickerTestParameter) : BaseBubbleScreen @Presubmit @Test open fun testAppIsAlwaysVisible() { - testSpec.assertLayers { this.isVisible(testApp) } + flicker.assertLayers { this.isVisible(testApp) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/MultiBubblesScreenShellTransit.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/MultiBubblesScreenShellTransit.kt index 57adeab7b070..191f4fa893f9 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/MultiBubblesScreenShellTransit.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/MultiBubblesScreenShellTransit.kt @@ -18,9 +18,9 @@ package com.android.wm.shell.flicker.bubble import android.platform.test.annotations.FlakyTest import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter +import com.android.server.wm.flicker.FlickerTest import com.android.server.wm.flicker.helpers.isShellTransitionsEnabled +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import org.junit.Assume import org.junit.Before import org.junit.runner.RunWith @@ -30,8 +30,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FlakyTest(bugId = 217777115) -class MultiBubblesScreenShellTransit(testSpec: FlickerTestParameter) : - MultiBubblesScreen(testSpec) { +class MultiBubblesScreenShellTransit(flicker: FlickerTest) : MultiBubblesScreen(flicker) { @Before override fun before() { Assume.assumeTrue(isShellTransitionsEnabled) diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/AutoEnterPipOnGoToHomeTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/AutoEnterPipOnGoToHomeTest.kt index 7546a55c08fa..5e898e8710cd 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/AutoEnterPipOnGoToHomeTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/AutoEnterPipOnGoToHomeTest.kt @@ -18,15 +18,15 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.FlakyTest import android.platform.test.annotations.Presubmit -import android.view.Surface import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest import com.android.server.wm.flicker.helpers.setRotation import com.android.server.wm.flicker.helpers.wakeUpAndGoToHomeScreen +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import com.android.server.wm.flicker.rules.RemoveAllTasksButHomeRule import com.android.server.wm.flicker.rules.RemoveAllTasksButHomeRule.Companion.removeAllTasksButHome +import com.android.server.wm.traces.common.service.PlatformConsts import org.junit.Assume import org.junit.FixMethodOrder import org.junit.Test @@ -59,7 +59,7 @@ import org.junit.runners.Parameterized @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) @FlakyTest(bugId = 238367575) -class AutoEnterPipOnGoToHomeTest(testSpec: FlickerTestParameter) : EnterPipTest(testSpec) { +class AutoEnterPipOnGoToHomeTest(flicker: FlickerTest) : EnterPipTest(flicker) { /** Defines the transition used to run the test */ override val transition: FlickerBuilder.() -> Unit get() = { @@ -73,7 +73,7 @@ class AutoEnterPipOnGoToHomeTest(testSpec: FlickerTestParameter) : EnterPipTest( // close gracefully so that onActivityUnpinned() can be called before force exit pipApp.closePipWindow(wmHelper) - setRotation(Surface.ROTATION_0) + setRotation(PlatformConsts.Rotation.ROTATION_0) RemoveAllTasksButHomeRule.removeAllTasksButHome() pipApp.exit(wmHelper) } @@ -83,7 +83,7 @@ class AutoEnterPipOnGoToHomeTest(testSpec: FlickerTestParameter) : EnterPipTest( @FlakyTest(bugId = 256863309) @Test override fun pipLayerReduces() { - testSpec.assertLayers { + flicker.assertLayers { val pipLayerList = this.layers { pipApp.layerMatchesAnyOf(it) && it.isVisible } pipLayerList.zipWithNext { previous, current -> current.visibleRegion.notBiggerThan(previous.visibleRegion.region) @@ -96,8 +96,8 @@ class AutoEnterPipOnGoToHomeTest(testSpec: FlickerTestParameter) : EnterPipTest( @Test fun pipLayerMovesTowardsRightBottomCorner() { // in gestural nav the swipe makes PiP first go upwards - Assume.assumeFalse(testSpec.isGesturalNavigation) - testSpec.assertLayers { + Assume.assumeFalse(flicker.scenario.isGesturalNavigation) + flicker.assertLayers { val pipLayerList = this.layers { pipApp.layerMatchesAnyOf(it) && it.isVisible } // Pip animates towards the right bottom corner, but because it is being resized at the // same time, it is possible it shrinks first quickly below the default position and get @@ -112,7 +112,7 @@ class AutoEnterPipOnGoToHomeTest(testSpec: FlickerTestParameter) : EnterPipTest( @Test override fun focusChanges() { // in gestural nav the focus goes to different activity on swipe up - Assume.assumeFalse(testSpec.isGesturalNavigation) + Assume.assumeFalse(flicker.scenario.isGesturalNavigation) super.focusChanges() } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipOnUserLeaveHintTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipOnUserLeaveHintTest.kt index c8aa6d20c91b..79feeaa3c222 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipOnUserLeaveHintTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipOnUserLeaveHintTest.kt @@ -17,14 +17,14 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.Presubmit -import android.view.Surface import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest import com.android.server.wm.flicker.helpers.setRotation import com.android.server.wm.flicker.helpers.wakeUpAndGoToHomeScreen +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import com.android.server.wm.flicker.rules.RemoveAllTasksButHomeRule +import com.android.server.wm.traces.common.service.PlatformConsts import org.junit.Assume import org.junit.FixMethodOrder import org.junit.Test @@ -56,7 +56,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class EnterPipOnUserLeaveHintTest(testSpec: FlickerTestParameter) : EnterPipTest(testSpec) { +class EnterPipOnUserLeaveHintTest(flicker: FlickerTest) : EnterPipTest(flicker) { /** Defines the transition used to run the test */ override val transition: FlickerBuilder.() -> Unit get() = { @@ -68,7 +68,7 @@ class EnterPipOnUserLeaveHintTest(testSpec: FlickerTestParameter) : EnterPipTest pipApp.enableEnterPipOnUserLeaveHint() } teardown { - setRotation(Surface.ROTATION_0) + setRotation(PlatformConsts.Rotation.ROTATION_0) RemoveAllTasksButHomeRule.removeAllTasksButHome() pipApp.exit(wmHelper) } @@ -78,10 +78,10 @@ class EnterPipOnUserLeaveHintTest(testSpec: FlickerTestParameter) : EnterPipTest @Presubmit @Test override fun pipAppLayerAlwaysVisible() { - if (!testSpec.isGesturalNavigation) super.pipAppLayerAlwaysVisible() + if (!flicker.scenario.isGesturalNavigation) super.pipAppLayerAlwaysVisible() else { // pip layer in gesture nav will disappear during transition - testSpec.assertLayers { + flicker.assertLayers { this.isVisible(pipApp).then().isInvisible(pipApp).then().isVisible(pipApp) } } @@ -91,7 +91,7 @@ class EnterPipOnUserLeaveHintTest(testSpec: FlickerTestParameter) : EnterPipTest @Test override fun pipLayerReduces() { // in gestural nav the pip enters through alpha animation - Assume.assumeFalse(testSpec.isGesturalNavigation) + Assume.assumeFalse(flicker.scenario.isGesturalNavigation) super.pipLayerReduces() } @@ -99,7 +99,7 @@ class EnterPipOnUserLeaveHintTest(testSpec: FlickerTestParameter) : EnterPipTest @Test override fun focusChanges() { // in gestural nav the focus goes to different activity on swipe up - Assume.assumeFalse(testSpec.isGesturalNavigation) + Assume.assumeFalse(flicker.scenario.isGesturalNavigation) super.focusChanges() } @@ -112,11 +112,11 @@ class EnterPipOnUserLeaveHintTest(testSpec: FlickerTestParameter) : EnterPipTest @Presubmit @Test override fun pipLayerRemainInsideVisibleBounds() { - if (!testSpec.isGesturalNavigation) super.pipLayerRemainInsideVisibleBounds() + if (!flicker.scenario.isGesturalNavigation) super.pipLayerRemainInsideVisibleBounds() else { // pip layer in gesture nav will disappear during transition - testSpec.assertLayersStart { this.visibleRegion(pipApp).coversAtMost(displayBounds) } - testSpec.assertLayersEnd { this.visibleRegion(pipApp).coversAtMost(displayBounds) } + flicker.assertLayersStart { this.visibleRegion(pipApp).coversAtMost(displayBounds) } + flicker.assertLayersEnd { this.visibleRegion(pipApp).coversAtMost(displayBounds) } } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTest.kt index 2b629e73e750..1a76142330a7 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTest.kt @@ -17,16 +17,16 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.Presubmit -import android.view.Surface import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory import com.android.server.wm.flicker.helpers.setRotation import com.android.server.wm.flicker.helpers.wakeUpAndGoToHomeScreen +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import com.android.server.wm.flicker.rules.RemoveAllTasksButHomeRule import com.android.server.wm.traces.common.ComponentNameMatcher +import com.android.server.wm.traces.common.service.PlatformConsts import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith @@ -57,7 +57,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -open class EnterPipTest(testSpec: FlickerTestParameter) : PipTransition(testSpec) { +open class EnterPipTest(flicker: FlickerTest) : PipTransition(flicker) { /** {@inheritDoc} */ override val transition: FlickerBuilder.() -> Unit @@ -68,7 +68,7 @@ open class EnterPipTest(testSpec: FlickerTestParameter) : PipTransition(testSpec pipApp.launchViaIntent(wmHelper) } teardown { - setRotation(Surface.ROTATION_0) + setRotation(PlatformConsts.Rotation.ROTATION_0) RemoveAllTasksButHomeRule.removeAllTasksButHome() pipApp.exit(wmHelper) } @@ -79,16 +79,14 @@ open class EnterPipTest(testSpec: FlickerTestParameter) : PipTransition(testSpec @Presubmit @Test open fun pipAppWindowAlwaysVisible() { - testSpec.assertWm { this.isAppWindowVisible(pipApp) } + flicker.assertWm { this.isAppWindowVisible(pipApp) } } - /** - * Checks [pipApp] layer remains visible throughout the animation - */ + /** Checks [pipApp] layer remains visible throughout the animation */ @Presubmit @Test open fun pipAppLayerAlwaysVisible() { - testSpec.assertLayers { this.isVisible(pipApp) } + flicker.assertLayers { this.isVisible(pipApp) } } /** @@ -98,7 +96,7 @@ open class EnterPipTest(testSpec: FlickerTestParameter) : PipTransition(testSpec @Presubmit @Test fun pipWindowRemainInsideVisibleBounds() { - testSpec.assertWmVisibleRegion(pipApp) { coversAtMost(displayBounds) } + flicker.assertWmVisibleRegion(pipApp) { coversAtMost(displayBounds) } } /** @@ -108,14 +106,14 @@ open class EnterPipTest(testSpec: FlickerTestParameter) : PipTransition(testSpec @Presubmit @Test open fun pipLayerRemainInsideVisibleBounds() { - testSpec.assertLayersVisibleRegion(pipApp) { coversAtMost(displayBounds) } + flicker.assertLayersVisibleRegion(pipApp) { coversAtMost(displayBounds) } } /** Checks that the visible region of [pipApp] always reduces during the animation */ @Presubmit @Test open fun pipLayerReduces() { - testSpec.assertLayers { + flicker.assertLayers { val pipLayerList = this.layers { pipApp.layerMatchesAnyOf(it) && it.isVisible } pipLayerList.zipWithNext { previous, current -> current.visibleRegion.notBiggerThan(previous.visibleRegion.region) @@ -127,7 +125,7 @@ open class EnterPipTest(testSpec: FlickerTestParameter) : PipTransition(testSpec @Presubmit @Test fun pipWindowBecomesPinned() { - testSpec.assertWm { + flicker.assertWm { invoke("pipWindowIsNotPinned") { it.isNotPinned(pipApp) } .then() .invoke("pipWindowIsPinned") { it.isPinned(pipApp) } @@ -138,7 +136,7 @@ open class EnterPipTest(testSpec: FlickerTestParameter) : PipTransition(testSpec @Presubmit @Test fun launcherLayerBecomesVisible() { - testSpec.assertLayers { + flicker.assertLayers { isInvisible(ComponentNameMatcher.LAUNCHER) .then() .isVisible(ComponentNameMatcher.LAUNCHER) @@ -152,21 +150,22 @@ open class EnterPipTest(testSpec: FlickerTestParameter) : PipTransition(testSpec @Presubmit @Test open fun focusChanges() { - testSpec.assertEventLog { this.focusChanges(pipApp.`package`, "NexusLauncherActivity") } + flicker.assertEventLog { this.focusChanges(pipApp.`package`, "NexusLauncherActivity") } } companion object { /** * Creates the test configurations. * - * See [FlickerTestParameterFactory.getConfigNonRotationTests] for configuring repetitions, - * screen orientation and navigation modes. + * See [FlickerTestFactory.nonRotationTests] for configuring repetitions, screen orientation + * and navigation modes. */ @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests(supportedRotations = listOf(Surface.ROTATION_0)) + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + supportedRotations = listOf(PlatformConsts.Rotation.ROTATION_0) + ) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientationTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientationTest.kt index b4594dee2c73..2b90243de5a6 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientationTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientationTest.kt @@ -19,22 +19,22 @@ package com.android.wm.shell.flicker.pip import android.app.Activity import android.platform.test.annotations.FlakyTest import android.platform.test.annotations.Presubmit -import android.view.Surface import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory import com.android.server.wm.flicker.entireScreenCovered import com.android.server.wm.flicker.helpers.FixedOrientationAppHelper import com.android.server.wm.flicker.helpers.WindowUtils import com.android.server.wm.flicker.helpers.setRotation import com.android.server.wm.flicker.helpers.wakeUpAndGoToHomeScreen +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import com.android.server.wm.flicker.navBarLayerPositionAtStartAndEnd import com.android.server.wm.flicker.rules.RemoveAllTasksButHomeRule import com.android.server.wm.flicker.testapp.ActivityOptions.Pip.ACTION_ENTER_PIP import com.android.server.wm.flicker.testapp.ActivityOptions.PortraitOnlyActivity.EXTRA_FIXED_ORIENTATION import com.android.server.wm.traces.common.ComponentNameMatcher +import com.android.server.wm.traces.common.service.PlatformConsts import com.android.wm.shell.flicker.pip.PipTransition.BroadcastActionTrigger.Companion.ORIENTATION_LANDSCAPE import com.android.wm.shell.flicker.pip.PipTransition.BroadcastActionTrigger.Companion.ORIENTATION_PORTRAIT import org.junit.Assume @@ -51,32 +51,31 @@ import org.junit.runners.Parameterized * To run this test: `atest WMShellFlickerTests:EnterPipToOtherOrientationTest` * * Actions: + * ``` * Launch [testApp] on a fixed portrait orientation * Launch [pipApp] on a fixed landscape orientation * Broadcast action [ACTION_ENTER_PIP] to enter pip mode - * + * ``` * Notes: + * ``` * 1. Some default assertions (e.g., nav bar, status bar and screen covered) * are inherited [PipTransition] * 2. Part of the test setup occurs automatically via * [com.android.server.wm.flicker.TransitionRunnerWithRules], * including configuring navigation mode, initial orientation and ensuring no * apps are running before setup + * ``` */ @RequiresDevice @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class EnterPipToOtherOrientationTest( - testSpec: FlickerTestParameter -) : PipTransition(testSpec) { +class EnterPipToOtherOrientationTest(flicker: FlickerTest) : PipTransition(flicker) { private val testApp = FixedOrientationAppHelper(instrumentation) - private val startingBounds = WindowUtils.getDisplayBounds(Surface.ROTATION_90) - private val endingBounds = WindowUtils.getDisplayBounds(Surface.ROTATION_0) + private val startingBounds = WindowUtils.getDisplayBounds(PlatformConsts.Rotation.ROTATION_90) + private val endingBounds = WindowUtils.getDisplayBounds(PlatformConsts.Rotation.ROTATION_0) - /** - * Defines the transition used to run the test - */ + /** Defines the transition used to run the test */ override val transition: FlickerBuilder.() -> Unit get() = { setup { @@ -85,19 +84,18 @@ class EnterPipToOtherOrientationTest( // Launch a portrait only app on the fullscreen stack testApp.launchViaIntent( - wmHelper, stringExtras = mapOf( - EXTRA_FIXED_ORIENTATION to ORIENTATION_PORTRAIT.toString() - ) + wmHelper, + stringExtras = mapOf(EXTRA_FIXED_ORIENTATION to ORIENTATION_PORTRAIT.toString()) ) // Launch the PiP activity fixed as landscape pipApp.launchViaIntent( - wmHelper, stringExtras = mapOf( - EXTRA_FIXED_ORIENTATION to ORIENTATION_LANDSCAPE.toString() - ) + wmHelper, + stringExtras = + mapOf(EXTRA_FIXED_ORIENTATION to ORIENTATION_LANDSCAPE.toString()) ) } teardown { - setRotation(Surface.ROTATION_0) + setRotation(PlatformConsts.Rotation.ROTATION_0) RemoveAllTasksButHomeRule.removeAllTasksButHome() pipApp.exit(wmHelper) testApp.exit(wmHelper) @@ -107,7 +105,8 @@ class EnterPipToOtherOrientationTest( // in portrait broadcastActionTrigger.doAction(ACTION_ENTER_PIP) // during rotation the status bar becomes invisible and reappears at the end - wmHelper.StateSyncBuilder() + wmHelper + .StateSyncBuilder() .withPipShown() .withNavOrTaskBarVisible() .withStatusBarVisible() @@ -116,21 +115,21 @@ class EnterPipToOtherOrientationTest( } /** - * This test is not compatible with Tablets. When using [Activity.setRequestedOrientation] - * to fix a orientation, Tablets instead keep the same orientation and add letterboxes + * This test is not compatible with Tablets. When using [Activity.setRequestedOrientation] to + * fix a orientation, Tablets instead keep the same orientation and add letterboxes */ @Before fun setup() { - Assume.assumeFalse(testSpec.isTablet) + Assume.assumeFalse(flicker.scenario.isTablet) } /** - * Checks that the [ComponentNameMatcher.NAV_BAR] has the correct position at - * the start and end of the transition + * Checks that the [ComponentNameMatcher.NAV_BAR] has the correct position at the start and end + * of the transition */ @FlakyTest @Test - override fun navBarLayerPositionAtStartAndEnd() = testSpec.navBarLayerPositionAtStartAndEnd() + override fun navBarLayerPositionAtStartAndEnd() = flicker.navBarLayerPositionAtStartAndEnd() /** * Checks that all parts of the screen are covered at the start and end of the transition @@ -139,7 +138,7 @@ class EnterPipToOtherOrientationTest( */ @Presubmit @Test - fun entireScreenCoveredAtStartAndEnd() = testSpec.entireScreenCovered(allStates = false) + fun entireScreenCoveredAtStartAndEnd() = flicker.entireScreenCovered(allStates = false) @FlakyTest(bugId = 251219769) @Test @@ -147,89 +146,65 @@ class EnterPipToOtherOrientationTest( super.entireScreenCovered() } - /** - * Checks [pipApp] window remains visible and on top throughout the transition - */ + /** Checks [pipApp] window remains visible and on top throughout the transition */ @Presubmit @Test fun pipAppWindowIsAlwaysOnTop() { - testSpec.assertWm { - isAppWindowOnTop(pipApp) - } + flicker.assertWm { isAppWindowOnTop(pipApp) } } - /** - * Checks that [testApp] window is not visible at the start - */ + /** Checks that [testApp] window is not visible at the start */ @Presubmit @Test fun testAppWindowInvisibleOnStart() { - testSpec.assertWmStart { - isAppWindowInvisible(testApp) - } + flicker.assertWmStart { isAppWindowInvisible(testApp) } } - /** - * Checks that [testApp] window is visible at the end - */ + /** Checks that [testApp] window is visible at the end */ @Presubmit @Test fun testAppWindowVisibleOnEnd() { - testSpec.assertWmEnd { - isAppWindowVisible(testApp) - } + flicker.assertWmEnd { isAppWindowVisible(testApp) } } - /** - * Checks that [testApp] layer is not visible at the start - */ + /** Checks that [testApp] layer is not visible at the start */ @Presubmit @Test fun testAppLayerInvisibleOnStart() { - testSpec.assertLayersStart { - isInvisible(testApp) - } + flicker.assertLayersStart { isInvisible(testApp) } } - /** - * Checks that [testApp] layer is visible at the end - */ + /** Checks that [testApp] layer is visible at the end */ @Presubmit @Test fun testAppLayerVisibleOnEnd() { - testSpec.assertLayersEnd { - isVisible(testApp) - } + flicker.assertLayersEnd { isVisible(testApp) } } /** - * Checks that the visible region of [pipApp] covers the full display area at the start of - * the transition + * Checks that the visible region of [pipApp] covers the full display area at the start of the + * transition */ @Presubmit @Test fun pipAppLayerCoversFullScreenOnStart() { - testSpec.assertLayersStart { - visibleRegion(pipApp).coversExactly(startingBounds) - } + flicker.assertLayersStart { visibleRegion(pipApp).coversExactly(startingBounds) } } /** - * Checks that the visible region of [testApp] plus the visible region of [pipApp] - * cover the full display area at the end of the transition + * Checks that the visible region of [testApp] plus the visible region of [pipApp] cover the + * full display area at the end of the transition */ @Presubmit @Test fun testAppPlusPipLayerCoversFullScreenOnEnd() { - testSpec.assertLayersEnd { + flicker.assertLayersEnd { val pipRegion = visibleRegion(pipApp).region - visibleRegion(testApp) - .plus(pipRegion) - .coversExactly(endingBounds) + visibleRegion(testApp).plus(pipRegion).coversExactly(endingBounds) } } - /** {@inheritDoc} */ + /** {@inheritDoc} */ @Presubmit @Test override fun visibleLayersShownMoreThanOneConsecutiveEntry() = @@ -239,16 +214,15 @@ class EnterPipToOtherOrientationTest( /** * Creates the test configurations. * - * See [FlickerTestParameterFactory.getConfigNonRotationTests] for configuring - * repetitions, screen orientation and navigation modes. + * See [FlickerTestFactory.nonRotationTests] for configuring screen orientation and + * navigation modes. */ @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): Collection<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests( - supportedRotations = listOf(Surface.ROTATION_0) - ) + fun getParams(): Collection<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + supportedRotations = listOf(PlatformConsts.Rotation.ROTATION_0) + ) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppTransition.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppTransition.kt index 1dc03b9b8900..7466916a798a 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppTransition.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppTransition.kt @@ -17,12 +17,12 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.Presubmit -import com.android.server.wm.flicker.FlickerTestParameter +import com.android.server.wm.flicker.FlickerTest import com.android.server.wm.flicker.helpers.SimpleAppHelper import org.junit.Test /** Base class for pip expand tests */ -abstract class ExitPipToAppTransition(testSpec: FlickerTestParameter) : PipTransition(testSpec) { +abstract class ExitPipToAppTransition(flicker: FlickerTest) : PipTransition(flicker) { protected val testApp = SimpleAppHelper(instrumentation) /** @@ -32,7 +32,7 @@ abstract class ExitPipToAppTransition(testSpec: FlickerTestParameter) : PipTrans @Presubmit @Test open fun pipAppWindowRemainInsideVisibleBounds() { - testSpec.assertWmVisibleRegion(pipApp) { coversAtMost(displayBounds) } + flicker.assertWmVisibleRegion(pipApp) { coversAtMost(displayBounds) } } /** @@ -42,7 +42,7 @@ abstract class ExitPipToAppTransition(testSpec: FlickerTestParameter) : PipTrans @Presubmit @Test open fun pipAppLayerRemainInsideVisibleBounds() { - testSpec.assertLayersVisibleRegion(pipApp) { coversAtMost(displayBounds) } + flicker.assertLayersVisibleRegion(pipApp) { coversAtMost(displayBounds) } } /** @@ -52,7 +52,7 @@ abstract class ExitPipToAppTransition(testSpec: FlickerTestParameter) : PipTrans @Presubmit @Test open fun showBothAppWindowsThenHidePip() { - testSpec.assertWm { + flicker.assertWm { // when the activity is STOPPING, sometimes it becomes invisible in an entry before // the window, sometimes in the same entry. This occurs because we log 1x per frame // thus we ignore activity here @@ -71,7 +71,7 @@ abstract class ExitPipToAppTransition(testSpec: FlickerTestParameter) : PipTrans @Presubmit @Test open fun showBothAppLayersThenHidePip() { - testSpec.assertLayers { + flicker.assertLayers { isVisible(testApp).isVisible(pipApp).then().isInvisible(testApp).isVisible(pipApp) } } @@ -83,7 +83,7 @@ abstract class ExitPipToAppTransition(testSpec: FlickerTestParameter) : PipTrans @Presubmit @Test open fun testPlusPipAppsCoverFullScreenAtStart() { - testSpec.assertLayersStart { + flicker.assertLayersStart { val pipRegion = visibleRegion(pipApp).region visibleRegion(testApp).plus(pipRegion).coversExactly(displayBounds) } @@ -96,14 +96,14 @@ abstract class ExitPipToAppTransition(testSpec: FlickerTestParameter) : PipTrans @Presubmit @Test open fun pipAppCoversFullScreenAtEnd() { - testSpec.assertLayersEnd { visibleRegion(pipApp).coversExactly(displayBounds) } + flicker.assertLayersEnd { visibleRegion(pipApp).coversExactly(displayBounds) } } /** Checks that the visible region of [pipApp] always expands during the animation */ @Presubmit @Test open fun pipLayerExpands() { - testSpec.assertLayers { + flicker.assertLayers { val pipLayerList = this.layers { pipApp.layerMatchesAnyOf(it) && it.isVisible } pipLayerList.zipWithNext { previous, current -> current.visibleRegion.coversAtLeast(previous.visibleRegion.region) diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipTransition.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipTransition.kt index 3b8bb90988f9..1b5c227d37e4 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipTransition.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipTransition.kt @@ -17,20 +17,20 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.Presubmit -import android.view.Surface -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest import com.android.server.wm.flicker.helpers.isShellTransitionsEnabled import com.android.server.wm.flicker.helpers.setRotation import com.android.server.wm.traces.common.ComponentNameMatcher.Companion.LAUNCHER +import com.android.server.wm.traces.common.service.PlatformConsts import org.junit.Test /** Base class for exiting pip (closing pip window) without returning to the app */ -abstract class ExitPipTransition(testSpec: FlickerTestParameter) : PipTransition(testSpec) { +abstract class ExitPipTransition(flicker: FlickerTest) : PipTransition(flicker) { override val transition: FlickerBuilder.() -> Unit get() = buildTransition { - setup { this.setRotation(testSpec.startRotation) } - teardown { this.setRotation(Surface.ROTATION_0) } + setup { this.setRotation(flicker.scenario.startRotation) } + teardown { this.setRotation(PlatformConsts.Rotation.ROTATION_0) } } /** @@ -45,16 +45,16 @@ abstract class ExitPipTransition(testSpec: FlickerTestParameter) : PipTransition // When Shell transition is enabled, we change the windowing mode at start, but // update the visibility after the transition is finished, so we can't check isNotPinned // and isAppWindowInvisible in the same assertion block. - testSpec.assertWm { + flicker.assertWm { this.invoke("hasPipWindow") { it.isPinned(pipApp).isAppWindowVisible(pipApp).isAppWindowOnTop(pipApp) } .then() .invoke("!hasPipWindow") { it.isNotPinned(pipApp).isAppWindowNotOnTop(pipApp) } } - testSpec.assertWmEnd { isAppWindowInvisible(pipApp) } + flicker.assertWmEnd { isAppWindowInvisible(pipApp) } } else { - testSpec.assertWm { + flicker.assertWm { this.invoke("hasPipWindow") { it.isPinned(pipApp).isAppWindowVisible(pipApp) } .then() .invoke("!hasPipWindow") { it.isNotPinned(pipApp).isAppWindowInvisible(pipApp) } @@ -69,7 +69,7 @@ abstract class ExitPipTransition(testSpec: FlickerTestParameter) : PipTransition @Presubmit @Test open fun pipLayerBecomesInvisible() { - testSpec.assertLayers { + flicker.assertLayers { this.isVisible(pipApp) .isVisible(LAUNCHER) .then() diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaExpandButtonClickTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaExpandButtonClickTest.kt index 6bf7e8c847ee..1420f8ce653a 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaExpandButtonClickTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaExpandButtonClickTest.kt @@ -18,12 +18,12 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.FlakyTest import android.platform.test.annotations.Presubmit -import android.view.Surface import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory +import com.android.server.wm.traces.common.service.PlatformConsts import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith @@ -36,30 +36,29 @@ import org.junit.runners.Parameterized * To run this test: `atest WMShellFlickerTests:ExitPipViaExpandButtonClickTest` * * Actions: + * ``` * Launch an app in pip mode [pipApp], * Launch another full screen mode [testApp] * Expand [pipApp] app to full screen by clicking on the pip window and * then on the expand button - * + * ``` * Notes: + * ``` * 1. Some default assertions (e.g., nav bar, status bar and screen covered) * are inherited [PipTransition] * 2. Part of the test setup occurs automatically via * [com.android.server.wm.flicker.TransitionRunnerWithRules], * including configuring navigation mode, initial orientation and ensuring no * apps are running before setup + * ``` */ @RequiresDevice @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class ExitPipViaExpandButtonClickTest( - testSpec: FlickerTestParameter -) : ExitPipToAppTransition(testSpec) { +class ExitPipViaExpandButtonClickTest(flicker: FlickerTest) : ExitPipToAppTransition(flicker) { - /** - * Defines the transition used to run the test - */ + /** Defines the transition used to run the test */ override val transition: FlickerBuilder.() -> Unit get() = buildTransition { setup { @@ -70,34 +69,29 @@ class ExitPipViaExpandButtonClickTest( // This will bring PipApp to fullscreen pipApp.expandPipWindowToApp(wmHelper) // Wait until the other app is no longer visible - wmHelper.StateSyncBuilder() - .withWindowSurfaceDisappeared(testApp) - .waitForAndVerify() + wmHelper.StateSyncBuilder().withWindowSurfaceDisappeared(testApp).waitForAndVerify() } } - /** {@inheritDoc} */ - @Presubmit - @Test - override fun entireScreenCovered() = super.entireScreenCovered() + /** {@inheritDoc} */ + @Presubmit @Test override fun entireScreenCovered() = super.entireScreenCovered() - /** {@inheritDoc} */ - @FlakyTest(bugId = 197726610) - @Test - override fun pipLayerExpands() = super.pipLayerExpands() + /** {@inheritDoc} */ + @FlakyTest(bugId = 197726610) @Test override fun pipLayerExpands() = super.pipLayerExpands() companion object { /** * Creates the test configurations. * - * See [FlickerTestParameterFactory.getConfigNonRotationTests] for configuring - * repetitions, screen orientation and navigation modes. + * See [FlickerTestFactory.nonRotationTests] for configuring screen orientation and + * navigation modes. */ @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests( - supportedRotations = listOf(Surface.ROTATION_0)) + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + supportedRotations = listOf(PlatformConsts.Rotation.ROTATION_0) + ) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaIntentTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaIntentTest.kt index 3356d3e2ab2b..dffbe7e8aef1 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaIntentTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaIntentTest.kt @@ -18,13 +18,13 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.FlakyTest import android.platform.test.annotations.Presubmit -import android.view.Surface import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory import com.android.server.wm.flicker.helpers.isShellTransitionsEnabled +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory +import com.android.server.wm.traces.common.service.PlatformConsts import org.junit.Assume import org.junit.FixMethodOrder import org.junit.Test @@ -57,7 +57,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class ExitPipViaIntentTest(testSpec: FlickerTestParameter) : ExitPipToAppTransition(testSpec) { +class ExitPipViaIntentTest(flicker: FlickerTest) : ExitPipToAppTransition(flicker) { /** Defines the transition used to run the test */ override val transition: FlickerBuilder.() -> Unit @@ -74,10 +74,8 @@ class ExitPipViaIntentTest(testSpec: FlickerTestParameter) : ExitPipToAppTransit } } - /** {@inheritDoc} */ - @Presubmit - @Test - override fun entireScreenCovered() = super.entireScreenCovered() + /** {@inheritDoc} */ + @Presubmit @Test override fun entireScreenCovered() = super.entireScreenCovered() /** {@inheritDoc} */ @Presubmit @@ -113,14 +111,15 @@ class ExitPipViaIntentTest(testSpec: FlickerTestParameter) : ExitPipToAppTransit /** * Creates the test configurations. * - * See [FlickerTestParameterFactory.getConfigNonRotationTests] for configuring repetitions, - * screen orientation and navigation modes. + * See [FlickerTestFactory.nonRotationTests] for configuring repetitions, screen orientation + * and navigation modes. */ @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests(supportedRotations = listOf(Surface.ROTATION_0)) + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + supportedRotations = listOf(PlatformConsts.Rotation.ROTATION_0) + ) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithDismissButtonTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithDismissButtonTest.kt index d195abb2aaec..232c025e60a9 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithDismissButtonTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithDismissButtonTest.kt @@ -17,12 +17,12 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.Presubmit -import android.view.Surface import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory +import com.android.server.wm.traces.common.service.PlatformConsts import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith @@ -54,7 +54,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class ExitPipWithDismissButtonTest(testSpec: FlickerTestParameter) : ExitPipTransition(testSpec) { +class ExitPipWithDismissButtonTest(flicker: FlickerTest) : ExitPipTransition(flicker) { override val transition: FlickerBuilder.() -> Unit get() = { @@ -69,21 +69,22 @@ class ExitPipWithDismissButtonTest(testSpec: FlickerTestParameter) : ExitPipTran @Presubmit @Test fun focusChanges() { - testSpec.assertEventLog { this.focusChanges("PipMenuView", "NexusLauncherActivity") } + flicker.assertEventLog { this.focusChanges("PipMenuView", "NexusLauncherActivity") } } companion object { /** * Creates the test configurations. * - * See [FlickerTestParameterFactory.getConfigNonRotationTests] for configuring repetitions, - * screen orientation and navigation modes. + * See [FlickerTestFactory.nonRotationTests] for configuring repetitions, screen orientation + * and navigation modes. */ @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests(supportedRotations = listOf(Surface.ROTATION_0)) + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + supportedRotations = listOf(PlatformConsts.Rotation.ROTATION_0) + ) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithSwipeDownTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithSwipeDownTest.kt index f7a244717141..dbbfdcc8803a 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithSwipeDownTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithSwipeDownTest.kt @@ -17,13 +17,13 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.Presubmit -import android.view.Surface import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import com.android.server.wm.traces.common.ComponentNameMatcher +import com.android.server.wm.traces.common.service.PlatformConsts import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith @@ -54,7 +54,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class ExitPipWithSwipeDownTest(testSpec: FlickerTestParameter) : ExitPipTransition(testSpec) { +class ExitPipWithSwipeDownTest(flicker: FlickerTest) : ExitPipTransition(flicker) { override val transition: FlickerBuilder.() -> Unit get() = { super.transition(this) @@ -64,7 +64,7 @@ class ExitPipWithSwipeDownTest(testSpec: FlickerTestParameter) : ExitPipTransiti val pipCenterY = pipRegion.centerY() val displayCenterX = device.displayWidth / 2 val barComponent = - if (testSpec.isTablet) { + if (flicker.scenario.isTablet) { ComponentNameMatcher.TASK_BAR } else { ComponentNameMatcher.NAV_BAR @@ -92,21 +92,22 @@ class ExitPipWithSwipeDownTest(testSpec: FlickerTestParameter) : ExitPipTransiti @Presubmit @Test fun focusDoesNotChange() { - testSpec.assertEventLog { this.focusDoesNotChange() } + flicker.assertEventLog { this.focusDoesNotChange() } } companion object { /** * Creates the test configurations. * - * See [FlickerTestParameterFactory.getConfigNonRotationTests] for configuring repetitions, - * screen orientation and navigation modes. + * See [FlickerTestFactory.nonRotationTests] for configuring repetitions, screen orientation + * and navigation modes. */ @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests(supportedRotations = listOf(Surface.ROTATION_0)) + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + supportedRotations = listOf(PlatformConsts.Rotation.ROTATION_0) + ) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnDoubleClickTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnDoubleClickTest.kt index fa5ce5bbc389..f213cc96ecdb 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnDoubleClickTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnDoubleClickTest.kt @@ -17,13 +17,13 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.FlakyTest -import android.view.Surface import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import com.android.server.wm.traces.common.ComponentNameMatcher +import com.android.server.wm.traces.common.service.PlatformConsts import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith @@ -36,28 +36,27 @@ import org.junit.runners.Parameterized * To run this test: `atest WMShellFlickerTests:ExpandPipOnDoubleClickTest` * * Actions: + * ``` * Launch an app in pip mode [pipApp], * Expand [pipApp] app to its maximum pip size by double clicking on it - * + * ``` * Notes: + * ``` * 1. Some default assertions (e.g., nav bar, status bar and screen covered) * are inherited [PipTransition] * 2. Part of the test setup occurs automatically via * [com.android.server.wm.flicker.TransitionRunnerWithRules], * including configuring navigation mode, initial orientation and ensuring no * apps are running before setup + * ``` */ @RequiresDevice @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class ExpandPipOnDoubleClickTest(testSpec: FlickerTestParameter) : PipTransition(testSpec) { +class ExpandPipOnDoubleClickTest(flicker: FlickerTest) : PipTransition(flicker) { override val transition: FlickerBuilder.() -> Unit - get() = buildTransition { - transitions { - pipApp.doubleClickPipWindow(wmHelper) - } - } + get() = buildTransition { transitions { pipApp.doubleClickPipWindow(wmHelper) } } /** * Checks that the pip app window remains inside the display bounds throughout the whole @@ -66,9 +65,7 @@ class ExpandPipOnDoubleClickTest(testSpec: FlickerTestParameter) : PipTransition @FlakyTest(bugId = 249308003) @Test fun pipWindowRemainInsideVisibleBounds() { - testSpec.assertWmVisibleRegion(pipApp) { - coversAtMost(displayBounds) - } + flicker.assertWmVisibleRegion(pipApp) { coversAtMost(displayBounds) } } /** @@ -78,40 +75,28 @@ class ExpandPipOnDoubleClickTest(testSpec: FlickerTestParameter) : PipTransition @FlakyTest(bugId = 249308003) @Test fun pipLayerRemainInsideVisibleBounds() { - testSpec.assertLayersVisibleRegion(pipApp) { - coversAtMost(displayBounds) - } + flicker.assertLayersVisibleRegion(pipApp) { coversAtMost(displayBounds) } } - /** - * Checks [pipApp] window remains visible throughout the animation - */ + /** Checks [pipApp] window remains visible throughout the animation */ @FlakyTest(bugId = 249308003) @Test fun pipWindowIsAlwaysVisible() { - testSpec.assertWm { - isAppWindowVisible(pipApp) - } + flicker.assertWm { isAppWindowVisible(pipApp) } } - /** - * Checks [pipApp] layer remains visible throughout the animation - */ + /** Checks [pipApp] layer remains visible throughout the animation */ @FlakyTest(bugId = 249308003) @Test fun pipLayerIsAlwaysVisible() { - testSpec.assertLayers { - isVisible(pipApp) - } + flicker.assertLayers { isVisible(pipApp) } } - /** - * Checks that the visible region of [pipApp] always expands during the animation - */ + /** Checks that the visible region of [pipApp] always expands during the animation */ @FlakyTest(bugId = 249308003) @Test fun pipLayerExpands() { - testSpec.assertLayers { + flicker.assertLayers { val pipLayerList = this.layers { pipApp.layerMatchesAnyOf(it) && it.isVisible } pipLayerList.zipWithNext { previous, current -> current.visibleRegion.coversAtLeast(previous.visibleRegion.region) @@ -122,7 +107,7 @@ class ExpandPipOnDoubleClickTest(testSpec: FlickerTestParameter) : PipTransition @FlakyTest(bugId = 249308003) @Test fun pipSameAspectRatio() { - testSpec.assertLayers { + flicker.assertLayers { val pipLayerList = this.layers { pipApp.layerMatchesAnyOf(it) && it.isVisible } pipLayerList.zipWithNext { previous, current -> current.visibleRegion.isSameAspectRatio(previous.visibleRegion) @@ -130,37 +115,25 @@ class ExpandPipOnDoubleClickTest(testSpec: FlickerTestParameter) : PipTransition } } - /** - * Checks [pipApp] window remains pinned throughout the animation - */ + /** Checks [pipApp] window remains pinned throughout the animation */ @FlakyTest(bugId = 249308003) @Test fun windowIsAlwaysPinned() { - testSpec.assertWm { - this.invoke("hasPipWindow") { it.isPinned(pipApp) } - } + flicker.assertWm { this.invoke("hasPipWindow") { it.isPinned(pipApp) } } } - /** - * Checks [ComponentMatcher.LAUNCHER] layer remains visible throughout the animation - */ + /** Checks [ComponentMatcher.LAUNCHER] layer remains visible throughout the animation */ @FlakyTest(bugId = 249308003) @Test fun launcherIsAlwaysVisible() { - testSpec.assertLayers { - isVisible(ComponentNameMatcher.LAUNCHER) - } + flicker.assertLayers { isVisible(ComponentNameMatcher.LAUNCHER) } } - /** - * Checks that the focus doesn't change between windows during the transition - */ + /** Checks that the focus doesn't change between windows during the transition */ @FlakyTest(bugId = 216306753) @Test fun focusDoesNotChange() { - testSpec.assertEventLog { - this.focusDoesNotChange() - } + flicker.assertEventLog { this.focusDoesNotChange() } } @FlakyTest(bugId = 216306753) @@ -233,16 +206,15 @@ class ExpandPipOnDoubleClickTest(testSpec: FlickerTestParameter) : PipTransition /** * Creates the test configurations. * - * See [FlickerTestParameterFactory.getConfigNonRotationTests] for configuring - * repetitions, screen orientation and navigation modes. + * See [FlickerTestFactory.nonRotationTests] for configuring screen orientation and + * navigation modes. */ @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests( - supportedRotations = listOf(Surface.ROTATION_0) - ) + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + supportedRotations = listOf(PlatformConsts.Rotation.ROTATION_0) + ) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnPinchOpenTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnPinchOpenTest.kt index bcd01a414fd3..34f6659ca36e 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnPinchOpenTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnPinchOpenTest.kt @@ -17,40 +17,32 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.Postsubmit -import android.view.Surface import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory +import com.android.server.wm.traces.common.service.PlatformConsts import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.MethodSorters import org.junit.runners.Parameterized -/** - * Test expanding a pip window via pinch out gesture. - */ +/** Test expanding a pip window via pinch out gesture. */ @RequiresDevice @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class ExpandPipOnPinchOpenTest(testSpec: FlickerTestParameter) : PipTransition(testSpec) { +class ExpandPipOnPinchOpenTest(flicker: FlickerTest) : PipTransition(flicker) { override val transition: FlickerBuilder.() -> Unit - get() = buildTransition { - transitions { - pipApp.pinchOpenPipWindow(wmHelper, 0.4f, 30) - } - } + get() = buildTransition { transitions { pipApp.pinchOpenPipWindow(wmHelper, 0.4f, 30) } } - /** - * Checks that the visible region area of [pipApp] always increases during the animation. - */ + /** Checks that the visible region area of [pipApp] always increases during the animation. */ @Postsubmit @Test fun pipLayerAreaIncreases() { - testSpec.assertLayers { + flicker.assertLayers { val pipLayerList = this.layers { pipApp.layerMatchesAnyOf(it) && it.isVisible } pipLayerList.zipWithNext { previous, current -> previous.visibleRegion.notBiggerThan(current.visibleRegion.region) @@ -62,16 +54,15 @@ class ExpandPipOnPinchOpenTest(testSpec: FlickerTestParameter) : PipTransition(t /** * Creates the test configurations. * - * See [FlickerTestParameterFactory.getConfigNonRotationTests] for configuring - * repetitions, screen orientation and navigation modes. + * See [FlickerTestFactory.nonRotationTests] for configuring screen orientation and + * navigation modes. */ @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests( - supportedRotations = listOf(Surface.ROTATION_0) - ) + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + supportedRotations = listOf(PlatformConsts.Rotation.ROTATION_0) + ) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipDownShelfHeightChangeTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipDownShelfHeightChangeTest.kt index 0c0228ede58c..e9847fae00fe 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipDownShelfHeightChangeTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipDownShelfHeightChangeTest.kt @@ -18,11 +18,11 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.Presubmit import android.platform.test.annotations.RequiresDevice -import android.view.Surface -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory +import com.android.server.wm.traces.common.service.PlatformConsts import com.android.wm.shell.flicker.Direction import org.junit.FixMethodOrder import org.junit.Test @@ -36,71 +36,56 @@ import org.junit.runners.Parameterized * To run this test: `atest WMShellFlickerTests:MovePipUpShelfHeightChangeTest` * * Actions: + * ``` * Launch [pipApp] in pip mode * Press home * Launch [testApp] * Check if pip window moves down (visually) - * + * ``` * Notes: + * ``` * 1. Some default assertions (e.g., nav bar, status bar and screen covered) * are inherited [PipTransition] * 2. Part of the test setup occurs automatically via * [com.android.server.wm.flicker.TransitionRunnerWithRules], * including configuring navigation mode, initial orientation and ensuring no * apps are running before setup + * ``` */ @RequiresDevice @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class MovePipDownShelfHeightChangeTest( - testSpec: FlickerTestParameter -) : MovePipShelfHeightTransition(testSpec) { -// @Before -// fun before() { -// Assume.assumeFalse(isShellTransitionsEnabled) -// } - - /** - * Defines the transition used to run the test - */ +class MovePipDownShelfHeightChangeTest(flicker: FlickerTest) : + MovePipShelfHeightTransition(flicker) { + /** Defines the transition used to run the test */ override val transition: FlickerBuilder.() -> Unit get() = buildTransition { teardown { tapl.pressHome() testApp.exit(wmHelper) } - transitions { - testApp.launchViaIntent(wmHelper) - } + transitions { testApp.launchViaIntent(wmHelper) } } - /** - * Checks that the visible region of [pipApp] window always moves down during the animation. - */ - @Presubmit - @Test - fun pipWindowMovesDown() = pipWindowMoves(Direction.DOWN) + /** Checks that the visible region of [pipApp] window always moves down during the animation. */ + @Presubmit @Test fun pipWindowMovesDown() = pipWindowMoves(Direction.DOWN) - /** - * Checks that the visible region of [pipApp] layer always moves down during the animation. - */ - @Presubmit - @Test - fun pipLayerMovesDown() = pipLayerMoves(Direction.DOWN) + /** Checks that the visible region of [pipApp] layer always moves down during the animation. */ + @Presubmit @Test fun pipLayerMovesDown() = pipLayerMoves(Direction.DOWN) companion object { /** * Creates the test configurations. * - * See [FlickerTestParameterFactory.getConfigNonRotationTests] for configuring - * repetitions, screen orientation and navigation modes. + * See [FlickerTestFactory.nonRotationTests] for configuring screen orientation and + * navigation modes. */ @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests( - supportedRotations = listOf(Surface.ROTATION_0) + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + supportedRotations = listOf(PlatformConsts.Rotation.ROTATION_0) ) } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipShelfHeightTransition.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipShelfHeightTransition.kt index b40106790b6c..35525cbd4e1a 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipShelfHeightTransition.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipShelfHeightTransition.kt @@ -17,29 +17,28 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.Presubmit -import com.android.server.wm.flicker.FlickerTestParameter +import com.android.server.wm.flicker.FlickerTest import com.android.server.wm.flicker.helpers.FixedOrientationAppHelper import com.android.server.wm.flicker.traces.region.RegionSubject import com.android.wm.shell.flicker.Direction import org.junit.Test /** Base class for pip tests with Launcher shelf height change */ -abstract class MovePipShelfHeightTransition(testSpec: FlickerTestParameter) : - PipTransition(testSpec) { +abstract class MovePipShelfHeightTransition(flicker: FlickerTest) : PipTransition(flicker) { protected val testApp = FixedOrientationAppHelper(instrumentation) /** Checks [pipApp] window remains visible throughout the animation */ @Presubmit @Test open fun pipWindowIsAlwaysVisible() { - testSpec.assertWm { isAppWindowVisible(pipApp) } + flicker.assertWm { isAppWindowVisible(pipApp) } } /** Checks [pipApp] layer remains visible throughout the animation */ @Presubmit @Test open fun pipLayerIsAlwaysVisible() { - testSpec.assertLayers { isVisible(pipApp) } + flicker.assertLayers { isVisible(pipApp) } } /** @@ -49,7 +48,7 @@ abstract class MovePipShelfHeightTransition(testSpec: FlickerTestParameter) : @Presubmit @Test open fun pipWindowRemainInsideVisibleBounds() { - testSpec.assertWmVisibleRegion(pipApp) { coversAtMost(displayBounds) } + flicker.assertWmVisibleRegion(pipApp) { coversAtMost(displayBounds) } } /** @@ -59,7 +58,7 @@ abstract class MovePipShelfHeightTransition(testSpec: FlickerTestParameter) : @Presubmit @Test open fun pipLayerRemainInsideVisibleBounds() { - testSpec.assertLayersVisibleRegion(pipApp) { coversAtMost(displayBounds) } + flicker.assertLayersVisibleRegion(pipApp) { coversAtMost(displayBounds) } } /** @@ -67,7 +66,7 @@ abstract class MovePipShelfHeightTransition(testSpec: FlickerTestParameter) : * during the animation. */ protected fun pipWindowMoves(direction: Direction) { - testSpec.assertWm { + flicker.assertWm { val pipWindowFrameList = this.windowStates { pipApp.windowMatchesAnyOf(it) && it.isVisible }.map { it.frame } when (direction) { @@ -83,7 +82,7 @@ abstract class MovePipShelfHeightTransition(testSpec: FlickerTestParameter) : * during the animation. */ protected fun pipLayerMoves(direction: Direction) { - testSpec.assertLayers { + flicker.assertLayers { val pipLayerRegionList = this.layers { pipApp.layerMatchesAnyOf(it) && it.isVisible } .map { it.visibleRegion } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipUpShelfHeightChangeTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipUpShelfHeightChangeTest.kt index 7f8ef3268adb..3a12a34a5206 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipUpShelfHeightChangeTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipUpShelfHeightChangeTest.kt @@ -17,12 +17,12 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.Presubmit -import android.view.Surface import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory +import com.android.server.wm.traces.common.service.PlatformConsts import com.android.wm.shell.flicker.Direction import org.junit.FixMethodOrder import org.junit.Test @@ -36,68 +36,55 @@ import org.junit.runners.Parameterized * To run this test: `atest WMShellFlickerTests:MovePipDownShelfHeightChangeTest` * * Actions: + * ``` * Launch [pipApp] in pip mode * Launch [testApp] * Press home * Check if pip window moves up (visually) - * + * ``` * Notes: + * ``` * 1. Some default assertions (e.g., nav bar, status bar and screen covered) * are inherited [PipTransition] * 2. Part of the test setup occurs automatically via * [com.android.server.wm.flicker.TransitionRunnerWithRules], * including configuring navigation mode, initial orientation and ensuring no * apps are running before setup + * ``` */ @RequiresDevice @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -open class MovePipUpShelfHeightChangeTest( - testSpec: FlickerTestParameter -) : MovePipShelfHeightTransition(testSpec) { - /** - * Defines the transition used to run the test - */ +open class MovePipUpShelfHeightChangeTest(flicker: FlickerTest) : + MovePipShelfHeightTransition(flicker) { + /** Defines the transition used to run the test */ override val transition: FlickerBuilder.() -> Unit - get() = buildTransition() { - setup { - testApp.launchViaIntent(wmHelper) - } - transitions { - tapl.pressHome() + get() = + buildTransition() { + setup { testApp.launchViaIntent(wmHelper) } + transitions { tapl.pressHome() } + teardown { testApp.exit(wmHelper) } } - teardown { - testApp.exit(wmHelper) - } - } - /** - * Checks that the visible region of [pipApp] window always moves up during the animation. - */ - @Presubmit - @Test - fun pipWindowMovesUp() = pipWindowMoves(Direction.UP) + /** Checks that the visible region of [pipApp] window always moves up during the animation. */ + @Presubmit @Test fun pipWindowMovesUp() = pipWindowMoves(Direction.UP) - /** - * Checks that the visible region of [pipApp] layer always moves up during the animation. - */ - @Presubmit - @Test - fun pipLayerMovesUp() = pipLayerMoves(Direction.UP) + /** Checks that the visible region of [pipApp] layer always moves up during the animation. */ + @Presubmit @Test fun pipLayerMovesUp() = pipLayerMoves(Direction.UP) companion object { /** * Creates the test configurations. * - * See [FlickerTestParameterFactory.getConfigNonRotationTests] for configuring - * repetitions, screen orientation and navigation modes. + * See [FlickerTestFactory.nonRotationTests] for configuring screen orientation and + * navigation modes. */ @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests( - supportedRotations = listOf(Surface.ROTATION_0) + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + supportedRotations = listOf(PlatformConsts.Rotation.ROTATION_0) ) } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipKeyboardTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipKeyboardTest.kt index 3b64d218a73d..12d6362cb060 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipKeyboardTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipKeyboardTest.kt @@ -17,17 +17,17 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.Presubmit -import android.view.Surface import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory import com.android.server.wm.flicker.helpers.ImeAppHelper import com.android.server.wm.flicker.helpers.WindowUtils import com.android.server.wm.flicker.helpers.isShellTransitionsEnabled import com.android.server.wm.flicker.helpers.setRotation +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import com.android.server.wm.traces.common.ComponentNameMatcher +import com.android.server.wm.traces.common.service.PlatformConsts import org.junit.Assume.assumeFalse import org.junit.Before import org.junit.FixMethodOrder @@ -41,7 +41,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -open class PipKeyboardTest(testSpec: FlickerTestParameter) : PipTransition(testSpec) { +open class PipKeyboardTest(flicker: FlickerTest) : PipTransition(flicker) { private val imeApp = ImeAppHelper(instrumentation) @Before @@ -54,11 +54,11 @@ open class PipKeyboardTest(testSpec: FlickerTestParameter) : PipTransition(testS get() = buildTransition { setup { imeApp.launchViaIntent(wmHelper) - setRotation(testSpec.startRotation) + setRotation(flicker.scenario.startRotation) } teardown { imeApp.exit(wmHelper) - setRotation(Surface.ROTATION_0) + setRotation(PlatformConsts.Rotation.ROTATION_0) } transitions { // open the soft keyboard @@ -74,8 +74,8 @@ open class PipKeyboardTest(testSpec: FlickerTestParameter) : PipTransition(testS @Presubmit @Test open fun pipInVisibleBounds() { - testSpec.assertWmVisibleRegion(pipApp) { - val displayBounds = WindowUtils.getDisplayBounds(testSpec.startRotation) + flicker.assertWmVisibleRegion(pipApp) { + val displayBounds = WindowUtils.getDisplayBounds(flicker.scenario.startRotation) coversAtMost(displayBounds) } } @@ -84,7 +84,7 @@ open class PipKeyboardTest(testSpec: FlickerTestParameter) : PipTransition(testS @Presubmit @Test open fun pipIsAboveAppWindow() { - testSpec.assertWmTag(TAG_IME_VISIBLE) { isAboveWindow(ComponentNameMatcher.IME, pipApp) } + flicker.assertWmTag(TAG_IME_VISIBLE) { isAboveWindow(ComponentNameMatcher.IME, pipApp) } } companion object { @@ -92,9 +92,10 @@ open class PipKeyboardTest(testSpec: FlickerTestParameter) : PipTransition(testS @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): Collection<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests(supportedRotations = listOf(Surface.ROTATION_0)) + fun getParams(): Collection<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + supportedRotations = listOf(PlatformConsts.Rotation.ROTATION_0) + ) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipKeyboardTestShellTransit.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipKeyboardTestShellTransit.kt index 2a82c00bebd3..901814e21971 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipKeyboardTestShellTransit.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipKeyboardTestShellTransit.kt @@ -18,9 +18,9 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.Presubmit import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter +import com.android.server.wm.flicker.FlickerTest import com.android.server.wm.flicker.helpers.isShellTransitionsEnabled +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import org.junit.Assume import org.junit.Before import org.junit.FixMethodOrder @@ -33,7 +33,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class PipKeyboardTestShellTransit(testSpec: FlickerTestParameter) : PipKeyboardTest(testSpec) { +class PipKeyboardTestShellTransit(flicker: FlickerTest) : PipKeyboardTest(flicker) { @Before override fun before() { diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipRotationTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipRotationTest.kt index 7de5494a7733..eee00bd1e699 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipRotationTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipRotationTest.kt @@ -18,16 +18,15 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.FlakyTest import android.platform.test.annotations.Presubmit -import android.view.Surface import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory import com.android.server.wm.flicker.helpers.SimpleAppHelper import com.android.server.wm.flicker.helpers.WindowUtils import com.android.server.wm.flicker.helpers.isShellTransitionsEnabled import com.android.server.wm.flicker.helpers.setRotation +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import org.junit.Assume import org.junit.Before import org.junit.FixMethodOrder @@ -45,7 +44,7 @@ import org.junit.runners.Parameterized * ``` * Launch a [pipApp] in pip mode * Launch another app [fixedApp] (appears below pip) - * Rotate the screen from [testSpec.startRotation] to [testSpec.endRotation] + * Rotate the screen from [flicker.scenario.startRotation] to [flicker.scenario.endRotation] * (usually, 0->90 and 90->0) * ``` * Notes: @@ -62,10 +61,10 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -open class PipRotationTest(testSpec: FlickerTestParameter) : PipTransition(testSpec) { +open class PipRotationTest(flicker: FlickerTest) : PipTransition(flicker) { private val testApp = SimpleAppHelper(instrumentation) - private val screenBoundsStart = WindowUtils.getDisplayBounds(testSpec.startRotation) - private val screenBoundsEnd = WindowUtils.getDisplayBounds(testSpec.endRotation) + private val screenBoundsStart = WindowUtils.getDisplayBounds(flicker.scenario.startRotation) + private val screenBoundsEnd = WindowUtils.getDisplayBounds(flicker.scenario.endRotation) @Before open fun before() { @@ -76,9 +75,9 @@ open class PipRotationTest(testSpec: FlickerTestParameter) : PipTransition(testS get() = buildTransition { setup { testApp.launchViaIntent(wmHelper) - setRotation(testSpec.startRotation) + setRotation(flicker.scenario.startRotation) } - transitions { setRotation(testSpec.endRotation) } + transitions { setRotation(flicker.scenario.endRotation) } } /** Checks the position of the navigation bar at the start and end of the transition */ @@ -90,14 +89,14 @@ open class PipRotationTest(testSpec: FlickerTestParameter) : PipTransition(testS @Presubmit @Test fun fixedAppLayer_StartingBounds() { - testSpec.assertLayersStart { visibleRegion(testApp).coversAtMost(screenBoundsStart) } + flicker.assertLayersStart { visibleRegion(testApp).coversAtMost(screenBoundsStart) } } /** Checks that [testApp] layer is within [screenBoundsEnd] at the end of the transition */ @Presubmit @Test fun fixedAppLayer_EndingBounds() { - testSpec.assertLayersEnd { visibleRegion(testApp).coversAtMost(screenBoundsEnd) } + flicker.assertLayersEnd { visibleRegion(testApp).coversAtMost(screenBoundsEnd) } } /** @@ -107,7 +106,7 @@ open class PipRotationTest(testSpec: FlickerTestParameter) : PipTransition(testS @Presubmit @Test fun appLayers_StartingBounds() { - testSpec.assertLayersStart { + flicker.assertLayersStart { visibleRegion(testApp.or(pipApp)).coversExactly(screenBoundsStart) } } @@ -119,14 +118,12 @@ open class PipRotationTest(testSpec: FlickerTestParameter) : PipTransition(testS @Presubmit @Test fun appLayers_EndingBounds() { - testSpec.assertLayersEnd { - visibleRegion(testApp.or(pipApp)).coversExactly(screenBoundsEnd) - } + flicker.assertLayersEnd { visibleRegion(testApp.or(pipApp)).coversExactly(screenBoundsEnd) } } /** Checks that [pipApp] layer is within [screenBoundsStart] at the start of the transition */ private fun pipLayerRotates_StartingBounds_internal() { - testSpec.assertLayersStart { visibleRegion(pipApp).coversAtMost(screenBoundsStart) } + flicker.assertLayersStart { visibleRegion(pipApp).coversAtMost(screenBoundsStart) } } /** Checks that [pipApp] layer is within [screenBoundsStart] at the start of the transition */ @@ -140,7 +137,7 @@ open class PipRotationTest(testSpec: FlickerTestParameter) : PipTransition(testS @Presubmit @Test fun pipLayerRotates_EndingBounds() { - testSpec.assertLayersEnd { visibleRegion(pipApp).coversAtMost(screenBoundsEnd) } + flicker.assertLayersEnd { visibleRegion(pipApp).coversAtMost(screenBoundsEnd) } } /** @@ -149,7 +146,7 @@ open class PipRotationTest(testSpec: FlickerTestParameter) : PipTransition(testS @Presubmit @Test fun pipIsAboveFixedAppWindow_Start() { - testSpec.assertWmStart { isAboveWindow(pipApp, testApp) } + flicker.assertWmStart { isAboveWindow(pipApp, testApp) } } /** @@ -158,7 +155,7 @@ open class PipRotationTest(testSpec: FlickerTestParameter) : PipTransition(testS @Presubmit @Test fun pipIsAboveFixedAppWindow_End() { - testSpec.assertWmEnd { isAboveWindow(pipApp, testApp) } + flicker.assertWmEnd { isAboveWindow(pipApp, testApp) } } @Presubmit @@ -171,16 +168,13 @@ open class PipRotationTest(testSpec: FlickerTestParameter) : PipTransition(testS /** * Creates the test configurations. * - * See [FlickerTestParameterFactory.getConfigNonRotationTests] for configuring repetitions, - * screen orientation and navigation modes. + * See [FlickerTestFactory.nonRotationTests] for configuring repetitions, screen orientation + * and navigation modes. */ @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): Collection<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance() - .getConfigRotationTests( - supportedRotations = listOf(Surface.ROTATION_0, Surface.ROTATION_90) - ) + fun getParams(): Collection<FlickerTest> { + return FlickerTestFactory.rotationTests() } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipRotationTest_ShellTransit.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipRotationTest_ShellTransit.kt index 983cb1c6bafd..d0d9167555eb 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipRotationTest_ShellTransit.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipRotationTest_ShellTransit.kt @@ -18,9 +18,9 @@ package com.android.wm.shell.flicker.pip import android.platform.test.annotations.FlakyTest import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter +import com.android.server.wm.flicker.FlickerTest import com.android.server.wm.flicker.helpers.isShellTransitionsEnabled +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import org.junit.Assume import org.junit.Before import org.junit.FixMethodOrder @@ -38,7 +38,7 @@ import org.junit.runners.Parameterized * ``` * Launch a [pipApp] in pip mode * Launch another app [fixedApp] (appears below pip) - * Rotate the screen from [testSpec.startRotation] to [testSpec.endRotation] + * Rotate the screen from [flicker.scenario.startRotation] to [flicker.scenario.endRotation] * (usually, 0->90 and 90->0) * ``` * Notes: @@ -56,7 +56,7 @@ import org.junit.runners.Parameterized @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) @FlakyTest(bugId = 239575053) -class PipRotationTest_ShellTransit(testSpec: FlickerTestParameter) : PipRotationTest(testSpec) { +class PipRotationTest_ShellTransit(flicker: FlickerTest) : PipRotationTest(flicker) { @Before override fun before() { Assume.assumeTrue(isShellTransitionsEnabled) diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipTransition.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipTransition.kt index dfa25104ccc8..0e0be79e0aa0 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipTransition.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipTransition.kt @@ -18,19 +18,19 @@ package com.android.wm.shell.flicker.pip import android.app.Instrumentation import android.content.Intent -import android.view.Surface -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest import com.android.server.wm.flicker.helpers.PipAppHelper import com.android.server.wm.flicker.helpers.WindowUtils import com.android.server.wm.flicker.helpers.setRotation import com.android.server.wm.flicker.rules.RemoveAllTasksButHomeRule.Companion.removeAllTasksButHome import com.android.server.wm.flicker.testapp.ActivityOptions +import com.android.server.wm.traces.common.service.PlatformConsts import com.android.wm.shell.flicker.BaseTest -abstract class PipTransition(testSpec: FlickerTestParameter) : BaseTest(testSpec) { +abstract class PipTransition(flicker: FlickerTest) : BaseTest(flicker) { protected val pipApp = PipAppHelper(instrumentation) - protected val displayBounds = WindowUtils.getDisplayBounds(testSpec.startRotation) + protected val displayBounds = WindowUtils.getDisplayBounds(flicker.scenario.startRotation) protected val broadcastActionTrigger = BroadcastActionTrigger(instrumentation) // Helper class to process test actions by broadcast. @@ -67,12 +67,12 @@ abstract class PipTransition(testSpec: FlickerTestParameter) : BaseTest(testSpec ): FlickerBuilder.() -> Unit { return { setup { - setRotation(Surface.ROTATION_0) + setRotation(PlatformConsts.Rotation.ROTATION_0) removeAllTasksButHome() pipApp.launchViaIntentAndWaitForPip(wmHelper, stringExtras = stringExtras) } teardown { - setRotation(Surface.ROTATION_0) + setRotation(PlatformConsts.Rotation.ROTATION_0) removeAllTasksButHome() pipApp.exit(wmHelper) } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/SetRequestedOrientationWhilePinnedTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/SetRequestedOrientationWhilePinnedTest.kt index f0093e6c03b5..157aa9863fdf 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/SetRequestedOrientationWhilePinnedTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/SetRequestedOrientationWhilePinnedTest.kt @@ -20,19 +20,19 @@ import android.app.Activity import android.platform.test.annotations.FlakyTest import android.platform.test.annotations.Postsubmit import android.platform.test.annotations.Presubmit -import android.view.Surface import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory import com.android.server.wm.flicker.helpers.WindowUtils import com.android.server.wm.flicker.helpers.isShellTransitionsEnabled import com.android.server.wm.flicker.helpers.setRotation import com.android.server.wm.flicker.helpers.wakeUpAndGoToHomeScreen +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import com.android.server.wm.flicker.rules.RemoveAllTasksButHomeRule.Companion.removeAllTasksButHome import com.android.server.wm.flicker.testapp.ActivityOptions import com.android.server.wm.flicker.testapp.ActivityOptions.PortraitOnlyActivity.EXTRA_FIXED_ORIENTATION +import com.android.server.wm.traces.common.service.PlatformConsts import com.android.wm.shell.flicker.pip.PipTransition.BroadcastActionTrigger.Companion.ORIENTATION_LANDSCAPE import org.junit.Assume import org.junit.Before @@ -43,20 +43,18 @@ import org.junit.runners.MethodSorters import org.junit.runners.Parameterized /** - * Test exiting Pip with orientation changes. - * To run this test: `atest WMShellFlickerTests:SetRequestedOrientationWhilePinnedTest` + * Test exiting Pip with orientation changes. To run this test: `atest + * WMShellFlickerTests:SetRequestedOrientationWhilePinnedTest` */ @RequiresDevice @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -open class SetRequestedOrientationWhilePinnedTest( - testSpec: FlickerTestParameter -) : PipTransition(testSpec) { - private val startingBounds = WindowUtils.getDisplayBounds(Surface.ROTATION_0) - private val endingBounds = WindowUtils.getDisplayBounds(Surface.ROTATION_90) +open class SetRequestedOrientationWhilePinnedTest(flicker: FlickerTest) : PipTransition(flicker) { + private val startingBounds = WindowUtils.getDisplayBounds(PlatformConsts.Rotation.ROTATION_0) + private val endingBounds = WindowUtils.getDisplayBounds(PlatformConsts.Rotation.ROTATION_90) - /** {@inheritDoc} */ + /** {@inheritDoc} */ override val transition: FlickerBuilder.() -> Unit get() = { setup { @@ -64,30 +62,35 @@ open class SetRequestedOrientationWhilePinnedTest( device.wakeUpAndGoToHomeScreen() // Launch the PiP activity fixed as landscape. - pipApp.launchViaIntent(wmHelper, stringExtras = mapOf( - EXTRA_FIXED_ORIENTATION to ORIENTATION_LANDSCAPE.toString())) + pipApp.launchViaIntent( + wmHelper, + stringExtras = + mapOf(EXTRA_FIXED_ORIENTATION to ORIENTATION_LANDSCAPE.toString()) + ) // Enter PiP. broadcastActionTrigger.doAction(ActivityOptions.Pip.ACTION_ENTER_PIP) // System bar may fade out during fixed rotation. - wmHelper.StateSyncBuilder() + wmHelper + .StateSyncBuilder() .withPipShown() - .withRotation(Surface.ROTATION_0) + .withRotation(PlatformConsts.Rotation.ROTATION_0) .withNavOrTaskBarVisible() .withStatusBarVisible() .waitForAndVerify() } teardown { pipApp.exit(wmHelper) - setRotation(Surface.ROTATION_0) + setRotation(PlatformConsts.Rotation.ROTATION_0) removeAllTasksButHome() } transitions { // Launch the activity back into fullscreen and ensure that it is now in landscape pipApp.launchViaIntent(wmHelper) // System bar may fade out during fixed rotation. - wmHelper.StateSyncBuilder() + wmHelper + .StateSyncBuilder() .withFullScreenApp(pipApp) - .withRotation(Surface.ROTATION_90) + .withRotation(PlatformConsts.Rotation.ROTATION_90) .withNavOrTaskBarVisible() .withStatusBarVisible() .waitForAndVerify() @@ -95,34 +98,32 @@ open class SetRequestedOrientationWhilePinnedTest( } /** - * This test is not compatible with Tablets. When using [Activity.setRequestedOrientation] - * to fix a orientation, Tablets instead keep the same orientation and add letterboxes + * This test is not compatible with Tablets. When using [Activity.setRequestedOrientation] to + * fix a orientation, Tablets instead keep the same orientation and add letterboxes */ @Before fun setup() { - Assume.assumeFalse(testSpec.isTablet) + Assume.assumeFalse(flicker.scenario.isTablet) } @Presubmit @Test fun displayEndsAt90Degrees() { - testSpec.assertWmEnd { - hasRotation(Surface.ROTATION_90) - } + flicker.assertWmEnd { hasRotation(PlatformConsts.Rotation.ROTATION_90) } } - /** {@inheritDoc} */ + /** {@inheritDoc} */ @Presubmit @Test override fun navBarLayerIsVisibleAtStartAndEnd() = super.navBarLayerIsVisibleAtStartAndEnd() - /** {@inheritDoc} */ + /** {@inheritDoc} */ @Presubmit @Test override fun statusBarLayerIsVisibleAtStartAndEnd() = super.statusBarLayerIsVisibleAtStartAndEnd() - /** {@inheritDoc} */ + /** {@inheritDoc} */ @FlakyTest @Test override fun navBarLayerPositionAtStartAndEnd() = super.navBarLayerPositionAtStartAndEnd() @@ -130,23 +131,17 @@ open class SetRequestedOrientationWhilePinnedTest( @Presubmit @Test fun pipWindowInsideDisplay() { - testSpec.assertWmStart { - visibleRegion(pipApp).coversAtMost(startingBounds) - } + flicker.assertWmStart { visibleRegion(pipApp).coversAtMost(startingBounds) } } @Presubmit @Test fun pipAppShowsOnTop() { - testSpec.assertWmEnd { - isAppWindowOnTop(pipApp) - } + flicker.assertWmEnd { isAppWindowOnTop(pipApp) } } private fun pipLayerInsideDisplay_internal() { - testSpec.assertLayersStart { - visibleRegion(pipApp).coversAtMost(startingBounds) - } + flicker.assertLayersStart { visibleRegion(pipApp).coversAtMost(startingBounds) } } @Presubmit @@ -166,40 +161,35 @@ open class SetRequestedOrientationWhilePinnedTest( @Presubmit @Test fun pipAlwaysVisible() { - testSpec.assertWm { - this.isAppWindowVisible(pipApp) - } + flicker.assertWm { this.isAppWindowVisible(pipApp) } } @Presubmit @Test fun pipAppLayerCoversFullScreen() { - testSpec.assertLayersEnd { - visibleRegion(pipApp).coversExactly(endingBounds) - } + flicker.assertLayersEnd { visibleRegion(pipApp).coversExactly(endingBounds) } } - /** {@inheritDoc} */ + /** {@inheritDoc} */ @Postsubmit @Test override fun taskBarLayerIsVisibleAtStartAndEnd() = super.taskBarLayerIsVisibleAtStartAndEnd() - /** {@inheritDoc} */ + /** {@inheritDoc} */ @Postsubmit @Test override fun taskBarWindowIsAlwaysVisible() = super.taskBarWindowIsAlwaysVisible() - /** {@inheritDoc} */ - @Postsubmit - @Test - override fun entireScreenCovered() = super.entireScreenCovered() + /** {@inheritDoc} */ + @Postsubmit @Test override fun entireScreenCovered() = super.entireScreenCovered() companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): Collection<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests(supportedRotations = listOf(Surface.ROTATION_0)) + fun getParams(): Collection<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + supportedRotations = listOf(PlatformConsts.Rotation.ROTATION_0) + ) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/tv/PipTestBase.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/tv/PipTestBase.kt index 2cb18f948f0e..a16f5f6f1620 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/tv/PipTestBase.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/tv/PipTestBase.kt @@ -24,7 +24,10 @@ import androidx.test.uiautomator.UiDevice import org.junit.Before import org.junit.runners.Parameterized -abstract class PipTestBase(protected val rotationName: String, protected val rotation: Int) { +abstract class PipTestBase( + protected val rotationName: String, + protected val rotation: Int +) { val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation() val uiDevice = UiDevice.getInstance(instrumentation) val packageManager: PackageManager = instrumentation.context.packageManager diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/CopyContentInSplit.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/CopyContentInSplit.kt index 9533b9182b6c..65cbea03a044 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/CopyContentInSplit.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/CopyContentInSplit.kt @@ -20,10 +20,10 @@ import android.platform.test.annotations.FlakyTest import android.platform.test.annotations.IwTest import android.platform.test.annotations.Presubmit import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import com.android.server.wm.traces.common.ComponentNameMatcher import com.android.server.wm.traces.common.EdgeExtensionComponentMatcher import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT @@ -49,7 +49,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class CopyContentInSplit(testSpec: FlickerTestParameter) : SplitScreenBase(testSpec) { +class CopyContentInSplit(flicker: FlickerTest) : SplitScreenBase(flicker) { private val textEditApp = SplitScreenUtils.getIme(instrumentation) private val MagnifierLayer = ComponentNameMatcher("", "magnifier surface bbq wrapper#") private val PopupWindowLayer = ComponentNameMatcher("", "PopupWindow:") @@ -72,29 +72,29 @@ class CopyContentInSplit(testSpec: FlickerTestParameter) : SplitScreenBase(testS @Presubmit @Test fun cujCompleted() { - testSpec.appWindowIsVisibleAtStart(primaryApp) - testSpec.appWindowIsVisibleAtStart(textEditApp) - testSpec.splitScreenDividerIsVisibleAtStart() + flicker.appWindowIsVisibleAtStart(primaryApp) + flicker.appWindowIsVisibleAtStart(textEditApp) + flicker.splitScreenDividerIsVisibleAtStart() - testSpec.appWindowIsVisibleAtEnd(primaryApp) - testSpec.appWindowIsVisibleAtEnd(textEditApp) - testSpec.splitScreenDividerIsVisibleAtEnd() + flicker.appWindowIsVisibleAtEnd(primaryApp) + flicker.appWindowIsVisibleAtEnd(textEditApp) + flicker.splitScreenDividerIsVisibleAtEnd() // The validation of copied text is already done in SplitScreenUtils.copyContentInSplit() } @Presubmit @Test - fun splitScreenDividerKeepVisible() = testSpec.layerKeepVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) + fun splitScreenDividerKeepVisible() = flicker.layerKeepVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) - @Presubmit @Test fun primaryAppLayerKeepVisible() = testSpec.layerKeepVisible(primaryApp) + @Presubmit @Test fun primaryAppLayerKeepVisible() = flicker.layerKeepVisible(primaryApp) - @Presubmit @Test fun textEditAppLayerKeepVisible() = testSpec.layerKeepVisible(textEditApp) + @Presubmit @Test fun textEditAppLayerKeepVisible() = flicker.layerKeepVisible(textEditApp) @Presubmit @Test fun primaryAppBoundsKeepVisible() = - testSpec.splitAppLayerBoundsKeepVisible( + flicker.splitAppLayerBoundsKeepVisible( primaryApp, landscapePosLeft = tapl.isTablet, portraitPosTop = false @@ -103,21 +103,18 @@ class CopyContentInSplit(testSpec: FlickerTestParameter) : SplitScreenBase(testS @Presubmit @Test fun textEditAppBoundsKeepVisible() = - testSpec.splitAppLayerBoundsKeepVisible( + flicker.splitAppLayerBoundsKeepVisible( textEditApp, landscapePosLeft = !tapl.isTablet, portraitPosTop = true ) - @Presubmit @Test fun primaryAppWindowKeepVisible() = testSpec.appWindowKeepVisible(primaryApp) + @Presubmit @Test fun primaryAppWindowKeepVisible() = flicker.appWindowKeepVisible(primaryApp) - @Presubmit @Test fun textEditAppWindowKeepVisible() = testSpec.appWindowKeepVisible(textEditApp) + @Presubmit @Test fun textEditAppWindowKeepVisible() = flicker.appWindowKeepVisible(textEditApp) /** {@inheritDoc} */ - @Presubmit - @Test - override fun entireScreenCovered() = - super.entireScreenCovered() + @Presubmit @Test override fun entireScreenCovered() = super.entireScreenCovered() /** {@inheritDoc} */ @Presubmit @@ -164,15 +161,18 @@ class CopyContentInSplit(testSpec: FlickerTestParameter) : SplitScreenBase(testS @Presubmit @Test override fun visibleLayersShownMoreThanOneConsecutiveEntry() { - testSpec.assertLayers { + flicker.assertLayers { this.visibleLayersShownMoreThanOneConsecutiveEntry( - ignoreLayers = listOf( - ComponentNameMatcher.SPLASH_SCREEN, - ComponentNameMatcher.SNAPSHOT, - ComponentNameMatcher.IME_SNAPSHOT, - EdgeExtensionComponentMatcher(), - MagnifierLayer, - PopupWindowLayer)) + ignoreLayers = + listOf( + ComponentNameMatcher.SPLASH_SCREEN, + ComponentNameMatcher.SNAPSHOT, + ComponentNameMatcher.IME_SNAPSHOT, + EdgeExtensionComponentMatcher(), + MagnifierLayer, + PopupWindowLayer + ) + ) } } @@ -185,9 +185,8 @@ class CopyContentInSplit(testSpec: FlickerTestParameter) : SplitScreenBase(testS companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests() + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests() } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DismissSplitScreenByDivider.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DismissSplitScreenByDivider.kt index 475749834711..d0f02e2bf514 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DismissSplitScreenByDivider.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DismissSplitScreenByDivider.kt @@ -21,11 +21,11 @@ import android.platform.test.annotations.IwTest import android.platform.test.annotations.Postsubmit import android.platform.test.annotations.Presubmit import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory import com.android.server.wm.flicker.helpers.WindowUtils +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT import com.android.wm.shell.flicker.appWindowBecomesInvisible import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd @@ -49,54 +49,62 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class DismissSplitScreenByDivider (testSpec: FlickerTestParameter) : SplitScreenBase(testSpec) { +class DismissSplitScreenByDivider(flicker: FlickerTest) : SplitScreenBase(flicker) { override val transition: FlickerBuilder.() -> Unit get() = { super.transition(this) - setup { - SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) - } + setup { SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) } transitions { if (tapl.isTablet) { - SplitScreenUtils.dragDividerToDismissSplit(device, wmHelper, - dragToRight = false, dragToBottom = true) + SplitScreenUtils.dragDividerToDismissSplit( + device, + wmHelper, + dragToRight = false, + dragToBottom = true + ) } else { - SplitScreenUtils.dragDividerToDismissSplit(device, wmHelper, - dragToRight = true, dragToBottom = true) + SplitScreenUtils.dragDividerToDismissSplit( + device, + wmHelper, + dragToRight = true, + dragToBottom = true + ) } - wmHelper.StateSyncBuilder() - .withFullScreenApp(secondaryApp) - .waitForAndVerify() + wmHelper.StateSyncBuilder().withFullScreenApp(secondaryApp).waitForAndVerify() } } @IwTest(focusArea = "sysui") @Presubmit @Test - fun cujCompleted() = testSpec.splitScreenDismissed(primaryApp, secondaryApp, toHome = false) + fun cujCompleted() = flicker.splitScreenDismissed(primaryApp, secondaryApp, toHome = false) @Presubmit @Test - fun splitScreenDividerBecomesInvisible() = testSpec.splitScreenDividerBecomesInvisible() + fun splitScreenDividerBecomesInvisible() = flicker.splitScreenDividerBecomesInvisible() @Presubmit @Test - fun primaryAppLayerBecomesInvisible() = testSpec.layerBecomesInvisible(primaryApp) + fun primaryAppLayerBecomesInvisible() = flicker.layerBecomesInvisible(primaryApp) @Presubmit @Test - fun secondaryAppLayerIsVisibleAtEnd() = testSpec.layerIsVisibleAtEnd(secondaryApp) + fun secondaryAppLayerIsVisibleAtEnd() = flicker.layerIsVisibleAtEnd(secondaryApp) @Presubmit @Test - fun primaryAppBoundsBecomesInvisible() = testSpec.splitAppLayerBoundsBecomesInvisible( - primaryApp, landscapePosLeft = tapl.isTablet, portraitPosTop = false) + fun primaryAppBoundsBecomesInvisible() = + flicker.splitAppLayerBoundsBecomesInvisible( + primaryApp, + landscapePosLeft = tapl.isTablet, + portraitPosTop = false + ) @Presubmit @Test fun secondaryAppBoundsIsFullscreenAtEnd() { - testSpec.assertLayers { + flicker.assertLayers { this.isVisible(secondaryApp) .isVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) .then() @@ -109,7 +117,7 @@ class DismissSplitScreenByDivider (testSpec: FlickerTestParameter) : SplitScreen .contains(SPLIT_SCREEN_DIVIDER_COMPONENT) .then() .invoke("secondaryAppBoundsIsFullscreenAtEnd") { - val displayBounds = WindowUtils.getDisplayBounds(testSpec.endRotation) + val displayBounds = WindowUtils.getDisplayBounds(flicker.scenario.endRotation) it.visibleRegion(secondaryApp).coversExactly(displayBounds) } } @@ -117,35 +125,29 @@ class DismissSplitScreenByDivider (testSpec: FlickerTestParameter) : SplitScreen @Presubmit @Test - fun primaryAppWindowBecomesInvisible() = testSpec.appWindowBecomesInvisible(primaryApp) + fun primaryAppWindowBecomesInvisible() = flicker.appWindowBecomesInvisible(primaryApp) @Presubmit @Test - fun secondaryAppWindowIsVisibleAtEnd() = testSpec.appWindowIsVisibleAtEnd(secondaryApp) + fun secondaryAppWindowIsVisibleAtEnd() = flicker.appWindowIsVisibleAtEnd(secondaryApp) /** {@inheritDoc} */ - @Postsubmit - @Test - override fun entireScreenCovered() = - super.entireScreenCovered() + @Postsubmit @Test override fun entireScreenCovered() = super.entireScreenCovered() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarLayerIsVisibleAtStartAndEnd() = - super.navBarLayerIsVisibleAtStartAndEnd() + override fun navBarLayerIsVisibleAtStartAndEnd() = super.navBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @FlakyTest(bugId = 206753786) @Test - override fun navBarLayerPositionAtStartAndEnd() = - super.navBarLayerPositionAtStartAndEnd() + override fun navBarLayerPositionAtStartAndEnd() = super.navBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarWindowIsAlwaysVisible() = - super.navBarWindowIsAlwaysVisible() + override fun navBarWindowIsAlwaysVisible() = super.navBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @@ -156,26 +158,22 @@ class DismissSplitScreenByDivider (testSpec: FlickerTestParameter) : SplitScreen /** {@inheritDoc} */ @Postsubmit @Test - override fun statusBarLayerPositionAtStartAndEnd() = - super.statusBarLayerPositionAtStartAndEnd() + override fun statusBarLayerPositionAtStartAndEnd() = super.statusBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun statusBarWindowIsAlwaysVisible() = - super.statusBarWindowIsAlwaysVisible() + override fun statusBarWindowIsAlwaysVisible() = super.statusBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @Test - override fun taskBarLayerIsVisibleAtStartAndEnd() = - super.taskBarLayerIsVisibleAtStartAndEnd() + override fun taskBarLayerIsVisibleAtStartAndEnd() = super.taskBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun taskBarWindowIsAlwaysVisible() = - super.taskBarWindowIsAlwaysVisible() + override fun taskBarWindowIsAlwaysVisible() = super.taskBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @@ -192,8 +190,8 @@ class DismissSplitScreenByDivider (testSpec: FlickerTestParameter) : SplitScreen companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests() + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests() } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DismissSplitScreenByGoHome.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DismissSplitScreenByGoHome.kt index 1d61955bc0a8..b44b681704ba 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DismissSplitScreenByGoHome.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DismissSplitScreenByGoHome.kt @@ -20,10 +20,10 @@ import android.platform.test.annotations.FlakyTest import android.platform.test.annotations.IwTest import android.platform.test.annotations.Presubmit import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import com.android.wm.shell.flicker.appWindowBecomesInvisible import com.android.wm.shell.flicker.layerBecomesInvisible import com.android.wm.shell.flicker.splitAppLayerBoundsBecomesInvisible @@ -44,89 +44,81 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class DismissSplitScreenByGoHome( - testSpec: FlickerTestParameter -) : SplitScreenBase(testSpec) { +class DismissSplitScreenByGoHome(flicker: FlickerTest) : SplitScreenBase(flicker) { override val transition: FlickerBuilder.() -> Unit get() = { super.transition(this) - setup { - SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) - } + setup { SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) } transitions { tapl.goHome() - wmHelper.StateSyncBuilder() - .withHomeActivityVisible() - .waitForAndVerify() + wmHelper.StateSyncBuilder().withHomeActivityVisible().waitForAndVerify() } } @IwTest(focusArea = "sysui") @Presubmit @Test - fun cujCompleted() = testSpec.splitScreenDismissed(primaryApp, secondaryApp, toHome = true) + fun cujCompleted() = flicker.splitScreenDismissed(primaryApp, secondaryApp, toHome = true) @Presubmit @Test - fun splitScreenDividerBecomesInvisible() = testSpec.splitScreenDividerBecomesInvisible() + fun splitScreenDividerBecomesInvisible() = flicker.splitScreenDividerBecomesInvisible() @FlakyTest(bugId = 241525302) @Test - fun primaryAppLayerBecomesInvisible() = testSpec.layerBecomesInvisible(primaryApp) + fun primaryAppLayerBecomesInvisible() = flicker.layerBecomesInvisible(primaryApp) // TODO(b/245472831): Move back to presubmit after shell transitions landing. @FlakyTest(bugId = 245472831) @Test - fun secondaryAppLayerBecomesInvisible() = testSpec.layerBecomesInvisible(primaryApp) + fun secondaryAppLayerBecomesInvisible() = flicker.layerBecomesInvisible(primaryApp) // TODO(b/245472831): Move back to presubmit after shell transitions landing. @FlakyTest(bugId = 245472831) @Test - fun primaryAppBoundsBecomesInvisible() = testSpec.splitAppLayerBoundsBecomesInvisible( - primaryApp, - landscapePosLeft = tapl.isTablet, - portraitPosTop = false - ) + fun primaryAppBoundsBecomesInvisible() = + flicker.splitAppLayerBoundsBecomesInvisible( + primaryApp, + landscapePosLeft = tapl.isTablet, + portraitPosTop = false + ) @FlakyTest(bugId = 250530241) @Test - fun secondaryAppBoundsBecomesInvisible() = testSpec.splitAppLayerBoundsBecomesInvisible( - secondaryApp, - landscapePosLeft = !tapl.isTablet, - portraitPosTop = true - ) + fun secondaryAppBoundsBecomesInvisible() = + flicker.splitAppLayerBoundsBecomesInvisible( + secondaryApp, + landscapePosLeft = !tapl.isTablet, + portraitPosTop = true + ) @Presubmit @Test - fun primaryAppWindowBecomesInvisible() = testSpec.appWindowBecomesInvisible(primaryApp) + fun primaryAppWindowBecomesInvisible() = flicker.appWindowBecomesInvisible(primaryApp) @Presubmit @Test - fun secondaryAppWindowBecomesInvisible() = testSpec.appWindowBecomesInvisible(secondaryApp) + fun secondaryAppWindowBecomesInvisible() = flicker.appWindowBecomesInvisible(secondaryApp) /** {@inheritDoc} */ @FlakyTest(bugId = 251268711) @Test - override fun entireScreenCovered() = - super.entireScreenCovered() + override fun entireScreenCovered() = super.entireScreenCovered() /** {@inheritDoc} */ @Presubmit @Test - override fun navBarLayerIsVisibleAtStartAndEnd() = - super.navBarLayerIsVisibleAtStartAndEnd() + override fun navBarLayerIsVisibleAtStartAndEnd() = super.navBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @FlakyTest(bugId = 206753786) @Test - override fun navBarLayerPositionAtStartAndEnd() = - super.navBarLayerPositionAtStartAndEnd() + override fun navBarLayerPositionAtStartAndEnd() = super.navBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Presubmit @Test - override fun navBarWindowIsAlwaysVisible() = - super.navBarWindowIsAlwaysVisible() + override fun navBarWindowIsAlwaysVisible() = super.navBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Presubmit @@ -137,26 +129,22 @@ class DismissSplitScreenByGoHome( /** {@inheritDoc} */ @Presubmit @Test - override fun statusBarLayerPositionAtStartAndEnd() = - super.statusBarLayerPositionAtStartAndEnd() + override fun statusBarLayerPositionAtStartAndEnd() = super.statusBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Presubmit @Test - override fun statusBarWindowIsAlwaysVisible() = - super.statusBarWindowIsAlwaysVisible() + override fun statusBarWindowIsAlwaysVisible() = super.statusBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Presubmit @Test - override fun taskBarLayerIsVisibleAtStartAndEnd() = - super.taskBarLayerIsVisibleAtStartAndEnd() + override fun taskBarLayerIsVisibleAtStartAndEnd() = super.taskBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Presubmit @Test - override fun taskBarWindowIsAlwaysVisible() = - super.taskBarWindowIsAlwaysVisible() + override fun taskBarWindowIsAlwaysVisible() = super.taskBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @FlakyTest @@ -173,8 +161,8 @@ class DismissSplitScreenByGoHome( companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests() + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests() } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DragDividerToResize.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DragDividerToResize.kt index 8d771fe3a1ff..5b656b3a5f39 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DragDividerToResize.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DragDividerToResize.kt @@ -21,10 +21,10 @@ import android.platform.test.annotations.IwTest import android.platform.test.annotations.Postsubmit import android.platform.test.annotations.Presubmit import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd import com.android.wm.shell.flicker.appWindowIsVisibleAtStart @@ -50,35 +50,31 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class DragDividerToResize(testSpec: FlickerTestParameter) : SplitScreenBase(testSpec) { +class DragDividerToResize(flicker: FlickerTest) : SplitScreenBase(flicker) { override val transition: FlickerBuilder.() -> Unit get() = { super.transition(this) - setup { - SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) - } - transitions { - SplitScreenUtils.dragDividerToResizeAndWait(device, wmHelper) - } + setup { SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) } + transitions { SplitScreenUtils.dragDividerToResizeAndWait(device, wmHelper) } } @Before fun before() { - Assume.assumeTrue(tapl.isTablet || !testSpec.isLandscapeOrSeascapeAtStart) + Assume.assumeTrue(tapl.isTablet || !flicker.scenario.isLandscapeOrSeascapeAtStart) } @IwTest(focusArea = "sysui") @Presubmit @Test fun cujCompleted() { - testSpec.appWindowIsVisibleAtStart(primaryApp) - testSpec.appWindowIsVisibleAtStart(secondaryApp) - testSpec.splitScreenDividerIsVisibleAtStart() + flicker.appWindowIsVisibleAtStart(primaryApp) + flicker.appWindowIsVisibleAtStart(secondaryApp) + flicker.splitScreenDividerIsVisibleAtStart() - testSpec.appWindowIsVisibleAtEnd(primaryApp) - testSpec.appWindowIsVisibleAtEnd(secondaryApp) - testSpec.splitScreenDividerIsVisibleAtEnd() + flicker.appWindowIsVisibleAtEnd(primaryApp) + flicker.appWindowIsVisibleAtEnd(secondaryApp) + flicker.splitScreenDividerIsVisibleAtEnd() // TODO(b/246490534): Add validation for resized app after withAppTransitionIdle is // robust enough to get the correct end state. @@ -86,16 +82,14 @@ class DragDividerToResize(testSpec: FlickerTestParameter) : SplitScreenBase(test @Presubmit @Test - fun splitScreenDividerKeepVisible() = testSpec.layerKeepVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) + fun splitScreenDividerKeepVisible() = flicker.layerKeepVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) - @Presubmit - @Test - fun primaryAppLayerKeepVisible() = testSpec.layerKeepVisible(primaryApp) + @Presubmit @Test fun primaryAppLayerKeepVisible() = flicker.layerKeepVisible(primaryApp) @Presubmit @Test fun secondaryAppLayerVisibilityChanges() { - testSpec.assertLayers { + flicker.assertLayers { this.isVisible(secondaryApp) .then() .isInvisible(secondaryApp) @@ -104,53 +98,47 @@ class DragDividerToResize(testSpec: FlickerTestParameter) : SplitScreenBase(test } } - @Presubmit - @Test - fun primaryAppWindowKeepVisible() = testSpec.appWindowKeepVisible(primaryApp) + @Presubmit @Test fun primaryAppWindowKeepVisible() = flicker.appWindowKeepVisible(primaryApp) @Presubmit @Test - fun secondaryAppWindowKeepVisible() = testSpec.appWindowKeepVisible(secondaryApp) + fun secondaryAppWindowKeepVisible() = flicker.appWindowKeepVisible(secondaryApp) @Presubmit @Test - fun primaryAppBoundsChanges() = testSpec.splitAppLayerBoundsChanges( - primaryApp, - landscapePosLeft = true, - portraitPosTop = false - ) + fun primaryAppBoundsChanges() = + flicker.splitAppLayerBoundsChanges( + primaryApp, + landscapePosLeft = true, + portraitPosTop = false + ) @FlakyTest(bugId = 250530664) @Test - fun secondaryAppBoundsChanges() = testSpec.splitAppLayerBoundsChanges( - secondaryApp, - landscapePosLeft = false, - portraitPosTop = true - ) + fun secondaryAppBoundsChanges() = + flicker.splitAppLayerBoundsChanges( + secondaryApp, + landscapePosLeft = false, + portraitPosTop = true + ) /** {@inheritDoc} */ - @Postsubmit - @Test - override fun entireScreenCovered() = - super.entireScreenCovered() + @Postsubmit @Test override fun entireScreenCovered() = super.entireScreenCovered() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarLayerIsVisibleAtStartAndEnd() = - super.navBarLayerIsVisibleAtStartAndEnd() + override fun navBarLayerIsVisibleAtStartAndEnd() = super.navBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarLayerPositionAtStartAndEnd() = - super.navBarLayerPositionAtStartAndEnd() + override fun navBarLayerPositionAtStartAndEnd() = super.navBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarWindowIsAlwaysVisible() = - super.navBarWindowIsAlwaysVisible() + override fun navBarWindowIsAlwaysVisible() = super.navBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @@ -161,26 +149,22 @@ class DragDividerToResize(testSpec: FlickerTestParameter) : SplitScreenBase(test /** {@inheritDoc} */ @Postsubmit @Test - override fun statusBarLayerPositionAtStartAndEnd() = - super.statusBarLayerPositionAtStartAndEnd() + override fun statusBarLayerPositionAtStartAndEnd() = super.statusBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun statusBarWindowIsAlwaysVisible() = - super.statusBarWindowIsAlwaysVisible() + override fun statusBarWindowIsAlwaysVisible() = super.statusBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @Test - override fun taskBarLayerIsVisibleAtStartAndEnd() = - super.taskBarLayerIsVisibleAtStartAndEnd() + override fun taskBarLayerIsVisibleAtStartAndEnd() = super.taskBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun taskBarWindowIsAlwaysVisible() = - super.taskBarWindowIsAlwaysVisible() + override fun taskBarWindowIsAlwaysVisible() = super.taskBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @@ -197,8 +181,8 @@ class DragDividerToResize(testSpec: FlickerTestParameter) : SplitScreenBase(test companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests() + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests() } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromAllApps.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromAllApps.kt index 7378e213234c..4e36c367f226 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromAllApps.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromAllApps.kt @@ -19,13 +19,13 @@ package com.android.wm.shell.flicker.splitscreen import android.platform.test.annotations.IwTest import android.platform.test.annotations.Postsubmit import android.platform.test.annotations.Presubmit -import android.view.WindowManagerPolicyConstants import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory import com.android.server.wm.flicker.helpers.isShellTransitionsEnabled +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory +import com.android.server.wm.traces.common.service.PlatformConsts import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT import com.android.wm.shell.flicker.appWindowBecomesVisible import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd @@ -44,8 +44,8 @@ import org.junit.runners.MethodSorters import org.junit.runners.Parameterized /** - * Test enter split screen by dragging app icon from all apps. - * This test is only for large screen devices. + * Test enter split screen by dragging app icon from all apps. This test is only for large screen + * devices. * * To run this test: `atest WMShellFlickerTests:EnterSplitScreenByDragFromAllApps` */ @@ -53,9 +53,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class EnterSplitScreenByDragFromAllApps( - testSpec: FlickerTestParameter -) : SplitScreenBase(testSpec) { +class EnterSplitScreenByDragFromAllApps(flicker: FlickerTest) : SplitScreenBase(flicker) { @Before fun before() { @@ -71,9 +69,9 @@ class EnterSplitScreenByDragFromAllApps( } transitions { tapl.launchedAppState.taskbar - .openAllApps() - .getAppIcon(secondaryApp.appName) - .dragToSplitscreen(secondaryApp.`package`, primaryApp.`package`) + .openAllApps() + .getAppIcon(secondaryApp.appName) + .dragToSplitscreen(secondaryApp.`package`, primaryApp.`package`) SplitScreenUtils.waitForSplitComplete(wmHelper, primaryApp, secondaryApp) } } @@ -81,13 +79,13 @@ class EnterSplitScreenByDragFromAllApps( @IwTest(focusArea = "sysui") @Presubmit @Test - fun cujCompleted() = testSpec.splitScreenEntered(primaryApp, secondaryApp, fromOtherApp = false) + fun cujCompleted() = flicker.splitScreenEntered(primaryApp, secondaryApp, fromOtherApp = false) @Presubmit @Test fun splitScreenDividerBecomesVisible() { Assume.assumeFalse(isShellTransitionsEnabled) - testSpec.splitScreenDividerBecomesVisible() + flicker.splitScreenDividerBecomesVisible() } // TODO(b/245472831): Back to splitScreenDividerBecomesVisible after shell transition ready. @@ -95,60 +93,54 @@ class EnterSplitScreenByDragFromAllApps( @Test fun splitScreenDividerIsVisibleAtEnd_ShellTransit() { Assume.assumeTrue(isShellTransitionsEnabled) - testSpec.assertLayersEnd { - this.isVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) - } + flicker.assertLayersEnd { this.isVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) } } - @Presubmit - @Test - fun primaryAppLayerIsVisibleAtEnd() = testSpec.layerIsVisibleAtEnd(primaryApp) + @Presubmit @Test fun primaryAppLayerIsVisibleAtEnd() = flicker.layerIsVisibleAtEnd(primaryApp) @Presubmit @Test - fun secondaryAppLayerBecomesVisible() = testSpec.layerBecomesVisible(secondaryApp) + fun secondaryAppLayerBecomesVisible() = flicker.layerBecomesVisible(secondaryApp) @Presubmit @Test - fun primaryAppBoundsIsVisibleAtEnd() = testSpec.splitAppLayerBoundsIsVisibleAtEnd( - primaryApp, landscapePosLeft = false, portraitPosTop = false) + fun primaryAppBoundsIsVisibleAtEnd() = + flicker.splitAppLayerBoundsIsVisibleAtEnd( + primaryApp, + landscapePosLeft = false, + portraitPosTop = false + ) @Presubmit @Test - fun secondaryAppBoundsBecomesVisible() = testSpec.splitAppLayerBoundsBecomesVisibleByDrag( - secondaryApp) + fun secondaryAppBoundsBecomesVisible() = + flicker.splitAppLayerBoundsBecomesVisibleByDrag(secondaryApp) @Presubmit @Test - fun primaryAppWindowIsVisibleAtEnd() = testSpec.appWindowIsVisibleAtEnd(primaryApp) + fun primaryAppWindowIsVisibleAtEnd() = flicker.appWindowIsVisibleAtEnd(primaryApp) @Presubmit @Test - fun secondaryAppWindowBecomesVisible() = testSpec.appWindowBecomesVisible(secondaryApp) + fun secondaryAppWindowBecomesVisible() = flicker.appWindowBecomesVisible(secondaryApp) /** {@inheritDoc} */ - @Postsubmit - @Test - override fun entireScreenCovered() = - super.entireScreenCovered() + @Postsubmit @Test override fun entireScreenCovered() = super.entireScreenCovered() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarLayerIsVisibleAtStartAndEnd() = - super.navBarLayerIsVisibleAtStartAndEnd() + override fun navBarLayerIsVisibleAtStartAndEnd() = super.navBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarLayerPositionAtStartAndEnd() = - super.navBarLayerPositionAtStartAndEnd() + override fun navBarLayerPositionAtStartAndEnd() = super.navBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarWindowIsAlwaysVisible() = - super.navBarWindowIsAlwaysVisible() + override fun navBarWindowIsAlwaysVisible() = super.navBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @@ -159,26 +151,22 @@ class EnterSplitScreenByDragFromAllApps( /** {@inheritDoc} */ @Postsubmit @Test - override fun statusBarLayerPositionAtStartAndEnd() = - super.statusBarLayerPositionAtStartAndEnd() + override fun statusBarLayerPositionAtStartAndEnd() = super.statusBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun statusBarWindowIsAlwaysVisible() = - super.statusBarWindowIsAlwaysVisible() + override fun statusBarWindowIsAlwaysVisible() = super.statusBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @Test - override fun taskBarLayerIsVisibleAtStartAndEnd() = - super.taskBarLayerIsVisibleAtStartAndEnd() + override fun taskBarLayerIsVisibleAtStartAndEnd() = super.taskBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun taskBarWindowIsAlwaysVisible() = - super.taskBarWindowIsAlwaysVisible() + override fun taskBarWindowIsAlwaysVisible() = super.taskBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @@ -195,11 +183,11 @@ class EnterSplitScreenByDragFromAllApps( companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests( + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( // TODO(b/176061063):The 3 buttons of nav bar do not exist in the hierarchy. - supportedNavigationModes = - listOf(WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY)) + supportedNavigationModes = listOf(PlatformConsts.NavBar.MODE_GESTURAL) + ) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromNotification.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromNotification.kt index 0c03d315cca2..5d37e858c15f 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromNotification.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromNotification.kt @@ -19,13 +19,13 @@ package com.android.wm.shell.flicker.splitscreen import android.platform.test.annotations.IwTest import android.platform.test.annotations.Postsubmit import android.platform.test.annotations.Presubmit -import android.view.WindowManagerPolicyConstants import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory import com.android.server.wm.flicker.helpers.isShellTransitionsEnabled +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory +import com.android.server.wm.traces.common.service.PlatformConsts import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd import com.android.wm.shell.flicker.layerBecomesVisible @@ -43,8 +43,8 @@ import org.junit.runners.MethodSorters import org.junit.runners.Parameterized /** - * Test enter split screen by dragging app icon from notification. - * This test is only for large screen devices. + * Test enter split screen by dragging app icon from notification. This test is only for large + * screen devices. * * To run this test: `atest WMShellFlickerTests:EnterSplitScreenByDragFromNotification` */ @@ -52,9 +52,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class EnterSplitScreenByDragFromNotification( - testSpec: FlickerTestParameter -) : SplitScreenBase(testSpec) { +class EnterSplitScreenByDragFromNotification(flicker: FlickerTest) : SplitScreenBase(flicker) { private val sendNotificationApp = SplitScreenUtils.getSendNotification(instrumentation) @@ -78,21 +76,19 @@ class EnterSplitScreenByDragFromNotification( SplitScreenUtils.dragFromNotificationToSplit(instrumentation, device, wmHelper) SplitScreenUtils.waitForSplitComplete(wmHelper, primaryApp, sendNotificationApp) } - teardown { - sendNotificationApp.exit(wmHelper) - } + teardown { sendNotificationApp.exit(wmHelper) } } @IwTest(focusArea = "sysui") @Presubmit @Test - fun cujCompleted() = testSpec.splitScreenEntered(primaryApp, secondaryApp, fromOtherApp = false) + fun cujCompleted() = flicker.splitScreenEntered(primaryApp, secondaryApp, fromOtherApp = false) @Presubmit @Test fun splitScreenDividerBecomesVisible() { Assume.assumeFalse(isShellTransitionsEnabled) - testSpec.splitScreenDividerBecomesVisible() + flicker.splitScreenDividerBecomesVisible() } // TODO(b/245472831): Back to splitScreenDividerBecomesVisible after shell transition ready. @@ -100,20 +96,16 @@ class EnterSplitScreenByDragFromNotification( @Test fun splitScreenDividerIsVisibleAtEnd_ShellTransit() { Assume.assumeTrue(isShellTransitionsEnabled) - testSpec.assertLayersEnd { - this.isVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) - } + flicker.assertLayersEnd { this.isVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) } } - @Presubmit - @Test - fun primaryAppLayerIsVisibleAtEnd() = testSpec.layerIsVisibleAtEnd(primaryApp) + @Presubmit @Test fun primaryAppLayerIsVisibleAtEnd() = flicker.layerIsVisibleAtEnd(primaryApp) @Presubmit @Test fun secondaryAppLayerBecomesVisible() { Assume.assumeFalse(isShellTransitionsEnabled) - testSpec.assertLayers { + flicker.assertLayers { this.isInvisible(sendNotificationApp) .then() .isVisible(sendNotificationApp) @@ -129,50 +121,48 @@ class EnterSplitScreenByDragFromNotification( @Test fun secondaryAppLayerBecomesVisible_ShellTransit() { Assume.assumeTrue(isShellTransitionsEnabled) - testSpec.layerBecomesVisible(sendNotificationApp) + flicker.layerBecomesVisible(sendNotificationApp) } @Presubmit @Test - fun primaryAppBoundsIsVisibleAtEnd() = testSpec.splitAppLayerBoundsIsVisibleAtEnd( - primaryApp, landscapePosLeft = false, portraitPosTop = false) + fun primaryAppBoundsIsVisibleAtEnd() = + flicker.splitAppLayerBoundsIsVisibleAtEnd( + primaryApp, + landscapePosLeft = false, + portraitPosTop = false + ) @Presubmit @Test - fun secondaryAppBoundsBecomesVisible() = testSpec.splitAppLayerBoundsBecomesVisibleByDrag( - sendNotificationApp) + fun secondaryAppBoundsBecomesVisible() = + flicker.splitAppLayerBoundsBecomesVisibleByDrag(sendNotificationApp) @Presubmit @Test - fun primaryAppWindowIsVisibleAtEnd() = testSpec.appWindowIsVisibleAtEnd(primaryApp) + fun primaryAppWindowIsVisibleAtEnd() = flicker.appWindowIsVisibleAtEnd(primaryApp) @Presubmit @Test - fun secondaryAppWindowIsVisibleAtEnd() = testSpec.appWindowIsVisibleAtEnd(sendNotificationApp) + fun secondaryAppWindowIsVisibleAtEnd() = flicker.appWindowIsVisibleAtEnd(sendNotificationApp) /** {@inheritDoc} */ - @Postsubmit - @Test - override fun entireScreenCovered() = - super.entireScreenCovered() + @Postsubmit @Test override fun entireScreenCovered() = super.entireScreenCovered() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarLayerIsVisibleAtStartAndEnd() = - super.navBarLayerIsVisibleAtStartAndEnd() + override fun navBarLayerIsVisibleAtStartAndEnd() = super.navBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarLayerPositionAtStartAndEnd() = - super.navBarLayerPositionAtStartAndEnd() + override fun navBarLayerPositionAtStartAndEnd() = super.navBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarWindowIsAlwaysVisible() = - super.navBarWindowIsAlwaysVisible() + override fun navBarWindowIsAlwaysVisible() = super.navBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @@ -183,26 +173,22 @@ class EnterSplitScreenByDragFromNotification( /** {@inheritDoc} */ @Postsubmit @Test - override fun statusBarLayerPositionAtStartAndEnd() = - super.statusBarLayerPositionAtStartAndEnd() + override fun statusBarLayerPositionAtStartAndEnd() = super.statusBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun statusBarWindowIsAlwaysVisible() = - super.statusBarWindowIsAlwaysVisible() + override fun statusBarWindowIsAlwaysVisible() = super.statusBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @Test - override fun taskBarLayerIsVisibleAtStartAndEnd() = - super.taskBarLayerIsVisibleAtStartAndEnd() + override fun taskBarLayerIsVisibleAtStartAndEnd() = super.taskBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun taskBarWindowIsAlwaysVisible() = - super.taskBarWindowIsAlwaysVisible() + override fun taskBarWindowIsAlwaysVisible() = super.taskBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @@ -219,11 +205,10 @@ class EnterSplitScreenByDragFromNotification( companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests( + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( // TODO(b/176061063):The 3 buttons of nav bar do not exist in the hierarchy. - supportedNavigationModes = - listOf(WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY) + supportedNavigationModes = listOf(PlatformConsts.NavBar.MODE_GESTURAL) ) } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromShortcut.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromShortcut.kt index dcadb5aa9cf4..abf9426aaa73 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromShortcut.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromShortcut.kt @@ -17,14 +17,14 @@ package com.android.wm.shell.flicker.splitscreen import android.platform.test.annotations.IwTest -import android.view.WindowManagerPolicyConstants import android.platform.test.annotations.Postsubmit import android.platform.test.annotations.Presubmit import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory +import com.android.server.wm.traces.common.service.PlatformConsts import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd import com.android.wm.shell.flicker.layerBecomesVisible import com.android.wm.shell.flicker.layerIsVisibleAtEnd @@ -41,8 +41,7 @@ import org.junit.runners.MethodSorters import org.junit.runners.Parameterized /** - * Test enter split screen by dragging a shortcut. - * This test is only for large screen devices. + * Test enter split screen by dragging a shortcut. This test is only for large screen devices. * * To run this test: `atest WMShellFlickerTests:EnterSplitScreenByDragFromShortcut` */ @@ -50,13 +49,11 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class EnterSplitScreenByDragFromShortcut( - testSpec: FlickerTestParameter -) : SplitScreenBase(testSpec) { +class EnterSplitScreenByDragFromShortcut(flicker: FlickerTest) : SplitScreenBase(flicker) { @Before fun before() { - Assume.assumeTrue(testSpec.isTablet) + Assume.assumeTrue(flicker.scenario.isTablet) } override val transition: FlickerBuilder.() -> Unit @@ -80,39 +77,46 @@ class EnterSplitScreenByDragFromShortcut( @IwTest(focusArea = "sysui") @Presubmit @Test - fun cujCompleted() = testSpec.splitScreenEntered(primaryApp, secondaryApp, - fromOtherApp = false, appExistAtStart = false) + fun cujCompleted() = + flicker.splitScreenEntered( + primaryApp, + secondaryApp, + fromOtherApp = false, + appExistAtStart = false + ) @Presubmit @Test - fun splitScreenDividerBecomesVisible() = testSpec.splitScreenDividerBecomesVisible() + fun splitScreenDividerBecomesVisible() = flicker.splitScreenDividerBecomesVisible() - @Presubmit - @Test - fun primaryAppLayerIsVisibleAtEnd() = testSpec.layerIsVisibleAtEnd(primaryApp) + @Presubmit @Test fun primaryAppLayerIsVisibleAtEnd() = flicker.layerIsVisibleAtEnd(primaryApp) @Presubmit @Test - fun secondaryAppLayerBecomesVisible() = testSpec.layerBecomesVisible(secondaryApp) + fun secondaryAppLayerBecomesVisible() = flicker.layerBecomesVisible(secondaryApp) @Presubmit @Test - fun primaryAppBoundsIsVisibleAtEnd() = testSpec.splitAppLayerBoundsIsVisibleAtEnd( - primaryApp, landscapePosLeft = false, portraitPosTop = false) + fun primaryAppBoundsIsVisibleAtEnd() = + flicker.splitAppLayerBoundsIsVisibleAtEnd( + primaryApp, + landscapePosLeft = false, + portraitPosTop = false + ) @Presubmit @Test - fun secondaryAppBoundsBecomesVisible() = testSpec.splitAppLayerBoundsBecomesVisibleByDrag( - secondaryApp) + fun secondaryAppBoundsBecomesVisible() = + flicker.splitAppLayerBoundsBecomesVisibleByDrag(secondaryApp) @Presubmit @Test - fun primaryAppWindowIsVisibleAtEnd() = testSpec.appWindowIsVisibleAtEnd(primaryApp) + fun primaryAppWindowIsVisibleAtEnd() = flicker.appWindowIsVisibleAtEnd(primaryApp) @Presubmit @Test fun secondaryAppWindowBecomesVisible() { - testSpec.assertWm { + flicker.assertWm { this.notContains(secondaryApp) .then() .isAppWindowInvisible(secondaryApp, isOptional = true) @@ -122,28 +126,22 @@ class EnterSplitScreenByDragFromShortcut( } /** {@inheritDoc} */ - @Postsubmit - @Test - override fun entireScreenCovered() = - super.entireScreenCovered() + @Postsubmit @Test override fun entireScreenCovered() = super.entireScreenCovered() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarLayerIsVisibleAtStartAndEnd() = - super.navBarLayerIsVisibleAtStartAndEnd() + override fun navBarLayerIsVisibleAtStartAndEnd() = super.navBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarLayerPositionAtStartAndEnd() = - super.navBarLayerPositionAtStartAndEnd() + override fun navBarLayerPositionAtStartAndEnd() = super.navBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarWindowIsAlwaysVisible() = - super.navBarWindowIsAlwaysVisible() + override fun navBarWindowIsAlwaysVisible() = super.navBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @@ -154,26 +152,22 @@ class EnterSplitScreenByDragFromShortcut( /** {@inheritDoc} */ @Postsubmit @Test - override fun statusBarLayerPositionAtStartAndEnd() = - super.statusBarLayerPositionAtStartAndEnd() + override fun statusBarLayerPositionAtStartAndEnd() = super.statusBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun statusBarWindowIsAlwaysVisible() = - super.statusBarWindowIsAlwaysVisible() + override fun statusBarWindowIsAlwaysVisible() = super.statusBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @Test - override fun taskBarLayerIsVisibleAtStartAndEnd() = - super.taskBarLayerIsVisibleAtStartAndEnd() + override fun taskBarLayerIsVisibleAtStartAndEnd() = super.taskBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun taskBarWindowIsAlwaysVisible() = - super.taskBarWindowIsAlwaysVisible() + override fun taskBarWindowIsAlwaysVisible() = super.taskBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @@ -190,11 +184,11 @@ class EnterSplitScreenByDragFromShortcut( companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests( + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( // TODO(b/176061063):The 3 buttons of nav bar do not exist in the hierarchy. - supportedNavigationModes = - listOf(WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY)) + supportedNavigationModes = listOf(PlatformConsts.NavBar.MODE_GESTURAL) + ) } } -}
\ No newline at end of file +} diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromTaskbar.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromTaskbar.kt index 496d439b0ec6..795a2c4f43ba 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromTaskbar.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromTaskbar.kt @@ -19,13 +19,13 @@ package com.android.wm.shell.flicker.splitscreen import android.platform.test.annotations.IwTest import android.platform.test.annotations.Postsubmit import android.platform.test.annotations.Presubmit -import android.view.WindowManagerPolicyConstants import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory import com.android.server.wm.flicker.helpers.isShellTransitionsEnabled +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory +import com.android.server.wm.traces.common.service.PlatformConsts import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT import com.android.wm.shell.flicker.appWindowBecomesVisible import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd @@ -44,8 +44,8 @@ import org.junit.runners.MethodSorters import org.junit.runners.Parameterized /** - * Test enter split screen by dragging app icon from taskbar. - * This test is only for large screen devices. + * Test enter split screen by dragging app icon from taskbar. This test is only for large screen + * devices. * * To run this test: `atest WMShellFlickerTests:EnterSplitScreenByDragFromTaskbar` */ @@ -53,9 +53,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class EnterSplitScreenByDragFromTaskbar( - testSpec: FlickerTestParameter -) : SplitScreenBase(testSpec) { +class EnterSplitScreenByDragFromTaskbar(flicker: FlickerTest) : SplitScreenBase(flicker) { @Before fun before() { @@ -68,9 +66,7 @@ class EnterSplitScreenByDragFromTaskbar( super.transition(this) setup { tapl.goHome() - SplitScreenUtils.createShortcutOnHotseatIfNotExist( - tapl, secondaryApp.appName - ) + SplitScreenUtils.createShortcutOnHotseatIfNotExist(tapl, secondaryApp.appName) primaryApp.launchViaIntent(wmHelper) } transitions { @@ -84,13 +80,13 @@ class EnterSplitScreenByDragFromTaskbar( @IwTest(focusArea = "sysui") @Presubmit @Test - fun cujCompleted() = testSpec.splitScreenEntered(primaryApp, secondaryApp, fromOtherApp = false) + fun cujCompleted() = flicker.splitScreenEntered(primaryApp, secondaryApp, fromOtherApp = false) @Presubmit @Test fun splitScreenDividerBecomesVisible() { Assume.assumeFalse(isShellTransitionsEnabled) - testSpec.splitScreenDividerBecomesVisible() + flicker.splitScreenDividerBecomesVisible() } // TODO(b/245472831): Back to splitScreenDividerBecomesVisible after shell transition ready. @@ -98,20 +94,16 @@ class EnterSplitScreenByDragFromTaskbar( @Test fun splitScreenDividerIsVisibleAtEnd_ShellTransit() { Assume.assumeTrue(isShellTransitionsEnabled) - testSpec.assertLayersEnd { - this.isVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) - } + flicker.assertLayersEnd { this.isVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) } } - @Presubmit - @Test - fun primaryAppLayerIsVisibleAtEnd() = testSpec.layerIsVisibleAtEnd(primaryApp) + @Presubmit @Test fun primaryAppLayerIsVisibleAtEnd() = flicker.layerIsVisibleAtEnd(primaryApp) @Presubmit @Test fun secondaryAppLayerBecomesVisible() { Assume.assumeFalse(isShellTransitionsEnabled) - testSpec.assertLayers { + flicker.assertLayers { this.isInvisible(secondaryApp) .then() .isVisible(secondaryApp) @@ -127,50 +119,48 @@ class EnterSplitScreenByDragFromTaskbar( @Test fun secondaryAppLayerBecomesVisible_ShellTransit() { Assume.assumeTrue(isShellTransitionsEnabled) - testSpec.layerBecomesVisible(secondaryApp) + flicker.layerBecomesVisible(secondaryApp) } @Presubmit @Test - fun primaryAppBoundsIsVisibleAtEnd() = testSpec.splitAppLayerBoundsIsVisibleAtEnd( - primaryApp, landscapePosLeft = false, portraitPosTop = false) + fun primaryAppBoundsIsVisibleAtEnd() = + flicker.splitAppLayerBoundsIsVisibleAtEnd( + primaryApp, + landscapePosLeft = false, + portraitPosTop = false + ) @Presubmit @Test - fun secondaryAppBoundsBecomesVisible() = testSpec.splitAppLayerBoundsBecomesVisibleByDrag( - secondaryApp) + fun secondaryAppBoundsBecomesVisible() = + flicker.splitAppLayerBoundsBecomesVisibleByDrag(secondaryApp) @Presubmit @Test - fun primaryAppWindowIsVisibleAtEnd() = testSpec.appWindowIsVisibleAtEnd(primaryApp) + fun primaryAppWindowIsVisibleAtEnd() = flicker.appWindowIsVisibleAtEnd(primaryApp) @Presubmit @Test - fun secondaryAppWindowBecomesVisible() = testSpec.appWindowBecomesVisible(secondaryApp) + fun secondaryAppWindowBecomesVisible() = flicker.appWindowBecomesVisible(secondaryApp) /** {@inheritDoc} */ - @Postsubmit - @Test - override fun entireScreenCovered() = - super.entireScreenCovered() + @Postsubmit @Test override fun entireScreenCovered() = super.entireScreenCovered() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarLayerIsVisibleAtStartAndEnd() = - super.navBarLayerIsVisibleAtStartAndEnd() + override fun navBarLayerIsVisibleAtStartAndEnd() = super.navBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarLayerPositionAtStartAndEnd() = - super.navBarLayerPositionAtStartAndEnd() + override fun navBarLayerPositionAtStartAndEnd() = super.navBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarWindowIsAlwaysVisible() = - super.navBarWindowIsAlwaysVisible() + override fun navBarWindowIsAlwaysVisible() = super.navBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @@ -181,26 +171,22 @@ class EnterSplitScreenByDragFromTaskbar( /** {@inheritDoc} */ @Postsubmit @Test - override fun statusBarLayerPositionAtStartAndEnd() = - super.statusBarLayerPositionAtStartAndEnd() + override fun statusBarLayerPositionAtStartAndEnd() = super.statusBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun statusBarWindowIsAlwaysVisible() = - super.statusBarWindowIsAlwaysVisible() + override fun statusBarWindowIsAlwaysVisible() = super.statusBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @Test - override fun taskBarLayerIsVisibleAtStartAndEnd() = - super.taskBarLayerIsVisibleAtStartAndEnd() + override fun taskBarLayerIsVisibleAtStartAndEnd() = super.taskBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun taskBarWindowIsAlwaysVisible() = - super.taskBarWindowIsAlwaysVisible() + override fun taskBarWindowIsAlwaysVisible() = super.taskBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @@ -217,10 +203,9 @@ class EnterSplitScreenByDragFromTaskbar( companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests( - supportedNavigationModes = - listOf(WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY) + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + supportedNavigationModes = listOf(PlatformConsts.NavBar.MODE_GESTURAL) ) } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenFromOverview.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenFromOverview.kt index fb7b8b7926e3..c09ca914caff 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenFromOverview.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenFromOverview.kt @@ -21,11 +21,11 @@ import android.platform.test.annotations.IwTest import android.platform.test.annotations.Postsubmit import android.platform.test.annotations.Presubmit import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory import com.android.server.wm.flicker.helpers.isShellTransitionsEnabled +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import com.android.wm.shell.flicker.appWindowBecomesVisible import com.android.wm.shell.flicker.layerBecomesVisible import com.android.wm.shell.flicker.layerIsVisibleAtEnd @@ -49,7 +49,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class EnterSplitScreenFromOverview(testSpec: FlickerTestParameter) : SplitScreenBase(testSpec) { +class EnterSplitScreenFromOverview(flicker: FlickerTest) : SplitScreenBase(flicker) { override val transition: FlickerBuilder.() -> Unit get() = { super.transition(this) @@ -57,7 +57,8 @@ class EnterSplitScreenFromOverview(testSpec: FlickerTestParameter) : SplitScreen primaryApp.launchViaIntent(wmHelper) secondaryApp.launchViaIntent(wmHelper) tapl.goHome() - wmHelper.StateSyncBuilder() + wmHelper + .StateSyncBuilder() .withAppTransitionIdle() .withHomeActivityVisible() .waitForAndVerify() @@ -71,72 +72,76 @@ class EnterSplitScreenFromOverview(testSpec: FlickerTestParameter) : SplitScreen @IwTest(focusArea = "sysui") @Presubmit @Test - fun cujCompleted() = testSpec.splitScreenEntered(primaryApp, secondaryApp, fromOtherApp = true) + fun cujCompleted() = flicker.splitScreenEntered(primaryApp, secondaryApp, fromOtherApp = true) @Presubmit @Test - fun splitScreenDividerBecomesVisible() = testSpec.splitScreenDividerBecomesVisible() + fun splitScreenDividerBecomesVisible() = flicker.splitScreenDividerBecomesVisible() - @Presubmit - @Test - fun primaryAppLayerIsVisibleAtEnd() = testSpec.layerIsVisibleAtEnd(primaryApp) + @Presubmit @Test fun primaryAppLayerIsVisibleAtEnd() = flicker.layerIsVisibleAtEnd(primaryApp) @Presubmit @Test - fun secondaryAppLayerBecomesVisible() = testSpec.layerBecomesVisible(secondaryApp) + fun secondaryAppLayerBecomesVisible() = flicker.layerBecomesVisible(secondaryApp) @Presubmit @Test - fun primaryAppBoundsIsVisibleAtEnd() = testSpec.splitAppLayerBoundsIsVisibleAtEnd( - primaryApp, landscapePosLeft = tapl.isTablet, portraitPosTop = false) + fun primaryAppBoundsIsVisibleAtEnd() = + flicker.splitAppLayerBoundsIsVisibleAtEnd( + primaryApp, + landscapePosLeft = tapl.isTablet, + portraitPosTop = false + ) @Presubmit @Test fun secondaryAppBoundsBecomesVisible() { Assume.assumeFalse(isShellTransitionsEnabled) - testSpec.splitAppLayerBoundsBecomesVisible( - secondaryApp, landscapePosLeft = !tapl.isTablet, portraitPosTop = true) + flicker.splitAppLayerBoundsBecomesVisible( + secondaryApp, + landscapePosLeft = !tapl.isTablet, + portraitPosTop = true + ) } @FlakyTest(bugId = 244407465) @Test fun secondaryAppBoundsBecomesVisible_shellTransit() { Assume.assumeTrue(isShellTransitionsEnabled) - testSpec.splitAppLayerBoundsBecomesVisible( - secondaryApp, landscapePosLeft = !tapl.isTablet, portraitPosTop = true) + flicker.splitAppLayerBoundsBecomesVisible( + secondaryApp, + landscapePosLeft = !tapl.isTablet, + portraitPosTop = true + ) } @Presubmit @Test - fun primaryAppWindowBecomesVisible() = testSpec.appWindowBecomesVisible(primaryApp) + fun primaryAppWindowBecomesVisible() = flicker.appWindowBecomesVisible(primaryApp) @Presubmit @Test - fun secondaryAppWindowBecomesVisible() = testSpec.appWindowBecomesVisible(secondaryApp) + fun secondaryAppWindowBecomesVisible() = flicker.appWindowBecomesVisible(secondaryApp) /** {@inheritDoc} */ @FlakyTest(bugId = 251269324) @Test - override fun entireScreenCovered() = - super.entireScreenCovered() + override fun entireScreenCovered() = super.entireScreenCovered() /** {@inheritDoc} */ @Presubmit @Test - override fun navBarLayerIsVisibleAtStartAndEnd() = - super.navBarLayerIsVisibleAtStartAndEnd() + override fun navBarLayerIsVisibleAtStartAndEnd() = super.navBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarLayerPositionAtStartAndEnd() = - super.navBarLayerPositionAtStartAndEnd() + override fun navBarLayerPositionAtStartAndEnd() = super.navBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Presubmit @Test - override fun navBarWindowIsAlwaysVisible() = - super.navBarWindowIsAlwaysVisible() + override fun navBarWindowIsAlwaysVisible() = super.navBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Presubmit @@ -147,26 +152,22 @@ class EnterSplitScreenFromOverview(testSpec: FlickerTestParameter) : SplitScreen /** {@inheritDoc} */ @Presubmit @Test - override fun statusBarLayerPositionAtStartAndEnd() = - super.statusBarLayerPositionAtStartAndEnd() + override fun statusBarLayerPositionAtStartAndEnd() = super.statusBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Presubmit @Test - override fun statusBarWindowIsAlwaysVisible() = - super.statusBarWindowIsAlwaysVisible() + override fun statusBarWindowIsAlwaysVisible() = super.statusBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Presubmit @Test - override fun taskBarLayerIsVisibleAtStartAndEnd() = - super.taskBarLayerIsVisibleAtStartAndEnd() + override fun taskBarLayerIsVisibleAtStartAndEnd() = super.taskBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Presubmit @Test - override fun taskBarWindowIsAlwaysVisible() = - super.taskBarWindowIsAlwaysVisible() + override fun taskBarWindowIsAlwaysVisible() = super.taskBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @FlakyTest(bugId = 252736515) @@ -183,8 +184,8 @@ class EnterSplitScreenFromOverview(testSpec: FlickerTestParameter) : SplitScreen companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests() + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests() } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenBase.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenBase.kt index c8413337a1e6..8c0a303189e1 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenBase.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenBase.kt @@ -17,12 +17,12 @@ package com.android.wm.shell.flicker.splitscreen import android.content.Context -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest import com.android.server.wm.flicker.helpers.setRotation import com.android.wm.shell.flicker.BaseTest -abstract class SplitScreenBase(testSpec: FlickerTestParameter) : BaseTest(testSpec) { +abstract class SplitScreenBase(flicker: FlickerTest) : BaseTest(flicker) { protected val context: Context = instrumentation.context protected val primaryApp = SplitScreenUtils.getPrimary(instrumentation) protected val secondaryApp = SplitScreenUtils.getSecondary(instrumentation) @@ -32,8 +32,8 @@ abstract class SplitScreenBase(testSpec: FlickerTestParameter) : BaseTest(testSp get() = { setup { tapl.setEnableRotation(true) - setRotation(testSpec.startRotation) - tapl.setExpectedRotation(testSpec.startRotation) + setRotation(flicker.scenario.startRotation) + tapl.setExpectedRotation(flicker.scenario.startRotation.value) tapl.workspace.switchToOverview().dismissAllTasks() } teardown { diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenUtils.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenUtils.kt index 4a3284e1953b..f3927d405467 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenUtils.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenUtils.kt @@ -41,8 +41,8 @@ import com.android.server.wm.traces.parser.toFlickerComponent import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper import com.android.wm.shell.flicker.LAUNCHER_UI_PACKAGE_NAME import com.android.wm.shell.flicker.SYSTEM_UI_PACKAGE_NAME -import org.junit.Assert.assertNotNull import java.util.Collections +import org.junit.Assert.assertNotNull internal object SplitScreenUtils { private const val TIMEOUT_MS = 3_000L @@ -129,10 +129,18 @@ internal object SplitScreenUtils { // Find the second task in the upper right corner in split select mode by sorting // 'left' in descending order and 'top' in ascending order. - Collections.sort(snapshots, { t1: UiObject2, t2: UiObject2 -> - t2.getVisibleBounds().left - t1.getVisibleBounds().left}) - Collections.sort(snapshots, { t1: UiObject2, t2: UiObject2 -> - t1.getVisibleBounds().top - t2.getVisibleBounds().top}) + Collections.sort( + snapshots, + { t1: UiObject2, t2: UiObject2 -> + t2.getVisibleBounds().left - t1.getVisibleBounds().left + } + ) + Collections.sort( + snapshots, + { t1: UiObject2, t2: UiObject2 -> + t1.getVisibleBounds().top - t2.getVisibleBounds().top + } + ) snapshots[0].click() } else { tapl.workspace diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchAppByDoubleTapDivider.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchAppByDoubleTapDivider.kt index f7610c48a0f8..09568b291830 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchAppByDoubleTapDivider.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchAppByDoubleTapDivider.kt @@ -19,13 +19,13 @@ package com.android.wm.shell.flicker.splitscreen import android.platform.test.annotations.IwTest import android.platform.test.annotations.Postsubmit import android.platform.test.annotations.Presubmit -import android.view.WindowManagerPolicyConstants import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory import com.android.server.wm.flicker.helpers.WindowUtils +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory +import com.android.server.wm.traces.common.service.PlatformConsts import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd @@ -50,19 +50,15 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class SwitchAppByDoubleTapDivider(testSpec: FlickerTestParameter) : SplitScreenBase(testSpec) { +class SwitchAppByDoubleTapDivider(flicker: FlickerTest) : SplitScreenBase(flicker) { override val transition: FlickerBuilder.() -> Unit get() = { super.transition(this) - setup { - SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) - } + setup { SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) } transitions { SplitScreenUtils.doubleTapDividerToSwitch(device) - wmHelper.StateSyncBuilder() - .withAppTransitionIdle() - .waitForAndVerify() + wmHelper.StateSyncBuilder().withAppTransitionIdle().waitForAndVerify() waitForLayersToSwitch(wmHelper) waitForWindowsToSwitch(wmHelper) @@ -70,61 +66,74 @@ class SwitchAppByDoubleTapDivider(testSpec: FlickerTestParameter) : SplitScreenB } private fun waitForWindowsToSwitch(wmHelper: WindowManagerStateHelper) { - wmHelper.StateSyncBuilder().add("appWindowsSwitched") { - val primaryAppWindow = it.wmState.visibleWindows.firstOrNull { window -> - primaryApp.windowMatchesAnyOf(window) - } ?: return@add false - val secondaryAppWindow = it.wmState.visibleWindows.firstOrNull { window -> - secondaryApp.windowMatchesAnyOf(window) - } ?: return@add false - - if (isLandscape(testSpec.endRotation)) { - return@add if (testSpec.isTablet) { - secondaryAppWindow.frame.right <= primaryAppWindow.frame.left - } else { - primaryAppWindow.frame.right <= secondaryAppWindow.frame.left - } - } else { - return@add if (testSpec.isTablet) { - primaryAppWindow.frame.bottom <= secondaryAppWindow.frame.top + wmHelper + .StateSyncBuilder() + .add("appWindowsSwitched") { + val primaryAppWindow = + it.wmState.visibleWindows.firstOrNull { window -> + primaryApp.windowMatchesAnyOf(window) + } + ?: return@add false + val secondaryAppWindow = + it.wmState.visibleWindows.firstOrNull { window -> + secondaryApp.windowMatchesAnyOf(window) + } + ?: return@add false + + if (isLandscape(flicker.scenario.endRotation)) { + return@add if (flicker.scenario.isTablet) { + secondaryAppWindow.frame.right <= primaryAppWindow.frame.left + } else { + primaryAppWindow.frame.right <= secondaryAppWindow.frame.left + } } else { - primaryAppWindow.frame.bottom <= secondaryAppWindow.frame.top + return@add if (flicker.scenario.isTablet) { + primaryAppWindow.frame.bottom <= secondaryAppWindow.frame.top + } else { + primaryAppWindow.frame.bottom <= secondaryAppWindow.frame.top + } } } - }.waitForAndVerify() + .waitForAndVerify() } private fun waitForLayersToSwitch(wmHelper: WindowManagerStateHelper) { - wmHelper.StateSyncBuilder().add("appLayersSwitched") { - val primaryAppLayer = it.layerState.visibleLayers.firstOrNull { window -> - primaryApp.layerMatchesAnyOf(window) - } ?: return@add false - val secondaryAppLayer = it.layerState.visibleLayers.firstOrNull { window -> - secondaryApp.layerMatchesAnyOf(window) - } ?: return@add false - - val primaryVisibleRegion = primaryAppLayer.visibleRegion?.bounds - ?: return@add false - val secondaryVisibleRegion = secondaryAppLayer.visibleRegion?.bounds - ?: return@add false - - if (isLandscape(testSpec.endRotation)) { - return@add if (testSpec.isTablet) { - secondaryVisibleRegion.right <= primaryVisibleRegion.left - } else { - primaryVisibleRegion.right <= secondaryVisibleRegion.left - } - } else { - return@add if (testSpec.isTablet) { - primaryVisibleRegion.bottom <= secondaryVisibleRegion.top + wmHelper + .StateSyncBuilder() + .add("appLayersSwitched") { + val primaryAppLayer = + it.layerState.visibleLayers.firstOrNull { window -> + primaryApp.layerMatchesAnyOf(window) + } + ?: return@add false + val secondaryAppLayer = + it.layerState.visibleLayers.firstOrNull { window -> + secondaryApp.layerMatchesAnyOf(window) + } + ?: return@add false + + val primaryVisibleRegion = primaryAppLayer.visibleRegion?.bounds ?: return@add false + val secondaryVisibleRegion = + secondaryAppLayer.visibleRegion?.bounds ?: return@add false + + if (isLandscape(flicker.scenario.endRotation)) { + return@add if (flicker.scenario.isTablet) { + secondaryVisibleRegion.right <= primaryVisibleRegion.left + } else { + primaryVisibleRegion.right <= secondaryVisibleRegion.left + } } else { - primaryVisibleRegion.bottom <= secondaryVisibleRegion.top + return@add if (flicker.scenario.isTablet) { + primaryVisibleRegion.bottom <= secondaryVisibleRegion.top + } else { + primaryVisibleRegion.bottom <= secondaryVisibleRegion.top + } } } - }.waitForAndVerify() + .waitForAndVerify() } - private fun isLandscape(rotation: Int): Boolean { + private fun isLandscape(rotation: PlatformConsts.Rotation): Boolean { val displayBounds = WindowUtils.getDisplayBounds(rotation) return displayBounds.width > displayBounds.height } @@ -133,13 +142,13 @@ class SwitchAppByDoubleTapDivider(testSpec: FlickerTestParameter) : SplitScreenB @Presubmit @Test fun cujCompleted() { - testSpec.appWindowIsVisibleAtStart(primaryApp) - testSpec.appWindowIsVisibleAtStart(secondaryApp) - testSpec.splitScreenDividerIsVisibleAtStart() + flicker.appWindowIsVisibleAtStart(primaryApp) + flicker.appWindowIsVisibleAtStart(secondaryApp) + flicker.splitScreenDividerIsVisibleAtStart() - testSpec.appWindowIsVisibleAtEnd(primaryApp) - testSpec.appWindowIsVisibleAtEnd(secondaryApp) - testSpec.splitScreenDividerIsVisibleAtEnd() + flicker.appWindowIsVisibleAtEnd(primaryApp) + flicker.appWindowIsVisibleAtEnd(secondaryApp) + flicker.splitScreenDividerIsVisibleAtEnd() // TODO(b/246490534): Add validation for switched app after withAppTransitionIdle is // robust enough to get the correct end state. @@ -147,63 +156,57 @@ class SwitchAppByDoubleTapDivider(testSpec: FlickerTestParameter) : SplitScreenB @Presubmit @Test - fun splitScreenDividerKeepVisible() = testSpec.layerKeepVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) + fun splitScreenDividerKeepVisible() = flicker.layerKeepVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) - @Presubmit - @Test - fun primaryAppLayerIsVisibleAtEnd() = testSpec.layerIsVisibleAtEnd(primaryApp) + @Presubmit @Test fun primaryAppLayerIsVisibleAtEnd() = flicker.layerIsVisibleAtEnd(primaryApp) @Presubmit @Test - fun secondaryAppLayerIsVisibleAtEnd() = testSpec.layerIsVisibleAtEnd(secondaryApp) + fun secondaryAppLayerIsVisibleAtEnd() = flicker.layerIsVisibleAtEnd(secondaryApp) @Presubmit @Test - fun primaryAppBoundsIsVisibleAtEnd() = testSpec.splitAppLayerBoundsIsVisibleAtEnd( - primaryApp, - landscapePosLeft = !tapl.isTablet, - portraitPosTop = true - ) + fun primaryAppBoundsIsVisibleAtEnd() = + flicker.splitAppLayerBoundsIsVisibleAtEnd( + primaryApp, + landscapePosLeft = !tapl.isTablet, + portraitPosTop = true + ) @Presubmit @Test - fun secondaryAppBoundsIsVisibleAtEnd() = testSpec.splitAppLayerBoundsIsVisibleAtEnd( - secondaryApp, - landscapePosLeft = tapl.isTablet, - portraitPosTop = false - ) + fun secondaryAppBoundsIsVisibleAtEnd() = + flicker.splitAppLayerBoundsIsVisibleAtEnd( + secondaryApp, + landscapePosLeft = tapl.isTablet, + portraitPosTop = false + ) @Presubmit @Test - fun primaryAppWindowIsVisibleAtEnd() = testSpec.appWindowIsVisibleAtEnd(primaryApp) + fun primaryAppWindowIsVisibleAtEnd() = flicker.appWindowIsVisibleAtEnd(primaryApp) @Presubmit @Test - fun secondaryAppWindowIsVisibleAtEnd() = testSpec.appWindowIsVisibleAtEnd(secondaryApp) + fun secondaryAppWindowIsVisibleAtEnd() = flicker.appWindowIsVisibleAtEnd(secondaryApp) /** {@inheritDoc} */ - @Postsubmit - @Test - override fun entireScreenCovered() = - super.entireScreenCovered() + @Postsubmit @Test override fun entireScreenCovered() = super.entireScreenCovered() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarLayerIsVisibleAtStartAndEnd() = - super.navBarLayerIsVisibleAtStartAndEnd() + override fun navBarLayerIsVisibleAtStartAndEnd() = super.navBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarLayerPositionAtStartAndEnd() = - super.navBarLayerPositionAtStartAndEnd() + override fun navBarLayerPositionAtStartAndEnd() = super.navBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun navBarWindowIsAlwaysVisible() = - super.navBarWindowIsAlwaysVisible() + override fun navBarWindowIsAlwaysVisible() = super.navBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @@ -214,26 +217,22 @@ class SwitchAppByDoubleTapDivider(testSpec: FlickerTestParameter) : SplitScreenB /** {@inheritDoc} */ @Postsubmit @Test - override fun statusBarLayerPositionAtStartAndEnd() = - super.statusBarLayerPositionAtStartAndEnd() + override fun statusBarLayerPositionAtStartAndEnd() = super.statusBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun statusBarWindowIsAlwaysVisible() = - super.statusBarWindowIsAlwaysVisible() + override fun statusBarWindowIsAlwaysVisible() = super.statusBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @Test - override fun taskBarLayerIsVisibleAtStartAndEnd() = - super.taskBarLayerIsVisibleAtStartAndEnd() + override fun taskBarLayerIsVisibleAtStartAndEnd() = super.taskBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Postsubmit @Test - override fun taskBarWindowIsAlwaysVisible() = - super.taskBarWindowIsAlwaysVisible() + override fun taskBarWindowIsAlwaysVisible() = super.taskBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Postsubmit @@ -250,11 +249,10 @@ class SwitchAppByDoubleTapDivider(testSpec: FlickerTestParameter) : SplitScreenB companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests( + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( // TODO(b/176061063):The 3 buttons of nav bar do not exist in the hierarchy. - supportedNavigationModes = - listOf(WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY) + supportedNavigationModes = listOf(PlatformConsts.NavBar.MODE_GESTURAL) ) } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromAnotherApp.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromAnotherApp.kt index 993dba28bbc4..940e0e93d524 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromAnotherApp.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromAnotherApp.kt @@ -19,12 +19,12 @@ package com.android.wm.shell.flicker.splitscreen import android.platform.test.annotations.FlakyTest import android.platform.test.annotations.IwTest import android.platform.test.annotations.Presubmit -import android.view.WindowManagerPolicyConstants import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory +import com.android.server.wm.traces.common.service.PlatformConsts import com.android.wm.shell.flicker.appWindowBecomesVisible import com.android.wm.shell.flicker.layerBecomesVisible import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd @@ -45,7 +45,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class SwitchBackToSplitFromAnotherApp(testSpec: FlickerTestParameter) : SplitScreenBase(testSpec) { +class SwitchBackToSplitFromAnotherApp(flicker: FlickerTest) : SplitScreenBase(flicker) { val thirdApp = SplitScreenUtils.getNonResizeable(instrumentation) override val transition: FlickerBuilder.() -> Unit @@ -66,22 +66,22 @@ class SwitchBackToSplitFromAnotherApp(testSpec: FlickerTestParameter) : SplitScr @IwTest(focusArea = "sysui") @Presubmit @Test - fun cujCompleted() = testSpec.splitScreenEntered(primaryApp, secondaryApp, fromOtherApp = true) + fun cujCompleted() = flicker.splitScreenEntered(primaryApp, secondaryApp, fromOtherApp = true) @Presubmit @Test - fun splitScreenDividerBecomesVisible() = testSpec.splitScreenDividerBecomesVisible() + fun splitScreenDividerBecomesVisible() = flicker.splitScreenDividerBecomesVisible() - @Presubmit @Test fun primaryAppLayerBecomesVisible() = testSpec.layerBecomesVisible(primaryApp) + @Presubmit @Test fun primaryAppLayerBecomesVisible() = flicker.layerBecomesVisible(primaryApp) @Presubmit @Test - fun secondaryAppLayerBecomesVisible() = testSpec.layerBecomesVisible(secondaryApp) + fun secondaryAppLayerBecomesVisible() = flicker.layerBecomesVisible(secondaryApp) @Presubmit @Test fun primaryAppBoundsIsVisibleAtEnd() = - testSpec.splitAppLayerBoundsIsVisibleAtEnd( + flicker.splitAppLayerBoundsIsVisibleAtEnd( primaryApp, landscapePosLeft = tapl.isTablet, portraitPosTop = false @@ -90,7 +90,7 @@ class SwitchBackToSplitFromAnotherApp(testSpec: FlickerTestParameter) : SplitScr @Presubmit @Test fun secondaryAppBoundsIsVisibleAtEnd() = - testSpec.splitAppLayerBoundsIsVisibleAtEnd( + flicker.splitAppLayerBoundsIsVisibleAtEnd( secondaryApp, landscapePosLeft = !tapl.isTablet, portraitPosTop = true @@ -98,17 +98,14 @@ class SwitchBackToSplitFromAnotherApp(testSpec: FlickerTestParameter) : SplitScr @Presubmit @Test - fun primaryAppWindowBecomesVisible() = testSpec.appWindowBecomesVisible(primaryApp) + fun primaryAppWindowBecomesVisible() = flicker.appWindowBecomesVisible(primaryApp) @Presubmit @Test - fun secondaryAppWindowBecomesVisible() = testSpec.appWindowBecomesVisible(secondaryApp) + fun secondaryAppWindowBecomesVisible() = flicker.appWindowBecomesVisible(secondaryApp) /** {@inheritDoc} */ - @FlakyTest - @Test - override fun entireScreenCovered() = - super.entireScreenCovered() + @FlakyTest @Test override fun entireScreenCovered() = super.entireScreenCovered() /** {@inheritDoc} */ @Presubmit @@ -166,13 +163,11 @@ class SwitchBackToSplitFromAnotherApp(testSpec: FlickerTestParameter) : SplitScr companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests( - // TODO(b/176061063):The 3 buttons of nav bar do not exist in the hierarchy. - supportedNavigationModes = - listOf(WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY) - ) + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + // TODO(b/176061063):The 3 buttons of nav bar do not exist in the hierarchy. + supportedNavigationModes = listOf(PlatformConsts.NavBar.MODE_GESTURAL) + ) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromHome.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromHome.kt index 2a552cdd67e8..85812c420f3b 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromHome.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromHome.kt @@ -19,12 +19,12 @@ package com.android.wm.shell.flicker.splitscreen import android.platform.test.annotations.FlakyTest import android.platform.test.annotations.IwTest import android.platform.test.annotations.Presubmit -import android.view.WindowManagerPolicyConstants import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory +import com.android.server.wm.traces.common.service.PlatformConsts import com.android.wm.shell.flicker.appWindowBecomesVisible import com.android.wm.shell.flicker.layerBecomesVisible import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd @@ -45,7 +45,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class SwitchBackToSplitFromHome(testSpec: FlickerTestParameter) : SplitScreenBase(testSpec) { +class SwitchBackToSplitFromHome(flicker: FlickerTest) : SplitScreenBase(flicker) { override val transition: FlickerBuilder.() -> Unit get() = { @@ -65,22 +65,22 @@ class SwitchBackToSplitFromHome(testSpec: FlickerTestParameter) : SplitScreenBas @IwTest(focusArea = "sysui") @Presubmit @Test - fun cujCompleted() = testSpec.splitScreenEntered(primaryApp, secondaryApp, fromOtherApp = true) + fun cujCompleted() = flicker.splitScreenEntered(primaryApp, secondaryApp, fromOtherApp = true) @Presubmit @Test - fun splitScreenDividerBecomesVisible() = testSpec.splitScreenDividerBecomesVisible() + fun splitScreenDividerBecomesVisible() = flicker.splitScreenDividerBecomesVisible() - @Presubmit @Test fun primaryAppLayerBecomesVisible() = testSpec.layerBecomesVisible(primaryApp) + @Presubmit @Test fun primaryAppLayerBecomesVisible() = flicker.layerBecomesVisible(primaryApp) @Presubmit @Test - fun secondaryAppLayerBecomesVisible() = testSpec.layerBecomesVisible(secondaryApp) + fun secondaryAppLayerBecomesVisible() = flicker.layerBecomesVisible(secondaryApp) @Presubmit @Test fun primaryAppBoundsIsVisibleAtEnd() = - testSpec.splitAppLayerBoundsIsVisibleAtEnd( + flicker.splitAppLayerBoundsIsVisibleAtEnd( primaryApp, landscapePosLeft = tapl.isTablet, portraitPosTop = false @@ -89,7 +89,7 @@ class SwitchBackToSplitFromHome(testSpec: FlickerTestParameter) : SplitScreenBas @Presubmit @Test fun secondaryAppBoundsIsVisibleAtEnd() = - testSpec.splitAppLayerBoundsIsVisibleAtEnd( + flicker.splitAppLayerBoundsIsVisibleAtEnd( secondaryApp, landscapePosLeft = !tapl.isTablet, portraitPosTop = true @@ -97,17 +97,14 @@ class SwitchBackToSplitFromHome(testSpec: FlickerTestParameter) : SplitScreenBas @Presubmit @Test - fun primaryAppWindowBecomesVisible() = testSpec.appWindowBecomesVisible(primaryApp) + fun primaryAppWindowBecomesVisible() = flicker.appWindowBecomesVisible(primaryApp) @Presubmit @Test - fun secondaryAppWindowBecomesVisible() = testSpec.appWindowBecomesVisible(secondaryApp) + fun secondaryAppWindowBecomesVisible() = flicker.appWindowBecomesVisible(secondaryApp) /** {@inheritDoc} */ - @FlakyTest - @Test - override fun entireScreenCovered() = - super.entireScreenCovered() + @FlakyTest @Test override fun entireScreenCovered() = super.entireScreenCovered() /** {@inheritDoc} */ @Presubmit @@ -165,13 +162,11 @@ class SwitchBackToSplitFromHome(testSpec: FlickerTestParameter) : SplitScreenBas companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests( - // TODO(b/176061063):The 3 buttons of nav bar do not exist in the hierarchy. - supportedNavigationModes = - listOf(WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY) - ) + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + // TODO(b/176061063):The 3 buttons of nav bar do not exist in the hierarchy. + supportedNavigationModes = listOf(PlatformConsts.NavBar.MODE_GESTURAL) + ) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromRecent.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromRecent.kt index 7f81baef315b..7c62433d8905 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromRecent.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromRecent.kt @@ -19,12 +19,12 @@ package com.android.wm.shell.flicker.splitscreen import android.platform.test.annotations.FlakyTest import android.platform.test.annotations.IwTest import android.platform.test.annotations.Presubmit -import android.view.WindowManagerPolicyConstants import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory +import com.android.server.wm.traces.common.service.PlatformConsts import com.android.wm.shell.flicker.appWindowBecomesVisible import com.android.wm.shell.flicker.layerBecomesVisible import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd @@ -45,7 +45,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class SwitchBackToSplitFromRecent(testSpec: FlickerTestParameter) : SplitScreenBase(testSpec) { +class SwitchBackToSplitFromRecent(flicker: FlickerTest) : SplitScreenBase(flicker) { override val transition: FlickerBuilder.() -> Unit get() = { @@ -65,22 +65,22 @@ class SwitchBackToSplitFromRecent(testSpec: FlickerTestParameter) : SplitScreenB @IwTest(focusArea = "sysui") @Presubmit @Test - fun cujCompleted() = testSpec.splitScreenEntered(primaryApp, secondaryApp, fromOtherApp = true) + fun cujCompleted() = flicker.splitScreenEntered(primaryApp, secondaryApp, fromOtherApp = true) @Presubmit @Test - fun splitScreenDividerBecomesVisible() = testSpec.splitScreenDividerBecomesVisible() + fun splitScreenDividerBecomesVisible() = flicker.splitScreenDividerBecomesVisible() - @Presubmit @Test fun primaryAppLayerBecomesVisible() = testSpec.layerBecomesVisible(primaryApp) + @Presubmit @Test fun primaryAppLayerBecomesVisible() = flicker.layerBecomesVisible(primaryApp) @Presubmit @Test - fun secondaryAppLayerBecomesVisible() = testSpec.layerBecomesVisible(secondaryApp) + fun secondaryAppLayerBecomesVisible() = flicker.layerBecomesVisible(secondaryApp) @Presubmit @Test fun primaryAppBoundsIsVisibleAtEnd() = - testSpec.splitAppLayerBoundsIsVisibleAtEnd( + flicker.splitAppLayerBoundsIsVisibleAtEnd( primaryApp, landscapePosLeft = tapl.isTablet, portraitPosTop = false @@ -89,7 +89,7 @@ class SwitchBackToSplitFromRecent(testSpec: FlickerTestParameter) : SplitScreenB @Presubmit @Test fun secondaryAppBoundsIsVisibleAtEnd() = - testSpec.splitAppLayerBoundsIsVisibleAtEnd( + flicker.splitAppLayerBoundsIsVisibleAtEnd( secondaryApp, landscapePosLeft = !tapl.isTablet, portraitPosTop = true @@ -97,17 +97,14 @@ class SwitchBackToSplitFromRecent(testSpec: FlickerTestParameter) : SplitScreenB @Presubmit @Test - fun primaryAppWindowBecomesVisible() = testSpec.appWindowBecomesVisible(primaryApp) + fun primaryAppWindowBecomesVisible() = flicker.appWindowBecomesVisible(primaryApp) @Presubmit @Test - fun secondaryAppWindowBecomesVisible() = testSpec.appWindowBecomesVisible(secondaryApp) + fun secondaryAppWindowBecomesVisible() = flicker.appWindowBecomesVisible(secondaryApp) /** {@inheritDoc} */ - @Presubmit - @Test - override fun entireScreenCovered() = - super.entireScreenCovered() + @Presubmit @Test override fun entireScreenCovered() = super.entireScreenCovered() /** {@inheritDoc} */ @Presubmit @@ -165,13 +162,11 @@ class SwitchBackToSplitFromRecent(testSpec: FlickerTestParameter) : SplitScreenB companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests( - // TODO(b/176061063):The 3 buttons of nav bar do not exist in the hierarchy. - supportedNavigationModes = - listOf(WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY) - ) + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests( + // TODO(b/176061063):The 3 buttons of nav bar do not exist in the hierarchy. + supportedNavigationModes = listOf(PlatformConsts.NavBar.MODE_GESTURAL) + ) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBetweenSplitPairs.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBetweenSplitPairs.kt index f5f5fd818f05..193ab98cf191 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBetweenSplitPairs.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBetweenSplitPairs.kt @@ -20,22 +20,22 @@ import android.platform.test.annotations.FlakyTest import android.platform.test.annotations.IwTest import android.platform.test.annotations.Presubmit import androidx.test.filters.RequiresDevice -import com.android.server.wm.flicker.FlickerParametersRunnerFactory -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.FlickerTestParameterFactory -import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.FlickerBuilder +import com.android.server.wm.flicker.FlickerTest +import com.android.server.wm.flicker.FlickerTestFactory +import com.android.server.wm.flicker.junit.FlickerParametersRunnerFactory import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT import com.android.wm.shell.flicker.appWindowBecomesInvisible import com.android.wm.shell.flicker.appWindowBecomesVisible import com.android.wm.shell.flicker.appWindowIsInvisibleAtEnd -import com.android.wm.shell.flicker.appWindowIsVisibleAtStart import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd +import com.android.wm.shell.flicker.appWindowIsVisibleAtStart import com.android.wm.shell.flicker.layerBecomesInvisible import com.android.wm.shell.flicker.layerBecomesVisible import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd import com.android.wm.shell.flicker.splitAppLayerBoundsSnapToDivider -import com.android.wm.shell.flicker.splitScreenDividerIsVisibleAtStart import com.android.wm.shell.flicker.splitScreenDividerIsVisibleAtEnd +import com.android.wm.shell.flicker.splitScreenDividerIsVisibleAtStart import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith @@ -51,7 +51,7 @@ import org.junit.runners.Parameterized @RunWith(Parameterized::class) @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -class SwitchBetweenSplitPairs(testSpec: FlickerTestParameter) : SplitScreenBase(testSpec) { +class SwitchBetweenSplitPairs(flicker: FlickerTest) : SplitScreenBase(flicker) { private val thirdApp = SplitScreenUtils.getIme(instrumentation) private val fourthApp = SplitScreenUtils.getSendNotification(instrumentation) @@ -77,21 +77,21 @@ class SwitchBetweenSplitPairs(testSpec: FlickerTestParameter) : SplitScreenBase( @Presubmit @Test fun cujCompleted() { - testSpec.appWindowIsVisibleAtStart(thirdApp) - testSpec.appWindowIsVisibleAtStart(fourthApp) - testSpec.splitScreenDividerIsVisibleAtStart() - - testSpec.appWindowIsVisibleAtEnd(primaryApp) - testSpec.appWindowIsVisibleAtEnd(secondaryApp) - testSpec.appWindowIsInvisibleAtEnd(thirdApp) - testSpec.appWindowIsInvisibleAtEnd(fourthApp) - testSpec.splitScreenDividerIsVisibleAtEnd() + flicker.appWindowIsVisibleAtStart(thirdApp) + flicker.appWindowIsVisibleAtStart(fourthApp) + flicker.splitScreenDividerIsVisibleAtStart() + + flicker.appWindowIsVisibleAtEnd(primaryApp) + flicker.appWindowIsVisibleAtEnd(secondaryApp) + flicker.appWindowIsInvisibleAtEnd(thirdApp) + flicker.appWindowIsInvisibleAtEnd(fourthApp) + flicker.splitScreenDividerIsVisibleAtEnd() } @Presubmit @Test fun splitScreenDividerInvisibleAtMiddle() = - testSpec.assertLayers { + flicker.assertLayers { this.isVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) .then() .isInvisible(SPLIT_SCREEN_DIVIDER_COMPONENT) @@ -101,24 +101,24 @@ class SwitchBetweenSplitPairs(testSpec: FlickerTestParameter) : SplitScreenBase( @FlakyTest(bugId = 247095572) @Test - fun primaryAppLayerBecomesVisible() = testSpec.layerBecomesVisible(primaryApp) + fun primaryAppLayerBecomesVisible() = flicker.layerBecomesVisible(primaryApp) @FlakyTest(bugId = 247095572) @Test - fun secondaryAppLayerBecomesVisible() = testSpec.layerBecomesVisible(secondaryApp) + fun secondaryAppLayerBecomesVisible() = flicker.layerBecomesVisible(secondaryApp) @FlakyTest(bugId = 247095572) @Test - fun thirdAppLayerBecomesInvisible() = testSpec.layerBecomesInvisible(thirdApp) + fun thirdAppLayerBecomesInvisible() = flicker.layerBecomesInvisible(thirdApp) @FlakyTest(bugId = 247095572) @Test - fun fourthAppLayerBecomesInvisible() = testSpec.layerBecomesInvisible(fourthApp) + fun fourthAppLayerBecomesInvisible() = flicker.layerBecomesInvisible(fourthApp) @Presubmit @Test fun primaryAppBoundsIsVisibleAtEnd() = - testSpec.splitAppLayerBoundsIsVisibleAtEnd( + flicker.splitAppLayerBoundsIsVisibleAtEnd( primaryApp, landscapePosLeft = tapl.isTablet, portraitPosTop = false @@ -127,7 +127,7 @@ class SwitchBetweenSplitPairs(testSpec: FlickerTestParameter) : SplitScreenBase( @Presubmit @Test fun secondaryAppBoundsIsVisibleAtEnd() = - testSpec.splitAppLayerBoundsIsVisibleAtEnd( + flicker.splitAppLayerBoundsIsVisibleAtEnd( secondaryApp, landscapePosLeft = !tapl.isTablet, portraitPosTop = true @@ -136,66 +136,62 @@ class SwitchBetweenSplitPairs(testSpec: FlickerTestParameter) : SplitScreenBase( @Presubmit @Test fun thirdAppBoundsIsVisibleAtBegin() = - testSpec.assertLayersStart { + flicker.assertLayersStart { this.splitAppLayerBoundsSnapToDivider( thirdApp, landscapePosLeft = tapl.isTablet, portraitPosTop = false, - testSpec.startRotation + flicker.scenario.startRotation ) } @Presubmit @Test fun fourthAppBoundsIsVisibleAtBegin() = - testSpec.assertLayersStart { + flicker.assertLayersStart { this.splitAppLayerBoundsSnapToDivider( fourthApp, landscapePosLeft = !tapl.isTablet, portraitPosTop = true, - testSpec.startRotation + flicker.scenario.startRotation ) } @Presubmit @Test - fun primaryAppWindowBecomesVisible() = testSpec.appWindowBecomesVisible(primaryApp) + fun primaryAppWindowBecomesVisible() = flicker.appWindowBecomesVisible(primaryApp) @Presubmit @Test - fun secondaryAppWindowBecomesVisible() = testSpec.appWindowBecomesVisible(secondaryApp) + fun secondaryAppWindowBecomesVisible() = flicker.appWindowBecomesVisible(secondaryApp) @Presubmit @Test - fun thirdAppWindowBecomesVisible() = testSpec.appWindowBecomesInvisible(thirdApp) + fun thirdAppWindowBecomesVisible() = flicker.appWindowBecomesInvisible(thirdApp) @Presubmit @Test - fun fourthAppWindowBecomesVisible() = testSpec.appWindowBecomesInvisible(fourthApp) + fun fourthAppWindowBecomesVisible() = flicker.appWindowBecomesInvisible(fourthApp) /** {@inheritDoc} */ @FlakyTest(bugId = 251268711) @Test - override fun entireScreenCovered() = - super.entireScreenCovered() + override fun entireScreenCovered() = super.entireScreenCovered() /** {@inheritDoc} */ @Presubmit @Test - override fun navBarLayerIsVisibleAtStartAndEnd() = - super.navBarLayerIsVisibleAtStartAndEnd() + override fun navBarLayerIsVisibleAtStartAndEnd() = super.navBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @FlakyTest(bugId = 206753786) @Test - override fun navBarLayerPositionAtStartAndEnd() = - super.navBarLayerPositionAtStartAndEnd() + override fun navBarLayerPositionAtStartAndEnd() = super.navBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Presubmit @Test - override fun navBarWindowIsAlwaysVisible() = - super.navBarWindowIsAlwaysVisible() + override fun navBarWindowIsAlwaysVisible() = super.navBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Presubmit @@ -206,26 +202,22 @@ class SwitchBetweenSplitPairs(testSpec: FlickerTestParameter) : SplitScreenBase( /** {@inheritDoc} */ @Presubmit @Test - override fun statusBarLayerPositionAtStartAndEnd() = - super.statusBarLayerPositionAtStartAndEnd() + override fun statusBarLayerPositionAtStartAndEnd() = super.statusBarLayerPositionAtStartAndEnd() /** {@inheritDoc} */ @Presubmit @Test - override fun statusBarWindowIsAlwaysVisible() = - super.statusBarWindowIsAlwaysVisible() + override fun statusBarWindowIsAlwaysVisible() = super.statusBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @Presubmit @Test - override fun taskBarLayerIsVisibleAtStartAndEnd() = - super.taskBarLayerIsVisibleAtStartAndEnd() + override fun taskBarLayerIsVisibleAtStartAndEnd() = super.taskBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ @Presubmit @Test - override fun taskBarWindowIsAlwaysVisible() = - super.taskBarWindowIsAlwaysVisible() + override fun taskBarWindowIsAlwaysVisible() = super.taskBarWindowIsAlwaysVisible() /** {@inheritDoc} */ @FlakyTest @@ -242,8 +234,8 @@ class SwitchBetweenSplitPairs(testSpec: FlickerTestParameter) : SplitScreenBase( companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun getParams(): List<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests() + fun getParams(): List<FlickerTest> { + return FlickerTestFactory.nonRotationTests() } } } |