Merge "Convert TestClasspath to test fixtures"

This commit is contained in:
Paul Duffin 2021-03-19 11:08:17 +00:00 committed by Gerrit Code Review
commit 903a8a08ab
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
// 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) {

View file

@ -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 */)
})
})
}