Fix java sdk tests
Fix the java module sdk tests, and expand them to cover testing
all classpaths including for the host.
Test: java_test.go
Change-Id: I71be13cc5545f5c4d5b377c4c8de3dccbb09abf9
diff --git a/java/java_test.go b/java/java_test.go
index 4a6baa9..040adb4 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -56,8 +56,10 @@
ctx := android.NewTestArchContext()
ctx.RegisterModuleType("android_app", android.ModuleFactoryAdaptor(AndroidAppFactory))
ctx.RegisterModuleType("java_library", android.ModuleFactoryAdaptor(LibraryFactory))
+ ctx.RegisterModuleType("java_library_host", android.ModuleFactoryAdaptor(LibraryHostFactory))
ctx.RegisterModuleType("java_import", android.ModuleFactoryAdaptor(ImportFactory))
ctx.RegisterModuleType("java_defaults", android.ModuleFactoryAdaptor(defaultsFactory))
+ ctx.RegisterModuleType("android_prebuilt_sdk", android.ModuleFactoryAdaptor(SdkPrebuiltFactory))
ctx.PreArchMutators(android.RegisterPrebuiltsPreArchMutators)
ctx.PreArchMutators(android.RegisterPrebuiltsPostDepsMutators)
ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
@@ -69,7 +71,9 @@
"framework",
"ext",
"okhttp",
- "sdk_v14",
+ "android_stubs_current",
+ "android_system_stubs_current",
+ "android_test_stubs_current",
}
for _, extra := range extraModules {
@@ -82,13 +86,21 @@
`, extra)
}
+ bp += `
+ android_prebuilt_sdk {
+ name: "sdk_v14",
+ jars: ["sdk_v14.jar"],
+ }
+ `
+
ctx.MockFileSystem(map[string][]byte{
- "Android.bp": []byte(bp),
- "a.java": nil,
- "b.java": nil,
- "c.java": nil,
- "a.jar": nil,
- "b.jar": nil,
+ "Android.bp": []byte(bp),
+ "a.java": nil,
+ "b.java": nil,
+ "c.java": nil,
+ "a.jar": nil,
+ "b.jar": nil,
+ "sdk_v14.jar": nil,
})
_, errs := ctx.ParseBlueprintsFiles("Android.bp")
@@ -99,6 +111,17 @@
return ctx
}
+func moduleToPath(name string) string {
+ switch {
+ case name == `""`:
+ return name
+ case strings.HasPrefix(name, "sdk_v"):
+ return name + ".jar"
+ default:
+ return filepath.Join(buildDir, ".intermediates", name, "android_common", "classes-desugar.jar")
+ }
+}
+
func TestSimple(t *testing.T) {
ctx := testJava(t, `
java_library {
@@ -142,85 +165,130 @@
}
}
-func TestSdk(t *testing.T) {
- t.Skip("not working yet")
+var classpathTestcases = []struct {
+ name string
+ host android.OsClass
+ properties string
+ bootclasspath []string
+ classpath []string
+}{
+ {
+ name: "default",
+ bootclasspath: []string{"core-oj", "core-libart"},
+ classpath: []string{"ext", "framework", "okhttp"},
+ },
+ {
+ name: "blank sdk version",
+ properties: `sdk_version: "",`,
+ bootclasspath: []string{"core-oj", "core-libart"},
+ classpath: []string{"ext", "framework", "okhttp"},
+ },
+ {
- ctx := testJava(t, `
- java_library {
- name: "foo1",
- srcs: ["a.java"],
- }
+ name: "sdk v14",
+ properties: `sdk_version: "14",`,
+ bootclasspath: []string{"sdk_v14"},
+ classpath: []string{},
+ },
+ {
- java_library {
- name: "foo2",
- srcs: ["a.java"],
- sdk_version: "",
- }
+ name: "current",
+ properties: `sdk_version: "current",`,
+ bootclasspath: []string{"android_stubs_current"},
+ classpath: []string{},
+ },
+ {
- java_library {
- name: "foo3",
- srcs: ["a.java"],
- sdk_version: "14",
- }
+ name: "system_current",
+ properties: `sdk_version: "system_current",`,
+ bootclasspath: []string{"android_system_stubs_current"},
+ classpath: []string{},
+ },
+ {
- java_library {
- name: "foo4",
- srcs: ["a.java"],
- sdk_version: "current",
- }
+ name: "test_current",
+ properties: `sdk_version: "test_current",`,
+ bootclasspath: []string{"android_test_stubs_current"},
+ classpath: []string{},
+ },
+ {
- java_library {
- name: "foo5",
- srcs: ["a.java"],
- sdk_version: "system_current",
- }
+ name: "nostdlib",
+ properties: `no_standard_libs: true`,
+ bootclasspath: []string{`""`},
+ classpath: []string{},
+ },
+ {
- java_library {
- name: "foo6",
- srcs: ["a.java"],
- sdk_version: "test_current",
- }
- `)
+ name: "host default",
+ host: android.Host,
+ properties: ``,
+ classpath: []string{},
+ },
+ {
+ name: "host nostdlib",
+ host: android.Host,
+ properties: `no_standard_libs: true`,
+ classpath: []string{},
+ },
+}
- type depType int
- const (
- staticLib = iota
- classpathLib
- bootclasspathLib
- )
+func TestClasspath(t *testing.T) {
+ for _, testcase := range classpathTestcases {
+ t.Run(testcase.name, func(t *testing.T) {
+ hostExtra := ""
+ if testcase.host == android.Host {
+ hostExtra = "_host"
+ }
+ ctx := testJava(t, `
+ java_library`+hostExtra+` {
+ name: "foo",
+ srcs: ["a.java"],
+ `+testcase.properties+`
+ }
+ `)
- check := func(module string, depType depType, deps ...string) {
- for i := range deps {
- deps[i] = filepath.Join(buildDir, ".intermediates", deps[i], "classes-desugar.jar")
- }
- dep := strings.Join(deps, ":")
+ convertModulesToPaths := func(cp []string) []string {
+ ret := make([]string, len(cp))
+ for i, e := range cp {
+ ret[i] = moduleToPath(e)
+ }
+ return ret
+ }
- javac := ctx.ModuleForTests(module, "").Rule("javac")
+ bootclasspath := convertModulesToPaths(testcase.bootclasspath)
+ classpath := convertModulesToPaths(testcase.classpath)
- if depType == bootclasspathLib {
+ variant := "android_common"
+ if testcase.host == android.Host {
+ variant = android.BuildOs.String() + "_common"
+ }
+ javac := ctx.ModuleForTests("foo", variant).Rule("javac")
+
got := strings.TrimPrefix(javac.Args["bootClasspath"], "-bootclasspath ")
- if got != dep {
- t.Errorf("module %q bootclasspath %q != %q", module, got, dep)
+ bc := strings.Join(bootclasspath, ":")
+ if got != bc {
+ t.Errorf("bootclasspath expected %q != got %q", bc, got)
}
- } else if depType == classpathLib {
- got := strings.TrimPrefix(javac.Args["classpath"], "-classpath ")
- if got != dep {
- t.Errorf("module %q classpath %q != %q", module, got, dep)
- }
- }
- if !reflect.DeepEqual(javac.Implicits.Strings(), deps) {
- t.Errorf("module %q implicits %q != %q", module, javac.Implicits.Strings(), deps)
- }
+ got = strings.TrimPrefix(javac.Args["classpath"], "-classpath ")
+ c := strings.Join(classpath, ":")
+ if got != c {
+ t.Errorf("classpath expected %q != got %q", c, got)
+ }
+
+ var deps []string
+ if len(bootclasspath) > 0 && bootclasspath[0] != `""` {
+ deps = append(deps, bootclasspath...)
+ }
+ deps = append(deps, classpath...)
+
+ if !reflect.DeepEqual(javac.Implicits.Strings(), deps) {
+ t.Errorf("implicits expected %q != got %q", deps, javac.Implicits.Strings())
+ }
+ })
}
- check("foo1", bootclasspathLib, "core-oj", "core-libart")
- check("foo2", bootclasspathLib, "core-oj", "core-libart")
- // TODO(ccross): these need the arch mutator to run to work correctly
- //check("foo3", bootclasspathLib, "sdk_v14")
- //check("foo4", bootclasspathLib, "android_stubs_current")
- //check("foo5", bootclasspathLib, "android_system_stubs_current")
- //check("foo6", bootclasspathLib, "android_test_stubs_current")
}
func TestPrebuilts(t *testing.T) {