Add support for Tablets on rotation tests

Moreover, refactor the test to reuse the base test class with general assertions and fix ktlint errors

Bug: 234735502
Test: atest FlickerTests
Change-Id: Ic68201c728aa7e5adcbdf61d6a4ba6a1e428e13d
This commit is contained in:
Nataniel Borges
2022-07-10 16:43:41 +00:00
parent 8e6b425dfb
commit e172dbcc45
3 changed files with 38 additions and 108 deletions

View File

@@ -25,9 +25,6 @@ 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.helpers.SimpleAppHelper
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.common.ComponentMatcher
import org.junit.FixMethodOrder
import org.junit.Test
@@ -126,38 +123,17 @@ class ChangeAppRotationTest(
rotationLayerAppearsAndVanishesAssertion()
}
/**
* Checks that the status bar window is visible and above the app windows in all WM
* trace entries
*/
@Presubmit
@Test
fun statusBarWindowIsVisible() {
testSpec.statusBarWindowIsVisible()
}
/**
* Checks that the status bar layer is visible at the start and end of the transition
*/
@Presubmit
@Test
fun statusBarLayerIsVisible() {
testSpec.statusBarLayerIsVisible()
}
/**
* Checks the position of the status bar at the start and end of the transition
*/
/** {@inheritDoc} */
@FlakyTest(bugId = 206753786)
@Test
fun statusBarLayerRotatesScales() = testSpec.statusBarLayerRotatesScales()
override fun statusBarLayerPositionAtStartAndEnd() =
super.statusBarLayerPositionAtStartAndEnd()
/** {@inheritDoc} */
@FlakyTest
@Test
override fun navBarLayerRotatesAndScales() {
super.navBarLayerRotatesAndScales()
}
override fun navBarLayerPositionAtStartAndEnd() =
super.navBarLayerPositionAtStartAndEnd()
/** {@inheritDoc} */
@FlakyTest

View File

@@ -16,30 +16,23 @@
package com.android.server.wm.flicker.rotation
import android.app.Instrumentation
import android.platform.test.annotations.Presubmit
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.FlickerBuilderProvider
import com.android.server.wm.flicker.BaseTest
import com.android.server.wm.flicker.FlickerTestParameter
import com.android.server.wm.flicker.dsl.FlickerBuilder
import com.android.server.wm.flicker.entireScreenCovered
import com.android.server.wm.flicker.helpers.StandardAppHelper
import com.android.server.wm.flicker.helpers.setRotation
import com.android.server.wm.flicker.navBarLayerIsVisible
import com.android.server.wm.flicker.navBarLayerRotatesAndScales
import com.android.server.wm.flicker.navBarWindowIsVisible
import com.android.server.wm.traces.common.ComponentMatcher
import org.junit.Test
/**
* Base class for app rotation tests
*/
abstract class RotationTransition(protected val testSpec: FlickerTestParameter) {
abstract class RotationTransition(testSpec: FlickerTestParameter) : BaseTest(testSpec) {
protected abstract val testApp: StandardAppHelper
protected val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation()
protected open val transition: FlickerBuilder.() -> Unit = {
/** {@inheritDoc} */
override val transition: FlickerBuilder.() -> Unit = {
setup {
eachRun {
this.setRotation(testSpec.startRotation)
@@ -55,53 +48,14 @@ abstract class RotationTransition(protected val testSpec: FlickerTestParameter)
}
}
/**
* Entry point for the test runner. It will use this method to initialize and cache
* flicker executions
*/
@FlickerBuilderProvider
fun buildFlicker(): FlickerBuilder {
return FlickerBuilder(instrumentation).apply {
transition()
}
}
/**
* Checks that the navigation bar window is visible and above the app windows in all WM
* trace entries
*/
/** {@inheritDoc} */
@Presubmit
@Test
open fun navBarWindowIsVisible() {
testSpec.navBarWindowIsVisible()
}
/**
* Checks that the navigation bar layer is visible at the start and end of the transition
*/
@Presubmit
@Test
open fun navBarLayerIsVisible() {
testSpec.navBarLayerIsVisible()
}
/**
* Checks the position of the navigation bar at the start and end of the transition
*/
@Presubmit
@Test
open fun navBarLayerRotatesAndScales() = testSpec.navBarLayerRotatesAndScales()
/**
* Checks that all layers that are visible on the trace, are visible for at least 2
* consecutive entries.
*/
@Presubmit
@Test
open fun visibleLayersShownMoreThanOneConsecutiveEntry() {
override fun visibleLayersShownMoreThanOneConsecutiveEntry() {
testSpec.assertLayers {
this.visibleLayersShownMoreThanOneConsecutiveEntry(
ignoreLayers = listOf(ComponentMatcher.SPLASH_SCREEN,
ignoreLayers = listOf(
ComponentMatcher.SPLASH_SCREEN,
ComponentMatcher.SNAPSHOT,
ComponentMatcher("", "SecondaryHomeHandle")
)
@@ -109,25 +63,6 @@ abstract class RotationTransition(protected val testSpec: FlickerTestParameter)
}
}
/**
* Checks that all windows that are visible on the trace, are visible for at least 2
* consecutive entries.
*/
@Presubmit
@Test
open fun visibleWindowsShownMoreThanOneConsecutiveEntry() {
testSpec.assertWm {
this.visibleWindowsShownMoreThanOneConsecutiveEntry()
}
}
/**
* Checks that all parts of the screen are covered during the transition
*/
@Presubmit
@Test
open fun entireScreenCovered() = testSpec.entireScreenCovered()
/**
* Checks that [testApp] layer covers the entire screen at the start of the transition
*/

View File

@@ -29,6 +29,7 @@ import com.android.server.wm.flicker.helpers.SeamlessRotationAppHelper
import com.android.server.wm.flicker.testapp.ActivityOptions
import com.android.server.wm.traces.common.ComponentMatcher
import org.junit.FixMethodOrder
import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.MethodSorters
@@ -81,14 +82,18 @@ open class SeamlessAppRotationTest(
) : RotationTransition(testSpec) {
override val testApp = SeamlessRotationAppHelper(instrumentation)
/** {@inheritDoc} */
override val transition: FlickerBuilder.() -> Unit
get() = {
super.transition(this)
setup {
test {
testApp.launchViaIntent(wmHelper,
stringExtras = mapOf(ActivityOptions.EXTRA_STARVE_UI_THREAD
to testSpec.starveUiThread.toString())
testApp.launchViaIntent(
wmHelper,
stringExtras = mapOf(
ActivityOptions.EXTRA_STARVE_UI_THREAD
to testSpec.starveUiThread.toString()
)
)
}
}
@@ -122,8 +127,10 @@ open class SeamlessAppRotationTest(
val appWindow = it.windowState(testApp.`package`)
val rotationAnimation = appWindow.windowState?.attributes?.rotationAnimation ?: 0
appWindow.verify("isRotationSeamless")
.that(rotationAnimation
.and(WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS))
.that(
rotationAnimation
.and(WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS)
)
.isGreaterThan(0)
}
}
@@ -156,6 +163,18 @@ open class SeamlessAppRotationTest(
}
}
/** {@inheritDoc} */
@Ignore("Not applicable to this CUJ. App is full screen")
override fun statusBarLayerPositionAtStartAndEnd() { }
/** {@inheritDoc} */
@Ignore("Not applicable to this CUJ. App is full screen")
override fun statusBarLayerIsVisibleAtStartAndEnd() { }
/** {@inheritDoc} */
@Ignore("Not applicable to this CUJ. App is full screen")
override fun statusBarWindowIsAlwaysVisible() { }
/**
* Checks that the [ComponentMatcher.STATUS_BAR] window is invisible during the whole
* transition
@@ -194,7 +213,7 @@ open class SeamlessAppRotationTest(
/** {@inheritDoc} */
@FlakyTest
@Test
override fun navBarLayerRotatesAndScales() = super.navBarLayerRotatesAndScales()
override fun navBarLayerPositionAtStartAndEnd() = super.navBarLayerPositionAtStartAndEnd()
companion object {
private val FlickerTestParameter.starveUiThread