From 76101fa5ece8e74a3b5a409185af00c9fa25c4d6 Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Sat, 13 Mar 2021 09:55:25 +0000 Subject: [PATCH] Convert TestClasspath to test fixtures The main complication with this change was that many of the tests check paths that are provided by the default java modules. The location of them is different in the test fixtures that it is when using testConfig() and so the test needed to be changed. Bug: 182638834 Test: m nothing Change-Id: I6d325dbd3ba39e5de7e53c576d7cfe07bd95a965 --- java/java_test.go | 9 ++++- java/sdk_test.go | 90 ++++++++++++++++++++--------------------------- 2 files changed, 47 insertions(+), 52 deletions(-) diff --git a/java/java_test.go b/java/java_test.go index 2eb724185..533055618 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -247,7 +247,14 @@ func moduleToPath(name string) string { // defaultModuleToPath constructs a path to the turbine generate jar for a default test module that // is defined in PrepareForIntegrationTestWithJava func defaultModuleToPath(name string) string { - return filepath.Join(buildDir, ".intermediates", defaultJavaDir, name, "android_common", "turbine-combined", name+".jar") + switch { + case name == `""`: + return name + case strings.HasSuffix(name, ".jar"): + return name + default: + return filepath.Join(buildDir, ".intermediates", defaultJavaDir, name, "android_common", "turbine-combined", name+".jar") + } } func TestJavaLinkType(t *testing.T) { diff --git a/java/sdk_test.go b/java/sdk_test.go index dc90ea304..50755cf89 100644 --- a/java/sdk_test.go +++ b/java/sdk_test.go @@ -27,6 +27,7 @@ import ( ) func TestClasspath(t *testing.T) { + const frameworkAidl = "-I" + defaultJavaDir + "/framework/aidl" var classpathTestcases = []struct { name string unbundled bool @@ -52,7 +53,7 @@ func TestClasspath(t *testing.T) { system: config.StableCorePlatformSystemModules, java8classpath: config.FrameworkLibraries, java9classpath: config.FrameworkLibraries, - aidl: "-Iframework/aidl", + aidl: frameworkAidl, }, { name: `sdk_version:"core_platform"`, @@ -69,7 +70,7 @@ func TestClasspath(t *testing.T) { system: config.StableCorePlatformSystemModules, java8classpath: config.FrameworkLibraries, java9classpath: config.FrameworkLibraries, - aidl: "-Iframework/aidl", + aidl: frameworkAidl, }, { @@ -263,7 +264,7 @@ func TestClasspath(t *testing.T) { convertModulesToPaths := func(cp []string) []string { ret := make([]string, len(cp)) for i, e := range cp { - ret[i] = moduleToPath(e) + ret[i] = defaultModuleToPath(e) } return ret } @@ -299,6 +300,8 @@ func TestClasspath(t *testing.T) { dir := "" if strings.HasPrefix(testcase.system, "sdk_public_") { dir = "prebuilts/sdk" + } else { + dir = defaultJavaDir } system = "--system=" + filepath.Join(buildDir, ".intermediates", dir, testcase.system, "android_common", "system") // The module-relative parts of these paths are hardcoded in system_modules.go: @@ -309,8 +312,8 @@ func TestClasspath(t *testing.T) { } } - checkClasspath := func(t *testing.T, ctx *android.TestContext, isJava8 bool) { - foo := ctx.ModuleForTests("foo", variant) + checkClasspath := func(t *testing.T, result *android.TestResult, isJava8 bool) { + foo := result.ModuleForTests("foo", variant) javac := foo.Rule("javac") var deps []string @@ -349,78 +352,63 @@ func TestClasspath(t *testing.T) { } } + fixtureFactory := javaFixtureFactory.Extend( + android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { + if testcase.unbundled { + variables.Unbundled_build = proptools.BoolPtr(true) + variables.Always_use_prebuilt_sdks = proptools.BoolPtr(true) + } + }), + android.FixtureModifyEnv(func(env map[string]string) { + if env["ANDROID_JAVA8_HOME"] == "" { + env["ANDROID_JAVA8_HOME"] = "jdk8" + } + }), + ) + // Test with legacy javac -source 1.8 -target 1.8 t.Run("Java language level 8", func(t *testing.T) { - config := testConfig(nil, bpJava8, nil) - if testcase.unbundled { - config.TestProductVariables.Unbundled_build = proptools.BoolPtr(true) - config.TestProductVariables.Always_use_prebuilt_sdks = proptools.BoolPtr(true) - } - ctx := testContext(config) - run(t, ctx, config) + result := fixtureFactory.RunTestWithBp(t, bpJava8) - checkClasspath(t, ctx, true /* isJava8 */) + checkClasspath(t, result, true /* isJava8 */) if testcase.host != android.Host { - aidl := ctx.ModuleForTests("foo", variant).Rule("aidl") + aidl := result.ModuleForTests("foo", variant).Rule("aidl") - if g, w := aidl.RuleParams.Command, testcase.aidl+" -I."; !strings.Contains(g, w) { - t.Errorf("want aidl command to contain %q, got %q", w, g) - } + android.AssertStringDoesContain(t, "aidl command", aidl.RuleParams.Command, testcase.aidl+" -I.") } }) // Test with default javac -source 9 -target 9 t.Run("Java language level 9", func(t *testing.T) { - config := testConfig(nil, bp, nil) - if testcase.unbundled { - config.TestProductVariables.Unbundled_build = proptools.BoolPtr(true) - config.TestProductVariables.Always_use_prebuilt_sdks = proptools.BoolPtr(true) - } - ctx := testContext(config) - run(t, ctx, config) + result := fixtureFactory.RunTestWithBp(t, bp) - checkClasspath(t, ctx, false /* isJava8 */) + checkClasspath(t, result, false /* isJava8 */) if testcase.host != android.Host { - aidl := ctx.ModuleForTests("foo", variant).Rule("aidl") + aidl := result.ModuleForTests("foo", variant).Rule("aidl") - if g, w := aidl.RuleParams.Command, testcase.aidl+" -I."; !strings.Contains(g, w) { - t.Errorf("want aidl command to contain %q, got %q", w, g) - } + android.AssertStringDoesContain(t, "aidl command", aidl.RuleParams.Command, testcase.aidl+" -I.") } }) + prepareWithPlatformVersionRel := android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { + variables.Platform_sdk_codename = proptools.StringPtr("REL") + variables.Platform_sdk_final = proptools.BoolPtr(true) + }) + // Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 8 -target 8 t.Run("REL + Java language level 8", func(t *testing.T) { - config := testConfig(nil, bpJava8, nil) - config.TestProductVariables.Platform_sdk_codename = proptools.StringPtr("REL") - config.TestProductVariables.Platform_sdk_final = proptools.BoolPtr(true) + result := fixtureFactory.Extend(prepareWithPlatformVersionRel).RunTestWithBp(t, bpJava8) - if testcase.unbundled { - config.TestProductVariables.Unbundled_build = proptools.BoolPtr(true) - config.TestProductVariables.Always_use_prebuilt_sdks = proptools.BoolPtr(true) - } - ctx := testContext(config) - run(t, ctx, config) - - checkClasspath(t, ctx, true /* isJava8 */) + checkClasspath(t, result, true /* isJava8 */) }) // Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 9 -target 9 t.Run("REL + Java language level 9", func(t *testing.T) { - config := testConfig(nil, bp, nil) - config.TestProductVariables.Platform_sdk_codename = proptools.StringPtr("REL") - config.TestProductVariables.Platform_sdk_final = proptools.BoolPtr(true) + result := fixtureFactory.Extend(prepareWithPlatformVersionRel).RunTestWithBp(t, bp) - if testcase.unbundled { - config.TestProductVariables.Unbundled_build = proptools.BoolPtr(true) - config.TestProductVariables.Always_use_prebuilt_sdks = proptools.BoolPtr(true) - } - ctx := testContext(config) - run(t, ctx, config) - - checkClasspath(t, ctx, false /* isJava8 */) + checkClasspath(t, result, false /* isJava8 */) }) }) }