From 9648d4b04bd0782aa670f8403cc3c18e7722c8ea Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Fri, 22 Mar 2019 11:17:29 +0900 Subject: [PATCH] Make SelectTest append selectTest argument from extended class This CL also moves CoreTestsFilter to frameworks/base/test-util, so that FrameworksCoreTests, FrameworksServicesTests, and WmTests can use CoreTestsFilter. Test: Pass SelectTestTests $ atest WmTests:com.android.test.filters.SelectTestTests Test: Pass all 91 non-flaky presubmit tests in FrameworksCoreTests using CoreTestsFilter $ tradefed.sh run commandAndExit WmTests \ --instrumentation-arg selectTest=com.android.server.wm. \ --instrumentation-arg filter=com.android.server.wm.test.filters.CoreTestsFilter --include-annotation android.platform.test.annotations.Presubmit \ --exclude-annotation androidx.test.filters.FlakyTest Test: Pass all 740 non-flaky presubmit tests in WmTests using CoreTestsFilter $ tradefed.sh run commandAndExit WmTests \ --instrumentation-arg selectTest=com.android.server.wm. \ --instrumentation-arg filter=com.android.server.wm.test.filters.CoreTestsFilter --include-annotation android.platform.test.annotations.Presubmit \ --exclude-annotation androidx.test.filters.FlakyTest Bug: 122451194 Change-Id: I83d13d9ef82a92677bee67da5ee8a5faa0690f82 --- tests/utils/testutils/Android.bp | 5 ++- .../wm/test/filters/CoreTestsFilter.java | 0 .../com/android/test/filters/SelectTest.java | 13 +++++- .../android/test/filters/SelectTestTests.java | 43 +++++++++++++++++++ 4 files changed, 58 insertions(+), 3 deletions(-) rename {core/tests/coretests/src => tests/utils/testutils/java}/com/android/server/wm/test/filters/CoreTestsFilter.java (100%) diff --git a/tests/utils/testutils/Android.bp b/tests/utils/testutils/Android.bp index 0a9e964d8d8db..f71be7b0b7d3e 100644 --- a/tests/utils/testutils/Android.bp +++ b/tests/utils/testutils/Android.bp @@ -19,7 +19,10 @@ java_library { srcs: ["java/**/*.java"], - static_libs: ["junit"], + static_libs: [ + "junit", + "hamcrest-library", + ], libs: [ "android.test.runner", diff --git a/core/tests/coretests/src/com/android/server/wm/test/filters/CoreTestsFilter.java b/tests/utils/testutils/java/com/android/server/wm/test/filters/CoreTestsFilter.java similarity index 100% rename from core/tests/coretests/src/com/android/server/wm/test/filters/CoreTestsFilter.java rename to tests/utils/testutils/java/com/android/server/wm/test/filters/CoreTestsFilter.java diff --git a/tests/utils/testutils/java/com/android/test/filters/SelectTest.java b/tests/utils/testutils/java/com/android/test/filters/SelectTest.java index d0350aff5ef56..d5b14c58512ea 100644 --- a/tests/utils/testutils/java/com/android/test/filters/SelectTest.java +++ b/tests/utils/testutils/java/com/android/test/filters/SelectTest.java @@ -26,10 +26,12 @@ import com.android.internal.annotations.VisibleForTesting; import org.junit.runner.Description; import org.junit.runner.manipulation.Filter; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.LinkedHashMap; import java.util.LinkedHashSet; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.StringJoiner; @@ -131,7 +133,8 @@ public class SelectTest extends Filter { * * @param testArgs instrumentation test arguments. * @param selectTests array of class name to be selected to run. - * @return modified instrumentation test arguments. + * @return modified instrumentation test arguments. if {@link #OPTION_SELECT_TEST} argument + * already exists in {@code testArgs}, those are prepended before {@code selectTests}. */ @NonNull protected static Bundle addSelectTest( @@ -139,7 +142,13 @@ public class SelectTest extends Filter { if (selectTests.length == 0) { return testArgs; } - testArgs.putString(OPTION_SELECT_TEST, join(Arrays.asList(selectTests))); + final List selectedTestList = new ArrayList<>(); + final String selectTestArgs = testArgs.getString(OPTION_SELECT_TEST); + if (selectTestArgs != null) { + selectedTestList.addAll(Arrays.asList(selectTestArgs.split(ARGUMENT_ITEM_SEPARATOR))); + } + selectedTestList.addAll(Arrays.asList(selectTests)); + testArgs.putString(OPTION_SELECT_TEST, join(selectedTestList)); return testArgs; } diff --git a/tests/utils/testutils/java/com/android/test/filters/SelectTestTests.java b/tests/utils/testutils/java/com/android/test/filters/SelectTestTests.java index 163b00abafcd0..df18985f77bf3 100644 --- a/tests/utils/testutils/java/com/android/test/filters/SelectTestTests.java +++ b/tests/utils/testutils/java/com/android/test/filters/SelectTestTests.java @@ -19,7 +19,11 @@ package com.android.test.filters; import static com.android.test.filters.SelectTest.OPTION_SELECT_TEST; import static com.android.test.filters.SelectTest.OPTION_SELECT_TEST_VERBOSE; +import static org.hamcrest.collection.IsArrayContaining.hasItemInArray; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import android.os.Bundle; @@ -145,6 +149,45 @@ public class SelectTestTests { } } + @Test + public void testAddSelectTest() { + final Bundle testArgs = new Bundle(); + + final Bundle modifiedTestArgs = + SelectTest.addSelectTest(testArgs, PACKAGE_A, CLASS_B3, METHOD_C5X); + assertSame(testArgs, modifiedTestArgs); + + final String selectTestArgs = modifiedTestArgs.getString(OPTION_SELECT_TEST); + assertNotNull(selectTestArgs); + final String[] selectedTests = selectTestArgs.split(","); + assertThat(selectedTests, hasItemInArray(PACKAGE_A)); + assertThat(selectedTests, hasItemInArray(CLASS_B3)); + assertThat(selectedTests, hasItemInArray(METHOD_C5X)); + } + + @Test + public void testAddSelectTest_prependExistingTestArg() { + final Bundle testArgs = new Bundle(); + testArgs.putString(OPTION_SELECT_TEST, new StringJoiner(",") + .add(PACKAGE_A) + .add(CLASS_B3) + .add(METHOD_C5X) + .toString()); + + final Bundle modifiedTestArgs = + SelectTest.addSelectTest(testArgs, PACKAGE_B, CLASS_B4, METHOD_C6Y); + + final String selectTestArgs = modifiedTestArgs.getString(OPTION_SELECT_TEST); + assertNotNull(selectTestArgs); + final String[] selectedTests = selectTestArgs.split(","); + assertThat(selectedTests, hasItemInArray(PACKAGE_A)); + assertThat(selectedTests, hasItemInArray(CLASS_B3)); + assertThat(selectedTests, hasItemInArray(METHOD_C5X)); + assertThat(selectedTests, hasItemInArray(PACKAGE_B)); + assertThat(selectedTests, hasItemInArray(CLASS_B4)); + assertThat(selectedTests, hasItemInArray(METHOD_C6Y)); + } + @Test public void testFilterDisabled() { final Filter filter = mBuilder.build();