Antonella Dellanzo ab508e96cf Updating split screen tests
Updating split screen tests:
- Adding the assertions visibleWindowsShownMoreThanOneConsecutiveEntry and visibleLayersShownMoreThanOneConsecutiveEntry for all the split screen tests (the layer one is disabled as we need ag/13051160 to ignore one layer).
- Replacing some assertions for other that check more things (i.e. replacing the dockedStackDividerIsVisible assertion for dockedStackDividerBecomesVisible).
- Adding some new assertions to the current tests in order to check for more things.

Adding new WM and layer assertions to Flicker tests to avoid repeating code:
- appWindowBecomesVisible
- layerBecomesVisible
- layerBecomesInvisible

Adding new layer assertions to WM shell to avoid repeating code:
- dockedStackDividerBecomesVisible
- dockedStackDividerBecomesInvisible

Test: atest WMShellFlickerTests
Bug: b/171049797
Change-Id: I2bbb23a1cf92df16ee6292e5da4644936a6d99e5
2020-12-17 22:13:26 +01:00
..
2020-12-09 11:02:20 +00:00

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()
        }
    }
}