diff options
Diffstat (limited to 'java')
| -rw-r--r-- | java/config/config.go | 3 | ||||
| -rw-r--r-- | java/java_test.go | 2 | ||||
| -rw-r--r-- | java/robolectric.go | 69 | ||||
| -rw-r--r-- | java/testing.go | 1 |
4 files changed, 73 insertions, 2 deletions
diff --git a/java/config/config.go b/java/config/config.go index 6a0a10a86..ab5d2e7a7 100644 --- a/java/config/config.go +++ b/java/config/config.go @@ -29,7 +29,7 @@ var ( DefaultBootclasspathLibraries = []string{"core.platform.api.stubs", "core-lambda-stubs"} DefaultSystemModules = "core-platform-api-stubs-system-modules" - DefaultLibraries = []string{"ext", "framework"} + DefaultLibraries = []string{"ext", "framework", "updatable_media_stubs"} DefaultLambdaStubsLibrary = "core-lambda-stubs" SdkLambdaStubsPath = "prebuilts/sdk/tools/core-lambda-stubs.jar" @@ -44,6 +44,7 @@ var ( "conscrypt", "core-oj", "core-libart", + "updatable-media", } ) diff --git a/java/java_test.go b/java/java_test.go index f95f88bb4..d3d5c2459 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -1080,7 +1080,7 @@ func TestPatchModule(t *testing.T) { checkPatchModuleFlag(t, ctx, "foo", "") expected := "java.base=.:" + buildDir checkPatchModuleFlag(t, ctx, "bar", expected) - expected = "java.base=" + strings.Join([]string{".", buildDir, moduleToPath("ext"), moduleToPath("framework")}, ":") + expected = "java.base=" + strings.Join([]string{".", buildDir, moduleToPath("ext"), moduleToPath("framework"), moduleToPath("updatable_media_stubs")}, ":") checkPatchModuleFlag(t, ctx, "baz", expected) }) } diff --git a/java/robolectric.go b/java/robolectric.go index 1de56a5cd..cbe3557bc 100644 --- a/java/robolectric.go +++ b/java/robolectric.go @@ -34,10 +34,17 @@ var robolectricDefaultLibs = []string{ "truth-prebuilt", } +var ( + roboCoverageLibsTag = dependencyTag{name: "roboSrcs"} +) + type robolectricProperties struct { // The name of the android_app module that the tests will run against. Instrumentation_for *string + // Additional libraries for which coverage data should be generated + Coverage_libs []string + Test_options struct { // Timeout in seconds when running the tests. Timeout *int64 @@ -54,6 +61,8 @@ type robolectricTest struct { libs []string tests []string + + roboSrcJar android.Path } func (r *robolectricTest) DepsMutator(ctx android.BottomUpMutatorContext) { @@ -66,11 +75,35 @@ func (r *robolectricTest) DepsMutator(ctx android.BottomUpMutatorContext) { } ctx.AddVariationDependencies(nil, libTag, robolectricDefaultLibs...) + + ctx.AddVariationDependencies(nil, roboCoverageLibsTag, r.robolectricProperties.Coverage_libs...) } func (r *robolectricTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { + roboTestConfig := android.PathForModuleGen(ctx, "robolectric"). + Join(ctx, "com/android/tools/test_config.properties") + + // TODO: this inserts paths to built files into the test, it should really be inserting the contents. + instrumented := ctx.GetDirectDepsWithTag(instrumentationForTag) + + if len(instrumented) != 1 { + panic(fmt.Errorf("expected exactly 1 instrumented dependency, got %d", len(instrumented))) + } + + instrumentedApp, ok := instrumented[0].(*AndroidApp) + if !ok { + ctx.PropertyErrorf("instrumentation_for", "dependency must be an android_app") + } + + generateRoboTestConfig(ctx, roboTestConfig, instrumentedApp) + r.extraResources = android.Paths{roboTestConfig} + r.Library.GenerateAndroidBuildActions(ctx) + roboSrcJar := android.PathForModuleGen(ctx, "robolectric", ctx.ModuleName()+".srcjar") + r.generateRoboSrcJar(ctx, roboSrcJar, instrumentedApp) + r.roboSrcJar = roboSrcJar + for _, dep := range ctx.GetDirectDepsWithTag(libTag) { r.libs = append(r.libs, ctx.OtherModuleName(dep)) } @@ -109,6 +142,41 @@ func shardTests(paths []string, shards int) [][]string { return ret } +func generateRoboTestConfig(ctx android.ModuleContext, outputFile android.WritablePath, instrumentedApp *AndroidApp) { + manifest := instrumentedApp.mergedManifestFile + resourceApk := instrumentedApp.outputFile + + rule := android.NewRuleBuilder() + + rule.Command().Text("rm -f").Output(outputFile) + rule.Command(). + Textf(`echo "android_merged_manifest=%s" >>`, manifest.String()).Output(outputFile).Text("&&"). + Textf(`echo "android_resource_apk=%s" >>`, resourceApk.String()).Output(outputFile). + // Make it depend on the files to which it points so the test file's timestamp is updated whenever the + // contents change + Implicit(manifest). + Implicit(resourceApk) + + rule.Build(pctx, ctx, "generate_test_config", "generate test_config.properties") +} + +func (r *robolectricTest) generateRoboSrcJar(ctx android.ModuleContext, outputFile android.WritablePath, + instrumentedApp *AndroidApp) { + + srcJarArgs := copyOf(instrumentedApp.srcJarArgs) + srcJarDeps := append(android.Paths(nil), instrumentedApp.srcJarDeps...) + + for _, m := range ctx.GetDirectDepsWithTag(roboCoverageLibsTag) { + if dep, ok := m.(Dependency); ok { + depSrcJarArgs, depSrcJarDeps := dep.SrcJarArgs() + srcJarArgs = append(srcJarArgs, depSrcJarArgs...) + srcJarDeps = append(srcJarDeps, depSrcJarDeps...) + } + } + + TransformResourcesToJar(ctx, outputFile, srcJarArgs, srcJarDeps) +} + func (r *robolectricTest) AndroidMk() android.AndroidMkData { data := r.Library.AndroidMk() @@ -144,6 +212,7 @@ func (r *robolectricTest) writeTestRunner(w io.Writer, module, name string, test fmt.Fprintln(w, "LOCAL_JAVA_LIBRARIES :=", module) fmt.Fprintln(w, "LOCAL_JAVA_LIBRARIES += ", strings.Join(r.libs, " ")) fmt.Fprintln(w, "LOCAL_TEST_PACKAGE :=", String(r.robolectricProperties.Instrumentation_for)) + fmt.Fprintln(w, "LOCAL_INSTRUMENT_SRCJARS :=", r.roboSrcJar.String()) fmt.Fprintln(w, "LOCAL_ROBOTEST_FILES :=", strings.Join(tests, " ")) if t := r.robolectricProperties.Test_options.Timeout; t != nil { fmt.Fprintln(w, "LOCAL_ROBOTEST_TIMEOUT :=", *t) diff --git a/java/testing.go b/java/testing.go index 5d116a787..a37c0a9dc 100644 --- a/java/testing.go +++ b/java/testing.go @@ -38,6 +38,7 @@ func GatherRequiredDepsForTest() string { extraModules := []string{ "core-lambda-stubs", "ext", + "updatable_media_stubs", "android_stubs_current", "android_system_stubs_current", "android_test_stubs_current", |