Periodic pull of Robolectric changes from github.
Test: atest -c MyRoboTests
Bug: 263483214
Change-Id: If0eb3f8db0aa8c7b87b7baef859f539a25af0d14
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..84d7af2
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,224 @@
+// Copyright (C) 2019 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 {
+ default_visibility: [":__subpackages__"],
+ default_applicable_licenses: ["external_robolectric_license"],
+}
+
+// Added automatically by a large-scale-change that took the approach of
+// 'apply every license found to every target'. While this makes sure we respect
+// every license restriction, it may not be entirely correct.
+//
+// e.g. GPL in an MIT project might only apply to the contrib/ directory.
+//
+// Please consider splitting the single license below into multiple licenses,
+// taking care not to lose any license_kind information, and overriding the
+// default license using the 'licenses: [...]' property on targets as needed.
+//
+// For unused files, consider creating a 'fileGroup' with "//visibility:private"
+// to attach the license to, and including a comment whether the files may be
+// used in the current project.
+// See: http://go/android-license-faq
+license {
+ name: "external_robolectric_license",
+ visibility: [":__subpackages__"],
+ license_kinds: [
+ "SPDX-license-identifier-Apache-2.0",
+ "SPDX-license-identifier-MIT",
+ ],
+ license_text: [
+ "LICENSE",
+ ],
+}
+
+// Empty library. Should be removed
+java_library {
+ name: "robolectric_android-all-stub_upstream",
+ visibility: ["//visibility:public"],
+}
+
+// build.prop file created by module type defined in soong/robolectric.go
+robolectric_build_props {
+ name: "robolectric_build_props_upstream",
+}
+
+java_genrule_host {
+ name: "robolectric_framework_res_upstream",
+ tools: ["zip2zip"],
+ srcs: [":framework-res"],
+ out: ["robolectric_framework_res_upstream.jar"],
+ cmd: "$(location zip2zip) " +
+ "-i $(location :framework-res) " +
+ "-o $(location robolectric_framework_res_upstream.jar) " +
+ "-x classes.dex " +
+ "-x META-INF/**/* " +
+ "-0 resources.arsc",
+}
+
+java_device_for_host {
+ name: "robolectric_android-all-device-deps_upstream",
+ libs: [
+ "conscrypt-for-host",
+ "core-icu4j-for-host",
+ "core-libart-for-host",
+ "ext",
+ "framework-all",
+ "icu4j-icudata-jarjar",
+ "icu4j-icutzdata-jarjar",
+ "ims-common",
+ "libphonenumber-platform",
+ "okhttp-for-host",
+ "services",
+ "services.accessibility",
+ "telephony-common",
+ "android.car",
+ "androidx.test.monitor",
+ "androidx.test.ext.truth", // -nodep?
+ ],
+}
+
+java_library_host {
+ name: "robolectric-host-android_all_upstream",
+ static_libs: [
+ "robolectric_android-all-device-deps_upstream",
+ "robolectric_tzdata",
+ "robolectric_framework_res_upstream",
+ ],
+ dist: {
+ targets: [
+ "sdk",
+ "win_sdk",
+ ],
+ dest: "android-all-robolectric_upstream.jar",
+ },
+
+ java_resources: [
+ // Copy the build.prop
+ ":robolectric_build_props_upstream",
+ ],
+ visibility: [
+ ":__subpackages__",
+ "//prebuilts/misc/common/robolectric",
+ ],
+}
+
+//#############################################
+// Assemble Robolectric_all
+//#############################################
+
+// This is a hack and should be removed with proper resource merging a la maven-shaded-plugin
+java_genrule_host {
+ name: "robolectric_meta_service_file",
+ out: ["robolectric_meta_service_file.jar"],
+ tools: ["soong_zip"],
+ cmd: "mkdir -p $(genDir)/META-INF/services/ && " +
+ "echo -e 'org.robolectric.Shadows\norg.robolectric.shadows.httpclient.Shadows\norg.robolectric.shadows.multidex.Shadows' > " +
+ "$(genDir)/META-INF/services/org.robolectric.internal.ShadowProvider &&" +
+ "$(location soong_zip) -o $(out) -C $(genDir) -D $(genDir)/META-INF/services/",
+}
+
+java_library_host {
+ name: "Robolectric_all_upstream",
+
+ static_libs: [
+ "robolectric_meta_service_file",
+ "Robolectric_shadows_httpclient_upstream",
+ "Robolectric_shadows_framework_upstream",
+ "Robolectric_shadows_multidex_upstream",
+ "Robolectric_robolectric_upstream",
+ "Robolectric_annotations_upstream",
+ "Robolectric_resources_upstream",
+ "Robolectric_shadowapi_upstream",
+ "Robolectric_sandbox_upstream",
+ "Robolectric_junit_upstream",
+ "Robolectric_utils_upstream",
+ "Robolectric_utils_reflector_upstream",
+ "asm-9.2",
+ "junit",
+ "asm-tree-9.2",
+ "guava",
+ "asm-commons-9.2",
+ "bouncycastle-unbundled",
+ "conscrypt-unbundled",
+ "robolectric-sqlite4java-0.282",
+ "hamcrest",
+ "hamcrest-library",
+ "robolectric-host-androidx-test-runner_upstream",
+ "robolectric-host-org_apache_http_legacy_upstream", //TODO: remove
+ ],
+
+ java_resource_dirs: [
+ "shadows/framework/src/main/resources",
+ "src/main/resources",
+ ],
+}
+
+// Make Robolectric_all available as a target jar, but treated as an aar
+java_host_for_device {
+ name: "Robolectric_all-target_upstream",
+ libs: ["Robolectric_all_upstream"],
+ visibility: [
+ "//platform_testing/robolab/roboStandaloneProj/tests",
+ ],
+}
+
+// Make dependencies available as host jars
+java_device_for_host {
+ name: "robolectric-host-androidx-test-core_upstream",
+ libs: ["androidx.test.core"],
+}
+
+java_device_for_host {
+ name: "robolectric-host-androidx-test-ext-junit_upstream",
+ libs: ["androidx.test.ext.junit"],
+}
+
+java_device_for_host {
+ name: "robolectric-host-androidx-test-monitor_upstream",
+ libs: ["androidx.test.monitor"],
+}
+
+java_device_for_host {
+ name: "robolectric-host-androidx-test-runner_upstream",
+ libs: ["androidx.test.runner"],
+}
+
+java_device_for_host {
+ name: "robolectric-host-androidx_upstream",
+ libs: ["androidx.fragment_fragment"],
+}
+
+java_device_for_host {
+ name: "robolectric-host-androidx_test_espresso",
+ libs: ["androidx.test.espresso.idling-resource"],
+}
+
+//java_device_for_host {
+// name: "robolectric-host-android-support-v4_upstream",
+// libs: ["android-support-v4"],
+//}
+
+java_device_for_host {
+ name: "robolectric-host-android-support-multidex_upstream",
+ libs: [
+ "android-support-multidex",
+ "com.android.support.multidex_1.0.3",
+ ],
+}
+
+java_device_for_host {
+ name: "robolectric-host-org_apache_http_legacy_upstream",
+ libs: ["org.apache.http.legacy.stubs"],
+}
diff --git a/MODULE_LICENSE_MIT b/MODULE_LICENSE_MIT
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/MODULE_LICENSE_MIT
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..c9dccb8
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2010 Xtreme Labs and Pivotal Labs
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..d8cb0bf
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1 @@
+rexhoffman@google.com
diff --git a/annotations/Android.bp b/annotations/Android.bp
new file mode 100644
index 0000000..b325236
--- /dev/null
+++ b/annotations/Android.bp
@@ -0,0 +1,22 @@
+//#############################################
+// Compile Robolectric annotations
+//#############################################
+
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "external_robolectric-shadows_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-MIT
+ default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+ name: "Robolectric_annotations_upstream",
+ static_libs: [
+ "jsr305",
+ ],
+ libs: ["robolectric-host-android_all_upstream"],
+ srcs: ["src/main/java/**/*.java"],
+ visibility: ["//visibility:public"],
+}
diff --git a/junit/Android.bp b/junit/Android.bp
new file mode 100644
index 0000000..3ada376
--- /dev/null
+++ b/junit/Android.bp
@@ -0,0 +1,30 @@
+//##########################################
+// Compile Robolectric junit
+//##########################################
+
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "external_robolectric-shadows_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-MIT
+ default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+ name: "Robolectric_junit_upstream",
+ libs: [
+ "Robolectric_annotations_upstream",
+ "Robolectric_shadowapi_upstream",
+ "Robolectric_sandbox_upstream",
+ "Robolectric_utils_upstream",
+ "asm-commons-9.2",
+ "guava",
+ "asm-tree-9.2",
+ "hamcrest",
+ "junit",
+ "asm-9.2",
+ "jsr305",
+ ],
+ srcs: ["src/main/java/**/*.java"],
+}
diff --git a/nativeruntime/Android.bp b/nativeruntime/Android.bp
new file mode 100644
index 0000000..0d54843
--- /dev/null
+++ b/nativeruntime/Android.bp
@@ -0,0 +1,46 @@
+//#############################################
+// Compile Robolectric shadows framework
+//#############################################
+
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "external_robolectric_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+ name: "Robolectric_nativeruntime_upstream",
+ libs: [
+ "Robolectric_annotations_upstream",
+ "Robolectric_shadowapi_upstream",
+ "Robolectric_sandbox_upstream",
+ "Robolectric_resources_upstream",
+ "Robolectric_pluginapi_upstream",
+ "Robolectric_utils_upstream",
+ "Robolectric_utils_reflector_upstream",
+ "robolectric-accessibility-test-framework-2.1",
+ "robolectric-javax.annotation-api-1.2",
+ "hamcrest-library",
+ "hamcrest",
+ "robolectric-sqlite4java-0.282",
+ "guava",
+ //"icu4j",
+ "jsr305",
+ "error_prone_annotations",
+ "auto_service_annotations",
+ // "jsr330",
+ "robolectric-host-android_all_upstream",
+ ],
+ static_libs: [
+ "robolectric_nativeruntime_native_prebuilt",
+ ],
+ plugins: ["auto_service_plugin"],
+ srcs: [
+ "src/main/java/**/*.java",
+ "src/main/java/**/*.kt",
+ ],
+ java_resource_dirs: ["src/main/resources"],
+}
diff --git a/pluginapi/Android.bp b/pluginapi/Android.bp
new file mode 100644
index 0000000..085c62b
--- /dev/null
+++ b/pluginapi/Android.bp
@@ -0,0 +1,41 @@
+//#############################################
+// Compile Robolectric utils
+//#############################################
+
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "external_robolectric_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+ name: "Robolectric_pluginapi_upstream",
+ srcs: ["src/main/java/**/*.java"],
+ static_libs: [
+ "robolectric-javax.annotation-api-1.2",
+ "Robolectric_annotations_upstream",
+ "guava",
+ "jsr330",
+ "jsr305",
+ ],
+}
+
+//#############################################
+// Compile Robolectric utils tests
+//#############################################
+
+java_test_host {
+ name: "Robolectric_pluginapi_tests_upstream",
+ srcs: ["src/test/java/**/*.java"],
+ static_libs: [
+ "Robolectric_pluginapi_upstream",
+ "hamcrest",
+ "guava",
+ "junit",
+ "truth-prebuilt",
+ ],
+ test_suites: ["general-tests"],
+}
diff --git a/processor/Android.bp b/processor/Android.bp
new file mode 100644
index 0000000..a54dd07
--- /dev/null
+++ b/processor/Android.bp
@@ -0,0 +1,87 @@
+//#############################################
+// Compile Robolectric processor
+//#############################################
+
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "external_robolectric_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ // SPDX-license-identifier-MIT
+ default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+ name: "libRobolectric_processor_upstream",
+ srcs: ["src/main/java/**/*.java"],
+ java_resource_dirs: ["src/main/resources"],
+ java_resources: ["sdks.txt"],
+ use_tools_jar: true,
+ plugins: [
+ "auto_service_plugin",
+ ],
+ static_libs: [
+ "Robolectric_annotations_upstream",
+ "Robolectric_shadowapi_upstream",
+ "auto_service_annotations",
+ "asm-commons-9.2",
+ "guava",
+ "asm-tree-9.2",
+ "gson",
+ "asm-9.2",
+ "jsr305",
+ "auto_common",
+ ],
+
+ openjdk9: {
+ javacflags: [
+ "--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",
+ "--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
+ "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
+ ],
+ },
+}
+
+java_plugin {
+ name: "Robolectric_processor_upstream",
+ processor_class: "org.robolectric.annotation.processing.RobolectricProcessor",
+ static_libs: ["libRobolectric_processor_upstream"],
+}
+
+//#############################################
+// Compile Robolectric processor tests
+//#############################################
+java_test_host {
+ name: "Robolectric_processor_tests_upstream",
+ srcs: ["src/test/java/**/*.java"],
+ java_resource_dirs: ["src/test/resources"],
+ java_resources: [":Robolectric_processor_tests_resources_upstream"],
+ static_libs: [
+ "Robolectric_annotations_upstream",
+ "libRobolectric_processor_upstream",
+ "Robolectric_shadowapi_upstream",
+ "robolectric-javax.annotation-api-1.2",
+ "robolectric-compile-testing-0.19",
+ "mockito",
+ "hamcrest",
+ "guava",
+ "objenesis",
+ "junit",
+ "truth-prebuilt",
+ "gson",
+ "jsr305",
+ ],
+
+ test_suites: ["general-tests"],
+
+ // Disable annotation processing while compiling tests to avoid executing RobolectricProcessor.
+ javacflags: ["-proc:none"],
+}
+
+// Workaround: java_resource_dirs ignores *.java files
+filegroup {
+ name: "Robolectric_processor_tests_resources_upstream",
+ path: "src/test/resources",
+ srcs: ["src/test/resources/**/*.java"],
+}
diff --git a/processor/sdks.txt b/processor/sdks.txt
new file mode 100644
index 0000000..b9931ca
--- /dev/null
+++ b/processor/sdks.txt
@@ -0,0 +1,15 @@
+prebuilts/misc/common/robolectric/android-all/android-all-4.1.2_r1-robolectric-r1.jar
+prebuilts/misc/common/robolectric/android-all/android-all-4.2.2_r1.2-robolectric-r1.jar
+prebuilts/misc/common/robolectric/android-all/android-all-4.3_r2-robolectric-r1.jar
+prebuilts/misc/common/robolectric/android-all/android-all-4.4_r1-robolectric-r2.jar
+prebuilts/misc/common/robolectric/android-all/android-all-5.0.2_r3-robolectric-r0.jar
+prebuilts/misc/common/robolectric/android-all/android-all-5.1.1_r9-robolectric-r2.jar
+prebuilts/misc/common/robolectric/android-all/android-all-6.0.1_r3-robolectric-r1.jar
+prebuilts/misc/common/robolectric/android-all/android-all-7.0.0_r1-robolectric-r1.jar
+prebuilts/misc/common/robolectric/android-all/android-all-7.1.0_r7-robolectric-r1.jar
+prebuilts/misc/common/robolectric/android-all/android-all-8.0.0_r4-robolectric-r1.jar
+prebuilts/misc/common/robolectric/android-all/android-all-8.1.0-robolectric-4611349.jar
+prebuilts/misc/common/robolectric/android-all/android-all-9-robolectric-4913185-2.jar
+prebuilts/misc/common/robolectric/android-all/android-all-9plus-robolectric-5616371.jar
+prebuilts/misc/common/robolectric/android-all/android-all-10-robolectric-5803371.jar
+prebuilts/misc/common/robolectric/android-all/android-all-R-beta2-robolectric-6625208.jar
diff --git a/resources/Android.bp b/resources/Android.bp
new file mode 100644
index 0000000..cfdc377
--- /dev/null
+++ b/resources/Android.bp
@@ -0,0 +1,46 @@
+//#############################################
+// Compile Robolectric resources
+//#############################################
+
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "external_robolectric-shadows_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+ name: "Robolectric_resources_upstream",
+ srcs: ["src/main/java/**/*.java"],
+ libs: [
+ "Robolectric_annotations_upstream",
+ "Robolectric_utils_upstream",
+ "guava",
+ "jsr305",
+ ],
+}
+
+//#############################################
+// Compile Robolectric resources tests
+//#############################################
+
+java_test_host {
+ name: "Robolectric_resources_tests_upstream",
+ srcs: ["src/test/java/**/*.java"],
+ static_libs: [
+ "Robolectric_resources_upstream",
+ "Robolectric_annotations_upstream",
+ "Robolectric_utils_upstream",
+ "mockito",
+ "hamcrest",
+ "guava",
+ "objenesis",
+ "junit",
+ "truth-prebuilt",
+ "jsr305",
+ ],
+ java_resource_dirs: ["src/test/resources"],
+ test_suites: ["general-tests"],
+}
diff --git a/resources/src/main/java/org/robolectric/manifest/AndroidManifest.java b/resources/src/main/java/org/robolectric/manifest/AndroidManifest.java
index 82de00f..cfabcbb 100644
--- a/resources/src/main/java/org/robolectric/manifest/AndroidManifest.java
+++ b/resources/src/main/java/org/robolectric/manifest/AndroidManifest.java
@@ -13,6 +13,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.xml.parsers.DocumentBuilder;
@@ -21,6 +22,7 @@
import org.robolectric.res.Fs;
import org.robolectric.res.ResourcePath;
import org.robolectric.res.ResourceTable;
+import org.robolectric.util.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
@@ -165,6 +167,8 @@
return;
}
+ Logger.debug("Manifest file location: " + androidManifestFile);
+
if (androidManifestFile != null && Files.exists(androidManifestFile)) {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
@@ -174,6 +178,9 @@
Document manifestDocument = db.parse(inputStream);
inputStream.close();
+ Logger.debug("Manifest doc:\n" + Files.readAllLines(androidManifestFile).stream().collect(
+ Collectors.joining("\n")));
+
if (!packageNameIsOverridden()) {
packageName = getTagAttributeText(manifestDocument, "manifest", "package");
}
diff --git a/robolectric/Android.bp b/robolectric/Android.bp
new file mode 100644
index 0000000..61359ab
--- /dev/null
+++ b/robolectric/Android.bp
@@ -0,0 +1,98 @@
+//#############################################
+// Compile Robolectric robolectric
+//#############################################
+
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "external_robolectric-shadows_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+ name: "Robolectric_robolectric_upstream",
+ libs: [
+ "Robolectric_shadows_framework_upstream",
+ "Robolectric_annotations_upstream",
+ "Robolectric_shadowapi_upstream",
+ "Robolectric_resources_upstream",
+ "Robolectric_sandbox_upstream",
+ "Robolectric_junit_upstream",
+ "Robolectric_utils_upstream",
+ "Robolectric_utils_reflector_upstream",
+ "robolectric-host-androidx-test-ext-junit_upstream",
+ "robolectric-host-androidx-test-monitor_upstream",
+ "robolectric-maven-ant-tasks-2.1.3",
+ "bouncycastle-unbundled",
+ "asm-commons-9.2",
+ "guava",
+ "robolectric-xstream-1.4.8",
+ "asm-tree-9.2",
+ "junit",
+ "robolectric-ant-1.8.0",
+ "asm-9.2",
+ "jsr305",
+ "conscrypt-unbundled",
+ "robolectric-host-androidx_test_espresso",
+ "robolectric-host-android_all_upstream",
+ ],
+ srcs: ["src/main/java/**/*.java"],
+ plugins: ["auto_service_plugin"],
+ java_resources: [":robolectric-version-upstream.properties"],
+}
+
+genrule {
+ name: "robolectric-version-upstream.properties",
+ out: ["robolectric-version-upstream.properties"],
+ cmd: "echo -n 'robolectric.version=4.8.2-SNAPSHOT' > $(out)",
+}
+
+//#############################################
+// Compile Robolectric robolectric tests
+//#############################################
+java_test_host {
+ name: "Robolectric_robolectric_tests_upstream",
+ srcs: ["src/test/java/**/*.java"],
+ java_resource_dirs: ["src/test/resources"],
+ static_libs: [
+ "Robolectric_robolectric_upstream",
+ "Robolectric_shadows_framework_upstream",
+ "Robolectric_annotations_upstream",
+ "Robolectric_shadowapi_upstream",
+ "Robolectric_resources_upstream",
+ "Robolectric_sandbox_upstream",
+ "Robolectric_junit_upstream",
+ "Robolectric_utils_upstream",
+ "Robolectric_utils_reflector_upstream",
+ "robolectric-host-androidx-test-ext-junit_upstream",
+ "robolectric-host-androidx-test-monitor_upstream",
+ "robolectric-host-androidx-test-core_upstream",
+ "robolectric-maven-ant-tasks-2.1.3",
+ "mockito",
+ "bouncycastle-unbundled",
+ "hamcrest",
+ "hamcrest-library",
+ "robolectric-sqlite4java-0.282",
+ "asm-commons-9.2",
+ "robolectric-diffutils-1.3.0",
+ "guava",
+ "objenesis",
+ "robolectric-xstream-1.4.8",
+ "asm-tree-9.2",
+ "junit",
+ "icu4j",
+ "truth-prebuilt",
+ "truth-java8-extension-jar",
+ "robolectric-ant-1.8.0",
+ "asm-9.2",
+ "jsr305",
+ "robolectric-host-androidx_test_espresso",
+ ],
+ libs: ["robolectric-host-android_all_upstream"],
+ // Robolectric tests do not work well with unit tests setup yet
+ test_options: {
+ unit_test: false,
+ },
+}
diff --git a/robolectric/src/main/java/org/robolectric/android/internal/AndroidTestEnvironment.java b/robolectric/src/main/java/org/robolectric/android/internal/AndroidTestEnvironment.java
index 1189c43..267cc6d 100755
--- a/robolectric/src/main/java/org/robolectric/android/internal/AndroidTestEnvironment.java
+++ b/robolectric/src/main/java/org/robolectric/android/internal/AndroidTestEnvironment.java
@@ -83,6 +83,7 @@
import org.robolectric.shadows.ShadowPackageManager;
import org.robolectric.shadows.ShadowPackageParser;
import org.robolectric.shadows.ShadowPackageParser._Package_;
+import org.robolectric.util.Logger;
import org.robolectric.util.PerfStatsCollector;
import org.robolectric.util.ReflectionHelpers;
import org.robolectric.util.Scheduler;
@@ -149,6 +150,7 @@
loggingInitialized = true;
}
+ Logger.debug("Robolectric Test Configuration: " + configuration.map());
ConscryptMode.Mode conscryptMode = configuration.get(ConscryptMode.Mode.class);
Security.removeProvider(CONSCRYPT_PROVIDER);
if (conscryptMode != ConscryptMode.Mode.OFF) {
diff --git a/robolectric/src/main/java/org/robolectric/internal/dependency/LocalDependencyResolver.java b/robolectric/src/main/java/org/robolectric/internal/dependency/LocalDependencyResolver.java
index 5a77ede..a03f401 100644
--- a/robolectric/src/main/java/org/robolectric/internal/dependency/LocalDependencyResolver.java
+++ b/robolectric/src/main/java/org/robolectric/internal/dependency/LocalDependencyResolver.java
@@ -1,8 +1,13 @@
package org.robolectric.internal.dependency;
import java.io.File;
+import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.stream.Stream;
+import org.robolectric.util.Logger;
public class LocalDependencyResolver implements DependencyResolver {
private File offlineJarDir;
@@ -39,6 +44,12 @@
*/
private static File validateFile(File file) throws IllegalArgumentException {
if (!file.isFile()) {
+ Logger.error("Directory contents: "+ file.getParentFile());
+ try (Stream<Path> stream = Files.list(file.getParentFile().toPath())) {
+ stream.forEach(s -> Logger.error(s.toString()));
+ } catch (IOException ioe) {
+ Logger.error("Not a directory " + file.getParentFile());
+ }
throw new IllegalArgumentException("Path is not a file: " + file);
}
if (!file.canRead()) {
diff --git a/robolectric/src/main/java/org/robolectric/plugins/DefaultSdkProvider.java b/robolectric/src/main/java/org/robolectric/plugins/DefaultSdkProvider.java
index 9a02d6b..c8b2693 100644
--- a/robolectric/src/main/java/org/robolectric/plugins/DefaultSdkProvider.java
+++ b/robolectric/src/main/java/org/robolectric/plugins/DefaultSdkProvider.java
@@ -17,6 +17,9 @@
import static android.os.Build.VERSION_CODES.S;
import static android.os.Build.VERSION_CODES.S_V2;
import static android.os.Build.VERSION_CODES.TIRAMISU;
+import static android.os.Build.VERSION_CODES.CUR_DEVELOPMENT;
+
+import android.os.Build;
import com.google.auto.service.AutoService;
import com.google.common.base.Preconditions;
@@ -82,6 +85,8 @@
knownSdks.put(S, new DefaultSdk(S, "12", "7732740", "REL", 9));
knownSdks.put(S_V2, new DefaultSdk(S_V2, "12.1", "8229987", "REL", 9));
knownSdks.put(TIRAMISU, new DefaultSdk(TIRAMISU, "13", "9030017", "Tiramisu", 9));
+ // TODO(rexhoffman): should this have a dedicated mechanism? Should we maintain a known good version?
+ knownSdks.put(CUR_DEVELOPMENT, new DefaultSdk(CUR_DEVELOPMENT, "current", "r0", "UpsideDownCake", 9));
}
@Override
diff --git a/robolectric/src/main/java/org/robolectric/plugins/LegacyDependencyResolver.java b/robolectric/src/main/java/org/robolectric/plugins/LegacyDependencyResolver.java
index aa72656..ce095a9 100644
--- a/robolectric/src/main/java/org/robolectric/plugins/LegacyDependencyResolver.java
+++ b/robolectric/src/main/java/org/robolectric/plugins/LegacyDependencyResolver.java
@@ -3,9 +3,14 @@
import com.google.auto.service.AutoService;
import com.google.common.annotations.VisibleForTesting;
import java.io.File;
+import java.io.IOException;
import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Properties;
+import java.util.stream.Collectors;
+
import javax.annotation.Priority;
import javax.inject.Inject;
import org.robolectric.internal.dependency.DependencyJar;
@@ -13,6 +18,7 @@
import org.robolectric.internal.dependency.LocalDependencyResolver;
import org.robolectric.internal.dependency.PropertiesDependencyResolver;
import org.robolectric.res.Fs;
+import org.robolectric.util.Logger;
import org.robolectric.util.ReflectionHelpers;
/**
@@ -60,13 +66,16 @@
private static DependencyResolver pickOne(
Properties properties, DefinitelyNotAClassLoader classLoader) {
String propPath = properties.getProperty("robolectric-deps.properties");
+ Logger.debug("Robolectric-deps.properties path :" + propPath);
if (propPath != null) {
- return new PropertiesDependencyResolver(Paths.get(propPath));
+ Path path = Paths.get(propPath);
+ return new PropertiesDependencyResolver(path);
}
String dependencyDir = properties.getProperty("robolectric.dependency.dir");
if (dependencyDir != null
|| Boolean.parseBoolean(properties.getProperty("robolectric.offline"))) {
+ Logger.debug("Dependency dir: " + dependencyDir);
return new LocalDependencyResolver(new File(dependencyDir == null ? "." : dependencyDir));
}
diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowCompanionDeviceManagerTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowCompanionDeviceManagerTest.java
index 304d806..6b7ecd5 100644
--- a/robolectric/src/test/java/org/robolectric/shadows/ShadowCompanionDeviceManagerTest.java
+++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowCompanionDeviceManagerTest.java
@@ -131,6 +131,7 @@
"deviceProfile",
/* selfManaged= */ false,
/* notifyOnDeviceNearby= */ false,
+ /* revoked */ false,
/* timeApprovedMs= */ 0,
/* lastTimeConnectedMs= */ 0);
assertThat(companionDeviceManager.getAssociations()).isEmpty();
diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowDateIntervalFormatTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowDateIntervalFormatTest.java
index bde0e72..f9721e4 100644
--- a/robolectric/src/test/java/org/robolectric/shadows/ShadowDateIntervalFormatTest.java
+++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowDateIntervalFormatTest.java
@@ -1,6 +1,6 @@
package org.robolectric.shadows;
-import static android.os.Build.VERSION_CODES.M;
+import static android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE;
import static com.google.common.truth.Truth.assertThat;
import android.icu.text.DateFormat;
@@ -12,13 +12,13 @@
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
-import libcore.icu.DateIntervalFormat;
+import android.text.format.DateIntervalFormat;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.annotation.Config;
@RunWith(AndroidJUnit4.class)
-@Config(minSdk = M)
+@Config(minSdk = UPSIDE_DOWN_CAKE)
public class ShadowDateIntervalFormatTest {
@Test
public void testDateInterval_FormatDateRange() throws ParseException {
diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowNfcAdapterTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowNfcAdapterTest.java
index 6b849c2..5d43069 100644
--- a/robolectric/src/test/java/org/robolectric/shadows/ShadowNfcAdapterTest.java
+++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowNfcAdapterTest.java
@@ -209,6 +209,6 @@
}
private static Tag createMockTag() {
- return Tag.createMockTag(new byte[0], new int[0], new Bundle[0]);
+ return Tag.createMockTag(new byte[0], new int[0], new Bundle[0], 0L);
}
}
diff --git a/sandbox/Android.bp b/sandbox/Android.bp
new file mode 100644
index 0000000..8244722
--- /dev/null
+++ b/sandbox/Android.bp
@@ -0,0 +1,69 @@
+//#############################################
+// Compile Robolectric sandbox
+//#############################################
+
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "external_robolectric_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+ name: "Robolectric_sandbox_upstream",
+ srcs: ["src/main/java/**/*.java"],
+ libs: [
+ "Robolectric_annotations_upstream",
+ "Robolectric_shadowapi_upstream",
+ "Robolectric_utils_reflector_upstream",
+ "Robolectric_utils_upstream",
+ "asm-commons-9.2",
+ "guava",
+ "asm-tree-9.2",
+ "asm-9.2",
+ "jsr305",
+ ],
+ plugins: [
+ "auto_service_plugin",
+ "auto_value_plugin",
+ ],
+ openjdk9: {
+ javacflags: [
+ "--add-opens=java.base/java.lang=ALL-UNNAMED",
+ ],
+ },
+}
+
+//#############################################
+// Compile Robolectric sandbox tests
+//#############################################
+
+java_test_host {
+ name: "Robolectric_sandbox_tests_upstream",
+ srcs: ["src/test/java/**/*.java"],
+ static_libs: [
+ "Robolectric_annotations_upstream",
+ "Robolectric_shadowapi_upstream",
+ "Robolectric_sandbox_upstream",
+ "Robolectric_utils_reflector_upstream",
+ "Robolectric_utils_upstream",
+ "Robolectric_junit_upstream",
+ "mockito",
+ "hamcrest",
+ "asm-commons-9.2",
+ "guava",
+ "objenesis",
+ "asm-tree-9.2",
+ "junit",
+ "truth-prebuilt",
+ "asm-9.2",
+ "jsr305",
+ ],
+ plugins: [
+ "auto_service_plugin",
+ "auto_value_plugin",
+ ],
+ test_suites: ["general-tests"],
+}
diff --git a/sandbox/src/main/java/org/robolectric/internal/bytecode/ShadowMap.java b/sandbox/src/main/java/org/robolectric/internal/bytecode/ShadowMap.java
index 04a2dc9..cb77a1f 100644
--- a/sandbox/src/main/java/org/robolectric/internal/bytecode/ShadowMap.java
+++ b/sandbox/src/main/java/org/robolectric/internal/bytecode/ShadowMap.java
@@ -14,6 +14,7 @@
import org.robolectric.internal.ShadowProvider;
import org.robolectric.sandbox.ShadowMatcher;
import org.robolectric.shadow.api.ShadowPicker;
+import org.robolectric.util.Logger;
/**
* Maps from instrumented class to shadow class.
@@ -39,7 +40,9 @@
final Map<String, String> shadowPickerMap = new HashMap<>();
// These are sorted in descending order (higher priority providers are first).
+ Logger.debug("Shadow providers: " + sortedProviders);
for (ShadowProvider provider : sortedProviders) {
+ Logger.debug("Shadow provider: " + provider.getClass().getName());
for (Map.Entry<String, String> entry : provider.getShadows()) {
shadowMap.put(entry.getKey(), entry.getValue());
}
diff --git a/shadowapi/Android.bp b/shadowapi/Android.bp
new file mode 100644
index 0000000..0ab69a2
--- /dev/null
+++ b/shadowapi/Android.bp
@@ -0,0 +1,45 @@
+//#############################################
+// Compile Robolectric shadowapi
+//#############################################
+
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "external_robolectric_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+ name: "Robolectric_shadowapi_upstream",
+ libs: [
+ "jsr305",
+ ],
+ static_libs: [
+ "Robolectric_utils_upstream",
+ "Robolectric_annotations_upstream",
+ ],
+ srcs: ["src/main/java/**/*.java"],
+ openjdk9: {
+ javacflags: [
+ "--add-opens=java.base/java.lang=ALL-UNNAMED",
+ ],
+ },
+}
+
+//#############################################
+// Compile Robolectric shadowapi tests
+//#############################################
+java_test_host {
+ name: "Robolectric_shadowapi_tests_upstream",
+ srcs: ["src/test/java/**/*.java"],
+ static_libs: [
+ "Robolectric_shadowapi_upstream",
+ "hamcrest",
+ "guava",
+ "junit",
+ "truth-prebuilt",
+ ],
+ test_suites: ["general-tests"],
+}
diff --git a/shadows/framework/Android.bp b/shadows/framework/Android.bp
new file mode 100644
index 0000000..5b6c149
--- /dev/null
+++ b/shadows/framework/Android.bp
@@ -0,0 +1,68 @@
+//#############################################
+// Compile Robolectric shadows framework
+//#############################################
+
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "external_robolectric_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+ name: "Robolectric_shadows_framework_upstream",
+ srcs: [
+ "src/main/java/**/*.java",
+ "src/main/java/**/*.kt",
+ ],
+ java_resource_dirs: ["src/main/resources"],
+ javacflags: [
+ "-Aorg.robolectric.annotation.processing.shadowPackage=org.robolectric",
+ "-Aorg.robolectric.annotation.processing.sdkCheckMode=ERROR",
+ // Uncomment the below to debug annotation processors not firing.
+ //"-verbose",
+ //"-XprintRounds",
+ //"-XprintProcessorInfo",
+ //"-Xlint",
+ //"-J-verbose",
+ ],
+ libs: [
+ "Robolectric_annotations_upstream",
+ "Robolectric_nativeruntime_upstream",
+ "Robolectric_resources_upstream",
+ "Robolectric_pluginapi_upstream",
+ "Robolectric_sandbox_upstream",
+ "Robolectric_shadowapi_upstream",
+ "Robolectric_utils_upstream",
+ "Robolectric_utils_reflector_upstream",
+ "auto_value_annotations",
+ //jetpack
+ //"androidx.annotation_annotation-nodeps",
+ "jsr305",
+ "icu4j",
+
+ "robolectric-accessibility-test-framework-2.1",
+ "robolectric-javax.annotation-api-1.2",
+ //"hamcrest-library",
+ //"hamcrest",
+ //"stub-annotations",
+ "robolectric-sqlite4java-0.282",
+ "asm-commons-9.2",
+ "guava",
+ "asm-tree-9.2",
+ "asm-9.2",
+ //standard tools
+ "error_prone_annotations",
+ //"grpc-java-netty-shaded",
+ // aar files that make up android and jetpack
+ "robolectric-host-android_all_upstream",
+ ],
+ plugins: [
+ "auto_value_plugin",
+ "auto_value_builder_plugin",
+ "Robolectric_processor_upstream",
+ ],
+
+}
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowCompanionDeviceManager.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowCompanionDeviceManager.java
index 7937487..679ad04 100644
--- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowCompanionDeviceManager.java
+++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowCompanionDeviceManager.java
@@ -22,6 +22,7 @@
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
+
/** Shadow for CompanionDeviceManager. */
@Implements(value = CompanionDeviceManager.class, minSdk = VERSION_CODES.O)
public class ShadowCompanionDeviceManager {
@@ -138,6 +139,7 @@
info.deviceProfile(),
info.selfManaged(),
info.notifyOnDeviceNearby(),
+ info.revoked(),
info.timeApprovedMs(),
info.lastTimeConnectedMs());
}
@@ -152,6 +154,7 @@
info.getDeviceProfile(),
info.isSelfManaged(),
info.isNotifyOnDeviceNearby(),
+ info.isRevoked(),
info.getTimeApprovedMs(),
info.getLastTimeConnectedMs());
}
@@ -182,6 +185,8 @@
public abstract boolean notifyOnDeviceNearby();
+ public abstract boolean revoked();
+
public abstract long timeApprovedMs();
public abstract long lastTimeConnectedMs();
@@ -205,6 +210,7 @@
String deviceProfile,
boolean selfManaged,
boolean notifyOnDeviceNearby,
+ boolean revoked,
long timeApprovedMs,
long lastTimeConnectedMs) {
return RoboAssociationInfo.builder()
@@ -213,10 +219,10 @@
.setPackageName(packageName)
.setDeviceMacAddress(deviceMacAddress)
.setDisplayName(displayName)
- .setDeviceProfile(deviceProfile)
.setSelfManaged(selfManaged)
.setNotifyOnDeviceNearby(notifyOnDeviceNearby)
.setTimeApprovedMs(timeApprovedMs)
+ .setRevoked(revoked)
.setLastTimeConnectedMs(lastTimeConnectedMs)
.build();
}
@@ -240,6 +246,8 @@
public abstract Builder setNotifyOnDeviceNearby(boolean notifyOnDeviceNearby);
+ public abstract Builder setRevoked(boolean revoked);
+
public abstract Builder setTimeApprovedMs(long timeApprovedMs);
public abstract Builder setLastTimeConnectedMs(long lastTimeConnectedMs);
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDateIntervalFormat.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDateIntervalFormat.java
index abbed64..83d5235 100644
--- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDateIntervalFormat.java
+++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDateIntervalFormat.java
@@ -2,16 +2,17 @@
import static android.os.Build.VERSION_CODES.KITKAT;
import static android.os.Build.VERSION_CODES.LOLLIPOP_MR1;
+import static android.os.Build.VERSION_CODES.TIRAMISU;
import java.text.FieldPosition;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
-import libcore.icu.DateIntervalFormat;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
-@Implements(value = DateIntervalFormat.class, isInAndroidSdk = false, minSdk = KITKAT)
+@Implements(className = "libcore.icu.DateIntervalFormat", isInAndroidSdk = false, minSdk = KITKAT,
+ maxSdk = TIRAMISU)
public class ShadowDateIntervalFormat {
private static long address;
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDateIntervalFormatU.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDateIntervalFormatU.java
new file mode 100644
index 0000000..ac435c4
--- /dev/null
+++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDateIntervalFormatU.java
@@ -0,0 +1,42 @@
+package org.robolectric.shadows;
+
+import static android.os.Build.VERSION_CODES.LOLLIPOP_MR1;
+import static android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE;
+
+import java.text.FieldPosition;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import android.text.format.DateIntervalFormat;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+@Implements(value = DateIntervalFormat.class, isInAndroidSdk = false, minSdk = UPSIDE_DOWN_CAKE)
+public class ShadowDateIntervalFormatU {
+
+ private static long address;
+ private static Map<Long, com.ibm.icu.text.DateIntervalFormat> INTERVAL_CACHE = new HashMap<>();
+
+ @Implementation
+ public static long createDateIntervalFormat(String skeleton, String localeName, String tzName) {
+ address++;
+ INTERVAL_CACHE.put(address, com.ibm.icu.text.DateIntervalFormat.getInstance(skeleton, new Locale(localeName)));
+ return address;
+ }
+
+ @Implementation
+ public static void destroyDateIntervalFormat(long address) {
+ INTERVAL_CACHE.remove(address);
+ }
+
+ @Implementation
+ @SuppressWarnings("JdkObsolete")
+ public static String formatDateInterval(long address, long fromDate, long toDate) {
+ StringBuffer buffer = new StringBuffer();
+
+ FieldPosition pos = new FieldPosition(0);
+ INTERVAL_CACHE.get(address).format(new com.ibm.icu.util.DateInterval(fromDate, toDate), buffer, pos);
+
+ return buffer.toString();
+ }
+}
diff --git a/shadows/httpclient/Android.bp b/shadows/httpclient/Android.bp
new file mode 100644
index 0000000..4132f92
--- /dev/null
+++ b/shadows/httpclient/Android.bp
@@ -0,0 +1,78 @@
+//#############################################
+// Compile Robolectric shadows httpclient
+//#############################################
+
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "external_robolectric_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+ name: "Robolectric_shadows_httpclient_upstream",
+ libs: [
+ "Robolectric_shadows_framework_upstream",
+ "Robolectric_annotations_upstream",
+ "Robolectric_shadowapi_upstream",
+ "Robolectric_utils_upstream",
+ "robolectric-httpclient-4.0.3",
+ "robolectric-httpcore-4.0.1",
+ "robolectric-javax.annotation-api-1.2",
+ "robolectric-host-android_all_upstream",
+ "robolectric-host-org_apache_http_legacy_upstream",
+ ],
+ plugins: ["Robolectric_processor_upstream"],
+ javacflags: ["-Aorg.robolectric.annotation.processing.shadowPackage=org.robolectric.shadows.httpclient"],
+ srcs: ["src/main/java/**/*.java"],
+
+ errorprone: {
+ javacflags: ["-Xep:EqualsNull:WARN"],
+ },
+}
+
+//#############################################
+// Compile Robolectric shadows httpclient tests
+//#############################################
+
+java_test_host {
+ name: "Robolectric_shadows_httpclient_tests_upstream",
+ srcs: ["src/test/java/**/*.java"],
+ java_resource_dirs: ["src/test/resources"],
+ static_libs: [
+ "Robolectric_shadows_httpclient_upstream",
+ "Robolectric_shadows_framework_upstream",
+ "Robolectric_annotations_upstream",
+ "Robolectric_robolectric_upstream",
+ "Robolectric_resources_upstream",
+ "Robolectric_shadowapi_upstream",
+ "Robolectric_sandbox_upstream",
+ "Robolectric_junit_upstream",
+ "Robolectric_utils_upstream",
+ "robolectric-maven-ant-tasks-2.1.3",
+ "bouncycastle-unbundled",
+ "hamcrest",
+ "robolectric-httpclient-4.0.3",
+ "asm-commons-9.2",
+ "robolectric-httpcore-4.0.1",
+ "guava",
+ "asm-tree-9.2",
+ "junit",
+ "truth-prebuilt",
+ "robolectric-ant-1.8.0",
+ "asm-9.2",
+ "jsr305",
+ "grpc-java-netty-shaded",
+ //"grpc-netty-shaded-1.16.1-jar",
+ "robolectric-host-android_all_upstream",
+ "robolectric-host-org_apache_http_legacy_upstream",
+ "robolectric-host-androidx-test-ext-junit_upstream",
+ ],
+ test_suites: ["general-tests"],
+ //tradefed doesn't run these tests.
+ test_options: {
+ unit_test: false,
+ },
+}
diff --git a/shadows/multidex/Android.bp b/shadows/multidex/Android.bp
new file mode 100644
index 0000000..91d3379
--- /dev/null
+++ b/shadows/multidex/Android.bp
@@ -0,0 +1,26 @@
+//#############################################
+// Compile Robolectric shadows multidex
+//#############################################
+
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "external_robolectric-shadows_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-MIT
+ default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+ name: "Robolectric_shadows_multidex_upstream",
+ libs: [
+ "Robolectric_annotations_upstream",
+ "Robolectric_shadowapi_upstream",
+ "robolectric-host-android-support-multidex_upstream",
+ "robolectric-javax.annotation-api-1.2",
+ "robolectric-host-android_all_upstream",
+ ],
+ plugins: ["Robolectric_processor_upstream"],
+ javacflags: ["-Aorg.robolectric.annotation.processing.shadowPackage=org.robolectric.shadows.multidex"],
+ srcs: ["src/main/java/**/*.java"],
+}
diff --git a/shadows/playservices/Android.bp b/shadows/playservices/Android.bp
new file mode 100644
index 0000000..4b6635e
--- /dev/null
+++ b/shadows/playservices/Android.bp
@@ -0,0 +1,22 @@
+//#############################################
+// Compile Robolectric shadows playservices
+//#############################################
+
+//java_library_host {
+// name: "Robolectric_shadows_playservices_upstream",
+// libs: [
+// "Robolectric_shadows_framework_upstream",
+// "Robolectric_annotations_upstream",
+// "Robolectric_shadowapi_upstream",
+// "robolectric-javax.annotation-api-1.2",
+// "guava",
+// "robolectric-host-android_all_upstream",
+
+// compileOnly "com.android.support:support-fragment:28.0.0"
+// compileOnly "com.google.android.gms:play-services-base:8.4.0"
+// compileOnly "com.google.android.gms:play-services-basement:8.4.0"
+// ],
+// plugins: ["Robolectric_processor_upstream"],
+// javacflags: ["-Aorg.robolectric.annotation.processing.shadowPackage=org.robolectric.shadows.gms"],
+// srcs: ["src/main/java/**/*.java"],
+//}
diff --git a/utils/Android.bp b/utils/Android.bp
new file mode 100644
index 0000000..bf4009c
--- /dev/null
+++ b/utils/Android.bp
@@ -0,0 +1,56 @@
+//#############################################
+// Compile Robolectric utils
+//#############################################
+
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "external_robolectric_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+ name: "Robolectric_utils_upstream",
+ srcs: ["src/main/java/**/*.java"],
+ common_srcs: ["src/main/java/**/*.kt"],
+ plugins: ["auto_service_plugin"],
+ static_libs: [
+ "robolectric-javax.annotation-api-1.2",
+ "Robolectric_annotations_upstream",
+ "Robolectric_pluginapi_upstream",
+ "error_prone_annotations",
+ "guava",
+ "jsr330",
+ "jsr305",
+ "asm-9.2",
+ "auto_service_annotations",
+ ],
+}
+
+//#############################################
+// Compile Robolectric utils tests
+//#############################################
+
+java_test_host {
+ name: "Robolectric_utils_tests_upstream",
+ srcs: [
+ "src/test/java/**/*.java",
+ "src/test/java/**/*.kt",
+ ],
+ plugins: [
+ "auto_service_plugin",
+ ],
+ static_libs: [
+ "Robolectric_utils_upstream",
+ "hamcrest",
+ "guava",
+ "junit",
+ "error_prone_core",
+ "truth-prebuilt",
+ "asm-9.2",
+ "mockito",
+ ],
+ test_suites: ["general-tests"],
+}
diff --git a/utils/reflector/Android.bp b/utils/reflector/Android.bp
new file mode 100644
index 0000000..800776d
--- /dev/null
+++ b/utils/reflector/Android.bp
@@ -0,0 +1,42 @@
+//#############################################
+// Compile Robolectric utils
+//#############################################
+
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "external_robolectric_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+ name: "Robolectric_utils_reflector_upstream",
+ static_libs: [
+ "Robolectric_utils_upstream",
+ "asm-9.2",
+ "asm-commons-9.2",
+ "asm-tree-9.2",
+ "asm-util-9.2",
+ ],
+ srcs: ["src/main/java/**/*.java"],
+}
+
+//#############################################
+// Compile Robolectric utils tests
+//#############################################
+
+java_test_host {
+ name: "Robolectric_utils_reflector_tests_upstream",
+ srcs: ["src/test/java/**/*.java"],
+ static_libs: [
+ "Robolectric_utils_reflector_upstream",
+ "Robolectric_shadowapi_upstream",
+ "hamcrest",
+ "guava",
+ "junit",
+ "truth-prebuilt",
+ ],
+ test_suites: ["general-tests"],
+}