It is already possible to ignore windows/layers on the verification of visibleWindowsShownMoreThanOneConsecutiveEntry and visibleLayersShownMoreThanOneConsecutiveEntry. However many tests need to manually add the Snapshot and Splash Screen entries. Those entries are not guaranteed to show for more than 1 entry, they depend on the app behavior and when the SF actually renders the information sent by WM. This CL removes those windows by default from the verification and refactor the tests to make it easier to update in the future Test: atest FlickerTests WMShellFlickerTests Bug: 182720234 Change-Id: I0e3346e078515b3e9a2065256ac04696acfa59fb
Flicker Test Library
Motivation
This set of tests use the flickerlib from platform_testing/libraries/flicker
to execute a set of common UI transitions to detect discontinuous or unpredictable behavior.
The tests are organized in packages according to the transitions they test (e.g., rotation
, splitscreen
).
Adding a Test
By default tests should inherit from RotationTestBase
or NonRotationTestBase
and must override the variable transitionToRun
(Kotlin) or the function getTransitionToRun()
(Java).
Only tests that are not supported by these classes should inherit directly from the FlickerTestBase
class.
Rotation animations and transitions
Tests that rotate the device should inherit from RotationTestBase
.
Tests that inherit from the class automatically receive start and end rotation values.
Moreover, these tests inherit the following checks:
- all regions on the screen are covered
- status bar is always visible
- status bar rotates
- nav bar is always visible
- nav bar is rotates
The default tests can be disabled by overriding the respective methods and including an @Ignore
annotation.
Non-Rotation animations and transitions
NonRotationTestBase
was created to make it easier to write tests that do not involve rotation (e.g., Pip
, split screen
or IME
).
Tests that inherit from the class are automatically executed twice: once in portrait and once in landscape mode and the assertions are checked independently.
Moreover, these tests inherit the following checks:
- all regions on the screen are covered
- status bar is always visible
- nav bar is always visible
The default tests can be disabled by overriding the respective methods and including an @Ignore
annotation.
Exceptional cases
Tests that rotate the device should inherit from RotationTestBase
.
This class allows the test to be freely configured and does not provide any assertions.
Example
Start by defining common or error prone transitions using TransitionRunner
.
@LargeTest
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class MyTest(
beginRotationName: String,
beginRotation: Int
) : NonRotationTestBase(beginRotationName, beginRotation) {
init {
mTestApp = MyAppHelper(InstrumentationRegistry.getInstrumentation())
}
override val transitionToRun: TransitionRunner
get() = TransitionRunner.newBuilder()
.withTag("myTest")
.recordAllRuns()
.runBefore { device.pressHome() }
.runBefore { device.waitForIdle() }
.run { testApp.open() }
.runAfter{ testApp.exit() }
.repeat(2)
.includeJankyRuns()
.build()
@Test
fun myWMTest() {
checkResults {
WmTraceSubject.assertThat(it)
.showsAppWindow(MyTestApp)
.forAllEntries()
}
}
@Test
fun mySFTest() {
checkResults {
LayersTraceSubject.assertThat(it)
.showsLayer(MyTestApp)
.forAllEntries()
}
}
}