diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2021-07-30 14:47:23 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-07-30 14:47:23 +0000 |
commit | 0b7f506aa9fc94dc005f86eccedd0f4fa8ed6b6a (patch) | |
tree | 518db3fb26351e6c298b5acf69dcd5dce51a5792 /tests | |
parent | 3cbd8169d0835b7efbb350dcdb953d7c75f65341 (diff) | |
parent | 3dab1eaeecf47b41ff64b64d567e3c42f12bb412 (diff) |
Merge "[DO NOT MERGE] Full - Compatibilize winscope with master" into sc-v2-dev
Diffstat (limited to 'tests')
23 files changed, 629 insertions, 558 deletions
diff --git a/tests/FlickerTests/Android.bp b/tests/FlickerTests/Android.bp index 217a72b90fd4..7731e098d9f5 100644 --- a/tests/FlickerTests/Android.bp +++ b/tests/FlickerTests/Android.bp @@ -25,11 +25,17 @@ package { android_test { name: "FlickerTests", - srcs: ["src/**/*.java", "src/**/*.kt"], + srcs: [ + "src/**/*.java", + "src/**/*.kt", + ], manifest: "AndroidManifest.xml", test_config: "AndroidTest.xml", platform_apis: true, certificate: "platform", + optimize: { + enabled: false, + }, test_suites: ["device-tests"], libs: ["android.test.runner"], static_libs: [ @@ -46,6 +52,9 @@ android_test { java_library { name: "wm-flicker-common-assertions", platform_apis: true, + optimize: { + enabled: false, + }, srcs: [ "src/**/*Assertions.java", "src/**/*Assertions.kt", @@ -56,20 +65,23 @@ java_library { static_libs: [ "flickerlib", "truth-prebuilt", - "app-helpers-core" + "app-helpers-core", ], } java_library { name: "wm-flicker-common-app-helpers", platform_apis: true, + optimize: { + enabled: false, + }, srcs: [ - "**/helpers/*" + "**/helpers/*", ], static_libs: [ "flickerlib", "flickertestapplib", "truth-prebuilt", - "app-helpers-core" + "app-helpers-core", ], -}
\ No newline at end of file +} diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/CommonAssertions.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/CommonAssertions.kt index a540dffb3c9c..08c9e5dc7b64 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/CommonAssertions.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/CommonAssertions.kt @@ -14,77 +14,30 @@ * limitations under the License. */ +@file:JvmName("CommonAssertions") package com.android.server.wm.flicker -import android.platform.helpers.IAppHelper +import android.content.ComponentName import com.android.server.wm.flicker.helpers.WindowUtils -import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper.Companion.NAV_BAR_LAYER_NAME -import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper.Companion.NAV_BAR_WINDOW_NAME -import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper.Companion.STATUS_BAR_LAYER_NAME -import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper.Companion.STATUS_BAR_WINDOW_NAME +import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper -val HOME_WINDOW_TITLE = arrayOf("Wallpaper", "Launcher") +val LAUNCHER_COMPONENT = ComponentName("com.google.android.apps.nexuslauncher", + "com.google.android.apps.nexuslauncher.NexusLauncherActivity") -fun FlickerTestParameter.statusBarWindowIsAlwaysVisible() { +fun FlickerTestParameter.statusBarWindowIsVisible() { assertWm { - this.showsAboveAppWindow(STATUS_BAR_WINDOW_NAME) + this.isAboveAppWindowVisible(WindowManagerStateHelper.STATUS_BAR_COMPONENT) } } -fun FlickerTestParameter.navBarWindowIsAlwaysVisible() { +fun FlickerTestParameter.navBarWindowIsVisible() { assertWm { - this.showsAboveAppWindow(NAV_BAR_WINDOW_NAME) - } -} - -fun FlickerTestParameter.launcherReplacesAppWindowAsTopWindow(testApp: IAppHelper) { - assertWm { - this.showsAppWindowOnTop(testApp.getPackage()) - .then() - .showsAppWindowOnTop(*HOME_WINDOW_TITLE) - } -} - -fun FlickerTestParameter.launcherWindowBecomesVisible() { - assertWm { - this.hidesBelowAppWindow(*HOME_WINDOW_TITLE) - .then() - .showsBelowAppWindow(*HOME_WINDOW_TITLE) - } -} - -fun FlickerTestParameter.launcherWindowBecomesInvisible() { - assertWm { - this.showsBelowAppWindow(*HOME_WINDOW_TITLE) - .then() - .hidesBelowAppWindow(*HOME_WINDOW_TITLE) - } -} - -fun FlickerTestParameter.appWindowAlwaysVisibleOnTop(packageName: String) { - assertWm { - this.showsAppWindowOnTop(packageName) - } -} - -fun FlickerTestParameter.appWindowBecomesVisible(appName: String) { - assertWm { - this.hidesAppWindow(appName) - .then() - .showsAppWindow(appName) - } -} - -fun FlickerTestParameter.appWindowBecomesInVisible(appName: String) { - assertWm { - this.showsAppWindow(appName) - .then() - .hidesAppWindow(appName) + this.isAboveAppWindowVisible(WindowManagerStateHelper.NAV_BAR_COMPONENT) } } @JvmOverloads -fun FlickerTestParameter.noUncoveredRegions( +fun FlickerTestParameter.entireScreenCovered( beginRotation: Int, endRotation: Int = beginRotation, allStates: Boolean = true @@ -111,37 +64,21 @@ fun FlickerTestParameter.noUncoveredRegions( } } -@JvmOverloads -fun FlickerTestParameter.navBarLayerIsAlwaysVisible(rotatesScreen: Boolean = false) { - if (rotatesScreen) { - assertLayers { - this.isVisible(NAV_BAR_LAYER_NAME) - .then() - .isInvisible(NAV_BAR_LAYER_NAME) - .then() - .isVisible(NAV_BAR_LAYER_NAME) - } - } else { - assertLayers { - this.isVisible(NAV_BAR_LAYER_NAME) - } +fun FlickerTestParameter.navBarLayerIsVisible() { + assertLayersStart { + this.isVisible(WindowManagerStateHelper.NAV_BAR_COMPONENT) + } + assertLayersEnd { + this.isVisible(WindowManagerStateHelper.NAV_BAR_COMPONENT) } } -@JvmOverloads -fun FlickerTestParameter.statusBarLayerIsAlwaysVisible(rotatesScreen: Boolean = false) { - if (rotatesScreen) { - assertLayers { - this.isVisible(STATUS_BAR_LAYER_NAME) - .then() - .isInvisible(STATUS_BAR_LAYER_NAME) - .then() - .isVisible(STATUS_BAR_LAYER_NAME) - } - } else { - assertLayers { - this.isVisible(STATUS_BAR_LAYER_NAME) - } +fun FlickerTestParameter.statusBarLayerIsVisible() { + assertLayersStart { + this.isVisible(WindowManagerStateHelper.STATUS_BAR_COMPONENT) + } + assertLayersEnd { + this.isVisible(WindowManagerStateHelper.STATUS_BAR_COMPONENT) } } @@ -154,10 +91,10 @@ fun FlickerTestParameter.navBarLayerRotatesAndScales( val endingPos = WindowUtils.getNavigationBarPosition(endRotation) assertLayersStart { - this.visibleRegion(NAV_BAR_LAYER_NAME).coversExactly(startingPos) + this.visibleRegion(WindowManagerStateHelper.NAV_BAR_COMPONENT).coversExactly(startingPos) } assertLayersEnd { - this.visibleRegion(NAV_BAR_LAYER_NAME).coversExactly(endingPos) + this.visibleRegion(WindowManagerStateHelper.NAV_BAR_COMPONENT).coversExactly(endingPos) } } @@ -170,54 +107,46 @@ fun FlickerTestParameter.statusBarLayerRotatesScales( val endingPos = WindowUtils.getStatusBarPosition(endRotation) assertLayersStart { - this.visibleRegion(STATUS_BAR_LAYER_NAME).coversExactly(startingPos) + this.visibleRegion(WindowManagerStateHelper.STATUS_BAR_COMPONENT).coversExactly(startingPos) } assertLayersEnd { - this.visibleRegion(STATUS_BAR_LAYER_NAME).coversExactly(endingPos) - } -} - -fun FlickerTestParameter.appLayerReplacesLauncher(appName: String) { - assertLayers { - this.isVisible(*HOME_WINDOW_TITLE) - .then() - .isVisible(appName) + this.visibleRegion(WindowManagerStateHelper.STATUS_BAR_COMPONENT).coversExactly(endingPos) } } -fun FlickerTestParameter.launcherLayerReplacesApp(testApp: IAppHelper) { +/** + * Asserts that: + * [originalLayer] is visible at the start of the trace + * [originalLayer] becomes invisible during the trace and (in the same entry) [newLayer] + * becomes visible + * [newLayer] remains visible until the end of the trace + * + * @param originalLayer Layer that should be visible at the start + * @param newLayer Layer that should be visible at the end + * @param ignoreSnapshot If the snapshot layer should be ignored during the transition + * (useful mostly for app launch) + */ +fun FlickerTestParameter.replacesLayer( + originalLayer: ComponentName, + newLayer: ComponentName, + ignoreSnapshot: Boolean = false +) { assertLayers { - this.isVisible(testApp.getPackage()) - .then() - .isInvisible(testApp.getPackage()) - .isVisible(*HOME_WINDOW_TITLE) + val assertion = this.isVisible(originalLayer) + if (ignoreSnapshot) { + assertion.then() + .isVisible(WindowManagerStateHelper.SNAPSHOT_COMPONENT, isOptional = true) + } + assertion.then().isVisible(newLayer) } -} -fun FlickerTestParameter.layerBecomesVisible(packageName: String) { - assertLayers { - this.isInvisible(packageName) - .then() - .isVisible(packageName) - } -} - -fun FlickerTestParameter.layerBecomesInvisible(packageName: String) { - assertLayers { - this.isVisible(packageName) - .then() - .isInvisible(packageName) + assertLayersStart { + this.isVisible(originalLayer) + .isInvisible(newLayer) } -} -fun FlickerTestParameter.focusChanges(vararg windows: String) { - assertEventLog { - this.focusChanges(windows) + assertLayersEnd { + this.isInvisible(originalLayer) + .isVisible(newLayer) } } - -fun FlickerTestParameter.focusDoesNotChange() { - assertEventLog { - this.focusDoesNotChange() - } -}
\ No newline at end of file diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppBackButtonTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppBackButtonTest.kt index 71184c2e0aa2..90c851d6e266 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppBackButtonTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppBackButtonTest.kt @@ -1,3 +1,4 @@ + /* * Copyright (C) 2020 The Android Open Source Project * @@ -16,6 +17,8 @@ package com.android.server.wm.flicker.close +import android.platform.test.annotations.Postsubmit +import androidx.test.filters.FlakyTest import androidx.test.filters.RequiresDevice import com.android.server.wm.flicker.FlickerParametersRunnerFactory import com.android.server.wm.flicker.FlickerTestParameter @@ -23,6 +26,7 @@ import com.android.server.wm.flicker.FlickerTestParameterFactory import com.android.server.wm.flicker.annotation.Group1 import com.android.server.wm.flicker.dsl.FlickerBuilder import org.junit.FixMethodOrder +import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.MethodSorters import org.junit.runners.Parameterized @@ -46,6 +50,13 @@ class CloseAppBackButtonTest(testSpec: FlickerTestParameter) : CloseAppTransitio } } + @FlakyTest + @Test + override fun navBarLayerRotatesAndScales() = super.navBarLayerRotatesAndScales() + + @Postsubmit + override fun navBarLayerIsVisible() = super.navBarLayerIsVisible() + companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppHomeButtonTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppHomeButtonTest.kt index 6786279ae107..e8391ed9cfa1 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppHomeButtonTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppHomeButtonTest.kt @@ -16,6 +16,8 @@ package com.android.server.wm.flicker.close +import android.platform.test.annotations.Postsubmit +import androidx.test.filters.FlakyTest import androidx.test.filters.RequiresDevice import com.android.server.wm.flicker.FlickerParametersRunnerFactory import com.android.server.wm.flicker.FlickerTestParameter @@ -23,6 +25,7 @@ import com.android.server.wm.flicker.FlickerTestParameterFactory import com.android.server.wm.flicker.annotation.Group1 import com.android.server.wm.flicker.dsl.FlickerBuilder import org.junit.FixMethodOrder +import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.MethodSorters import org.junit.runners.Parameterized @@ -46,6 +49,13 @@ class CloseAppHomeButtonTest(testSpec: FlickerTestParameter) : CloseAppTransitio } } + @FlakyTest + @Test + override fun navBarLayerRotatesAndScales() = super.navBarLayerRotatesAndScales() + + @Postsubmit + override fun navBarLayerIsVisible() = super.navBarLayerIsVisible() + companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppTransition.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppTransition.kt index f7f977d7bd0a..f9e6babee938 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppTransition.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppTransition.kt @@ -19,30 +19,35 @@ package com.android.server.wm.flicker.close import android.app.Instrumentation import android.platform.test.annotations.Presubmit import android.view.Surface -import androidx.test.filters.FlakyTest import androidx.test.platform.app.InstrumentationRegistry import com.android.server.wm.flicker.FlickerBuilderProvider import com.android.server.wm.flicker.FlickerTestParameter +import com.android.server.wm.flicker.LAUNCHER_COMPONENT import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.server.wm.flicker.helpers.SimpleAppHelper import com.android.server.wm.flicker.helpers.StandardAppHelper import com.android.server.wm.flicker.helpers.setRotation -import com.android.server.wm.flicker.launcherReplacesAppWindowAsTopWindow -import com.android.server.wm.flicker.navBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.navBarLayerIsVisible import com.android.server.wm.flicker.navBarLayerRotatesAndScales -import com.android.server.wm.flicker.navBarWindowIsAlwaysVisible -import com.android.server.wm.flicker.noUncoveredRegions +import com.android.server.wm.flicker.navBarWindowIsVisible +import com.android.server.wm.flicker.entireScreenCovered import com.android.server.wm.flicker.startRotation -import com.android.server.wm.flicker.statusBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.statusBarLayerIsVisible import com.android.server.wm.flicker.statusBarLayerRotatesScales -import com.android.server.wm.flicker.statusBarWindowIsAlwaysVisible -import com.android.server.wm.flicker.launcherLayerReplacesApp -import com.android.server.wm.flicker.launcherWindowBecomesVisible +import com.android.server.wm.flicker.statusBarWindowIsVisible +import com.android.server.wm.flicker.replacesLayer import org.junit.Test +/** + * Base test class for transitions that close an app back to the launcher screen + */ abstract class CloseAppTransition(protected val testSpec: FlickerTestParameter) { protected val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation() protected open val testApp: StandardAppHelper = SimpleAppHelper(instrumentation) + + /** + * Specification of the test transition to execute + */ protected open val transition: FlickerBuilder.(Map<String, Any?>) -> Unit = { setup { eachRun { @@ -66,29 +71,29 @@ abstract class CloseAppTransition(protected val testSpec: FlickerTestParameter) @Presubmit @Test - open fun navBarWindowIsAlwaysVisible() { - testSpec.navBarWindowIsAlwaysVisible() + open fun navBarWindowIsVisible() { + testSpec.navBarWindowIsVisible() } @Presubmit @Test - open fun statusBarWindowIsAlwaysVisible() { - testSpec.statusBarWindowIsAlwaysVisible() + open fun statusBarWindowIsVisible() { + testSpec.statusBarWindowIsVisible() } - @FlakyTest + @Presubmit @Test - open fun navBarLayerIsAlwaysVisible() { - testSpec.navBarLayerIsAlwaysVisible(rotatesScreen = testSpec.isRotated) + open fun navBarLayerIsVisible() { + testSpec.navBarLayerIsVisible() } @Presubmit @Test - open fun statusBarLayerIsAlwaysVisible() { - testSpec.statusBarLayerIsAlwaysVisible(rotatesScreen = testSpec.isRotated) + open fun statusBarLayerIsVisible() { + testSpec.statusBarLayerIsVisible() } - @FlakyTest + @Presubmit @Test open fun navBarLayerRotatesAndScales() { testSpec.navBarLayerRotatesAndScales(testSpec.config.startRotation, Surface.ROTATION_0) @@ -118,25 +123,33 @@ abstract class CloseAppTransition(protected val testSpec: FlickerTestParameter) @Presubmit @Test - open fun noUncoveredRegions() { - testSpec.noUncoveredRegions(testSpec.config.startRotation, Surface.ROTATION_0) + open fun entireScreenCovered() { + testSpec.entireScreenCovered(testSpec.config.startRotation, Surface.ROTATION_0) } @Presubmit @Test open fun launcherReplacesAppWindowAsTopWindow() { - testSpec.launcherReplacesAppWindowAsTopWindow(testApp) + testSpec.assertWm { + this.isAppWindowOnTop(testApp.component) + .then() + .isAppWindowOnTop(LAUNCHER_COMPONENT) + } } @Presubmit @Test open fun launcherWindowBecomesVisible() { - testSpec.launcherWindowBecomesVisible() + testSpec.assertWm { + this.isAppWindowInvisible(LAUNCHER_COMPONENT) + .then() + .isAppWindowOnTop(LAUNCHER_COMPONENT) + } } @Presubmit @Test open fun launcherLayerReplacesApp() { - testSpec.launcherLayerReplacesApp(testApp) + testSpec.replacesLayer(testApp.component, LAUNCHER_COMPONENT) } }
\ No newline at end of file diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ImeAppHelper.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ImeAppHelper.kt index 83fddae5b1a7..d224af97462e 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ImeAppHelper.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ImeAppHelper.kt @@ -61,7 +61,8 @@ open class ImeAppHelper @JvmOverloads constructor( if (wmHelper == null) { device.waitForIdle() } else { - wmHelper.waitImeWindowShown() + wmHelper.waitImeShown() + wmHelper.waitForAppTransitionIdle() } } @@ -78,7 +79,7 @@ open class ImeAppHelper @JvmOverloads constructor( if (wmHelper == null) { device.waitForIdle() } else { - wmHelper.waitImeWindowGone() + wmHelper.waitImeGone() } } }
\ No newline at end of file diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeAutoOpenWindowToAppTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeAutoOpenWindowToAppTest.kt index b5757fd21ee0..384d8e8e998d 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeAutoOpenWindowToAppTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeAutoOpenWindowToAppTest.kt @@ -18,8 +18,8 @@ package com.android.server.wm.flicker.ime import android.app.Instrumentation import android.platform.test.annotations.Presubmit +import android.view.Surface import android.view.WindowManagerPolicyConstants -import androidx.test.filters.FlakyTest import androidx.test.filters.RequiresDevice import androidx.test.platform.app.InstrumentationRegistry import com.android.server.wm.flicker.FlickerBuilderProvider @@ -28,15 +28,15 @@ import com.android.server.wm.flicker.FlickerTestParameter import com.android.server.wm.flicker.FlickerTestParameterFactory import com.android.server.wm.flicker.annotation.Group2 import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.entireScreenCovered import com.android.server.wm.flicker.helpers.ImeAppAutoFocusHelper -import com.android.server.wm.flicker.navBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.navBarLayerIsVisible import com.android.server.wm.flicker.navBarLayerRotatesAndScales -import com.android.server.wm.flicker.navBarWindowIsAlwaysVisible -import com.android.server.wm.flicker.noUncoveredRegions +import com.android.server.wm.flicker.navBarWindowIsVisible import com.android.server.wm.flicker.startRotation -import com.android.server.wm.flicker.statusBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.statusBarLayerIsVisible import com.android.server.wm.flicker.statusBarLayerRotatesScales -import com.android.server.wm.flicker.statusBarWindowIsAlwaysVisible +import com.android.server.wm.flicker.statusBarWindowIsVisible import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper import org.junit.FixMethodOrder import org.junit.Test @@ -46,6 +46,14 @@ import org.junit.runners.Parameterized /** * Test IME window closing back to app window transitions. + * + * This test doesn't work on 90 degrees. According to the InputMethodService documentation: + * + * Don't show if this is not explicitly requested by the user and the input method + * is fullscreen. That would be too disruptive. + * + * More details on b/190352379 + * * To run this test: `atest FlickerTests:CloseImeAutoOpenWindowToAppTest` */ @RequiresDevice @@ -79,37 +87,55 @@ class CloseImeAutoOpenWindowToAppTest(private val testSpec: FlickerTestParameter @Presubmit @Test - fun navBarWindowIsAlwaysVisible() = testSpec.navBarWindowIsAlwaysVisible() + fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible() @Presubmit @Test - fun statusBarWindowIsAlwaysVisible() = testSpec.statusBarWindowIsAlwaysVisible() + fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible() @Presubmit @Test fun visibleWindowsShownMoreThanOneConsecutiveEntry() { testSpec.assertWm { - this.visibleWindowsShownMoreThanOneConsecutiveEntry(listOf(IME_WINDOW_TITLE, - WindowManagerStateHelper.SPLASH_SCREEN_NAME, - WindowManagerStateHelper.SNAPSHOT_WINDOW_NAME)) + this.visibleWindowsShownMoreThanOneConsecutiveEntry() } } @Presubmit @Test - fun imeAppWindowIsAlwaysVisible() = testSpec.imeAppWindowIsAlwaysVisible(testApp) + fun imeAppWindowIsAlwaysVisible() { + testSpec.assertWm { + this.isAppWindowOnTop(testApp.component) + } + } @Presubmit @Test - fun navBarLayerIsAlwaysVisible() = testSpec.navBarLayerIsAlwaysVisible() + fun navBarLayerIsVisible() = testSpec.navBarLayerIsVisible() @Presubmit @Test - fun statusBarLayerIsAlwaysVisible() = testSpec.statusBarLayerIsAlwaysVisible() + fun statusBarLayerIsVisible() = testSpec.statusBarLayerIsVisible() - @FlakyTest + @Presubmit @Test - fun noUncoveredRegions() = testSpec.noUncoveredRegions(testSpec.config.startRotation) + fun entireScreenCovered() = testSpec.entireScreenCovered(testSpec.config.startRotation) + + @Presubmit + @Test + fun imeLayerVisibleStart() { + testSpec.assertLayersStart { + this.isVisible(WindowManagerStateHelper.IME_COMPONENT) + } + } + + @Presubmit + @Test + fun imeLayerInvisibleEnd() { + testSpec.assertLayersEnd { + this.isInvisible(WindowManagerStateHelper.IME_COMPONENT) + } + } @Presubmit @Test @@ -117,15 +143,19 @@ class CloseImeAutoOpenWindowToAppTest(private val testSpec: FlickerTestParameter @Presubmit @Test - fun imeAppLayerIsAlwaysVisible() = testSpec.imeAppLayerIsAlwaysVisible(testApp) + fun imeAppLayerIsAlwaysVisible() { + testSpec.assertLayers { + this.isVisible(testApp.component) + } + } - @FlakyTest + @Presubmit @Test fun navBarLayerRotatesAndScales() { testSpec.navBarLayerRotatesAndScales(testSpec.config.startRotation) } - @FlakyTest + @Presubmit @Test fun statusBarLayerRotatesScales() { testSpec.statusBarLayerRotatesScales(testSpec.config.startRotation) @@ -145,8 +175,11 @@ class CloseImeAutoOpenWindowToAppTest(private val testSpec: FlickerTestParameter fun getParams(): Collection<FlickerTestParameter> { return FlickerTestParameterFactory.getInstance() .getConfigNonRotationTests(repetitions = 5, + // b/190352379 (IME doesn't show on app launch in 90 degrees) + supportedRotations = listOf(Surface.ROTATION_0), supportedNavigationModes = listOf( - WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON_OVERLAY) + WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON_OVERLAY, + WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY) ) } } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeAutoOpenWindowToHomeTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeAutoOpenWindowToHomeTest.kt index 549e44c511b9..ade215b3022d 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeAutoOpenWindowToHomeTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeAutoOpenWindowToHomeTest.kt @@ -30,14 +30,14 @@ import com.android.server.wm.flicker.FlickerTestParameterFactory import com.android.server.wm.flicker.annotation.Group2 import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.server.wm.flicker.helpers.ImeAppAutoFocusHelper -import com.android.server.wm.flicker.navBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.navBarLayerIsVisible import com.android.server.wm.flicker.navBarLayerRotatesAndScales -import com.android.server.wm.flicker.navBarWindowIsAlwaysVisible -import com.android.server.wm.flicker.noUncoveredRegions +import com.android.server.wm.flicker.navBarWindowIsVisible +import com.android.server.wm.flicker.entireScreenCovered import com.android.server.wm.flicker.startRotation -import com.android.server.wm.flicker.statusBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.statusBarLayerIsVisible import com.android.server.wm.flicker.statusBarLayerRotatesScales -import com.android.server.wm.flicker.statusBarWindowIsAlwaysVisible +import com.android.server.wm.flicker.statusBarWindowIsVisible import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper import org.junit.FixMethodOrder import org.junit.Test @@ -47,6 +47,14 @@ import org.junit.runners.Parameterized /** * Test IME window closing back to app window transitions. + * + * This test doesn't work on 90 degrees. According to the InputMethodService documentation: + * + * Don't show if this is not explicitly requested by the user and the input method + * is fullscreen. That would be too disruptive. + * + * More details on b/190352379 + * * To run this test: `atest FlickerTests:CloseImeAutoOpenWindowToHomeTest` */ @RequiresDevice @@ -75,51 +83,73 @@ class CloseImeAutoOpenWindowToHomeTest(private val testSpec: FlickerTestParamete transitions { device.pressHome() wmHelper.waitForHomeActivityVisible() - wmHelper.waitImeWindowGone() + wmHelper.waitImeGone() } } } @Presubmit @Test - fun navBarWindowIsAlwaysVisible() = testSpec.navBarWindowIsAlwaysVisible() + fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible() @Presubmit @Test - fun statusBarWindowIsAlwaysVisible() = testSpec.statusBarWindowIsAlwaysVisible() + fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible() @Presubmit @Test fun visibleWindowsShownMoreThanOneConsecutiveEntry() { testSpec.assertWm { - this.visibleWindowsShownMoreThanOneConsecutiveEntry(listOf(IME_WINDOW_TITLE, - WindowManagerStateHelper.SPLASH_SCREEN_NAME, - WindowManagerStateHelper.SNAPSHOT_WINDOW_NAME)) + this.visibleWindowsShownMoreThanOneConsecutiveEntry() } } - @FlakyTest + @FlakyTest(bugId = 190189685) @Test - fun imeWindowBecomesInvisible() = testSpec.imeWindowBecomesInvisible() + fun imeAppWindowBecomesInvisible() { + testSpec.assertWm { + this.isAppWindowOnTop(testApp.component) + .then() + .appWindowNotOnTop(testApp.component) + } + } - @FlakyTest + @Presubmit @Test - fun imeAppWindowBecomesInvisible() = testSpec.imeAppWindowBecomesInvisible(testApp) + fun entireScreenCovered() = testSpec.entireScreenCovered(testSpec.config.startRotation, + Surface.ROTATION_0) @Presubmit @Test - fun noUncoveredRegions() = testSpec.noUncoveredRegions(testSpec.config.startRotation, - Surface.ROTATION_0) + fun imeLayerVisibleStart() { + testSpec.assertLayersStart { + this.isVisible(WindowManagerStateHelper.IME_COMPONENT) + } + } - @FlakyTest + @Presubmit + @Test + fun imeLayerInvisibleEnd() { + testSpec.assertLayersEnd { + this.isInvisible(WindowManagerStateHelper.IME_COMPONENT) + } + } + + @Presubmit @Test fun imeLayerBecomesInvisible() = testSpec.imeLayerBecomesInvisible() @Presubmit @Test - fun imeAppLayerBecomesInvisible() = testSpec.imeAppLayerBecomesInvisible(testApp) + fun imeAppLayerBecomesInvisible() { + testSpec.assertLayers { + this.isVisible(testApp.component) + .then() + .isInvisible(testApp.component) + } + } - @FlakyTest + @Presubmit @Test fun navBarLayerRotatesAndScales() { testSpec.navBarLayerRotatesAndScales(testSpec.config.startRotation, Surface.ROTATION_0) @@ -133,18 +163,19 @@ class CloseImeAutoOpenWindowToHomeTest(private val testSpec: FlickerTestParamete @Presubmit @Test - fun navBarLayerIsAlwaysVisible() = testSpec.navBarLayerIsAlwaysVisible() + fun navBarLayerIsVisible() = testSpec.navBarLayerIsVisible() - @FlakyTest + @Presubmit @Test - fun statusBarLayerIsAlwaysVisible() = testSpec.statusBarLayerIsAlwaysVisible() + fun statusBarLayerIsVisible() = testSpec.statusBarLayerIsVisible() @Presubmit @Test fun visibleLayersShownMoreThanOneConsecutiveEntry() { testSpec.assertLayers { - this.visibleLayersShownMoreThanOneConsecutiveEntry( - listOf(IME_WINDOW_TITLE, WindowManagerStateHelper.SPLASH_SCREEN_NAME)) + this.visibleLayersShownMoreThanOneConsecutiveEntry(listOf( + WindowManagerStateHelper.IME_COMPONENT, + WindowManagerStateHelper.SPLASH_SCREEN_COMPONENT)) } } @@ -154,8 +185,11 @@ class CloseImeAutoOpenWindowToHomeTest(private val testSpec: FlickerTestParamete fun getParams(): Collection<FlickerTestParameter> { return FlickerTestParameterFactory.getInstance() .getConfigNonRotationTests(repetitions = 1, + // b/190352379 (IME doesn't show on app launch in 90 degrees) + supportedRotations = listOf(Surface.ROTATION_0), supportedNavigationModes = listOf( - WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON_OVERLAY) + WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON_OVERLAY, + WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY) ) } } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeWindowToAppTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeWindowToAppTest.kt index 82ca074b5ef2..cdfcff3d4beb 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeWindowToAppTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeWindowToAppTest.kt @@ -28,13 +28,13 @@ import com.android.server.wm.flicker.FlickerTestParameterFactory import com.android.server.wm.flicker.annotation.Group2 import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.server.wm.flicker.helpers.ImeAppHelper -import com.android.server.wm.flicker.navBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.navBarLayerIsVisible import com.android.server.wm.flicker.navBarLayerRotatesAndScales -import com.android.server.wm.flicker.navBarWindowIsAlwaysVisible -import com.android.server.wm.flicker.noUncoveredRegions +import com.android.server.wm.flicker.navBarWindowIsVisible +import com.android.server.wm.flicker.entireScreenCovered import com.android.server.wm.flicker.startRotation import com.android.server.wm.flicker.statusBarLayerRotatesScales -import com.android.server.wm.flicker.statusBarWindowIsAlwaysVisible +import com.android.server.wm.flicker.statusBarWindowIsVisible import org.junit.Assume import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper import org.junit.FixMethodOrder @@ -61,7 +61,7 @@ class CloseImeWindowToAppTest(private val testSpec: FlickerTestParameter) { return FlickerBuilder(instrumentation).apply { setup { test { - testApp.launchViaIntent() + testApp.launchViaIntent(wmHelper) } eachRun { testApp.openIME(device, wmHelper) @@ -80,37 +80,42 @@ class CloseImeWindowToAppTest(private val testSpec: FlickerTestParameter) { @Presubmit @Test - fun navBarWindowIsAlwaysVisible() = testSpec.navBarWindowIsAlwaysVisible() + fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible() @Presubmit @Test - fun statusBarWindowIsAlwaysVisible() = testSpec.statusBarWindowIsAlwaysVisible() + fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible() @Presubmit @Test fun visibleWindowsShownMoreThanOneConsecutiveEntry() { testSpec.assertWm { - this.visibleWindowsShownMoreThanOneConsecutiveEntry(listOf(IME_WINDOW_TITLE, - WindowManagerStateHelper.SPLASH_SCREEN_NAME, - WindowManagerStateHelper.SNAPSHOT_WINDOW_NAME)) + this.visibleWindowsShownMoreThanOneConsecutiveEntry(listOf( + WindowManagerStateHelper.IME_COMPONENT, + WindowManagerStateHelper.SPLASH_SCREEN_COMPONENT, + WindowManagerStateHelper.SNAPSHOT_COMPONENT)) } } @Presubmit @Test - fun imeAppWindowIsAlwaysVisible() = testSpec.imeAppWindowIsAlwaysVisible(testApp) + fun imeAppWindowIsAlwaysVisible() { + testSpec.assertWm { + this.isAppWindowOnTop(testApp.component) + } + } @Presubmit @Test - fun navBarLayerIsAlwaysVisible() = testSpec.navBarLayerIsAlwaysVisible() + fun navBarLayerIsVisible() = testSpec.navBarLayerIsVisible() @Presubmit @Test - fun statusBarLayerIsAlwaysVisible() = testSpec.navBarLayerIsAlwaysVisible() + fun statusBarLayerIsVisible() = testSpec.navBarLayerIsVisible() @Presubmit @Test - fun noUncoveredRegions() = testSpec.noUncoveredRegions(testSpec.config.startRotation) + fun entireScreenCovered() = testSpec.entireScreenCovered(testSpec.config.startRotation) @Presubmit @Test @@ -146,7 +151,11 @@ class CloseImeWindowToAppTest(private val testSpec: FlickerTestParameter) { @Presubmit @Test - fun imeAppLayerIsAlwaysVisible() = testSpec.imeAppLayerIsAlwaysVisible(testApp) + fun imeAppLayerIsAlwaysVisible() { + testSpec.assertLayers { + this.isVisible(testApp.component) + } + } companion object { @Parameterized.Parameters(name = "{0}") diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeWindowToHomeTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeWindowToHomeTest.kt index 703e4a125440..05fc2672168e 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeWindowToHomeTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeWindowToHomeTest.kt @@ -30,13 +30,13 @@ import com.android.server.wm.flicker.FlickerTestParameterFactory import com.android.server.wm.flicker.annotation.Group2 import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.server.wm.flicker.helpers.ImeAppHelper -import com.android.server.wm.flicker.navBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.navBarLayerIsVisible import com.android.server.wm.flicker.navBarLayerRotatesAndScales -import com.android.server.wm.flicker.navBarWindowIsAlwaysVisible -import com.android.server.wm.flicker.noUncoveredRegions +import com.android.server.wm.flicker.navBarWindowIsVisible +import com.android.server.wm.flicker.entireScreenCovered import com.android.server.wm.flicker.startRotation import com.android.server.wm.flicker.statusBarLayerRotatesScales -import com.android.server.wm.flicker.statusBarWindowIsAlwaysVisible +import com.android.server.wm.flicker.statusBarWindowIsVisible import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper import org.junit.FixMethodOrder import org.junit.Test @@ -68,7 +68,7 @@ class CloseImeWindowToHomeTest(private val testSpec: FlickerTestParameter) { transitions { device.pressHome() wmHelper.waitForHomeActivityVisible() - wmHelper.waitImeWindowGone() + wmHelper.waitImeGone() } teardown { eachRun { @@ -84,19 +84,20 @@ class CloseImeWindowToHomeTest(private val testSpec: FlickerTestParameter) { @Presubmit @Test - fun navBarWindowIsAlwaysVisible() = testSpec.navBarWindowIsAlwaysVisible() + fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible() @Presubmit @Test - fun statusBarWindowIsAlwaysVisible() = testSpec.statusBarWindowIsAlwaysVisible() + fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible() @Presubmit @Test fun visibleWindowsShownMoreThanOneConsecutiveEntry() { testSpec.assertWm { - this.visibleWindowsShownMoreThanOneConsecutiveEntry(listOf(IME_WINDOW_TITLE, - WindowManagerStateHelper.SPLASH_SCREEN_NAME, - WindowManagerStateHelper.SNAPSHOT_WINDOW_NAME)) + this.visibleWindowsShownMoreThanOneConsecutiveEntry(listOf( + WindowManagerStateHelper.IME_COMPONENT, + WindowManagerStateHelper.SPLASH_SCREEN_COMPONENT, + WindowManagerStateHelper.SNAPSHOT_COMPONENT)) } } @@ -106,19 +107,25 @@ class CloseImeWindowToHomeTest(private val testSpec: FlickerTestParameter) { @FlakyTest @Test - fun imeAppWindowBecomesInvisible() = testSpec.imeAppWindowBecomesInvisible(testApp) + fun imeAppWindowBecomesInvisible() { + testSpec.assertWm { + this.isAppWindowVisible(testApp.component) + .then() + .isAppWindowInvisible(testApp.component) + } + } @Presubmit @Test - fun navBarLayerIsAlwaysVisible() = testSpec.navBarLayerIsAlwaysVisible() + fun navBarLayerIsVisible() = testSpec.navBarLayerIsVisible() @Presubmit @Test - fun statusBarLayerIsAlwaysVisible() = testSpec.navBarLayerIsAlwaysVisible() + fun statusBarLayerIsVisible() = testSpec.navBarLayerIsVisible() @Presubmit @Test - fun noUncoveredRegions() = testSpec.noUncoveredRegions(testSpec.config.startRotation, + fun entireScreenCovered() = testSpec.entireScreenCovered(testSpec.config.startRotation, Surface.ROTATION_0) @Presubmit @@ -127,7 +134,13 @@ class CloseImeWindowToHomeTest(private val testSpec: FlickerTestParameter) { @Presubmit @Test - fun imeAppLayerBecomesInvisible() = testSpec.imeAppLayerBecomesInvisible(testApp) + fun imeAppLayerBecomesInvisible() { + testSpec.assertLayers { + this.isVisible(testApp.component) + .then() + .isInvisible(testApp.component) + } + } @Presubmit @Test @@ -144,8 +157,9 @@ class CloseImeWindowToHomeTest(private val testSpec: FlickerTestParameter) { @Test fun visibleLayersShownMoreThanOneConsecutiveEntry() { testSpec.assertLayers { - this.visibleLayersShownMoreThanOneConsecutiveEntry( - listOf(IME_WINDOW_TITLE, WindowManagerStateHelper.SPLASH_SCREEN_NAME)) + this.visibleLayersShownMoreThanOneConsecutiveEntry(listOf( + WindowManagerStateHelper.IME_COMPONENT, + WindowManagerStateHelper.SPLASH_SCREEN_COMPONENT)) } } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CommonAssertions.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CommonAssertions.kt index 7e34469b8188..7659d9471e2f 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CommonAssertions.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CommonAssertions.kt @@ -14,128 +14,56 @@ * limitations under the License. */ +@file:JvmName("CommonAssertions") package com.android.server.wm.flicker.ime -import android.platform.helpers.IAppHelper import com.android.server.wm.flicker.FlickerTestParameter - -const val IME_WINDOW_TITLE = "InputMethod" - -fun FlickerTestParameter.imeLayerIsAlwaysVisible(rotatesScreen: Boolean = false) { - if (rotatesScreen) { - assertLayers { - this.isVisible(IME_WINDOW_TITLE) - .then() - .isInvisible(IME_WINDOW_TITLE) - .then() - .isVisible(IME_WINDOW_TITLE) - } - } else { - assertLayers { - this.isVisible(IME_WINDOW_TITLE) - } - } -} +import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper fun FlickerTestParameter.imeLayerBecomesVisible() { assertLayers { - this.isInvisible(IME_WINDOW_TITLE) + this.isInvisible(WindowManagerStateHelper.IME_COMPONENT) .then() - .isVisible(IME_WINDOW_TITLE) + .isVisible(WindowManagerStateHelper.IME_COMPONENT) } } fun FlickerTestParameter.imeLayerBecomesInvisible() { assertLayers { - this.isVisible(IME_WINDOW_TITLE) + this.isVisible(WindowManagerStateHelper.IME_COMPONENT) .then() - .isInvisible(IME_WINDOW_TITLE) - } -} - -fun FlickerTestParameter.imeAppLayerIsAlwaysVisible(testApp: IAppHelper) { - assertLayers { - this.isVisible(testApp.getPackage()) - } -} - -fun FlickerTestParameter.imeAppWindowIsAlwaysVisible(testApp: IAppHelper) { - assertWm { - this.showsAppWindowOnTop(testApp.getPackage()) + .isInvisible(WindowManagerStateHelper.IME_COMPONENT) } } fun FlickerTestParameter.imeWindowIsAlwaysVisible(rotatesScreen: Boolean = false) { if (rotatesScreen) { assertWm { - this.showsNonAppWindow(IME_WINDOW_TITLE) + this.isNonAppWindowVisible(WindowManagerStateHelper.IME_COMPONENT) .then() - .hidesNonAppWindow(IME_WINDOW_TITLE) + .isNonAppWindowInvisible(WindowManagerStateHelper.IME_COMPONENT) .then() - .showsNonAppWindow(IME_WINDOW_TITLE) + .isNonAppWindowVisible(WindowManagerStateHelper.IME_COMPONENT) } } else { assertWm { - this.showsNonAppWindow(IME_WINDOW_TITLE) + this.isNonAppWindowVisible(WindowManagerStateHelper.IME_COMPONENT) } } } fun FlickerTestParameter.imeWindowBecomesVisible() { assertWm { - this.hidesNonAppWindow(IME_WINDOW_TITLE) + this.isNonAppWindowInvisible(WindowManagerStateHelper.IME_COMPONENT) .then() - .showsNonAppWindow(IME_WINDOW_TITLE) + .isNonAppWindowVisible(WindowManagerStateHelper.IME_COMPONENT) } } fun FlickerTestParameter.imeWindowBecomesInvisible() { assertWm { - this.showsNonAppWindow(IME_WINDOW_TITLE) + this.isNonAppWindowVisible(WindowManagerStateHelper.IME_COMPONENT) .then() - .hidesNonAppWindow(IME_WINDOW_TITLE) + .isNonAppWindowInvisible(WindowManagerStateHelper.IME_COMPONENT) } } - -fun FlickerTestParameter.imeAppWindowIsAlwaysVisible( - testApp: IAppHelper, - rotatesScreen: Boolean = false -) { - if (rotatesScreen) { - assertWm { - this.showsAppWindow(testApp.getPackage()) - .then() - .hidesAppWindow(testApp.getPackage()) - .then() - .showsAppWindow(testApp.getPackage()) - } - } else { - assertWm { - this.showsAppWindow(testApp.getPackage()) - } - } -} - -fun FlickerTestParameter.imeAppWindowBecomesVisible(windowName: String) { - assertWm { - this.hidesAppWindow(windowName) - .then() - .showsAppWindow(windowName) - } -} - -fun FlickerTestParameter.imeAppWindowBecomesInvisible(testApp: IAppHelper) { - assertWm { - this.showsAppWindowOnTop(testApp.getPackage()) - .then() - .appWindowNotOnTop(testApp.getPackage()) - } -} - -fun FlickerTestParameter.imeAppLayerBecomesInvisible(testApp: IAppHelper) { - assertLayers { - this.isVisible(testApp.getPackage()) - .then() - .isInvisible(testApp.getPackage()) - } -}
\ No newline at end of file diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/OpenImeWindowTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/OpenImeWindowTest.kt index cae1b16c1c8c..f35a180e1ad6 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/OpenImeWindowTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/OpenImeWindowTest.kt @@ -28,16 +28,15 @@ import com.android.server.wm.flicker.FlickerTestParameter import com.android.server.wm.flicker.FlickerTestParameterFactory import com.android.server.wm.flicker.annotation.Group2 import com.android.server.wm.flicker.helpers.ImeAppHelper -import com.android.server.wm.flicker.navBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.navBarLayerIsVisible import com.android.server.wm.flicker.navBarLayerRotatesAndScales -import com.android.server.wm.flicker.navBarWindowIsAlwaysVisible -import com.android.server.wm.flicker.noUncoveredRegions -import com.android.server.wm.flicker.appWindowAlwaysVisibleOnTop +import com.android.server.wm.flicker.navBarWindowIsVisible +import com.android.server.wm.flicker.entireScreenCovered import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.server.wm.flicker.startRotation -import com.android.server.wm.flicker.statusBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.statusBarLayerIsVisible import com.android.server.wm.flicker.statusBarLayerRotatesScales -import com.android.server.wm.flicker.statusBarWindowIsAlwaysVisible +import com.android.server.wm.flicker.statusBarWindowIsVisible import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith @@ -81,11 +80,11 @@ class OpenImeWindowTest(private val testSpec: FlickerTestParameter) { @Presubmit @Test - fun navBarWindowIsAlwaysVisible() = testSpec.navBarWindowIsAlwaysVisible() + fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible() @Presubmit @Test - fun statusBarWindowIsAlwaysVisible() = testSpec.statusBarWindowIsAlwaysVisible() + fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible() @Presubmit @Test @@ -93,19 +92,23 @@ class OpenImeWindowTest(private val testSpec: FlickerTestParameter) { @Presubmit @Test - fun appWindowAlwaysVisibleOnTop() = testSpec.appWindowAlwaysVisibleOnTop(testApp.`package`) + fun appWindowAlwaysVisibleOnTop() { + testSpec.assertWm { + this.isAppWindowOnTop(testApp.component) + } + } @Presubmit @Test - fun navBarLayerIsAlwaysVisible() = testSpec.navBarLayerIsAlwaysVisible() + fun navBarLayerIsVisible() = testSpec.navBarLayerIsVisible() @Presubmit @Test - fun statusBarLayerIsAlwaysVisible() = testSpec.statusBarLayerIsAlwaysVisible() + fun statusBarLayerIsVisible() = testSpec.statusBarLayerIsVisible() @Presubmit @Test - fun noUncoveredRegions() = testSpec.noUncoveredRegions(testSpec.config.startRotation) + fun entireScreenCovered() = testSpec.entireScreenCovered(testSpec.config.startRotation) @Presubmit @Test @@ -115,7 +118,7 @@ class OpenImeWindowTest(private val testSpec: FlickerTestParameter) { @Test fun layerAlwaysVisible() { testSpec.assertLayers { - this.isVisible(testApp.`package`) + this.isVisible(testApp.component) } } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ReOpenImeWindowTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ReOpenImeWindowTest.kt index b7673d5b0107..3bcf793e9071 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ReOpenImeWindowTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ReOpenImeWindowTest.kt @@ -17,6 +17,7 @@ package com.android.server.wm.flicker.ime import android.app.Instrumentation +import android.content.ComponentName import android.platform.test.annotations.Presubmit import android.view.Surface import android.view.WindowManagerPolicyConstants @@ -26,23 +27,22 @@ import com.android.server.wm.flicker.FlickerBuilderProvider 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.LAUNCHER_COMPONENT import com.android.server.wm.flicker.annotation.Group2 import com.android.server.wm.flicker.helpers.ImeAppAutoFocusHelper import com.android.server.wm.flicker.helpers.reopenAppFromOverview import com.android.server.wm.flicker.helpers.setRotation -import com.android.server.wm.flicker.navBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.navBarLayerIsVisible import com.android.server.wm.flicker.navBarLayerRotatesAndScales -import com.android.server.wm.flicker.navBarWindowIsAlwaysVisible -import com.android.server.wm.flicker.launcherWindowBecomesInvisible -import com.android.server.wm.flicker.appLayerReplacesLauncher +import com.android.server.wm.flicker.navBarWindowIsVisible import com.android.server.wm.flicker.dsl.FlickerBuilder -import com.android.server.wm.flicker.noUncoveredRegions +import com.android.server.wm.flicker.entireScreenCovered import com.android.server.wm.flicker.startRotation import com.android.server.wm.flicker.endRotation -import com.android.server.wm.flicker.statusBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.statusBarLayerIsVisible import com.android.server.wm.flicker.statusBarLayerRotatesScales -import com.android.server.wm.flicker.statusBarWindowIsAlwaysVisible -import com.android.server.wm.flicker.testapp.ActivityOptions +import com.android.server.wm.flicker.statusBarWindowIsVisible +import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith @@ -61,7 +61,6 @@ import org.junit.runners.Parameterized class ReOpenImeWindowTest(private val testSpec: FlickerTestParameter) { private val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation() private val testApp = ImeAppAutoFocusHelper(instrumentation, testSpec.config.startRotation) - private val testAppComponentName = ActivityOptions.IME_ACTIVITY_AUTO_FOCUS_COMPONENT_NAME @FlickerBuilderProvider fun buildFlicker(): FlickerBuilder { @@ -73,14 +72,14 @@ class ReOpenImeWindowTest(private val testSpec: FlickerTestParameter) { } eachRun { device.pressRecentApps() - wmHelper.waitImeWindowGone() + wmHelper.waitImeGone() wmHelper.waitForAppTransitionIdle() this.setRotation(testSpec.config.startRotation) } } transitions { device.reopenAppFromOverview(wmHelper) - wmHelper.waitImeWindowShown() + wmHelper.waitImeShown() } teardown { test { @@ -92,23 +91,34 @@ class ReOpenImeWindowTest(private val testSpec: FlickerTestParameter) { @Presubmit @Test - fun navBarWindowIsAlwaysVisible() = testSpec.navBarWindowIsAlwaysVisible() + fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible() @Presubmit @Test - fun statusBarWindowIsAlwaysVisible() = testSpec.statusBarWindowIsAlwaysVisible() + fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible() @Presubmit @Test fun visibleWindowsShownMoreThanOneConsecutiveEntry() { + val component = ComponentName("", "RecentTaskScreenshotSurface") testSpec.assertWm { - this.visibleWindowsShownMoreThanOneConsecutiveEntry() + this.visibleWindowsShownMoreThanOneConsecutiveEntry( + ignoreWindows = listOf(WindowManagerStateHelper.SPLASH_SCREEN_COMPONENT, + WindowManagerStateHelper.SNAPSHOT_COMPONENT, + component) + ) } } @Presubmit @Test - fun launcherWindowBecomesInvisible() = testSpec.launcherWindowBecomesInvisible() + fun launcherWindowBecomesInvisible() { + testSpec.assertWm { + this.isAppWindowVisible(LAUNCHER_COMPONENT) + .then() + .isAppWindowInvisible(LAUNCHER_COMPONENT) + } + } @Presubmit @Test @@ -116,30 +126,57 @@ class ReOpenImeWindowTest(private val testSpec: FlickerTestParameter) { @Presubmit @Test - fun imeAppWindowIsAlwaysVisible() = testSpec.imeAppWindowIsAlwaysVisible(testApp, true) + fun imeAppWindowVisibility() { + // the app starts visible in live tile, then becomes invisible during animation and + // is again launched. Since we log 1x per frame, sometimes the activity visibility and + // the app visibility are updated together, sometimes not, thus ignore activity check + // at the start + testSpec.assertWm { + this.isAppWindowVisible(testApp.component, ignoreActivity = true) + .then() + .isAppWindowInvisible(testApp.component, ignoreActivity = true) + .then() + .isAppWindowVisible(testApp.component) + } + } @Presubmit @Test // During testing the launcher is always in portrait mode - fun noUncoveredRegions() = testSpec.noUncoveredRegions(testSpec.config.startRotation, + fun entireScreenCovered() = testSpec.entireScreenCovered(testSpec.config.startRotation, testSpec.config.endRotation) @Presubmit @Test - fun navBarLayerIsAlwaysVisible() = testSpec.navBarLayerIsAlwaysVisible() + fun navBarLayerIsVisible() = testSpec.navBarLayerIsVisible() @Presubmit @Test - fun statusBarLayerIsAlwaysVisible() = testSpec.statusBarLayerIsAlwaysVisible() + fun statusBarLayerIsVisible() = testSpec.statusBarLayerIsVisible() @Presubmit @Test - fun imeLayerIsAlwaysVisible() = testSpec.imeLayerIsAlwaysVisible(true) + fun imeLayerIsBecomesVisible() { + testSpec.assertLayers { + this.isVisible(WindowManagerStateHelper.IME_COMPONENT) + .then() + .isInvisible(WindowManagerStateHelper.IME_COMPONENT) + .then() + .isVisible(WindowManagerStateHelper.IME_COMPONENT) + } + } @Presubmit @Test - fun appLayerReplacesLauncher() = - testSpec.appLayerReplacesLauncher(testAppComponentName.className) + fun appLayerReplacesLauncher() { + testSpec.assertLayers { + this.isVisible(LAUNCHER_COMPONENT) + .then() + .isVisible(WindowManagerStateHelper.SNAPSHOT_COMPONENT, isOptional = true) + .then() + .isVisible(testApp.component) + } + } @Presubmit @Test @@ -156,8 +193,14 @@ class ReOpenImeWindowTest(private val testSpec: FlickerTestParameter) { @Presubmit @Test fun visibleLayersShownMoreThanOneConsecutiveEntry() { + // depends on how much of the animation transactions are sent to SF at once + // sometimes this layer appears for 2-3 frames, sometimes for only 1 + val recentTaskComponent = ComponentName("", "RecentTaskScreenshotSurface") testSpec.assertLayers { - this.visibleLayersShownMoreThanOneConsecutiveEntry() + this.visibleLayersShownMoreThanOneConsecutiveEntry( + listOf(WindowManagerStateHelper.SPLASH_SCREEN_COMPONENT, + WindowManagerStateHelper.SNAPSHOT_COMPONENT, recentTaskComponent) + ) } } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/SwitchImeWindowsFromGestureNavTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/SwitchImeWindowsFromGestureNavTest.kt index 0cae37c8d5ab..f9dd88e8cb29 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/SwitchImeWindowsFromGestureNavTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/SwitchImeWindowsFromGestureNavTest.kt @@ -17,27 +17,26 @@ package com.android.server.wm.flicker.ime import android.app.Instrumentation +import android.content.ComponentName import android.platform.test.annotations.Presubmit +import android.view.Surface import android.view.WindowManagerPolicyConstants -import androidx.test.filters.FlakyTest import androidx.test.filters.RequiresDevice import androidx.test.platform.app.InstrumentationRegistry - import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.server.wm.flicker.FlickerBuilderProvider 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.Group2 -import com.android.server.wm.flicker.helpers.ImeAppHelper +import com.android.server.wm.flicker.helpers.ImeAppAutoFocusHelper import com.android.server.wm.flicker.helpers.SimpleAppHelper import com.android.server.wm.flicker.helpers.WindowUtils import com.android.server.wm.flicker.helpers.setRotation -import com.android.server.wm.flicker.navBarWindowIsAlwaysVisible -import com.android.server.wm.flicker.navBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.navBarWindowIsVisible import com.android.server.wm.flicker.startRotation -import com.android.server.wm.flicker.statusBarWindowIsAlwaysVisible -import com.android.server.wm.flicker.statusBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.statusBarWindowIsVisible +import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper import org.junit.FixMethodOrder import org.junit.Test @@ -54,10 +53,11 @@ import org.junit.runners.Parameterized @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) @Group2 +@Presubmit class SwitchImeWindowsFromGestureNavTest(private val testSpec: FlickerTestParameter) { private val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation() private val testApp = SimpleAppHelper(instrumentation) - private val imeTestApp = ImeAppHelper(instrumentation) + private val imeTestApp = ImeAppAutoFocusHelper(instrumentation, testSpec.config.startRotation) @FlickerBuilderProvider fun buildFlicker(): FlickerBuilder { @@ -66,7 +66,13 @@ class SwitchImeWindowsFromGestureNavTest(private val testSpec: FlickerTestParame eachRun { this.setRotation(testSpec.config.startRotation) testApp.launchViaIntent(wmHelper) + wmHelper.waitForFullScreenApp(testApp.component) + wmHelper.waitForAppTransitionIdle() + imeTestApp.launchViaIntent(wmHelper) + wmHelper.waitForFullScreenApp(testApp.component) + wmHelper.waitForAppTransitionIdle() + imeTestApp.openIME(device, wmHelper) } } @@ -74,57 +80,86 @@ class SwitchImeWindowsFromGestureNavTest(private val testSpec: FlickerTestParame eachRun { device.pressHome() wmHelper.waitForHomeActivityVisible() - } - test { - imeTestApp.exit(wmHelper) + testApp.exit() + imeTestApp.exit() } } transitions { // [Step1]: Swipe right from imeTestApp to testApp task + createTag(TAG_IME_VISIBLE) val displayBounds = WindowUtils.getDisplayBounds(testSpec.config.startRotation) - val displayCenterX = displayBounds.bounds.width() / 2 - device.swipe(displayCenterX, displayBounds.bounds.height(), - displayBounds.bounds.width(), displayBounds.bounds.height(), 20) + device.swipe(0, displayBounds.bounds.height(), + displayBounds.bounds.width(), displayBounds.bounds.height(), 50) + wmHelper.waitForFullScreenApp(testApp.component) + wmHelper.waitForAppTransitionIdle() + createTag(TAG_IME_INVISIBLE) } transitions { // [Step2]: Swipe left to back to imeTestApp task val displayBounds = WindowUtils.getDisplayBounds(testSpec.config.startRotation) - val displayCenterX = displayBounds.bounds.width() / 2 device.swipe(displayBounds.bounds.width(), displayBounds.bounds.height(), - displayCenterX, displayBounds.bounds.height(), 20) + 0, displayBounds.bounds.height(), 50) wmHelper.waitForFullScreenApp(imeTestApp.component) } } } - @FlakyTest @Test - fun imeAppWindowIsAlwaysVisible() = testSpec.imeAppWindowIsAlwaysVisible(imeTestApp) + fun imeAppWindowVisibility() { + val component = ComponentName(imeTestApp.`package`, "") + testSpec.assertWm { + this.isAppWindowOnTop(component) + .then() + .isAppWindowVisible(component, ignoreActivity = true) + } + } - @FlakyTest @Test - fun imeLayerBecomesVisible() = testSpec.imeLayerBecomesVisible() + fun navBarLayerIsVisibleAroundSwitching() { + testSpec.assertLayersStart { + isVisible(WindowManagerStateHelper.NAV_BAR_COMPONENT) + } + testSpec.assertLayersEnd { + isVisible(WindowManagerStateHelper.NAV_BAR_COMPONENT) + } + } - @FlakyTest @Test - fun imeLayerBecomesInvisible() = testSpec.imeLayerBecomesInvisible() + fun statusBarLayerIsVisibleAroundSwitching() { + testSpec.assertLayersStart { + isVisible(WindowManagerStateHelper.STATUS_BAR_COMPONENT) + } + testSpec.assertLayersEnd { + isVisible(WindowManagerStateHelper.STATUS_BAR_COMPONENT) + } + } - @Presubmit @Test - fun navBarWindowIsAlwaysVisible() = testSpec.navBarWindowIsAlwaysVisible() + fun imeLayerIsVisibleWhenSwitchingToImeApp() { + testSpec.assertLayersStart { + isVisible(WindowManagerStateHelper.IME_COMPONENT) + } + testSpec.assertLayersTag(TAG_IME_VISIBLE) { + isVisible(WindowManagerStateHelper.IME_COMPONENT) + } + testSpec.assertLayersEnd { + isVisible(WindowManagerStateHelper.IME_COMPONENT) + } + } - @FlakyTest @Test - fun navBarLayerIsAlwaysVisible() = testSpec.navBarLayerIsAlwaysVisible() + fun imeLayerIsInvisibleWhenSwitchingToTestApp() { + testSpec.assertLayersTag(TAG_IME_INVISIBLE) { + isInvisible(WindowManagerStateHelper.IME_COMPONENT) + } + } - @Presubmit @Test - fun statusBarWindowIsAlwaysVisible() = testSpec.statusBarWindowIsAlwaysVisible() + fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible() - @FlakyTest @Test - fun statusBarLayerIsAlwaysVisible() = testSpec.statusBarLayerIsAlwaysVisible() + fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible() companion object { @Parameterized.Parameters(name = "{0}") @@ -134,10 +169,13 @@ class SwitchImeWindowsFromGestureNavTest(private val testSpec: FlickerTestParame .getConfigNonRotationTests( repetitions = 3, supportedNavigationModes = listOf( - WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON_OVERLAY, WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY - ) + ), + supportedRotations = listOf(Surface.ROTATION_0) ) } + + private const val TAG_IME_VISIBLE = "imeVisible" + private const val TAG_IME_INVISIBLE = "imeInVisible" } } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/CommonAssertions.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/CommonAssertions.kt deleted file mode 100644 index 01e34d9f8f97..000000000000 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/CommonAssertions.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker.launch - -import android.platform.helpers.IAppHelper -import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.HOME_WINDOW_TITLE - -fun FlickerTestParameter.appWindowReplacesLauncherAsTopWindow(testApp: IAppHelper) { - assertWm { - this.showsAppWindowOnTop(*HOME_WINDOW_TITLE) - .then() - .showsAppWindowOnTop("Snapshot", testApp.getPackage()) - } -}
\ No newline at end of file diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppColdTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppColdTest.kt index 9ff0bdfe66ba..e6dc8523acbf 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppColdTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppColdTest.kt @@ -64,35 +64,17 @@ class OpenAppColdTest(testSpec: FlickerTestParameter) : OpenAppTransition(testSp @FlakyTest @Test - override fun visibleLayersShownMoreThanOneConsecutiveEntry() { - super.visibleLayersShownMoreThanOneConsecutiveEntry() - } - - @FlakyTest - @Test - override fun navBarLayerIsAlwaysVisible() { - super.navBarLayerIsAlwaysVisible() - } - - @FlakyTest - @Test override fun navBarLayerRotatesAndScales() { super.navBarLayerRotatesAndScales() } - @FlakyTest - @Test - override fun statusBarLayerIsAlwaysVisible() { - super.statusBarLayerIsAlwaysVisible() - } - - @FlakyTest + @FlakyTest(bugId = 192721431) @Test override fun appLayerReplacesLauncher() { super.appLayerReplacesLauncher() } - @FlakyTest + @FlakyTest(bugId = 192721431) @Test override fun appWindowReplacesLauncherAsTopWindow() { super.appWindowReplacesLauncherAsTopWindow() diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromOverviewTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromOverviewTest.kt index b073a7ca1495..7833e2f25eec 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromOverviewTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromOverviewTest.kt @@ -65,34 +65,10 @@ class OpenAppFromOverviewTest(testSpec: FlickerTestParameter) : OpenAppTransitio @FlakyTest @Test - override fun navBarLayerIsAlwaysVisible() { - super.navBarLayerIsAlwaysVisible() - } - - @FlakyTest - @Test - override fun statusBarLayerIsAlwaysVisible() { - super.statusBarLayerIsAlwaysVisible() - } - - @FlakyTest - @Test override fun navBarLayerRotatesAndScales() { super.navBarLayerRotatesAndScales() } - @FlakyTest - @Test - override fun statusBarLayerRotatesScales() { - super.statusBarLayerRotatesScales() - } - - @FlakyTest - @Test - override fun visibleLayersShownMoreThanOneConsecutiveEntry() { - super.visibleLayersShownMoreThanOneConsecutiveEntry() - } - companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppTransition.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppTransition.kt index b304d5f999df..860a5aed13fd 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppTransition.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppTransition.kt @@ -22,24 +22,24 @@ import android.view.Surface import androidx.test.platform.app.InstrumentationRegistry import com.android.server.wm.flicker.FlickerBuilderProvider import com.android.server.wm.flicker.FlickerTestParameter -import com.android.server.wm.flicker.appLayerReplacesLauncher +import com.android.server.wm.flicker.LAUNCHER_COMPONENT import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.server.wm.flicker.endRotation -import com.android.server.wm.flicker.focusChanges +import com.android.server.wm.flicker.entireScreenCovered import com.android.server.wm.flicker.helpers.SimpleAppHelper import com.android.server.wm.flicker.helpers.StandardAppHelper import com.android.server.wm.flicker.helpers.setRotation import com.android.server.wm.flicker.helpers.wakeUpAndGoToHomeScreen -import com.android.server.wm.flicker.navBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.navBarLayerIsVisible import com.android.server.wm.flicker.navBarLayerRotatesAndScales -import com.android.server.wm.flicker.navBarWindowIsAlwaysVisible -import com.android.server.wm.flicker.noUncoveredRegions +import com.android.server.wm.flicker.navBarWindowIsVisible import com.android.server.wm.flicker.repetitions +import com.android.server.wm.flicker.replacesLayer import com.android.server.wm.flicker.startRotation -import com.android.server.wm.flicker.statusBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.statusBarLayerIsVisible import com.android.server.wm.flicker.statusBarLayerRotatesScales -import com.android.server.wm.flicker.statusBarWindowIsAlwaysVisible -import com.android.server.wm.flicker.launcherWindowBecomesInvisible +import com.android.server.wm.flicker.statusBarWindowIsVisible +import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper.Companion.SNAPSHOT_COMPONENT import org.junit.Test abstract class OpenAppTransition(protected val testSpec: FlickerTestParameter) { @@ -71,14 +71,14 @@ abstract class OpenAppTransition(protected val testSpec: FlickerTestParameter) { @Presubmit @Test - open fun navBarWindowIsAlwaysVisible() { - testSpec.navBarWindowIsAlwaysVisible() + open fun navBarWindowIsVisible() { + testSpec.navBarWindowIsVisible() } @Presubmit @Test - open fun navBarLayerIsAlwaysVisible() { - testSpec.navBarLayerIsAlwaysVisible(rotatesScreen = testSpec.isRotated) + open fun navBarLayerIsVisible() { + testSpec.navBarLayerIsVisible() } @Presubmit @@ -89,14 +89,14 @@ abstract class OpenAppTransition(protected val testSpec: FlickerTestParameter) { @Presubmit @Test - open fun statusBarWindowIsAlwaysVisible() { - testSpec.statusBarWindowIsAlwaysVisible() + open fun statusBarWindowIsVisible() { + testSpec.statusBarWindowIsVisible() } @Presubmit @Test - open fun statusBarLayerIsAlwaysVisible() { - testSpec.statusBarLayerIsAlwaysVisible(rotatesScreen = testSpec.isRotated) + open fun statusBarLayerIsVisible() { + testSpec.statusBarLayerIsVisible() } @Presubmit @@ -124,31 +124,43 @@ abstract class OpenAppTransition(protected val testSpec: FlickerTestParameter) { @Presubmit @Test // During testing the launcher is always in portrait mode - open fun noUncoveredRegions() { - testSpec.noUncoveredRegions(Surface.ROTATION_0, testSpec.config.endRotation) + open fun entireScreenCovered() { + testSpec.entireScreenCovered(Surface.ROTATION_0, testSpec.config.endRotation) } @Presubmit @Test open fun focusChanges() { - testSpec.focusChanges("NexusLauncherActivity", testApp.`package`) + testSpec.assertEventLog { + this.focusChanges("NexusLauncherActivity", testApp.`package`) + } } @Presubmit @Test open fun appLayerReplacesLauncher() { - testSpec.appLayerReplacesLauncher(testApp.`package`) + testSpec.replacesLayer(LAUNCHER_COMPONENT, testApp.component) } @Presubmit @Test open fun appWindowReplacesLauncherAsTopWindow() { - testSpec.appWindowReplacesLauncherAsTopWindow(testApp) + testSpec.assertWm { + this.isAppWindowOnTop(LAUNCHER_COMPONENT) + .then() + .isAppWindowOnTop(SNAPSHOT_COMPONENT, isOptional = true) + .then() + .isAppWindowOnTop(testApp.component) + } } @Presubmit @Test open fun launcherWindowBecomesInvisible() { - testSpec.launcherWindowBecomesInvisible() + testSpec.assertWm { + this.isAppWindowVisible(LAUNCHER_COMPONENT) + .then() + .isAppWindowInvisible(LAUNCHER_COMPONENT) + } } }
\ No newline at end of file diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppWarmTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppWarmTest.kt index e2705c764917..b509c61d2aba 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppWarmTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppWarmTest.kt @@ -67,15 +67,7 @@ class OpenAppWarmTest(testSpec: FlickerTestParameter) : OpenAppTransition(testSp @FlakyTest @Test - override fun navBarLayerIsAlwaysVisible() { - super.navBarLayerIsAlwaysVisible() - } - - @FlakyTest - @Test - override fun navBarLayerRotatesAndScales() { - super.navBarLayerRotatesAndScales() - } + override fun navBarLayerRotatesAndScales() = super.navBarLayerRotatesAndScales() companion object { @Parameterized.Parameters(name = "{0}") diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/ChangeAppRotationTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/ChangeAppRotationTest.kt index 69e8a8d08e58..73986b6def8f 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/ChangeAppRotationTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/ChangeAppRotationTest.kt @@ -25,7 +25,13 @@ 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.endRotation import com.android.server.wm.flicker.helpers.SimpleAppHelper +import com.android.server.wm.flicker.startRotation +import com.android.server.wm.flicker.statusBarLayerIsVisible +import com.android.server.wm.flicker.statusBarLayerRotatesScales +import com.android.server.wm.flicker.statusBarWindowIsVisible +import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper.Companion.ROTATION_COMPONENT import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith @@ -61,39 +67,62 @@ class ChangeAppRotationTest( super.focusDoesNotChange() } - @Postsubmit + @Presubmit @Test fun screenshotLayerBecomesInvisible() { testSpec.assertLayers { - this.isVisible(testApp.getPackage()) + this.isVisible(testApp.component) .then() - .isVisible(SCREENSHOT_LAYER) + .isVisible(ROTATION_COMPONENT) .then() - .isVisible(testApp.getPackage()) + .isVisible(testApp.component) } } + @Presubmit + @Test + fun statusBarWindowIsVisible() { + testSpec.statusBarWindowIsVisible() + } + @Postsubmit @Test - override fun statusBarLayerRotatesScales() { - super.statusBarLayerRotatesScales() + fun statusBarLayerIsVisible() { + testSpec.statusBarLayerIsVisible() + } + + @Presubmit + @Test + fun statusBarLayerRotatesScales() { + testSpec.statusBarLayerRotatesScales( + testSpec.config.startRotation, testSpec.config.endRotation) } @Presubmit @Test - override fun navBarWindowIsAlwaysVisible() { - super.navBarWindowIsAlwaysVisible() + override fun navBarWindowIsVisible() { + super.navBarWindowIsVisible() + } + + @Postsubmit + @Test + override fun navBarLayerIsVisible() { + super.navBarLayerIsVisible() } @FlakyTest @Test - override fun statusBarLayerIsAlwaysVisible() { - super.statusBarLayerIsAlwaysVisible() + override fun navBarLayerRotatesAndScales() { + super.navBarLayerRotatesAndScales() } - companion object { - private const val SCREENSHOT_LAYER = "RotationLayer" + @Postsubmit + @Test + override fun visibleLayersShownMoreThanOneConsecutiveEntry() { + super.visibleLayersShownMoreThanOneConsecutiveEntry() + } + companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic fun getParams(): Collection<FlickerTestParameter> { diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/RotationTransition.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/RotationTransition.kt index 4b888cd5aad0..2b0b3c23a0b2 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/RotationTransition.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/RotationTransition.kt @@ -17,25 +17,21 @@ package com.android.server.wm.flicker.rotation import android.app.Instrumentation +import android.content.ComponentName import android.platform.test.annotations.Presubmit -import androidx.test.filters.FlakyTest import androidx.test.platform.app.InstrumentationRegistry 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.endRotation -import com.android.server.wm.flicker.focusDoesNotChange import com.android.server.wm.flicker.helpers.StandardAppHelper import com.android.server.wm.flicker.helpers.WindowUtils import com.android.server.wm.flicker.helpers.setRotation -import com.android.server.wm.flicker.navBarLayerIsAlwaysVisible +import com.android.server.wm.flicker.navBarLayerIsVisible import com.android.server.wm.flicker.navBarLayerRotatesAndScales -import com.android.server.wm.flicker.navBarWindowIsAlwaysVisible -import com.android.server.wm.flicker.noUncoveredRegions +import com.android.server.wm.flicker.navBarWindowIsVisible +import com.android.server.wm.flicker.entireScreenCovered import com.android.server.wm.flicker.startRotation -import com.android.server.wm.flicker.statusBarLayerIsAlwaysVisible -import com.android.server.wm.flicker.statusBarLayerRotatesScales -import com.android.server.wm.flicker.statusBarWindowIsAlwaysVisible import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper import org.junit.Test @@ -69,19 +65,19 @@ abstract class RotationTransition(protected val testSpec: FlickerTestParameter) } } - @FlakyTest + @Presubmit @Test - open fun navBarWindowIsAlwaysVisible() { - testSpec.navBarWindowIsAlwaysVisible() + open fun navBarWindowIsVisible() { + testSpec.navBarWindowIsVisible() } - @FlakyTest + @Presubmit @Test - open fun navBarLayerIsAlwaysVisible() { - testSpec.navBarLayerIsAlwaysVisible(rotatesScreen = true) + open fun navBarLayerIsVisible() { + testSpec.navBarLayerIsVisible() } - @FlakyTest + @Presubmit @Test open fun navBarLayerRotatesAndScales() { testSpec.navBarLayerRotatesAndScales( @@ -90,31 +86,12 @@ abstract class RotationTransition(protected val testSpec: FlickerTestParameter) @Presubmit @Test - open fun statusBarWindowIsAlwaysVisible() { - testSpec.statusBarWindowIsAlwaysVisible() - } - - @FlakyTest - @Test - open fun statusBarLayerIsAlwaysVisible() { - testSpec.statusBarLayerIsAlwaysVisible(rotatesScreen = true) - } - - @FlakyTest - @Test - open fun statusBarLayerRotatesScales() { - testSpec.statusBarLayerRotatesScales( - testSpec.config.startRotation, testSpec.config.endRotation) - } - - @FlakyTest - @Test open fun visibleLayersShownMoreThanOneConsecutiveEntry() { testSpec.assertLayers { this.visibleLayersShownMoreThanOneConsecutiveEntry( - ignoreLayers = listOf(WindowManagerStateHelper.SPLASH_SCREEN_NAME, - WindowManagerStateHelper.SNAPSHOT_WINDOW_NAME, - "SecondaryHomeHandle" + ignoreLayers = listOf(WindowManagerStateHelper.SPLASH_SCREEN_COMPONENT, + WindowManagerStateHelper.SNAPSHOT_COMPONENT, + ComponentName("", "SecondaryHomeHandle") ) ) } @@ -130,22 +107,24 @@ abstract class RotationTransition(protected val testSpec: FlickerTestParameter) @Presubmit @Test - open fun noUncoveredRegions() { - testSpec.noUncoveredRegions(testSpec.config.startRotation, + open fun entireScreenCovered() { + testSpec.entireScreenCovered(testSpec.config.startRotation, testSpec.config.endRotation, allStates = false) } @Presubmit @Test open fun focusDoesNotChange() { - testSpec.focusDoesNotChange() + testSpec.assertEventLog { + this.focusDoesNotChange() + } } @Presubmit @Test open fun appLayerRotates_StartingPos() { testSpec.assertLayersStart { - this.visibleRegion(testApp.getPackage()).coversExactly(startingPos) + this.visibleRegion(testApp.component).coversExactly(startingPos) } } @@ -153,7 +132,7 @@ abstract class RotationTransition(protected val testSpec: FlickerTestParameter) @Test open fun appLayerRotates_EndingPos() { testSpec.assertLayersEnd { - this.visibleRegion(testApp.getPackage()).coversExactly(endingPos) + this.visibleRegion(testApp.component).coversExactly(endingPos) } } }
\ No newline at end of file diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/SeamlessAppRotationTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/SeamlessAppRotationTest.kt index b153bece1133..b97b97768362 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/SeamlessAppRotationTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/SeamlessAppRotationTest.kt @@ -18,6 +18,7 @@ package com.android.server.wm.flicker.rotation import android.platform.test.annotations.Postsubmit import android.platform.test.annotations.Presubmit +import android.view.WindowManager import androidx.test.filters.FlakyTest import androidx.test.filters.RequiresDevice import com.android.server.wm.flicker.FlickerParametersRunnerFactory @@ -27,6 +28,7 @@ import com.android.server.wm.flicker.annotation.Group3 import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.server.wm.flicker.helpers.SeamlessRotationAppHelper import com.android.server.wm.flicker.testapp.ActivityOptions +import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith @@ -60,42 +62,91 @@ class SeamlessAppRotationTest( } } - @FlakyTest(bugId = 140855415) + @Presubmit @Test - override fun statusBarWindowIsAlwaysVisible() { - super.statusBarWindowIsAlwaysVisible() + fun appWindowFullScreen() { + testSpec.assertWm { + this.invoke("isFullScreen") { + val appWindow = it.windowState(testApp.`package`) + val flags = appWindow.windowState?.attributes?.flags ?: 0 + appWindow.verify("isFullScreen") + .that(flags.and(WindowManager.LayoutParams.FLAG_FULLSCREEN)) + .isGreaterThan(0) + } + } } - @FlakyTest(bugId = 140855415) + @Presubmit @Test - override fun statusBarLayerIsAlwaysVisible() { - super.statusBarLayerIsAlwaysVisible() + fun appWindowSeamlessRotation() { + testSpec.assertWm { + this.invoke("isRotationSeamless") { + val appWindow = it.windowState(testApp.`package`) + val rotationAnimation = appWindow.windowState?.attributes?.rotationAnimation ?: 0 + appWindow.verify("isRotationSeamless") + .that(rotationAnimation + .and(WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS)) + .isGreaterThan(0) + } + } } @Presubmit @Test fun appLayerAlwaysVisible() { testSpec.assertLayers { - isVisible(testApp.`package`) + isVisible(testApp.component) } } - @FlakyTest(bugId = 185400889) + @Postsubmit @Test fun appLayerRotates() { testSpec.assertLayers { - this.coversExactly(startingPos, testApp.`package`) + this.coversExactly(startingPos, testApp.component) .then() - .coversExactly(endingPos, testApp.`package`) + .coversExactly(endingPos, testApp.component) } } - @Postsubmit + @Presubmit + @Test + fun statusBarWindowIsAlwaysInvisible() { + testSpec.assertWm { + this.isAboveAppWindowInvisible(WindowManagerStateHelper.STATUS_BAR_COMPONENT) + } + } + + @Presubmit + @Test + fun statusBarLayerIsAlwaysInvisible() { + testSpec.assertLayers { + this.isInvisible(WindowManagerStateHelper.STATUS_BAR_COMPONENT) + } + } + + @Presubmit @Test override fun visibleLayersShownMoreThanOneConsecutiveEntry() { super.visibleLayersShownMoreThanOneConsecutiveEntry() } + @Postsubmit + @Test + override fun navBarWindowIsVisible() { + super.navBarWindowIsVisible() + } + + @Postsubmit + @Test + override fun navBarLayerIsVisible() { + super.navBarLayerIsVisible() + } + + @FlakyTest + @Test + override fun navBarLayerRotatesAndScales() = super.navBarLayerRotatesAndScales() + companion object { private val testFactory = FlickerTestParameterFactory.getInstance() diff --git a/tests/FlickerTests/test-apps/flickerapp/res/layout/activity_ime.xml b/tests/FlickerTests/test-apps/flickerapp/res/layout/activity_ime.xml index 4708cfd48381..c55e7c2720db 100644 --- a/tests/FlickerTests/test-apps/flickerapp/res/layout/activity_ime.xml +++ b/tests/FlickerTests/test-apps/flickerapp/res/layout/activity_ime.xml @@ -23,5 +23,6 @@ <EditText android:id="@+id/plain_text_input" android:layout_height="wrap_content" android:layout_width="match_parent" + android:imeOptions="flagNoExtractUi" android:inputType="text"/> </LinearLayout> |