diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-12-03 02:13:19 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-12-03 02:13:19 +0000 |
commit | ca53228942752e41d9490231874816b5505b2886 (patch) | |
tree | d1df9bc8eeba4d5a12d46fc653ece24d4e3f123e | |
parent | 268202aa20be4e2dc812e24a42ec43d97daae691 (diff) | |
parent | fb49c9f79b6c445d68cec5fc9d70612a5af525a6 (diff) | |
download | robolectric-android13-d4-s2-release.tar.gz |
Snap for 9364794 from fb49c9f79b6c445d68cec5fc9d70612a5af525a6 to tm-d4-releaseandroid-13.0.0_r48android-13.0.0_r47android-13.0.0_r46android13-d4-s2-releaseandroid13-d4-s1-releaseandroid13-d4-release
Change-Id: I6e0fdc1c102a82e0d4af87f76bb34be9c534d370
26 files changed, 1070 insertions, 3 deletions
diff --git a/Android.bp b/Android.bp new file mode 100644 index 000000000..84d7af206 --- /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/annotations/Android.bp b/annotations/Android.bp new file mode 100644 index 000000000..b325236d0 --- /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 000000000..3ada376d0 --- /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 000000000..0d5484328 --- /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 000000000..085c62bf8 --- /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 000000000..9d2832292 --- /dev/null +++ b/processor/Android.bp @@ -0,0 +1,93 @@ +//############################################# +// 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-prebuilt-jar-2.9.1", + "asm-9.2", + "jsr305", + "auto-common-1.1.2", + ], + + 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-prebuilt-jar-2.9.1", + "jsr305", + ], + + test_suites: ["general-tests"], + + // Disable annotation processing while compiling tests to avoid executing RobolectricProcessor. + javacflags: ["-proc:none"], + + // Disabling as javahost test is broken bramble + test_options: { + unit_test: false, + }, + +} + +// 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 000000000..b9931ca3d --- /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 000000000..cfdc377ce --- /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 82de00f79..cfabcbb2b 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.LinkedHashSet; 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.pluginapi.UsesSdk; 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 @@ public class AndroidManifest implements UsesSdk { return; } + Logger.debug("Manifest file location: " + androidManifestFile); + if (androidManifestFile != null && Files.exists(androidManifestFile)) { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); @@ -174,6 +178,9 @@ public class AndroidManifest implements UsesSdk { 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 000000000..61359ab64 --- /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 1189c43c6..267cc6df7 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.ShadowLooper; 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 @@ public class AndroidTestEnvironment implements TestEnvironment { 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 5a77ede9b..a03f401c4 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 @@ public class LocalDependencyResolver implements DependencyResolver { */ 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 9a02d6b8a..c8b2693ea 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.R; 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 @@ public class DefaultSdkProvider implements SdkProvider { 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 aa72656ec..ce095a9cc 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 @@ package org.robolectric.plugins; 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.DependencyResolver; 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 @@ public class LegacyDependencyResolver implements DependencyResolver { 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 8437c7af3..6b7a35c10 100644 --- a/robolectric/src/test/java/org/robolectric/shadows/ShadowCompanionDeviceManagerTest.java +++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowCompanionDeviceManagerTest.java @@ -129,6 +129,7 @@ public class ShadowCompanionDeviceManagerTest { "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/ShadowNfcAdapterTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowNfcAdapterTest.java index 6b849c2ef..5d43069b5 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 @@ public class ShadowNfcAdapterTest { } 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 000000000..8244722df --- /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 39cfd0199..401cae184 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.annotation.Implements; 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 @@ public class ShadowMap { 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 000000000..0ab69a230 --- /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 000000000..04ba8ff71 --- /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_1.9", + "auto_value_builder_plugin_1.9", + "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 79374877d..679ad04cc 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 java.util.concurrent.Executor; 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 @@ public class ShadowCompanionDeviceManager { info.deviceProfile(), info.selfManaged(), info.notifyOnDeviceNearby(), + info.revoked(), info.timeApprovedMs(), info.lastTimeConnectedMs()); } @@ -152,6 +154,7 @@ public class ShadowCompanionDeviceManager { info.getDeviceProfile(), info.isSelfManaged(), info.isNotifyOnDeviceNearby(), + info.isRevoked(), info.getTimeApprovedMs(), info.getLastTimeConnectedMs()); } @@ -182,6 +185,8 @@ public class ShadowCompanionDeviceManager { public abstract boolean notifyOnDeviceNearby(); + public abstract boolean revoked(); + public abstract long timeApprovedMs(); public abstract long lastTimeConnectedMs(); @@ -205,6 +210,7 @@ public class ShadowCompanionDeviceManager { String deviceProfile, boolean selfManaged, boolean notifyOnDeviceNearby, + boolean revoked, long timeApprovedMs, long lastTimeConnectedMs) { return RoboAssociationInfo.builder() @@ -213,10 +219,10 @@ public class ShadowCompanionDeviceManager { .setPackageName(packageName) .setDeviceMacAddress(deviceMacAddress) .setDisplayName(displayName) - .setDeviceProfile(deviceProfile) .setSelfManaged(selfManaged) .setNotifyOnDeviceNearby(notifyOnDeviceNearby) .setTimeApprovedMs(timeApprovedMs) + .setRevoked(revoked) .setLastTimeConnectedMs(lastTimeConnectedMs) .build(); } @@ -240,6 +246,8 @@ public class ShadowCompanionDeviceManager { 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/httpclient/Android.bp b/shadows/httpclient/Android.bp new file mode 100644 index 000000000..4132f92d9 --- /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 000000000..91d3379c0 --- /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 000000000..4b6635e65 --- /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 000000000..bf4009cab --- /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 000000000..800776d50 --- /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"], +} |