summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Duffin <paulduffin@google.com>2017-07-10 15:16:07 +0100
committerPaul Duffin <paulduffin@google.com>2017-07-17 15:25:04 +0100
commit855d702cb78f81abbf2a541f01afeacf280d5621 (patch)
tree0091fe94a6818ae7dffd4d6d01921cd5a651a4bf
parent07001e8313f56174734e216360ead3c7dce8d982 (diff)
Separate android.test.mock classes from android.test.runner
The android.test.runner library contained classes in the android.test.mock. Those classes have been extracted into a separate android.test.mock library but are still part of the android.test.runner library. This change removes them from the android.test.runner library. The PackageParser change ensures that applications which specify <uses-library android:name="android.test.runner"/> still see the same set of classes at runtime as they did before this change. The logic for updating the Package to maintain backwards compatibility was extracted into its own class for a number of reasons: * PackageParser is already huge. * It is easier to test in separate class. * It reduces potential for conflicts. Bug: 30188076 Test: cts/tests/signature/runSignatureTests.sh CtsAndroidTestRunnerCurrentApiSignatureTestCases Change-Id: I19042b3f9ffff8bf0f8437db7bb8341c703e4244 Remove android.test.mock classes from android.test.runner Bug: 30188076 Test: cts/tests/signature/runSignatureTests.sh CtsAndroidTestRunnerCurrentApiSignatureTestCases Change-Id: I8ddbdb0bda7bef8858202bc085881af14d7f0c92
-rw-r--r--core/java/android/content/pm/PackageBackwardCompatibility.java78
-rw-r--r--core/java/android/content/pm/PackageParser.java14
-rw-r--r--core/tests/coretests/README2
-rw-r--r--core/tests/coretests/src/android/content/pm/PackageBackwardCompatibilityTest.java114
-rw-r--r--test-runner/Android.mk10
5 files changed, 202 insertions, 16 deletions
diff --git a/core/java/android/content/pm/PackageBackwardCompatibility.java b/core/java/android/content/pm/PackageBackwardCompatibility.java
new file mode 100644
index 000000000000..4de160b0bf88
--- /dev/null
+++ b/core/java/android/content/pm/PackageBackwardCompatibility.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.content.pm;
+
+import android.annotation.Nullable;
+import android.content.pm.PackageParser.Package;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.ArrayUtils;
+
+import java.util.ArrayList;
+
+/**
+ * Modifies {@link Package} in order to maintain backwards compatibility.
+ *
+ * @hide
+ */
+@VisibleForTesting
+public class PackageBackwardCompatibility {
+
+ private static final String ANDROID_TEST_MOCK = "android.test.mock";
+
+ private static final String ANDROID_TEST_RUNNER = "android.test.runner";
+
+ /**
+ * Modify the shared libraries in the supplied {@link Package} to maintain backwards
+ * compatibility.
+ *
+ * @param pkg the {@link Package} to modify.
+ */
+ @VisibleForTesting
+ public static void modifySharedLibraries(Package pkg) {
+ ArrayList<String> usesLibraries = pkg.usesLibraries;
+ ArrayList<String> usesOptionalLibraries = pkg.usesOptionalLibraries;
+
+ usesLibraries = orgApacheHttpLegacy(usesLibraries);
+ usesOptionalLibraries = orgApacheHttpLegacy(usesOptionalLibraries);
+
+ // android.test.runner has a dependency on android.test.mock so if android.test.runner
+ // is present but android.test.mock is not then add android.test.mock.
+ boolean androidTestMockPresent = ArrayUtils.contains(usesLibraries, ANDROID_TEST_MOCK)
+ || ArrayUtils.contains(usesOptionalLibraries, ANDROID_TEST_MOCK);
+ if (ArrayUtils.contains(usesLibraries, ANDROID_TEST_RUNNER) && !androidTestMockPresent) {
+ usesLibraries.add(ANDROID_TEST_MOCK);
+ }
+ if (ArrayUtils.contains(usesOptionalLibraries, ANDROID_TEST_RUNNER)
+ && !androidTestMockPresent) {
+ usesOptionalLibraries.add(ANDROID_TEST_MOCK);
+ }
+
+ pkg.usesLibraries = usesLibraries;
+ pkg.usesOptionalLibraries = usesOptionalLibraries;
+ }
+
+ private static ArrayList<String> orgApacheHttpLegacy(@Nullable ArrayList<String> libraries) {
+ // "org.apache.http.legacy" is now a part of the boot classpath so it doesn't need
+ // to be an explicit dependency.
+ //
+ // A future change will remove this library from the boot classpath, at which point
+ // all apps that target SDK 21 and earlier will have it automatically added to their
+ // dependency lists.
+ return ArrayUtils.remove(libraries, "org.apache.http.legacy");
+ }
+}
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 426c4f26945c..a37e89ebcad1 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -3846,7 +3846,7 @@ public class PackageParser {
// every activity info has had a chance to set it from its attributes.
setMaxAspectRatio(owner);
- modifySharedLibrariesForBackwardCompatibility(owner);
+ PackageBackwardCompatibility.modifySharedLibraries(owner);
if (hasDomainURLs(owner)) {
owner.applicationInfo.privateFlags |= ApplicationInfo.PRIVATE_FLAG_HAS_DOMAIN_URLS;
@@ -3857,18 +3857,6 @@ public class PackageParser {
return true;
}
- private static void modifySharedLibrariesForBackwardCompatibility(Package owner) {
- // "org.apache.http.legacy" is now a part of the boot classpath so it doesn't need
- // to be an explicit dependency.
- //
- // A future change will remove this library from the boot classpath, at which point
- // all apps that target SDK 21 and earlier will have it automatically added to their
- // dependency lists.
- owner.usesLibraries = ArrayUtils.remove(owner.usesLibraries, "org.apache.http.legacy");
- owner.usesOptionalLibraries = ArrayUtils.remove(owner.usesOptionalLibraries,
- "org.apache.http.legacy");
- }
-
/**
* Check if one of the IntentFilter as both actions DEFAULT / VIEW and a HTTP/HTTPS data URI
*/
diff --git a/core/tests/coretests/README b/core/tests/coretests/README
index aced4417ba02..ea282a0ebb3a 100644
--- a/core/tests/coretests/README
+++ b/core/tests/coretests/README
@@ -28,7 +28,7 @@ To run a test or set of tests, first build the FrameworksCoreTests package:
Next, install the resulting APK and run tests as you would normal JUnit tests:
- adb install out/target/product/.../data/app/FrameworksCoreTests/FrameworksCoreTests.apk
+ adb install -r ${ANDROID_PRODUCT_OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
adb shell am instrument -w \
com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner
diff --git a/core/tests/coretests/src/android/content/pm/PackageBackwardCompatibilityTest.java b/core/tests/coretests/src/android/content/pm/PackageBackwardCompatibilityTest.java
new file mode 100644
index 000000000000..4d2a0470b2ea
--- /dev/null
+++ b/core/tests/coretests/src/android/content/pm/PackageBackwardCompatibilityTest.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.content.pm;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import android.content.pm.PackageParser.Package;
+import android.os.Build;
+import android.support.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+@SmallTest
+@RunWith(JUnit4.class)
+public class PackageBackwardCompatibilityTest {
+
+ private static final String ORG_APACHE_HTTP_LEGACY = "org.apache.http.legacy";
+
+ private static final String ANDROID_TEST_RUNNER = "android.test.runner";
+
+ private static final String ANDROID_TEST_MOCK = "android.test.mock";
+
+ private Package mPackage;
+
+ private static ArrayList<String> arrayList(String... strings) {
+ ArrayList<String> list = new ArrayList<>();
+ Collections.addAll(list, strings);
+ return list;
+ }
+
+ @Before
+ public void setUp() {
+ mPackage = new Package("org.package.name");
+ mPackage.applicationInfo.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT;
+ }
+
+ @Test
+ public void null_usesLibraries() {
+ PackageBackwardCompatibility.modifySharedLibraries(mPackage);
+ assertNull("usesLibraries not updated correctly", mPackage.usesLibraries);
+ }
+
+ @Test
+ public void null_usesOptionalLibraries() {
+ PackageBackwardCompatibility.modifySharedLibraries(mPackage);
+ assertNull("usesOptionalLibraries not updated correctly", mPackage.usesOptionalLibraries);
+ }
+
+ @Test
+ public void remove_org_apache_http_legacy_from_usesLibraries() {
+ mPackage.usesLibraries = arrayList(ORG_APACHE_HTTP_LEGACY);
+ PackageBackwardCompatibility.modifySharedLibraries(mPackage);
+ assertNull("usesLibraries not updated correctly", mPackage.usesLibraries);
+ }
+
+ @Test
+ public void remove_org_apache_http_legacy_from_usesOptionalLibraries() {
+ mPackage.usesOptionalLibraries = arrayList(ORG_APACHE_HTTP_LEGACY);
+ PackageBackwardCompatibility.modifySharedLibraries(mPackage);
+ assertNull("usesOptionalLibraries not updated correctly", mPackage.usesOptionalLibraries);
+ }
+
+ @Test
+ public void android_test_runner_in_usesLibraries() {
+ mPackage.usesLibraries = arrayList(ANDROID_TEST_RUNNER);
+ PackageBackwardCompatibility.modifySharedLibraries(mPackage);
+ assertEquals("usesLibraries not updated correctly",
+ arrayList(ANDROID_TEST_RUNNER, ANDROID_TEST_MOCK),
+ mPackage.usesLibraries);
+ }
+
+ @Test
+ public void android_test_runner_in_usesOptionalLibraries() {
+ mPackage.usesOptionalLibraries = arrayList(ANDROID_TEST_RUNNER);
+ PackageBackwardCompatibility.modifySharedLibraries(mPackage);
+ assertEquals("usesOptionalLibraries not updated correctly",
+ arrayList(ANDROID_TEST_RUNNER, ANDROID_TEST_MOCK),
+ mPackage.usesOptionalLibraries);
+ }
+
+ @Test
+ public void android_test_runner_in_usesLibraries_android_test_mock_in_usesOptionalLibraries() {
+ mPackage.usesLibraries = arrayList(ANDROID_TEST_RUNNER);
+ mPackage.usesOptionalLibraries = arrayList(ANDROID_TEST_MOCK);
+ PackageBackwardCompatibility.modifySharedLibraries(mPackage);
+ assertEquals("usesLibraries not updated correctly",
+ arrayList(ANDROID_TEST_RUNNER),
+ mPackage.usesLibraries);
+ assertEquals("usesOptionalLibraries not updated correctly",
+ arrayList(ANDROID_TEST_MOCK),
+ mPackage.usesOptionalLibraries);
+ }
+}
diff --git a/test-runner/Android.mk b/test-runner/Android.mk
index 9053b23cfe9a..3c3718adff0e 100644
--- a/test-runner/Android.mk
+++ b/test-runner/Android.mk
@@ -22,9 +22,15 @@ android_test_mock_source_files := $(call all-java-files-under, src/android/test/
# =====================================
include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := \
+ $(filter-out $(android_test_mock_source_files), $(call all-java-files-under, src))
-LOCAL_JAVA_LIBRARIES := core-oj core-libart framework legacy-test
+LOCAL_JAVA_LIBRARIES := \
+ core-oj \
+ core-libart \
+ framework \
+ legacy-test \
+ android.test.mock \
LOCAL_MODULE:= android.test.runner