Filter out WmShellFlickerTests that are not supported on TV

By default all new WmShellFlickerTests are enabled on TV even despite
the fact that most of them focus the features that are not supported on
TV, and never been run on TV devices prior to adding. Some examples are:
com.android.wm.shell.flicker.apppairs.AppPairsTest
com.android.wm.shell.flicker.splitscreen.*
com.android.wm.shell.flicker.legacysplitscreen.*
To address this we move from "opt-out" to "opt-in" model for
WmShellFlickerTests on TV.

Bug: 176074784
Test: run `atest WMShellFlickerTests` on ADT-3
Change-Id: Ic71f9ed4cd0f3b13d81763b2741e827f32b26c4a
This commit is contained in:
Sergey Nikolaienkov
2020-12-21 12:31:02 +00:00
parent 026102b5c8
commit 7c6db063bc
5 changed files with 32 additions and 19 deletions

View File

@@ -17,6 +17,8 @@
package com.android.wm.shell.flicker
import android.content.pm.PackageManager
import android.content.pm.PackageManager.FEATURE_LEANBACK
import android.content.pm.PackageManager.FEATURE_LEANBACK_ONLY
import android.os.RemoteException
import android.os.SystemClock
import android.platform.helpers.IAppHelper
@@ -24,6 +26,8 @@ import android.view.Surface
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import com.android.server.wm.flicker.Flicker
import org.junit.Assume.assumeFalse
import org.junit.Before
/**
* Base class of all Flicker test that performs common functions for all flicker tests:
@@ -36,16 +40,22 @@ import com.android.server.wm.flicker.Flicker
* - Fails tests if results are not available for any test due to jank.
*/
abstract class FlickerTestBase {
val instrumentation by lazy {
InstrumentationRegistry.getInstrumentation()
}
val uiDevice by lazy {
UiDevice.getInstance(instrumentation)
}
val packageManager: PackageManager by lazy {
instrumentation.context.getPackageManager()
val instrumentation by lazy { InstrumentationRegistry.getInstrumentation() }
val uiDevice by lazy { UiDevice.getInstance(instrumentation) }
val packageManager: PackageManager by lazy { instrumentation.context.getPackageManager() }
protected val isTelevision: Boolean by lazy {
packageManager.run {
hasSystemFeature(FEATURE_LEANBACK) || hasSystemFeature(FEATURE_LEANBACK_ONLY)
}
}
/**
* By default WmShellFlickerTests do not run on TV devices.
* If the test should run on TV - it should override this method.
*/
@Before
open fun televisionSetUp() = assumeFalse(isTelevision)
/**
* Build a test tag for the test
* @param testName Name of the transition(s) being tested

View File

@@ -17,10 +17,20 @@
package com.android.wm.shell.flicker.pip
import com.android.wm.shell.flicker.helpers.PipAppHelper
import org.junit.Before
abstract class PipTestBase(
rotationName: String,
rotation: Int
) : AppTestBase(rotationName, rotation) {
protected val testApp = PipAppHelper(instrumentation)
@Before
override fun televisionSetUp() {
/**
* The super implementation assumes ([org.junit.Assume]) that not running on TV, thus
* disabling the test on TV. This test, however, *should run on TV*, so we overriding this
* method and simply leaving it blank.
*/
}
}

View File

@@ -51,8 +51,7 @@ class TvPipMenuTests : TvPipTestBase() {
}
@Before
override fun setUp() {
super.setUp()
fun tvPipMenuTestsTestUp() {
// Launch the app and go to PiP
testApp.launchViaIntent()
}

View File

@@ -40,8 +40,7 @@ import org.junit.Test
@RequiresDevice
class TvPipNotificationTests : TvPipTestBase() {
@Before
override fun setUp() {
super.setUp()
fun tvPipNotificationTestsSetUp() {
val started = startNotificationListener()
if (!started) {
error("NotificationListener hasn't started")

View File

@@ -19,8 +19,6 @@ package com.android.wm.shell.flicker.pip.tv
import android.app.ActivityManager
import android.app.IActivityManager
import android.app.IProcessObserver
import android.content.pm.PackageManager.FEATURE_LEANBACK
import android.content.pm.PackageManager.FEATURE_LEANBACK_ONLY
import android.os.SystemClock
import android.view.Surface.ROTATION_0
import android.view.Surface.rotationToString
@@ -34,14 +32,11 @@ import org.junit.Before
abstract class TvPipTestBase : PipTestBase(rotationToString(ROTATION_0), ROTATION_0) {
private val isTelevision: Boolean
get() = packageManager.run {
hasSystemFeature(FEATURE_LEANBACK) || hasSystemFeature(FEATURE_LEANBACK_ONLY)
}
private val systemUiProcessObserver = SystemUiProcessObserver()
@Before
open fun setUp() {
final override fun televisionSetUp() {
// Should run only on TVs.
Assume.assumeTrue(isTelevision)
systemUiProcessObserver.start()