summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ben Reich <benreich@google.com> 2025-03-18 12:01:06 +1100
committer Ben Reich <benreich@google.com> 2025-03-18 12:05:37 +1100
commitff37c941512c0fad21dc1dbae19ee181151dfbc6 (patch)
tree97d6073cdf86432ff2c8aca009e873ca33b2cb71
parentb83b6afad2faa5c6c53d15f2d36c077b1f03703a (diff)
Fix up TrampolineActivityTest and make activity closing more robust
The current TrampolineActivityTest relies on the activity monitor to close any activities that were found. Unfortunately when 2 activities are shown OR one flakes, it has a knock on effect to the remainder tests and causes them to fail. Instead of this, let's get the current active tasks and close any that are from the documentsui or photopicker package. On top of this the extra_mime_types were being added singularly instead of as a string array. This meant that although it showed them as appearing to have multiple mime types only one was being added. Bug: 377771195 Fix: 401787099 Fix: 401466309 Fix: 400612295 Fix: 401786574 Fix: 398402760 Test: atest com.android.documentsui.TrampolineActivityTest Flag: com.android.documentsui.flags.redirect_get_content_ro Change-Id: Ia3f31e5f34da6758930dd3739785fd0cca330209
-rw-r--r--tests/functional/com/android/documentsui/TrampolineActivityTest.kt43
1 files changed, 22 insertions, 21 deletions
diff --git a/tests/functional/com/android/documentsui/TrampolineActivityTest.kt b/tests/functional/com/android/documentsui/TrampolineActivityTest.kt
index 6bf0975ad..10b31d1eb 100644
--- a/tests/functional/com/android/documentsui/TrampolineActivityTest.kt
+++ b/tests/functional/com/android/documentsui/TrampolineActivityTest.kt
@@ -15,10 +15,8 @@
*/
package com.android.documentsui
-import android.app.Instrumentation
import android.content.Intent
import android.content.Intent.ACTION_GET_CONTENT
-import android.content.IntentFilter
import android.os.Build.VERSION_CODES
import android.platform.test.annotations.RequiresFlagsEnabled
import android.platform.test.flag.junit.CheckFlagsRule
@@ -34,7 +32,6 @@ import com.android.documentsui.flags.Flags.FLAG_REDIRECT_GET_CONTENT_RO
import com.android.documentsui.picker.TrampolineActivity
import java.util.Optional
import java.util.regex.Pattern
-import org.junit.After
import org.junit.Assert.assertNotNull
import org.junit.Before
import org.junit.BeforeClass
@@ -56,25 +53,28 @@ class TrampolineActivityTest() {
const val UI_TIMEOUT = 5000L
val PHOTOPICKER_PACKAGE_REGEX: Pattern = Pattern.compile(".*(photopicker|media\\.module).*")
val DOCUMENTSUI_PACKAGE_REGEX: Pattern = Pattern.compile(".*documentsui.*")
+ val STACK_LIST_REGEX: Pattern = Pattern.compile(
+ "taskId=(?<taskId>[0-9]+):(.+?)(photopicker|media\\.module|documentsui)",
+ Pattern.MULTILINE
+ )
private lateinit var device: UiDevice
- private lateinit var monitor: Instrumentation.ActivityMonitor
+ fun removePhotopickerAndDocumentsUITasks() {
+ // Get the current list of tasks that are visible.
+ val result = device.executeShellCommand("am stack list")
+
+ // Identify any that are from DocumentsUI or Photopicker and close them.
+ val matcher = STACK_LIST_REGEX.matcher(result)
+ while (matcher.find()) {
+ device.executeShellCommand("am stack remove ${matcher.group("taskId")}")
+ }
+ }
@BeforeClass
@JvmStatic
fun setUp() {
device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
-
- // Monitor to wait for the activity that starts with the `ACTION_GET_CONTENT` intent.
- val intentFilter = IntentFilter().apply { addAction(ACTION_GET_CONTENT) }
- monitor =
- Instrumentation.ActivityMonitor(
- intentFilter,
- null, // Expected result from startActivityForResult.
- true, // Whether to block until activity started or not.
- )
- InstrumentationRegistry.getInstrumentation().addMonitor(monitor)
}
}
@@ -157,24 +157,20 @@ class TrampolineActivityTest() {
@Before
fun setUp() {
+ removePhotopickerAndDocumentsUITasks()
+
val context = InstrumentationRegistry.getInstrumentation().targetContext
val intent = Intent(ACTION_GET_CONTENT)
intent.setClass(context, TrampolineActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.setType(testData.mimeType)
if (testData.extraMimeTypes.isPresent) {
- testData.extraMimeTypes.get()
- .forEach { intent.putExtra(Intent.EXTRA_MIME_TYPES, it) }
+ intent.putExtra(Intent.EXTRA_MIME_TYPES, testData.extraMimeTypes.get())
}
context.startActivity(intent)
}
- @After
- fun tearDown() {
- monitor.waitForActivityWithTimeout(UI_TIMEOUT)?.finish()
- }
-
@Test
fun testCorrectAppIsLaunched() {
val bySelector = when (testData.expectedApp) {
@@ -208,6 +204,11 @@ class TrampolineActivityTest() {
@get:Rule
val checkFlagsRule: CheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule()
+ @Before
+ fun setUp() {
+ removePhotopickerAndDocumentsUITasks()
+ }
+
@Test
fun testReferredGetContentFromPhotopickerShouldNotRedirectBack() {
val context = InstrumentationRegistry.getInstrumentation().targetContext