diff options
author | 2025-03-18 12:01:06 +1100 | |
---|---|---|
committer | 2025-03-18 12:05:37 +1100 | |
commit | ff37c941512c0fad21dc1dbae19ee181151dfbc6 (patch) | |
tree | 97d6073cdf86432ff2c8aca009e873ca33b2cb71 | |
parent | b83b6afad2faa5c6c53d15f2d36c077b1f03703a (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.kt | 43 |
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 |