diff options
author | Colin Cross <ccross@android.com> | 2019-01-09 22:17:55 -0800 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2019-01-10 07:09:29 +0000 |
commit | fb6d78120233e5aff492fa827c27ba87354fc9e8 (patch) | |
tree | c6164fe2c9a88320aee84a78a9967ba4d0a99f0e /java/sdk_test.go | |
parent | c33514e3b68bf36ddca57624edbaed8005314c0c (diff) | |
download | build_soong-fb6d78120233e5aff492fa827c27ba87354fc9e8.tar.gz build_soong-fb6d78120233e5aff492fa827c27ba87354fc9e8.tar.bz2 build_soong-fb6d78120233e5aff492fa827c27ba87354fc9e8.zip |
Split out sdk.go from java.go
Split out SDK handling functions from java.go to sdk.go and tests
from java_test.go to sdk.go.
Test: sdk_test.go
Change-Id: I83ef48cbe5230572c1d4ecc0e89021d2f7c71b76
Diffstat (limited to 'java/sdk_test.go')
-rw-r--r-- | java/sdk_test.go | 260 |
1 files changed, 260 insertions, 0 deletions
diff --git a/java/sdk_test.go b/java/sdk_test.go new file mode 100644 index 00000000..ced77290 --- /dev/null +++ b/java/sdk_test.go @@ -0,0 +1,260 @@ +// Copyright 2019 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package java + +import ( + "android/soong/android" + "path/filepath" + "reflect" + "strings" + "testing" + + "github.com/google/blueprint/proptools" +) + +var classpathTestcases = []struct { + name string + unbundled bool + moduleType string + host android.OsClass + properties string + bootclasspath []string + system string + classpath []string +}{ + { + name: "default", + bootclasspath: []string{"core.platform.api.stubs", "core-lambda-stubs"}, + system: "core-platform-api-stubs-system-modules", + classpath: []string{"ext", "framework"}, + }, + { + name: "blank sdk version", + properties: `sdk_version: "",`, + bootclasspath: []string{"core.platform.api.stubs", "core-lambda-stubs"}, + system: "core-platform-api-stubs-system-modules", + classpath: []string{"ext", "framework"}, + }, + { + + name: "sdk v14", + properties: `sdk_version: "14",`, + bootclasspath: []string{`""`}, + system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath + classpath: []string{"prebuilts/sdk/14/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, + }, + { + + name: "current", + properties: `sdk_version: "current",`, + bootclasspath: []string{"android_stubs_current", "core-lambda-stubs"}, + system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath + }, + { + + name: "system_current", + properties: `sdk_version: "system_current",`, + bootclasspath: []string{"android_system_stubs_current", "core-lambda-stubs"}, + system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath + }, + { + + name: "system_14", + properties: `sdk_version: "system_14",`, + bootclasspath: []string{`""`}, + system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath + classpath: []string{"prebuilts/sdk/14/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, + }, + { + + name: "test_current", + properties: `sdk_version: "test_current",`, + bootclasspath: []string{"android_test_stubs_current", "core-lambda-stubs"}, + system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath + }, + { + + name: "core_current", + properties: `sdk_version: "core_current",`, + bootclasspath: []string{"core.current.stubs", "core-lambda-stubs"}, + system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath + }, + { + + name: "nostdlib", + properties: `no_standard_libs: true, system_modules: "none"`, + system: "none", + bootclasspath: []string{`""`}, + classpath: []string{}, + }, + { + + name: "nostdlib system_modules", + properties: `no_standard_libs: true, system_modules: "core-platform-api-stubs-system-modules"`, + system: "core-platform-api-stubs-system-modules", + bootclasspath: []string{`""`}, + classpath: []string{}, + }, + { + + name: "host default", + moduleType: "java_library_host", + properties: ``, + host: android.Host, + bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"}, + classpath: []string{}, + }, + { + name: "host nostdlib", + moduleType: "java_library_host", + host: android.Host, + properties: `no_standard_libs: true`, + classpath: []string{}, + }, + { + + name: "host supported default", + host: android.Host, + properties: `host_supported: true,`, + classpath: []string{}, + bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"}, + }, + { + name: "host supported nostdlib", + host: android.Host, + properties: `host_supported: true, no_standard_libs: true, system_modules: "none"`, + classpath: []string{}, + }, + { + + name: "unbundled sdk v14", + unbundled: true, + properties: `sdk_version: "14",`, + bootclasspath: []string{`""`}, + system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath + classpath: []string{"prebuilts/sdk/14/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, + }, + { + + name: "unbundled current", + unbundled: true, + properties: `sdk_version: "current",`, + bootclasspath: []string{`""`}, + system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath + classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, + }, +} + +func TestClasspath(t *testing.T) { + for _, testcase := range classpathTestcases { + t.Run(testcase.name, func(t *testing.T) { + moduleType := "java_library" + if testcase.moduleType != "" { + moduleType = testcase.moduleType + } + + bp := moduleType + ` { + name: "foo", + srcs: ["a.java"], + ` + testcase.properties + ` + }` + + variant := "android_common" + if testcase.host == android.Host { + variant = android.BuildOs.String() + "_common" + } + + convertModulesToPaths := func(cp []string) []string { + ret := make([]string, len(cp)) + for i, e := range cp { + ret[i] = moduleToPath(e) + } + return ret + } + + bootclasspath := convertModulesToPaths(testcase.bootclasspath) + classpath := convertModulesToPaths(testcase.classpath) + + bc := strings.Join(bootclasspath, ":") + if bc != "" { + bc = "-bootclasspath " + bc + } + + c := strings.Join(classpath, ":") + if c != "" { + c = "-classpath " + c + } + system := "" + if testcase.system == "none" { + system = "--system=none" + } else if testcase.system != "" { + system = "--system=" + filepath.Join(buildDir, ".intermediates", testcase.system, "android_common", "system") + "/" + } + + t.Run("1.8", func(t *testing.T) { + // Test default javac 1.8 + config := testConfig(nil) + if testcase.unbundled { + config.TestProductVariables.Unbundled_build = proptools.BoolPtr(true) + } + ctx := testContext(config, bp, nil) + run(t, ctx, config) + + javac := ctx.ModuleForTests("foo", variant).Rule("javac") + + got := javac.Args["bootClasspath"] + if got != bc { + t.Errorf("bootclasspath expected %q != got %q", bc, got) + } + + got = javac.Args["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()) + } + }) + + // Test again with javac 1.9 + t.Run("1.9", func(t *testing.T) { + config := testConfig(map[string]string{"EXPERIMENTAL_USE_OPENJDK9": "true"}) + if testcase.unbundled { + config.TestProductVariables.Unbundled_build = proptools.BoolPtr(true) + } + ctx := testContext(config, bp, nil) + run(t, ctx, config) + + javac := ctx.ModuleForTests("foo", variant).Rule("javac") + got := javac.Args["bootClasspath"] + expected := system + if testcase.system == "bootclasspath" { + expected = bc + } + if got != expected { + t.Errorf("bootclasspath expected %q != got %q", expected, got) + } + }) + }) + } + +} |