53f93019c1
Move instructions regarding expanding the flicker lib to the flickerlib project and add instructions on how to extend the test suite Test: atest FlickerTests Change-Id: Iefa88215e253371bf92b0679e70973e123af6c62
89 lines
3.1 KiB
Markdown
89 lines
3.1 KiB
Markdown
# 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`.
|
|
```kotlin
|
|
@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()
|
|
}
|
|
}
|
|
}
|
|
```
|