Merge "Convert TestClasspath to test fixtures" am: 903a8a08ab

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1634634

Change-Id: Id534df47dd13b365247d63e358e05f6bca9fc4bf
This commit is contained in:
Paul Duffin
2021-03-19 11:26:11 +00:00
committed by Automerger Merge Worker
2 changed files with 47 additions and 52 deletions

View File

@@ -245,7 +245,14 @@ func moduleToPath(name string) string {
// defaultModuleToPath constructs a path to the turbine generate jar for a default test module that // defaultModuleToPath constructs a path to the turbine generate jar for a default test module that
// is defined in PrepareForIntegrationTestWithJava // is defined in PrepareForIntegrationTestWithJava
func defaultModuleToPath(name string) string { 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) { func TestJavaLinkType(t *testing.T) {

View File

@@ -27,6 +27,7 @@ import (
) )
func TestClasspath(t *testing.T) { func TestClasspath(t *testing.T) {
const frameworkAidl = "-I" + defaultJavaDir + "/framework/aidl"
var classpathTestcases = []struct { var classpathTestcases = []struct {
name string name string
unbundled bool unbundled bool
@@ -52,7 +53,7 @@ func TestClasspath(t *testing.T) {
system: config.StableCorePlatformSystemModules, system: config.StableCorePlatformSystemModules,
java8classpath: config.FrameworkLibraries, java8classpath: config.FrameworkLibraries,
java9classpath: config.FrameworkLibraries, java9classpath: config.FrameworkLibraries,
aidl: "-Iframework/aidl", aidl: frameworkAidl,
}, },
{ {
name: `sdk_version:"core_platform"`, name: `sdk_version:"core_platform"`,
@@ -69,7 +70,7 @@ func TestClasspath(t *testing.T) {
system: config.StableCorePlatformSystemModules, system: config.StableCorePlatformSystemModules,
java8classpath: config.FrameworkLibraries, java8classpath: config.FrameworkLibraries,
java9classpath: config.FrameworkLibraries, java9classpath: config.FrameworkLibraries,
aidl: "-Iframework/aidl", aidl: frameworkAidl,
}, },
{ {
@@ -263,7 +264,7 @@ func TestClasspath(t *testing.T) {
convertModulesToPaths := func(cp []string) []string { convertModulesToPaths := func(cp []string) []string {
ret := make([]string, len(cp)) ret := make([]string, len(cp))
for i, e := range cp { for i, e := range cp {
ret[i] = moduleToPath(e) ret[i] = defaultModuleToPath(e)
} }
return ret return ret
} }
@@ -299,6 +300,8 @@ func TestClasspath(t *testing.T) {
dir := "" dir := ""
if strings.HasPrefix(testcase.system, "sdk_public_") { if strings.HasPrefix(testcase.system, "sdk_public_") {
dir = "prebuilts/sdk" dir = "prebuilts/sdk"
} else {
dir = defaultJavaDir
} }
system = "--system=" + filepath.Join(buildDir, ".intermediates", dir, testcase.system, "android_common", "system") 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: // 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) { checkClasspath := func(t *testing.T, result *android.TestResult, isJava8 bool) {
foo := ctx.ModuleForTests("foo", variant) foo := result.ModuleForTests("foo", variant)
javac := foo.Rule("javac") javac := foo.Rule("javac")
var deps []string 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 // Test with legacy javac -source 1.8 -target 1.8
t.Run("Java language level 8", func(t *testing.T) { t.Run("Java language level 8", func(t *testing.T) {
config := testConfig(nil, bpJava8, nil) result := fixtureFactory.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 */)
if testcase.host != android.Host { 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) { android.AssertStringDoesContain(t, "aidl command", aidl.RuleParams.Command, testcase.aidl+" -I.")
t.Errorf("want aidl command to contain %q, got %q", w, g)
}
} }
}) })
// Test with default javac -source 9 -target 9 // Test with default javac -source 9 -target 9
t.Run("Java language level 9", func(t *testing.T) { t.Run("Java language level 9", func(t *testing.T) {
config := testConfig(nil, bp, nil) result := fixtureFactory.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 */)
if testcase.host != android.Host { 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) { android.AssertStringDoesContain(t, "aidl command", aidl.RuleParams.Command, testcase.aidl+" -I.")
t.Errorf("want aidl command to contain %q, got %q", w, g)
}
} }
}) })
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 // Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 8 -target 8
t.Run("REL + Java language level 8", func(t *testing.T) { t.Run("REL + Java language level 8", func(t *testing.T) {
config := testConfig(nil, bpJava8, nil) result := fixtureFactory.Extend(prepareWithPlatformVersionRel).RunTestWithBp(t, bpJava8)
config.TestProductVariables.Platform_sdk_codename = proptools.StringPtr("REL")
config.TestProductVariables.Platform_sdk_final = proptools.BoolPtr(true)
if testcase.unbundled { checkClasspath(t, result, true /* isJava8 */)
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 */)
}) })
// Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 9 -target 9 // Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 9 -target 9
t.Run("REL + Java language level 9", func(t *testing.T) { t.Run("REL + Java language level 9", func(t *testing.T) {
config := testConfig(nil, bp, nil) result := fixtureFactory.Extend(prepareWithPlatformVersionRel).RunTestWithBp(t, bp)
config.TestProductVariables.Platform_sdk_codename = proptools.StringPtr("REL")
config.TestProductVariables.Platform_sdk_final = proptools.BoolPtr(true)
if testcase.unbundled { checkClasspath(t, result, false /* isJava8 */)
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 */)
}) })
}) })
} }