From 2787e8e65e91330a42005674ef6f45f59f6cbc63 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Fri, 5 Mar 2021 11:16:20 -0800 Subject: [PATCH] Support robolectric prebuilts in android_robolectric_test The version of robolectric in external/robolectric-shadows is based on 4.1 and is difficult to update. Support using the prebuilt versions in prebuilts/misc/common/robolectric, with the caveat that they won't support the in-progress SDK version. Bug: 181886851 Test: manual Change-Id: Ie3a861cf6d637f97cf00212c02322f92c1043f0a --- java/robolectric.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/java/robolectric.go b/java/robolectric.go index 98bb71040..00f233ebf 100644 --- a/java/robolectric.go +++ b/java/robolectric.go @@ -31,13 +31,15 @@ func init() { } var robolectricDefaultLibs = []string{ - "Robolectric_all-target", "mockito-robolectric-prebuilt", "truth-prebuilt", // TODO(ccross): this is not needed at link time "junitxml", } +const robolectricCurrentLib = "Robolectric_all-target" +const robolectricPrebuiltLibPattern = "platform-robolectric-%s-prebuilt" + var ( roboCoverageLibsTag = dependencyTag{name: "roboCoverageLibs"} roboRuntimesTag = dependencyTag{name: "roboRuntimes"} @@ -57,6 +59,10 @@ type robolectricProperties struct { // Number of shards to use when running the tests. Shards *int64 } + + // The version number of a robolectric prebuilt to use from prebuilts/misc/common/robolectric + // instead of the one built from source in external/robolectric-shadows. + Robolectric_prebuilt_version *string } type robolectricTest struct { @@ -94,6 +100,12 @@ func (r *robolectricTest) DepsMutator(ctx android.BottomUpMutatorContext) { ctx.PropertyErrorf("instrumentation_for", "missing required instrumented module") } + if v := String(r.robolectricProperties.Robolectric_prebuilt_version); v != "" { + ctx.AddVariationDependencies(nil, libTag, fmt.Sprintf(robolectricPrebuiltLibPattern, v)) + } else { + ctx.AddVariationDependencies(nil, libTag, robolectricCurrentLib) + } + ctx.AddVariationDependencies(nil, libTag, robolectricDefaultLibs...) ctx.AddVariationDependencies(nil, roboCoverageLibsTag, r.robolectricProperties.Coverage_libs...) @@ -298,7 +310,11 @@ func (r *robolectricTest) writeTestRunner(w io.Writer, module, name string, test if t := r.robolectricProperties.Test_options.Timeout; t != nil { fmt.Fprintln(w, "LOCAL_ROBOTEST_TIMEOUT :=", *t) } - fmt.Fprintln(w, "-include external/robolectric-shadows/run_robotests.mk") + if v := String(r.robolectricProperties.Robolectric_prebuilt_version); v != "" { + fmt.Fprintf(w, "-include prebuilts/misc/common/robolectric/%s/run_robotests.mk\n", v) + } else { + fmt.Fprintln(w, "-include external/robolectric-shadows/run_robotests.mk") + } } // An android_robolectric_test module compiles tests against the Robolectric framework that can run on the local host