From b323c9112e5dd65a7e302d9a4e7d2a3e05bdc611 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Tue, 24 Sep 2024 15:21:00 -0700 Subject: Fix coverage when transitive jars are enabled Coverage instrumentation is performed on the combined jar contaning all the transitive dependencies, replace the exported list of transitive dependencies with the instrumented jar. This relands I1f417f5b4dc8e895eb1800da39121e0aefc754d9 with a fix to prevent using the instrumented jar as a dependency. Bug: 368161965 Test: TestCoverage Flag: EXEMPT bugfix Change-Id: I73ba60bcda241e6b4522310a9c65f717869638a6 --- java/java_test.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'java/java_test.go') diff --git a/java/java_test.go b/java/java_test.go index c13db3e30..dbbf4a8af 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -3065,6 +3065,43 @@ func TestJavaLibraryOutputFilesRel(t *testing.T) { "baz.jar", bazOutputPaths[0].Rel()) } +func TestCoverage(t *testing.T) { + result := android.GroupFixturePreparers( + PrepareForTestWithJavaDefaultModules, + prepareForTestWithFrameworkJacocoInstrumentation, + PrepareForTestWithTransitiveClasspathEnabled, + ).RunTestWithBp(t, ` + android_app { + name: "foo", + srcs: ["foo.java"], + static_libs: ["android.car"], + platform_apis: true, + } + + // A library in InstrumentFrameworkModules + java_library { + name: "android.car", + srcs: ["android.car.java"], + } + `) + + foo := result.ModuleForTests("foo", "android_common") + androidCar := result.ModuleForTests("android.car", "android_common") + + fooJacoco := foo.Rule("jacoco") + fooCombine := foo.Description("for javac") + + androidCarJacoco := androidCar.Rule("jacoco") + androidCarJavac := androidCar.Rule("javac") + + android.AssertStringEquals(t, "foo instrumentation rule inputs", fooJacoco.Input.String(), fooCombine.Output.String()) + android.AssertStringEquals(t, "android.car instrumentation rule inputs", androidCarJacoco.Input.String(), androidCarJavac.Output.String()) + + // The input to instrumentation for the `foo` app contains the non-instrumented android.car classes. + android.AssertStringListContains(t, "foo combined inputs", fooCombine.Inputs.Strings(), androidCarJavac.Output.String()) + android.AssertStringListDoesNotContain(t, "foo combined inputs", fooCombine.Inputs.Strings(), androidCarJacoco.Output.String()) +} + func assertTestOnlyAndTopLevel(t *testing.T, ctx *android.TestResult, expectedTestOnly []string, expectedTopLevel []string) { t.Helper() actualTrueModules := []string{} -- cgit v1.2.3-59-g8ed1b