blob: ed874e543b4554b3a7f1b308653ce67fb4f5d66f [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
Paul Duffin0b3b36a2021-10-28 18:05:53 +010028type classpathTestCase struct {
29 name string
30 unbundled bool
31 moduleType string
32 host android.OsClass
33 properties string
34
35 // for java 8
36 bootclasspath []string
37 java8classpath []string
38
39 // for java 9
40 system string
41 java9classpath []string
42
43 forces8 bool // if set, javac will always be called with java 8 arguments
44
45 aidl string
46}
47
Colin Crossfb6d7812019-01-09 22:17:55 -080048func TestClasspath(t *testing.T) {
Paul Duffin76101fa2021-03-13 09:55:25 +000049 const frameworkAidl = "-I" + defaultJavaDir + "/framework/aidl"
Paul Duffin0b3b36a2021-10-28 18:05:53 +010050 var classpathTestcases = []classpathTestCase{
Colin Cross3047fa22019-04-18 10:56:44 -070051 {
Colin Cross617b1452019-10-25 15:22:50 -070052 name: "default",
Pete Gillin84c38072020-07-09 18:03:41 +010053 bootclasspath: config.StableCorePlatformBootclasspathLibraries,
54 system: config.StableCorePlatformSystemModules,
Pete Gillin0638dfc2020-07-01 10:48:14 +010055 java8classpath: config.FrameworkLibraries,
56 java9classpath: config.FrameworkLibraries,
Paul Duffin76101fa2021-03-13 09:55:25 +000057 aidl: frameworkAidl,
Colin Cross3047fa22019-04-18 10:56:44 -070058 },
59 {
Colin Cross617b1452019-10-25 15:22:50 -070060 name: `sdk_version:"core_platform"`,
61 properties: `sdk_version:"core_platform"`,
Pete Gillin84c38072020-07-09 18:03:41 +010062 bootclasspath: config.StableCorePlatformBootclasspathLibraries,
63 system: config.StableCorePlatformSystemModules,
Colin Cross617b1452019-10-25 15:22:50 -070064 java8classpath: []string{},
65 aidl: "",
Paul Duffin50c217c2019-06-12 13:25:22 +010066 },
67 {
Colin Cross617b1452019-10-25 15:22:50 -070068 name: "blank sdk version",
69 properties: `sdk_version: "",`,
Pete Gillin84c38072020-07-09 18:03:41 +010070 bootclasspath: config.StableCorePlatformBootclasspathLibraries,
71 system: config.StableCorePlatformSystemModules,
Pete Gillin0638dfc2020-07-01 10:48:14 +010072 java8classpath: config.FrameworkLibraries,
73 java9classpath: config.FrameworkLibraries,
Paul Duffin76101fa2021-03-13 09:55:25 +000074 aidl: frameworkAidl,
Colin Cross3047fa22019-04-18 10:56:44 -070075 },
76 {
77
Colin Cross74362a42019-10-28 08:05:02 -070078 name: "sdk v29",
79 properties: `sdk_version: "29",`,
Colin Cross617b1452019-10-25 15:22:50 -070080 bootclasspath: []string{`""`},
81 forces8: true,
Colin Cross74362a42019-10-28 08:05:02 -070082 java8classpath: []string{"prebuilts/sdk/29/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
83 aidl: "-pprebuilts/sdk/29/public/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -070084 },
85 {
86
Colin Cross17dec172020-05-14 18:05:32 -070087 name: "sdk v30",
88 properties: `sdk_version: "30",`,
89 bootclasspath: []string{`""`},
90 system: "sdk_public_30_system_modules",
91 java8classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
92 java9classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
93 aidl: "-pprebuilts/sdk/30/public/framework.aidl",
94 },
95 {
96
Colin Cross6cef4812019-10-17 14:23:50 -070097 name: "current",
98 properties: `sdk_version: "current",`,
99 bootclasspath: []string{"android_stubs_current", "core-lambda-stubs"},
100 system: "core-current-stubs-system-modules",
101 java9classpath: []string{"android_stubs_current"},
Paul Duffin414ea5e2021-03-22 17:31:52 +0000102 aidl: "-pout/soong/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700103 },
104 {
105
Colin Cross6cef4812019-10-17 14:23:50 -0700106 name: "system_current",
107 properties: `sdk_version: "system_current",`,
108 bootclasspath: []string{"android_system_stubs_current", "core-lambda-stubs"},
109 system: "core-current-stubs-system-modules",
110 java9classpath: []string{"android_system_stubs_current"},
Paul Duffin414ea5e2021-03-22 17:31:52 +0000111 aidl: "-pout/soong/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700112 },
113 {
114
Colin Cross74362a42019-10-28 08:05:02 -0700115 name: "system_29",
116 properties: `sdk_version: "system_29",`,
Colin Cross617b1452019-10-25 15:22:50 -0700117 bootclasspath: []string{`""`},
118 forces8: true,
Colin Cross74362a42019-10-28 08:05:02 -0700119 java8classpath: []string{"prebuilts/sdk/29/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
120 aidl: "-pprebuilts/sdk/29/public/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700121 },
122 {
123
Colin Cross17dec172020-05-14 18:05:32 -0700124 name: "system_30",
125 properties: `sdk_version: "system_30",`,
126 bootclasspath: []string{`""`},
127 system: "sdk_public_30_system_modules",
128 java8classpath: []string{"prebuilts/sdk/30/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
129 java9classpath: []string{"prebuilts/sdk/30/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
130 aidl: "-pprebuilts/sdk/30/public/framework.aidl",
131 },
132 {
Colin Cross6cef4812019-10-17 14:23:50 -0700133 name: "test_current",
134 properties: `sdk_version: "test_current",`,
135 bootclasspath: []string{"android_test_stubs_current", "core-lambda-stubs"},
136 system: "core-current-stubs-system-modules",
137 java9classpath: []string{"android_test_stubs_current"},
Paul Duffin414ea5e2021-03-22 17:31:52 +0000138 aidl: "-pout/soong/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700139 },
140 {
Paul Duffin12e311d2021-10-28 17:42:16 +0100141 name: "test_30",
142 properties: `sdk_version: "test_30",`,
143 bootclasspath: []string{`""`},
144 system: "sdk_public_30_system_modules",
145 java8classpath: []string{"prebuilts/sdk/30/test/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
146 java9classpath: []string{"prebuilts/sdk/30/test/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
147 aidl: "-pprebuilts/sdk/30/public/framework.aidl",
148 },
149 {
Colin Cross3047fa22019-04-18 10:56:44 -0700150
Pete Gillin880f9642020-07-01 13:17:16 +0100151 name: "core_current",
152 properties: `sdk_version: "core_current",`,
153 bootclasspath: []string{"core.current.stubs", "core-lambda-stubs"},
154 system: "core-current-stubs-system-modules",
Colin Cross3047fa22019-04-18 10:56:44 -0700155 },
156 {
157
Colin Cross617b1452019-10-25 15:22:50 -0700158 name: "nostdlib",
159 properties: `sdk_version: "none", system_modules: "none"`,
160 system: "none",
161 bootclasspath: []string{`""`},
162 java8classpath: []string{},
Paul Duffin52d398a2019-06-11 12:31:14 +0100163 },
164 {
165
Colin Cross617b1452019-10-25 15:22:50 -0700166 name: "nostdlib system_modules",
Pete Gillin84c38072020-07-09 18:03:41 +0100167 properties: `sdk_version: "none", system_modules: "stable-core-platform-api-stubs-system-modules"`,
168 system: "stable-core-platform-api-stubs-system-modules",
169 bootclasspath: []string{"stable-core-platform-api-stubs-system-modules-lib"},
Colin Cross617b1452019-10-25 15:22:50 -0700170 java8classpath: []string{},
Paul Duffin52d398a2019-06-11 12:31:14 +0100171 },
172 {
173
Colin Cross617b1452019-10-25 15:22:50 -0700174 name: "host default",
175 moduleType: "java_library_host",
176 properties: ``,
177 host: android.Host,
178 bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"},
179 java8classpath: []string{},
Colin Cross3047fa22019-04-18 10:56:44 -0700180 },
181 {
Colin Cross3047fa22019-04-18 10:56:44 -0700182
Colin Cross617b1452019-10-25 15:22:50 -0700183 name: "host supported default",
184 host: android.Host,
185 properties: `host_supported: true,`,
186 java8classpath: []string{},
187 bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"},
Colin Cross3047fa22019-04-18 10:56:44 -0700188 },
189 {
Colin Cross617b1452019-10-25 15:22:50 -0700190 name: "host supported nostdlib",
191 host: android.Host,
192 properties: `host_supported: true, sdk_version: "none", system_modules: "none"`,
193 java8classpath: []string{},
Paul Duffin52d398a2019-06-11 12:31:14 +0100194 },
195 {
Colin Cross3047fa22019-04-18 10:56:44 -0700196
Colin Cross74362a42019-10-28 08:05:02 -0700197 name: "unbundled sdk v29",
Colin Cross617b1452019-10-25 15:22:50 -0700198 unbundled: true,
Colin Cross74362a42019-10-28 08:05:02 -0700199 properties: `sdk_version: "29",`,
Colin Cross617b1452019-10-25 15:22:50 -0700200 bootclasspath: []string{`""`},
201 forces8: true,
Colin Cross74362a42019-10-28 08:05:02 -0700202 java8classpath: []string{"prebuilts/sdk/29/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
203 aidl: "-pprebuilts/sdk/29/public/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700204 },
205 {
206
Colin Cross17dec172020-05-14 18:05:32 -0700207 name: "unbundled sdk v30",
208 unbundled: true,
209 properties: `sdk_version: "30",`,
210 bootclasspath: []string{`""`},
211 system: "sdk_public_30_system_modules",
212 java8classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
213 java9classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
214 aidl: "-pprebuilts/sdk/30/public/framework.aidl",
215 },
216 {
217
Colin Cross617b1452019-10-25 15:22:50 -0700218 name: "unbundled current",
219 unbundled: true,
220 properties: `sdk_version: "current",`,
221 bootclasspath: []string{`""`},
Colin Cross17dec172020-05-14 18:05:32 -0700222 system: "sdk_public_current_system_modules",
Colin Cross617b1452019-10-25 15:22:50 -0700223 java8classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
Colin Cross17dec172020-05-14 18:05:32 -0700224 java9classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
Colin Cross617b1452019-10-25 15:22:50 -0700225 aidl: "-pprebuilts/sdk/current/public/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700226 },
227
228 {
Jiyong Park50146e92020-01-30 18:00:15 +0900229 name: "module_current",
230 properties: `sdk_version: "module_current",`,
231 bootclasspath: []string{"android_module_lib_stubs_current", "core-lambda-stubs"},
Victor Changb54f5aa2021-06-29 22:05:58 +0100232 system: "core-module-lib-stubs-system-modules",
Jiyong Park50146e92020-01-30 18:00:15 +0900233 java9classpath: []string{"android_module_lib_stubs_current"},
Paul Duffin414ea5e2021-03-22 17:31:52 +0000234 aidl: "-pout/soong/framework_non_updatable.aidl",
Jiyong Park50146e92020-01-30 18:00:15 +0900235 },
Jiyong Parkaae9bd12020-02-12 04:36:43 +0900236 {
Paul Duffin12e311d2021-10-28 17:42:16 +0100237 name: "module_30",
238 properties: `sdk_version: "module_30",`,
239 bootclasspath: []string{`""`},
240 system: "sdk_public_30_system_modules",
241 java8classpath: []string{"prebuilts/sdk/30/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
242 java9classpath: []string{"prebuilts/sdk/30/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
243 aidl: "-pprebuilts/sdk/30/public/framework.aidl",
244 },
245 {
246 name: "module_31",
247 properties: `sdk_version: "module_31",`,
248 bootclasspath: []string{`""`},
249 system: "sdk_public_31_system_modules",
250 java8classpath: []string{"prebuilts/sdk/31/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
251 java9classpath: []string{"prebuilts/sdk/31/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
252 aidl: "-pprebuilts/sdk/31/public/framework.aidl",
253 },
254 {
255 name: "module_32",
256 properties: `sdk_version: "module_32",`,
257 bootclasspath: []string{`""`},
258 system: "sdk_public_32_system_modules",
259 java8classpath: []string{"prebuilts/sdk/32/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
260 java9classpath: []string{"prebuilts/sdk/32/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
261 aidl: "-pprebuilts/sdk/32/public/framework.aidl",
262 },
263 {
Jiyong Parkaae9bd12020-02-12 04:36:43 +0900264 name: "system_server_current",
265 properties: `sdk_version: "system_server_current",`,
Anton Hanssonba6ab2e2020-03-19 15:23:38 +0000266 bootclasspath: []string{"android_system_server_stubs_current", "core-lambda-stubs"},
Victor Changb54f5aa2021-06-29 22:05:58 +0100267 system: "core-module-lib-stubs-system-modules",
Anton Hanssonba6ab2e2020-03-19 15:23:38 +0000268 java9classpath: []string{"android_system_server_stubs_current"},
Paul Duffin414ea5e2021-03-22 17:31:52 +0000269 aidl: "-pout/soong/framework.aidl",
Jiyong Parkaae9bd12020-02-12 04:36:43 +0900270 },
Paul Duffin12e311d2021-10-28 17:42:16 +0100271 {
272 name: "system_server_30",
273 properties: `sdk_version: "system_server_30",`,
274 bootclasspath: []string{`""`},
275 system: "sdk_public_30_system_modules",
276 java8classpath: []string{"prebuilts/sdk/30/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
277 java9classpath: []string{"prebuilts/sdk/30/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
278 aidl: "-pprebuilts/sdk/30/public/framework.aidl",
279 },
280 {
281 name: "system_server_31",
282 properties: `sdk_version: "system_server_31",`,
283 bootclasspath: []string{`""`},
284 system: "sdk_public_31_system_modules",
285 java8classpath: []string{"prebuilts/sdk/31/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
286 java9classpath: []string{"prebuilts/sdk/31/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
287 aidl: "-pprebuilts/sdk/31/public/framework.aidl",
288 },
289 {
290 name: "system_server_32",
291 properties: `sdk_version: "system_server_32",`,
292 bootclasspath: []string{`""`},
293 system: "sdk_public_32_system_modules",
294 java8classpath: []string{"prebuilts/sdk/32/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
295 java9classpath: []string{"prebuilts/sdk/32/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
296 aidl: "-pprebuilts/sdk/32/public/framework.aidl",
297 },
Colin Cross3047fa22019-04-18 10:56:44 -0700298 }
299
Paul Duffin0b3b36a2021-10-28 18:05:53 +0100300 testClasspathTestCases(t, classpathTestcases)
301}
302
303func testClasspathTestCases(t *testing.T, classpathTestcases []classpathTestCase) {
Colin Crossfb6d7812019-01-09 22:17:55 -0800304 for _, testcase := range classpathTestcases {
305 t.Run(testcase.name, func(t *testing.T) {
306 moduleType := "java_library"
307 if testcase.moduleType != "" {
308 moduleType = testcase.moduleType
309 }
310
Pete Gillinbdf5d712019-10-21 14:29:58 +0100311 props := `
Colin Crossfb6d7812019-01-09 22:17:55 -0800312 name: "foo",
313 srcs: ["a.java"],
Colin Cross3047fa22019-04-18 10:56:44 -0700314 target: {
315 android: {
316 srcs: ["bar-doc/IFoo.aidl"],
317 },
318 },
Pete Gillinbdf5d712019-10-21 14:29:58 +0100319 `
320 bp := moduleType + " {" + props + testcase.properties + `
321 }`
322 bpJava8 := moduleType + " {" + props + `java_version: "1.8",
Colin Crossfb6d7812019-01-09 22:17:55 -0800323 ` + testcase.properties + `
324 }`
325
Colin Cross0c66bc62021-07-20 09:47:41 -0700326 variant := func(result *android.TestResult) string {
327 if testcase.host == android.Host {
328 return result.Config.BuildOS.String() + "_common"
329 }
330 return "android_common"
Colin Crossfb6d7812019-01-09 22:17:55 -0800331 }
332
333 convertModulesToPaths := func(cp []string) []string {
334 ret := make([]string, len(cp))
335 for i, e := range cp {
Paul Duffin76101fa2021-03-13 09:55:25 +0000336 ret[i] = defaultModuleToPath(e)
Colin Crossfb6d7812019-01-09 22:17:55 -0800337 }
338 return ret
339 }
340
341 bootclasspath := convertModulesToPaths(testcase.bootclasspath)
Colin Cross617b1452019-10-25 15:22:50 -0700342 java8classpath := convertModulesToPaths(testcase.java8classpath)
343 java9classpath := convertModulesToPaths(testcase.java9classpath)
Colin Crossfb6d7812019-01-09 22:17:55 -0800344
Pete Gillinbdf5d712019-10-21 14:29:58 +0100345 bc := ""
346 var bcDeps []string
347 if len(bootclasspath) > 0 {
348 bc = "-bootclasspath " + strings.Join(bootclasspath, ":")
349 if bootclasspath[0] != `""` {
350 bcDeps = bootclasspath
351 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800352 }
353
Colin Cross617b1452019-10-25 15:22:50 -0700354 j8c := ""
355 if len(java8classpath) > 0 {
356 j8c = "-classpath " + strings.Join(java8classpath, ":")
357 }
358
359 j9c := ""
360 if len(java9classpath) > 0 {
361 j9c = "-classpath " + strings.Join(java9classpath, ":")
Colin Crossfb6d7812019-01-09 22:17:55 -0800362 }
Pete Gillinbdf5d712019-10-21 14:29:58 +0100363
Colin Crossfb6d7812019-01-09 22:17:55 -0800364 system := ""
Pete Gillinbdf5d712019-10-21 14:29:58 +0100365 var systemDeps []string
Colin Crossfb6d7812019-01-09 22:17:55 -0800366 if testcase.system == "none" {
367 system = "--system=none"
368 } else if testcase.system != "" {
Colin Cross17dec172020-05-14 18:05:32 -0700369 dir := ""
Paul Duffin12e311d2021-10-28 17:42:16 +0100370 // If the system modules name starts with sdk_ then it is a prebuilt module and so comes
371 // from the prebuilt directory.
372 if strings.HasPrefix(testcase.system, "sdk_") {
Colin Cross17dec172020-05-14 18:05:32 -0700373 dir = "prebuilts/sdk"
Paul Duffin76101fa2021-03-13 09:55:25 +0000374 } else {
375 dir = defaultJavaDir
Colin Cross17dec172020-05-14 18:05:32 -0700376 }
Paul Duffin414ea5e2021-03-22 17:31:52 +0000377 system = "--system=" + filepath.Join("out", "soong", ".intermediates", dir, testcase.system, "android_common", "system")
Pete Gillinbdf5d712019-10-21 14:29:58 +0100378 // The module-relative parts of these paths are hardcoded in system_modules.go:
379 systemDeps = []string{
Paul Duffin414ea5e2021-03-22 17:31:52 +0000380 filepath.Join("out", "soong", ".intermediates", dir, testcase.system, "android_common", "system", "lib", "modules"),
381 filepath.Join("out", "soong", ".intermediates", dir, testcase.system, "android_common", "system", "lib", "jrt-fs.jar"),
382 filepath.Join("out", "soong", ".intermediates", dir, testcase.system, "android_common", "system", "release"),
Pete Gillinbdf5d712019-10-21 14:29:58 +0100383 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800384 }
385
Paul Duffin76101fa2021-03-13 09:55:25 +0000386 checkClasspath := func(t *testing.T, result *android.TestResult, isJava8 bool) {
Colin Cross0c66bc62021-07-20 09:47:41 -0700387 foo := result.ModuleForTests("foo", variant(result))
Paul Duffina71a67a2021-03-29 00:42:57 +0100388 javac := foo.Rule("javac")
Pete Gillinbdf5d712019-10-21 14:29:58 +0100389 var deps []string
Colin Crossc0806172019-06-14 18:51:47 -0700390
Paul Duffina71a67a2021-03-29 00:42:57 +0100391 aidl := foo.MaybeRule("aidl")
Pete Gillinbdf5d712019-10-21 14:29:58 +0100392 if aidl.Rule != nil {
Paul Duffin414ea5e2021-03-22 17:31:52 +0000393 deps = append(deps, android.PathRelativeToTop(aidl.Output))
Pete Gillinbdf5d712019-10-21 14:29:58 +0100394 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800395
396 got := javac.Args["bootClasspath"]
Pete Gillinbdf5d712019-10-21 14:29:58 +0100397 expected := ""
Colin Cross617b1452019-10-25 15:22:50 -0700398 if isJava8 || testcase.forces8 {
Pete Gillinbdf5d712019-10-21 14:29:58 +0100399 expected = bc
400 deps = append(deps, bcDeps...)
401 } else {
402 expected = system
403 deps = append(deps, systemDeps...)
404 }
405 if got != expected {
406 t.Errorf("bootclasspath expected %q != got %q", expected, got)
Colin Crossfb6d7812019-01-09 22:17:55 -0800407 }
408
Colin Cross617b1452019-10-25 15:22:50 -0700409 if isJava8 || testcase.forces8 {
410 expected = j8c
411 deps = append(deps, java8classpath...)
412 } else {
413 expected = j9c
414 deps = append(deps, java9classpath...)
Colin Crossfb6d7812019-01-09 22:17:55 -0800415 }
Colin Cross617b1452019-10-25 15:22:50 -0700416 got = javac.Args["classpath"]
417 if got != expected {
418 t.Errorf("classpath expected %q != got %q", expected, got)
419 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800420
Paul Duffin414ea5e2021-03-22 17:31:52 +0000421 android.AssertPathsRelativeToTopEquals(t, "implicits", deps, javac.Implicits)
Colin Cross3047fa22019-04-18 10:56:44 -0700422 }
423
Paul Duffin71ae5942021-03-22 15:36:52 +0000424 fixtureFactory := android.GroupFixturePreparers(
425 prepareForJavaTest,
Paul Duffin171de3e2021-03-13 10:18:26 +0000426 FixtureWithPrebuiltApis(map[string][]string{
427 "29": {},
428 "30": {},
Paul Duffin12e311d2021-10-28 17:42:16 +0100429 "31": {},
430 "32": {},
Paul Duffin171de3e2021-03-13 10:18:26 +0000431 "current": {},
432 }),
Paul Duffin76101fa2021-03-13 09:55:25 +0000433 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
434 if testcase.unbundled {
435 variables.Unbundled_build = proptools.BoolPtr(true)
436 variables.Always_use_prebuilt_sdks = proptools.BoolPtr(true)
437 }
438 }),
439 android.FixtureModifyEnv(func(env map[string]string) {
440 if env["ANDROID_JAVA8_HOME"] == "" {
441 env["ANDROID_JAVA8_HOME"] = "jdk8"
442 }
443 }),
444 )
445
Pete Gillin1b3370f2019-10-01 13:57:31 +0100446 // Test with legacy javac -source 1.8 -target 1.8
Pete Gillin0c2143e2019-05-02 15:32:11 +0100447 t.Run("Java language level 8", func(t *testing.T) {
Paul Duffin76101fa2021-03-13 09:55:25 +0000448 result := fixtureFactory.RunTestWithBp(t, bpJava8)
Colin Cross3047fa22019-04-18 10:56:44 -0700449
Paul Duffin76101fa2021-03-13 09:55:25 +0000450 checkClasspath(t, result, true /* isJava8 */)
Colin Cross3047fa22019-04-18 10:56:44 -0700451
452 if testcase.host != android.Host {
Colin Cross0c66bc62021-07-20 09:47:41 -0700453 aidl := result.ModuleForTests("foo", variant(result)).Rule("aidl")
Colin Cross3047fa22019-04-18 10:56:44 -0700454
Paul Duffin76101fa2021-03-13 09:55:25 +0000455 android.AssertStringDoesContain(t, "aidl command", aidl.RuleParams.Command, testcase.aidl+" -I.")
Colin Cross3047fa22019-04-18 10:56:44 -0700456 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800457 })
458
Pete Gillin1b3370f2019-10-01 13:57:31 +0100459 // Test with default javac -source 9 -target 9
Pete Gillin0c2143e2019-05-02 15:32:11 +0100460 t.Run("Java language level 9", func(t *testing.T) {
Paul Duffin76101fa2021-03-13 09:55:25 +0000461 result := fixtureFactory.RunTestWithBp(t, bp)
Colin Crossfb6d7812019-01-09 22:17:55 -0800462
Paul Duffin76101fa2021-03-13 09:55:25 +0000463 checkClasspath(t, result, false /* isJava8 */)
Pete Gillinbdf5d712019-10-21 14:29:58 +0100464
465 if testcase.host != android.Host {
Colin Cross0c66bc62021-07-20 09:47:41 -0700466 aidl := result.ModuleForTests("foo", variant(result)).Rule("aidl")
Pete Gillinbdf5d712019-10-21 14:29:58 +0100467
Paul Duffin76101fa2021-03-13 09:55:25 +0000468 android.AssertStringDoesContain(t, "aidl command", aidl.RuleParams.Command, testcase.aidl+" -I.")
Colin Crossfb6d7812019-01-09 22:17:55 -0800469 }
470 })
Colin Crossff0daf42019-04-02 16:10:56 -0700471
Paul Duffin76101fa2021-03-13 09:55:25 +0000472 prepareWithPlatformVersionRel := android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
473 variables.Platform_sdk_codename = proptools.StringPtr("REL")
474 variables.Platform_sdk_final = proptools.BoolPtr(true)
475 })
476
Pete Gillinbdf5d712019-10-21 14:29:58 +0100477 // Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 8 -target 8
478 t.Run("REL + Java language level 8", func(t *testing.T) {
Paul Duffin79abe572021-03-29 02:16:14 +0100479 result := android.GroupFixturePreparers(
480 fixtureFactory, prepareWithPlatformVersionRel).RunTestWithBp(t, bpJava8)
Colin Crossff0daf42019-04-02 16:10:56 -0700481
Paul Duffin76101fa2021-03-13 09:55:25 +0000482 checkClasspath(t, result, true /* isJava8 */)
Colin Crossff0daf42019-04-02 16:10:56 -0700483 })
Pete Gillinbdf5d712019-10-21 14:29:58 +0100484
Colin Cross6cef4812019-10-17 14:23:50 -0700485 // Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 9 -target 9
486 t.Run("REL + Java language level 9", func(t *testing.T) {
Paul Duffin79abe572021-03-29 02:16:14 +0100487 result := android.GroupFixturePreparers(
488 fixtureFactory, prepareWithPlatformVersionRel).RunTestWithBp(t, bp)
Colin Cross6cef4812019-10-17 14:23:50 -0700489
Paul Duffin76101fa2021-03-13 09:55:25 +0000490 checkClasspath(t, result, false /* isJava8 */)
Colin Cross6cef4812019-10-17 14:23:50 -0700491 })
Colin Crossfb6d7812019-01-09 22:17:55 -0800492 })
493 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800494}