Loading libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipCloseTransition.kt→libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipTransition.kt +23 −16 Original line number Diff line number Diff line Loading @@ -20,15 +20,16 @@ import android.platform.test.annotations.Presubmit import android.view.Surface import androidx.test.filters.FlakyTest import com.android.server.wm.flicker.FlickerTestParameter import com.android.server.wm.flicker.FlickerTestParameterFactory import com.android.server.wm.flicker.LAUNCHER_COMPONENT import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.server.wm.flicker.helpers.setRotation import com.android.server.wm.flicker.startRotation import org.junit.Test import org.junit.runners.Parameterized abstract class PipCloseTransition(testSpec: FlickerTestParameter) : PipTransition(testSpec) { /** * Base class for exiting pip (closing pip window) without returning to the app */ abstract class ExitPipTransition(testSpec: FlickerTestParameter) : PipTransition(testSpec) { override val transition: FlickerBuilder.(Map<String, Any?>) -> Unit get() = buildTransition(eachRun = true) { configuration -> setup { Loading @@ -43,16 +44,28 @@ abstract class PipCloseTransition(testSpec: FlickerTestParameter) : PipTransitio } } /** * Checks that [pipApp] window is pinned and visible at the start and then becomes * unpinned and invisible at the same moment, and remains unpinned and invisible * until the end of the transition */ @Presubmit @Test open fun pipWindowBecomesInvisible() { testSpec.assertWm { this.invoke("hasPipWindow") { it.isPinned(pipApp.component) } .then() .isAppWindowInvisible(pipApp.component) this.invoke("hasPipWindow") { it.isPinned(pipApp.component).isVisible(pipApp.component) }.then().invoke("!hasPipWindow") { it.isNotPinned(pipApp.component).isInvisible(pipApp.component) } } } /** * Checks that [pipApp] and [LAUNCHER_COMPONENT] layers are visible at the start * of the transition. Then [pipApp] layer becomes invisible, and remains invisible * until the end of the transition */ @Presubmit @Test open fun pipLayerBecomesInvisible() { Loading @@ -65,6 +78,10 @@ abstract class PipCloseTransition(testSpec: FlickerTestParameter) : PipTransitio } } /** * Checks that the focus changes between the [pipApp] window and the launcher when * closing the pip window */ @FlakyTest(bugId = 151179149) @Test open fun focusChanges() { Loading @@ -72,14 +89,4 @@ abstract class PipCloseTransition(testSpec: FlickerTestParameter) : PipTransitio this.focusChanges(pipApp.launcherName, "NexusLauncherActivity") } } companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic fun getParams(): List<FlickerTestParameter> { return FlickerTestParameterFactory.getInstance() .getConfigNonRotationTests(supportedRotations = listOf(Surface.ROTATION_0), repetitions = 5) } } } No newline at end of file libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipCloseWithDismissButtonTest.kt→libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithDismissButtonTest.kt +38 −6 Original line number Diff line number Diff line Loading @@ -16,10 +16,12 @@ package com.android.wm.shell.flicker.pip import androidx.test.filters.FlakyTest 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.annotation.Group3 import com.android.server.wm.flicker.dsl.FlickerBuilder import org.junit.FixMethodOrder Loading @@ -29,15 +31,29 @@ import org.junit.runners.MethodSorters import org.junit.runners.Parameterized /** * Test Pip launch. * To run this test: `atest WMShellFlickerTests:PipCloseWithDismissButton` * Test closing a pip window via the dismiss button * * To run this test: `atest WMShellFlickerTests:ExitPipWithDismissButtonTest` * * Actions: * Launch an app in pip mode [pipApp], * Click on the pip window * Click on dismiss button and wait window disappear * * 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) @Group3 class PipCloseWithDismissButtonTest(testSpec: FlickerTestParameter) : PipCloseTransition(testSpec) { class ExitPipWithDismissButtonTest(testSpec: FlickerTestParameter) : ExitPipTransition(testSpec) { override val transition: FlickerBuilder.(Map<String, Any?>) -> Unit get() = { super.transition(this, it) Loading @@ -46,11 +62,27 @@ class PipCloseWithDismissButtonTest(testSpec: FlickerTestParameter) : PipCloseTr } } @FlakyTest @Postsubmit @Test override fun pipLayerBecomesInvisible() = super.pipLayerBecomesInvisible() @FlakyTest @Postsubmit @Test override fun pipWindowBecomesInvisible() = super.pipWindowBecomesInvisible() companion object { /** * Creates the test configurations. * * See [FlickerTestParameterFactory.getConfigNonRotationTests] 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), repetitions = 5) } } } No newline at end of file libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipCloseWithSwipeTest.kt→libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithSwipeDownTest.kt +39 −6 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import androidx.test.filters.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.FlickerTestParameterFactory import com.android.server.wm.flicker.annotation.Group3 import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.server.wm.flicker.startRotation Loading @@ -33,24 +34,40 @@ import org.junit.runners.MethodSorters import org.junit.runners.Parameterized /** * Test Pip launch. * To run this test: `atest WMShellFlickerTests:PipCloseWithSwipe` * Test closing a pip window by swiping it to the bottom-center of the screen * * To run this test: `atest WMShellFlickerTests:ExitPipWithSwipeDownTest` * * Actions: * Launch an app in pip mode [pipApp], * Swipe the pip window to the bottom-center of the screen and wait it disappear * * 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) @Group3 class PipCloseWithSwipeTest(testSpec: FlickerTestParameter) : PipCloseTransition(testSpec) { class ExitPipWithSwipeDownTest(testSpec: FlickerTestParameter) : ExitPipTransition(testSpec) { override val transition: FlickerBuilder.(Map<String, Any?>) -> Unit get() = { super.transition(this, it) get() = { args -> super.transition(this, args) transitions { val pipRegion = wmHelper.getWindowRegion(pipApp.component).bounds val pipCenterX = pipRegion.centerX() val pipCenterY = pipRegion.centerY() val displayCenterX = device.displayWidth / 2 device.swipe(pipCenterX, pipCenterY, displayCenterX, device.displayHeight, 5) device.swipe(pipCenterX, pipCenterY, displayCenterX, device.displayHeight, 10) wmHelper.waitFor("!hasPipWindow") { !it.wmState.hasPipWindow() } wmHelper.waitForWindowSurfaceDisappeared(pipApp.component) wmHelper.waitForAppTransitionIdle() } } Loading Loading @@ -90,4 +107,20 @@ class PipCloseWithSwipeTest(testSpec: FlickerTestParameter) : PipCloseTransition @Presubmit @Test override fun navBarLayerRotatesAndScales() = super.navBarLayerRotatesAndScales() companion object { /** * Creates the test configurations. * * See [FlickerTestParameterFactory.getConfigNonRotationTests] 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), repetitions = 20) } } } No newline at end of file Loading
libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipCloseTransition.kt→libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipTransition.kt +23 −16 Original line number Diff line number Diff line Loading @@ -20,15 +20,16 @@ import android.platform.test.annotations.Presubmit import android.view.Surface import androidx.test.filters.FlakyTest import com.android.server.wm.flicker.FlickerTestParameter import com.android.server.wm.flicker.FlickerTestParameterFactory import com.android.server.wm.flicker.LAUNCHER_COMPONENT import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.server.wm.flicker.helpers.setRotation import com.android.server.wm.flicker.startRotation import org.junit.Test import org.junit.runners.Parameterized abstract class PipCloseTransition(testSpec: FlickerTestParameter) : PipTransition(testSpec) { /** * Base class for exiting pip (closing pip window) without returning to the app */ abstract class ExitPipTransition(testSpec: FlickerTestParameter) : PipTransition(testSpec) { override val transition: FlickerBuilder.(Map<String, Any?>) -> Unit get() = buildTransition(eachRun = true) { configuration -> setup { Loading @@ -43,16 +44,28 @@ abstract class PipCloseTransition(testSpec: FlickerTestParameter) : PipTransitio } } /** * Checks that [pipApp] window is pinned and visible at the start and then becomes * unpinned and invisible at the same moment, and remains unpinned and invisible * until the end of the transition */ @Presubmit @Test open fun pipWindowBecomesInvisible() { testSpec.assertWm { this.invoke("hasPipWindow") { it.isPinned(pipApp.component) } .then() .isAppWindowInvisible(pipApp.component) this.invoke("hasPipWindow") { it.isPinned(pipApp.component).isVisible(pipApp.component) }.then().invoke("!hasPipWindow") { it.isNotPinned(pipApp.component).isInvisible(pipApp.component) } } } /** * Checks that [pipApp] and [LAUNCHER_COMPONENT] layers are visible at the start * of the transition. Then [pipApp] layer becomes invisible, and remains invisible * until the end of the transition */ @Presubmit @Test open fun pipLayerBecomesInvisible() { Loading @@ -65,6 +78,10 @@ abstract class PipCloseTransition(testSpec: FlickerTestParameter) : PipTransitio } } /** * Checks that the focus changes between the [pipApp] window and the launcher when * closing the pip window */ @FlakyTest(bugId = 151179149) @Test open fun focusChanges() { Loading @@ -72,14 +89,4 @@ abstract class PipCloseTransition(testSpec: FlickerTestParameter) : PipTransitio this.focusChanges(pipApp.launcherName, "NexusLauncherActivity") } } companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic fun getParams(): List<FlickerTestParameter> { return FlickerTestParameterFactory.getInstance() .getConfigNonRotationTests(supportedRotations = listOf(Surface.ROTATION_0), repetitions = 5) } } } No newline at end of file
libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipCloseWithDismissButtonTest.kt→libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithDismissButtonTest.kt +38 −6 Original line number Diff line number Diff line Loading @@ -16,10 +16,12 @@ package com.android.wm.shell.flicker.pip import androidx.test.filters.FlakyTest 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.annotation.Group3 import com.android.server.wm.flicker.dsl.FlickerBuilder import org.junit.FixMethodOrder Loading @@ -29,15 +31,29 @@ import org.junit.runners.MethodSorters import org.junit.runners.Parameterized /** * Test Pip launch. * To run this test: `atest WMShellFlickerTests:PipCloseWithDismissButton` * Test closing a pip window via the dismiss button * * To run this test: `atest WMShellFlickerTests:ExitPipWithDismissButtonTest` * * Actions: * Launch an app in pip mode [pipApp], * Click on the pip window * Click on dismiss button and wait window disappear * * 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) @Group3 class PipCloseWithDismissButtonTest(testSpec: FlickerTestParameter) : PipCloseTransition(testSpec) { class ExitPipWithDismissButtonTest(testSpec: FlickerTestParameter) : ExitPipTransition(testSpec) { override val transition: FlickerBuilder.(Map<String, Any?>) -> Unit get() = { super.transition(this, it) Loading @@ -46,11 +62,27 @@ class PipCloseWithDismissButtonTest(testSpec: FlickerTestParameter) : PipCloseTr } } @FlakyTest @Postsubmit @Test override fun pipLayerBecomesInvisible() = super.pipLayerBecomesInvisible() @FlakyTest @Postsubmit @Test override fun pipWindowBecomesInvisible() = super.pipWindowBecomesInvisible() companion object { /** * Creates the test configurations. * * See [FlickerTestParameterFactory.getConfigNonRotationTests] 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), repetitions = 5) } } } No newline at end of file
libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipCloseWithSwipeTest.kt→libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithSwipeDownTest.kt +39 −6 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import androidx.test.filters.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.FlickerTestParameterFactory import com.android.server.wm.flicker.annotation.Group3 import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.server.wm.flicker.startRotation Loading @@ -33,24 +34,40 @@ import org.junit.runners.MethodSorters import org.junit.runners.Parameterized /** * Test Pip launch. * To run this test: `atest WMShellFlickerTests:PipCloseWithSwipe` * Test closing a pip window by swiping it to the bottom-center of the screen * * To run this test: `atest WMShellFlickerTests:ExitPipWithSwipeDownTest` * * Actions: * Launch an app in pip mode [pipApp], * Swipe the pip window to the bottom-center of the screen and wait it disappear * * 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) @Group3 class PipCloseWithSwipeTest(testSpec: FlickerTestParameter) : PipCloseTransition(testSpec) { class ExitPipWithSwipeDownTest(testSpec: FlickerTestParameter) : ExitPipTransition(testSpec) { override val transition: FlickerBuilder.(Map<String, Any?>) -> Unit get() = { super.transition(this, it) get() = { args -> super.transition(this, args) transitions { val pipRegion = wmHelper.getWindowRegion(pipApp.component).bounds val pipCenterX = pipRegion.centerX() val pipCenterY = pipRegion.centerY() val displayCenterX = device.displayWidth / 2 device.swipe(pipCenterX, pipCenterY, displayCenterX, device.displayHeight, 5) device.swipe(pipCenterX, pipCenterY, displayCenterX, device.displayHeight, 10) wmHelper.waitFor("!hasPipWindow") { !it.wmState.hasPipWindow() } wmHelper.waitForWindowSurfaceDisappeared(pipApp.component) wmHelper.waitForAppTransitionIdle() } } Loading Loading @@ -90,4 +107,20 @@ class PipCloseWithSwipeTest(testSpec: FlickerTestParameter) : PipCloseTransition @Presubmit @Test override fun navBarLayerRotatesAndScales() = super.navBarLayerRotatesAndScales() companion object { /** * Creates the test configurations. * * See [FlickerTestParameterFactory.getConfigNonRotationTests] 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), repetitions = 20) } } } No newline at end of file