blob: 28b962432fe1702dd5212aabdda835a7b033eaa4 [file] [log] [blame]
Colin Crossfb6d7812019-01-09 22:17:55 -08001// Copyright 2019 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package java
16
17import (
Colin Crossfb6d7812019-01-09 22:17:55 -080018 "path/filepath"
Colin Crossfb6d7812019-01-09 22:17:55 -080019 "strings"
20 "testing"
21
22 "github.com/google/blueprint/proptools"
Colin Cross60405e52019-04-18 12:31:22 -070023
24 "android/soong/android"
25 "android/soong/java/config"
Colin Crossfb6d7812019-01-09 22:17:55 -080026)
27
Colin Crossfb6d7812019-01-09 22:17:55 -080028func TestClasspath(t *testing.T) {
Paul Duffin76101fa2021-03-13 09:55:25 +000029 const frameworkAidl = "-I" + defaultJavaDir + "/framework/aidl"
Colin Cross3047fa22019-04-18 10:56:44 -070030 var classpathTestcases = []struct {
Colin Cross617b1452019-10-25 15:22:50 -070031 name string
32 unbundled bool
Colin Cross617b1452019-10-25 15:22:50 -070033 moduleType string
34 host android.OsClass
35 properties string
36
37 // for java 8
38 bootclasspath []string
39 java8classpath []string
40
41 // for java 9
42 system string
43 java9classpath []string
44
45 forces8 bool // if set, javac will always be called with java 8 arguments
46
47 aidl string
Colin Cross3047fa22019-04-18 10:56:44 -070048 }{
49 {
Colin Cross617b1452019-10-25 15:22:50 -070050 name: "default",
Pete Gillin84c38072020-07-09 18:03:41 +010051 bootclasspath: config.StableCorePlatformBootclasspathLibraries,
52 system: config.StableCorePlatformSystemModules,
Pete Gillin0638dfc2020-07-01 10:48:14 +010053 java8classpath: config.FrameworkLibraries,
54 java9classpath: config.FrameworkLibraries,
Paul Duffin76101fa2021-03-13 09:55:25 +000055 aidl: frameworkAidl,
Colin Cross3047fa22019-04-18 10:56:44 -070056 },
57 {
Colin Cross617b1452019-10-25 15:22:50 -070058 name: `sdk_version:"core_platform"`,
59 properties: `sdk_version:"core_platform"`,
Pete Gillin84c38072020-07-09 18:03:41 +010060 bootclasspath: config.StableCorePlatformBootclasspathLibraries,
61 system: config.StableCorePlatformSystemModules,
Colin Cross617b1452019-10-25 15:22:50 -070062 java8classpath: []string{},
63 aidl: "",
Paul Duffin50c217c2019-06-12 13:25:22 +010064 },
65 {
Colin Cross617b1452019-10-25 15:22:50 -070066 name: "blank sdk version",
67 properties: `sdk_version: "",`,
Pete Gillin84c38072020-07-09 18:03:41 +010068 bootclasspath: config.StableCorePlatformBootclasspathLibraries,
69 system: config.StableCorePlatformSystemModules,
Pete Gillin0638dfc2020-07-01 10:48:14 +010070 java8classpath: config.FrameworkLibraries,
71 java9classpath: config.FrameworkLibraries,
Paul Duffin76101fa2021-03-13 09:55:25 +000072 aidl: frameworkAidl,
Colin Cross3047fa22019-04-18 10:56:44 -070073 },
74 {
75
Colin Cross74362a42019-10-28 08:05:02 -070076 name: "sdk v29",
77 properties: `sdk_version: "29",`,
Colin Cross617b1452019-10-25 15:22:50 -070078 bootclasspath: []string{`""`},
79 forces8: true,
Colin Cross74362a42019-10-28 08:05:02 -070080 java8classpath: []string{"prebuilts/sdk/29/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
81 aidl: "-pprebuilts/sdk/29/public/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -070082 },
83 {
84
Colin Cross17dec172020-05-14 18:05:32 -070085 name: "sdk v30",
86 properties: `sdk_version: "30",`,
87 bootclasspath: []string{`""`},
88 system: "sdk_public_30_system_modules",
89 java8classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
90 java9classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
91 aidl: "-pprebuilts/sdk/30/public/framework.aidl",
92 },
93 {
94
Colin Cross6cef4812019-10-17 14:23:50 -070095 name: "current",
96 properties: `sdk_version: "current",`,
97 bootclasspath: []string{"android_stubs_current", "core-lambda-stubs"},
98 system: "core-current-stubs-system-modules",
99 java9classpath: []string{"android_stubs_current"},
Paul Duffin414ea5e2021-03-22 17:31:52 +0000100 aidl: "-pout/soong/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700101 },
102 {
103
Colin Cross6cef4812019-10-17 14:23:50 -0700104 name: "system_current",
105 properties: `sdk_version: "system_current",`,
106 bootclasspath: []string{"android_system_stubs_current", "core-lambda-stubs"},
107 system: "core-current-stubs-system-modules",
108 java9classpath: []string{"android_system_stubs_current"},
Paul Duffin414ea5e2021-03-22 17:31:52 +0000109 aidl: "-pout/soong/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700110 },
111 {
112
Colin Cross74362a42019-10-28 08:05:02 -0700113 name: "system_29",
114 properties: `sdk_version: "system_29",`,
Colin Cross617b1452019-10-25 15:22:50 -0700115 bootclasspath: []string{`""`},
116 forces8: true,
Colin Cross74362a42019-10-28 08:05:02 -0700117 java8classpath: []string{"prebuilts/sdk/29/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
118 aidl: "-pprebuilts/sdk/29/public/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700119 },
120 {
121
Colin Cross17dec172020-05-14 18:05:32 -0700122 name: "system_30",
123 properties: `sdk_version: "system_30",`,
124 bootclasspath: []string{`""`},
125 system: "sdk_public_30_system_modules",
126 java8classpath: []string{"prebuilts/sdk/30/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
127 java9classpath: []string{"prebuilts/sdk/30/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
128 aidl: "-pprebuilts/sdk/30/public/framework.aidl",
129 },
130 {
Colin Cross6cef4812019-10-17 14:23:50 -0700131 name: "test_current",
132 properties: `sdk_version: "test_current",`,
133 bootclasspath: []string{"android_test_stubs_current", "core-lambda-stubs"},
134 system: "core-current-stubs-system-modules",
135 java9classpath: []string{"android_test_stubs_current"},
Paul Duffin414ea5e2021-03-22 17:31:52 +0000136 aidl: "-pout/soong/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700137 },
138 {
Paul Duffin12e311d2021-10-28 17:42:16 +0100139 name: "test_30",
140 properties: `sdk_version: "test_30",`,
141 bootclasspath: []string{`""`},
142 system: "sdk_public_30_system_modules",
143 java8classpath: []string{"prebuilts/sdk/30/test/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
144 java9classpath: []string{"prebuilts/sdk/30/test/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
145 aidl: "-pprebuilts/sdk/30/public/framework.aidl",
146 },
147 {
Colin Cross3047fa22019-04-18 10:56:44 -0700148
Pete Gillin880f9642020-07-01 13:17:16 +0100149 name: "core_current",
150 properties: `sdk_version: "core_current",`,
151 bootclasspath: []string{"core.current.stubs", "core-lambda-stubs"},
152 system: "core-current-stubs-system-modules",
Colin Cross3047fa22019-04-18 10:56:44 -0700153 },
154 {
155
Colin Cross617b1452019-10-25 15:22:50 -0700156 name: "nostdlib",
157 properties: `sdk_version: "none", system_modules: "none"`,
158 system: "none",
159 bootclasspath: []string{`""`},
160 java8classpath: []string{},
Paul Duffin52d398a2019-06-11 12:31:14 +0100161 },
162 {
163
Colin Cross617b1452019-10-25 15:22:50 -0700164 name: "nostdlib system_modules",
Pete Gillin84c38072020-07-09 18:03:41 +0100165 properties: `sdk_version: "none", system_modules: "stable-core-platform-api-stubs-system-modules"`,
166 system: "stable-core-platform-api-stubs-system-modules",
167 bootclasspath: []string{"stable-core-platform-api-stubs-system-modules-lib"},
Colin Cross617b1452019-10-25 15:22:50 -0700168 java8classpath: []string{},
Paul Duffin52d398a2019-06-11 12:31:14 +0100169 },
170 {
171
Colin Cross617b1452019-10-25 15:22:50 -0700172 name: "host default",
173 moduleType: "java_library_host",
174 properties: ``,
175 host: android.Host,
176 bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"},
177 java8classpath: []string{},
Colin Cross3047fa22019-04-18 10:56:44 -0700178 },
179 {
Colin Cross3047fa22019-04-18 10:56:44 -0700180
Colin Cross617b1452019-10-25 15:22:50 -0700181 name: "host supported default",
182 host: android.Host,
183 properties: `host_supported: true,`,
184 java8classpath: []string{},
185 bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"},
Colin Cross3047fa22019-04-18 10:56:44 -0700186 },
187 {
Colin Cross617b1452019-10-25 15:22:50 -0700188 name: "host supported nostdlib",
189 host: android.Host,
190 properties: `host_supported: true, sdk_version: "none", system_modules: "none"`,
191 java8classpath: []string{},
Paul Duffin52d398a2019-06-11 12:31:14 +0100192 },
193 {
Colin Cross3047fa22019-04-18 10:56:44 -0700194
Colin Cross74362a42019-10-28 08:05:02 -0700195 name: "unbundled sdk v29",
Colin Cross617b1452019-10-25 15:22:50 -0700196 unbundled: true,
Colin Cross74362a42019-10-28 08:05:02 -0700197 properties: `sdk_version: "29",`,
Colin Cross617b1452019-10-25 15:22:50 -0700198 bootclasspath: []string{`""`},
199 forces8: true,
Colin Cross74362a42019-10-28 08:05:02 -0700200 java8classpath: []string{"prebuilts/sdk/29/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
201 aidl: "-pprebuilts/sdk/29/public/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700202 },
203 {
204
Colin Cross17dec172020-05-14 18:05:32 -0700205 name: "unbundled sdk v30",
206 unbundled: true,
207 properties: `sdk_version: "30",`,
208 bootclasspath: []string{`""`},
209 system: "sdk_public_30_system_modules",
210 java8classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
211 java9classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
212 aidl: "-pprebuilts/sdk/30/public/framework.aidl",
213 },
214 {
215
Colin Cross617b1452019-10-25 15:22:50 -0700216 name: "unbundled current",
217 unbundled: true,
218 properties: `sdk_version: "current",`,
219 bootclasspath: []string{`""`},
Colin Cross17dec172020-05-14 18:05:32 -0700220 system: "sdk_public_current_system_modules",
Colin Cross617b1452019-10-25 15:22:50 -0700221 java8classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
Colin Cross17dec172020-05-14 18:05:32 -0700222 java9classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
Colin Cross617b1452019-10-25 15:22:50 -0700223 aidl: "-pprebuilts/sdk/current/public/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700224 },
225
226 {
Jiyong Park50146e92020-01-30 18:00:15 +0900227 name: "module_current",
228 properties: `sdk_version: "module_current",`,
229 bootclasspath: []string{"android_module_lib_stubs_current", "core-lambda-stubs"},
Victor Changb54f5aa2021-06-29 22:05:58 +0100230 system: "core-module-lib-stubs-system-modules",
Jiyong Park50146e92020-01-30 18:00:15 +0900231 java9classpath: []string{"android_module_lib_stubs_current"},
Paul Duffin414ea5e2021-03-22 17:31:52 +0000232 aidl: "-pout/soong/framework_non_updatable.aidl",
Jiyong Park50146e92020-01-30 18:00:15 +0900233 },
Jiyong Parkaae9bd12020-02-12 04:36:43 +0900234 {
Paul Duffin12e311d2021-10-28 17:42:16 +0100235 name: "module_30",
236 properties: `sdk_version: "module_30",`,
237 bootclasspath: []string{`""`},
238 system: "sdk_public_30_system_modules",
239 java8classpath: []string{"prebuilts/sdk/30/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
240 java9classpath: []string{"prebuilts/sdk/30/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
241 aidl: "-pprebuilts/sdk/30/public/framework.aidl",
242 },
243 {
244 name: "module_31",
245 properties: `sdk_version: "module_31",`,
246 bootclasspath: []string{`""`},
247 system: "sdk_public_31_system_modules",
248 java8classpath: []string{"prebuilts/sdk/31/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
249 java9classpath: []string{"prebuilts/sdk/31/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
250 aidl: "-pprebuilts/sdk/31/public/framework.aidl",
251 },
252 {
253 name: "module_32",
254 properties: `sdk_version: "module_32",`,
255 bootclasspath: []string{`""`},
256 system: "sdk_public_32_system_modules",
257 java8classpath: []string{"prebuilts/sdk/32/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
258 java9classpath: []string{"prebuilts/sdk/32/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
259 aidl: "-pprebuilts/sdk/32/public/framework.aidl",
260 },
261 {
Jiyong Parkaae9bd12020-02-12 04:36:43 +0900262 name: "system_server_current",
263 properties: `sdk_version: "system_server_current",`,
Anton Hanssonba6ab2e2020-03-19 15:23:38 +0000264 bootclasspath: []string{"android_system_server_stubs_current", "core-lambda-stubs"},
Victor Changb54f5aa2021-06-29 22:05:58 +0100265 system: "core-module-lib-stubs-system-modules",
Anton Hanssonba6ab2e2020-03-19 15:23:38 +0000266 java9classpath: []string{"android_system_server_stubs_current"},
Paul Duffin414ea5e2021-03-22 17:31:52 +0000267 aidl: "-pout/soong/framework.aidl",
Jiyong Parkaae9bd12020-02-12 04:36:43 +0900268 },
Paul Duffin12e311d2021-10-28 17:42:16 +0100269 {
270 name: "system_server_30",
271 properties: `sdk_version: "system_server_30",`,
272 bootclasspath: []string{`""`},
273 system: "sdk_public_30_system_modules",
274 java8classpath: []string{"prebuilts/sdk/30/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
275 java9classpath: []string{"prebuilts/sdk/30/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
276 aidl: "-pprebuilts/sdk/30/public/framework.aidl",
277 },
278 {
279 name: "system_server_31",
280 properties: `sdk_version: "system_server_31",`,
281 bootclasspath: []string{`""`},
282 system: "sdk_public_31_system_modules",
283 java8classpath: []string{"prebuilts/sdk/31/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
284 java9classpath: []string{"prebuilts/sdk/31/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
285 aidl: "-pprebuilts/sdk/31/public/framework.aidl",
286 },
287 {
288 name: "system_server_32",
289 properties: `sdk_version: "system_server_32",`,
290 bootclasspath: []string{`""`},
291 system: "sdk_public_32_system_modules",
292 java8classpath: []string{"prebuilts/sdk/32/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
293 java9classpath: []string{"prebuilts/sdk/32/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
294 aidl: "-pprebuilts/sdk/32/public/framework.aidl",
295 },
Colin Cross3047fa22019-04-18 10:56:44 -0700296 }
297
Colin Crossfb6d7812019-01-09 22:17:55 -0800298 for _, testcase := range classpathTestcases {
299 t.Run(testcase.name, func(t *testing.T) {
300 moduleType := "java_library"
301 if testcase.moduleType != "" {
302 moduleType = testcase.moduleType
303 }
304
Pete Gillinbdf5d712019-10-21 14:29:58 +0100305 props := `
Colin Crossfb6d7812019-01-09 22:17:55 -0800306 name: "foo",
307 srcs: ["a.java"],
Colin Cross3047fa22019-04-18 10:56:44 -0700308 target: {
309 android: {
310 srcs: ["bar-doc/IFoo.aidl"],
311 },
312 },
Pete Gillinbdf5d712019-10-21 14:29:58 +0100313 `
314 bp := moduleType + " {" + props + testcase.properties + `
315 }`
316 bpJava8 := moduleType + " {" + props + `java_version: "1.8",
Colin Crossfb6d7812019-01-09 22:17:55 -0800317 ` + testcase.properties + `
318 }`
319
Colin Cross0c66bc62021-07-20 09:47:41 -0700320 variant := func(result *android.TestResult) string {
321 if testcase.host == android.Host {
322 return result.Config.BuildOS.String() + "_common"
323 }
324 return "android_common"
Colin Crossfb6d7812019-01-09 22:17:55 -0800325 }
326
327 convertModulesToPaths := func(cp []string) []string {
328 ret := make([]string, len(cp))
329 for i, e := range cp {
Paul Duffin76101fa2021-03-13 09:55:25 +0000330 ret[i] = defaultModuleToPath(e)
Colin Crossfb6d7812019-01-09 22:17:55 -0800331 }
332 return ret
333 }
334
335 bootclasspath := convertModulesToPaths(testcase.bootclasspath)
Colin Cross617b1452019-10-25 15:22:50 -0700336 java8classpath := convertModulesToPaths(testcase.java8classpath)
337 java9classpath := convertModulesToPaths(testcase.java9classpath)
Colin Crossfb6d7812019-01-09 22:17:55 -0800338
Pete Gillinbdf5d712019-10-21 14:29:58 +0100339 bc := ""
340 var bcDeps []string
341 if len(bootclasspath) > 0 {
342 bc = "-bootclasspath " + strings.Join(bootclasspath, ":")
343 if bootclasspath[0] != `""` {
344 bcDeps = bootclasspath
345 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800346 }
347
Colin Cross617b1452019-10-25 15:22:50 -0700348 j8c := ""
349 if len(java8classpath) > 0 {
350 j8c = "-classpath " + strings.Join(java8classpath, ":")
351 }
352
353 j9c := ""
354 if len(java9classpath) > 0 {
355 j9c = "-classpath " + strings.Join(java9classpath, ":")
Colin Crossfb6d7812019-01-09 22:17:55 -0800356 }
Pete Gillinbdf5d712019-10-21 14:29:58 +0100357
Colin Crossfb6d7812019-01-09 22:17:55 -0800358 system := ""
Pete Gillinbdf5d712019-10-21 14:29:58 +0100359 var systemDeps []string
Colin Crossfb6d7812019-01-09 22:17:55 -0800360 if testcase.system == "none" {
361 system = "--system=none"
362 } else if testcase.system != "" {
Colin Cross17dec172020-05-14 18:05:32 -0700363 dir := ""
Paul Duffin12e311d2021-10-28 17:42:16 +0100364 // If the system modules name starts with sdk_ then it is a prebuilt module and so comes
365 // from the prebuilt directory.
366 if strings.HasPrefix(testcase.system, "sdk_") {
Colin Cross17dec172020-05-14 18:05:32 -0700367 dir = "prebuilts/sdk"
Paul Duffin76101fa2021-03-13 09:55:25 +0000368 } else {
369 dir = defaultJavaDir
Colin Cross17dec172020-05-14 18:05:32 -0700370 }
Paul Duffin414ea5e2021-03-22 17:31:52 +0000371 system = "--system=" + filepath.Join("out", "soong", ".intermediates", dir, testcase.system, "android_common", "system")
Pete Gillinbdf5d712019-10-21 14:29:58 +0100372 // The module-relative parts of these paths are hardcoded in system_modules.go:
373 systemDeps = []string{
Paul Duffin414ea5e2021-03-22 17:31:52 +0000374 filepath.Join("out", "soong", ".intermediates", dir, testcase.system, "android_common", "system", "lib", "modules"),
375 filepath.Join("out", "soong", ".intermediates", dir, testcase.system, "android_common", "system", "lib", "jrt-fs.jar"),
376 filepath.Join("out", "soong", ".intermediates", dir, testcase.system, "android_common", "system", "release"),
Pete Gillinbdf5d712019-10-21 14:29:58 +0100377 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800378 }
379
Paul Duffin76101fa2021-03-13 09:55:25 +0000380 checkClasspath := func(t *testing.T, result *android.TestResult, isJava8 bool) {
Colin Cross0c66bc62021-07-20 09:47:41 -0700381 foo := result.ModuleForTests("foo", variant(result))
Paul Duffina71a67a2021-03-29 00:42:57 +0100382 javac := foo.Rule("javac")
Pete Gillinbdf5d712019-10-21 14:29:58 +0100383 var deps []string
Colin Crossc0806172019-06-14 18:51:47 -0700384
Paul Duffina71a67a2021-03-29 00:42:57 +0100385 aidl := foo.MaybeRule("aidl")
Pete Gillinbdf5d712019-10-21 14:29:58 +0100386 if aidl.Rule != nil {
Paul Duffin414ea5e2021-03-22 17:31:52 +0000387 deps = append(deps, android.PathRelativeToTop(aidl.Output))
Pete Gillinbdf5d712019-10-21 14:29:58 +0100388 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800389
390 got := javac.Args["bootClasspath"]
Pete Gillinbdf5d712019-10-21 14:29:58 +0100391 expected := ""
Colin Cross617b1452019-10-25 15:22:50 -0700392 if isJava8 || testcase.forces8 {
Pete Gillinbdf5d712019-10-21 14:29:58 +0100393 expected = bc
394 deps = append(deps, bcDeps...)
395 } else {
396 expected = system
397 deps = append(deps, systemDeps...)
398 }
399 if got != expected {
400 t.Errorf("bootclasspath expected %q != got %q", expected, got)
Colin Crossfb6d7812019-01-09 22:17:55 -0800401 }
402
Colin Cross617b1452019-10-25 15:22:50 -0700403 if isJava8 || testcase.forces8 {
404 expected = j8c
405 deps = append(deps, java8classpath...)
406 } else {
407 expected = j9c
408 deps = append(deps, java9classpath...)
Colin Crossfb6d7812019-01-09 22:17:55 -0800409 }
Colin Cross617b1452019-10-25 15:22:50 -0700410 got = javac.Args["classpath"]
411 if got != expected {
412 t.Errorf("classpath expected %q != got %q", expected, got)
413 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800414
Paul Duffin414ea5e2021-03-22 17:31:52 +0000415 android.AssertPathsRelativeToTopEquals(t, "implicits", deps, javac.Implicits)
Colin Cross3047fa22019-04-18 10:56:44 -0700416 }
417
Paul Duffin71ae5942021-03-22 15:36:52 +0000418 fixtureFactory := android.GroupFixturePreparers(
419 prepareForJavaTest,
Paul Duffin171de3e2021-03-13 10:18:26 +0000420 FixtureWithPrebuiltApis(map[string][]string{
421 "29": {},
422 "30": {},
Paul Duffin12e311d2021-10-28 17:42:16 +0100423 "31": {},
424 "32": {},
Paul Duffin171de3e2021-03-13 10:18:26 +0000425 "current": {},
426 }),
Paul Duffin76101fa2021-03-13 09:55:25 +0000427 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
428 if testcase.unbundled {
429 variables.Unbundled_build = proptools.BoolPtr(true)
430 variables.Always_use_prebuilt_sdks = proptools.BoolPtr(true)
431 }
432 }),
433 android.FixtureModifyEnv(func(env map[string]string) {
434 if env["ANDROID_JAVA8_HOME"] == "" {
435 env["ANDROID_JAVA8_HOME"] = "jdk8"
436 }
437 }),
438 )
439
Pete Gillin1b3370f2019-10-01 13:57:31 +0100440 // Test with legacy javac -source 1.8 -target 1.8
Pete Gillin0c2143e2019-05-02 15:32:11 +0100441 t.Run("Java language level 8", func(t *testing.T) {
Paul Duffin76101fa2021-03-13 09:55:25 +0000442 result := fixtureFactory.RunTestWithBp(t, bpJava8)
Colin Cross3047fa22019-04-18 10:56:44 -0700443
Paul Duffin76101fa2021-03-13 09:55:25 +0000444 checkClasspath(t, result, true /* isJava8 */)
Colin Cross3047fa22019-04-18 10:56:44 -0700445
446 if testcase.host != android.Host {
Colin Cross0c66bc62021-07-20 09:47:41 -0700447 aidl := result.ModuleForTests("foo", variant(result)).Rule("aidl")
Colin Cross3047fa22019-04-18 10:56:44 -0700448
Paul Duffin76101fa2021-03-13 09:55:25 +0000449 android.AssertStringDoesContain(t, "aidl command", aidl.RuleParams.Command, testcase.aidl+" -I.")
Colin Cross3047fa22019-04-18 10:56:44 -0700450 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800451 })
452
Pete Gillin1b3370f2019-10-01 13:57:31 +0100453 // Test with default javac -source 9 -target 9
Pete Gillin0c2143e2019-05-02 15:32:11 +0100454 t.Run("Java language level 9", func(t *testing.T) {
Paul Duffin76101fa2021-03-13 09:55:25 +0000455 result := fixtureFactory.RunTestWithBp(t, bp)
Colin Crossfb6d7812019-01-09 22:17:55 -0800456
Paul Duffin76101fa2021-03-13 09:55:25 +0000457 checkClasspath(t, result, false /* isJava8 */)
Pete Gillinbdf5d712019-10-21 14:29:58 +0100458
459 if testcase.host != android.Host {
Colin Cross0c66bc62021-07-20 09:47:41 -0700460 aidl := result.ModuleForTests("foo", variant(result)).Rule("aidl")
Pete Gillinbdf5d712019-10-21 14:29:58 +0100461
Paul Duffin76101fa2021-03-13 09:55:25 +0000462 android.AssertStringDoesContain(t, "aidl command", aidl.RuleParams.Command, testcase.aidl+" -I.")
Colin Crossfb6d7812019-01-09 22:17:55 -0800463 }
464 })
Colin Crossff0daf42019-04-02 16:10:56 -0700465
Paul Duffin76101fa2021-03-13 09:55:25 +0000466 prepareWithPlatformVersionRel := android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
467 variables.Platform_sdk_codename = proptools.StringPtr("REL")
468 variables.Platform_sdk_final = proptools.BoolPtr(true)
469 })
470
Pete Gillinbdf5d712019-10-21 14:29:58 +0100471 // Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 8 -target 8
472 t.Run("REL + Java language level 8", func(t *testing.T) {
Paul Duffin79abe572021-03-29 02:16:14 +0100473 result := android.GroupFixturePreparers(
474 fixtureFactory, prepareWithPlatformVersionRel).RunTestWithBp(t, bpJava8)
Colin Crossff0daf42019-04-02 16:10:56 -0700475
Paul Duffin76101fa2021-03-13 09:55:25 +0000476 checkClasspath(t, result, true /* isJava8 */)
Colin Crossff0daf42019-04-02 16:10:56 -0700477 })
Pete Gillinbdf5d712019-10-21 14:29:58 +0100478
Colin Cross6cef4812019-10-17 14:23:50 -0700479 // Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 9 -target 9
480 t.Run("REL + Java language level 9", func(t *testing.T) {
Paul Duffin79abe572021-03-29 02:16:14 +0100481 result := android.GroupFixturePreparers(
482 fixtureFactory, prepareWithPlatformVersionRel).RunTestWithBp(t, bp)
Colin Cross6cef4812019-10-17 14:23:50 -0700483
Paul Duffin76101fa2021-03-13 09:55:25 +0000484 checkClasspath(t, result, false /* isJava8 */)
Colin Cross6cef4812019-10-17 14:23:50 -0700485 })
Colin Crossfb6d7812019-01-09 22:17:55 -0800486 })
487 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800488}