blob: 37875a43bfe48367ab40aaf3676e7e659b44760f [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"
19 "reflect"
20 "strings"
21 "testing"
22
23 "github.com/google/blueprint/proptools"
Colin Cross60405e52019-04-18 12:31:22 -070024
25 "android/soong/android"
26 "android/soong/java/config"
Colin Crossfb6d7812019-01-09 22:17:55 -080027)
28
Colin Crossfb6d7812019-01-09 22:17:55 -080029func TestClasspath(t *testing.T) {
Paul Duffin76101fa2021-03-13 09:55:25 +000030 const frameworkAidl = "-I" + defaultJavaDir + "/framework/aidl"
Colin Cross3047fa22019-04-18 10:56:44 -070031 var classpathTestcases = []struct {
Colin Cross617b1452019-10-25 15:22:50 -070032 name string
33 unbundled bool
Colin Cross617b1452019-10-25 15:22:50 -070034 moduleType string
35 host android.OsClass
36 properties string
37
38 // for java 8
39 bootclasspath []string
40 java8classpath []string
41
42 // for java 9
43 system string
44 java9classpath []string
45
46 forces8 bool // if set, javac will always be called with java 8 arguments
47
48 aidl string
Colin Cross3047fa22019-04-18 10:56:44 -070049 }{
50 {
Colin Cross617b1452019-10-25 15:22:50 -070051 name: "default",
Pete Gillin84c38072020-07-09 18:03:41 +010052 bootclasspath: config.StableCorePlatformBootclasspathLibraries,
53 system: config.StableCorePlatformSystemModules,
Pete Gillin0638dfc2020-07-01 10:48:14 +010054 java8classpath: config.FrameworkLibraries,
55 java9classpath: config.FrameworkLibraries,
Paul Duffin76101fa2021-03-13 09:55:25 +000056 aidl: frameworkAidl,
Colin Cross3047fa22019-04-18 10:56:44 -070057 },
58 {
Colin Cross617b1452019-10-25 15:22:50 -070059 name: `sdk_version:"core_platform"`,
60 properties: `sdk_version:"core_platform"`,
Pete Gillin84c38072020-07-09 18:03:41 +010061 bootclasspath: config.StableCorePlatformBootclasspathLibraries,
62 system: config.StableCorePlatformSystemModules,
Colin Cross617b1452019-10-25 15:22:50 -070063 java8classpath: []string{},
64 aidl: "",
Paul Duffin50c217c2019-06-12 13:25:22 +010065 },
66 {
Colin Cross617b1452019-10-25 15:22:50 -070067 name: "blank sdk version",
68 properties: `sdk_version: "",`,
Pete Gillin84c38072020-07-09 18:03:41 +010069 bootclasspath: config.StableCorePlatformBootclasspathLibraries,
70 system: config.StableCorePlatformSystemModules,
Pete Gillin0638dfc2020-07-01 10:48:14 +010071 java8classpath: config.FrameworkLibraries,
72 java9classpath: config.FrameworkLibraries,
Paul Duffin76101fa2021-03-13 09:55:25 +000073 aidl: frameworkAidl,
Colin Cross3047fa22019-04-18 10:56:44 -070074 },
75 {
76
Colin Cross74362a42019-10-28 08:05:02 -070077 name: "sdk v29",
78 properties: `sdk_version: "29",`,
Colin Cross617b1452019-10-25 15:22:50 -070079 bootclasspath: []string{`""`},
80 forces8: true,
Colin Cross74362a42019-10-28 08:05:02 -070081 java8classpath: []string{"prebuilts/sdk/29/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
82 aidl: "-pprebuilts/sdk/29/public/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -070083 },
84 {
85
Colin Cross17dec172020-05-14 18:05:32 -070086 name: "sdk v30",
87 properties: `sdk_version: "30",`,
88 bootclasspath: []string{`""`},
89 system: "sdk_public_30_system_modules",
90 java8classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
91 java9classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
92 aidl: "-pprebuilts/sdk/30/public/framework.aidl",
93 },
94 {
95
Colin Cross6cef4812019-10-17 14:23:50 -070096 name: "current",
97 properties: `sdk_version: "current",`,
98 bootclasspath: []string{"android_stubs_current", "core-lambda-stubs"},
99 system: "core-current-stubs-system-modules",
100 java9classpath: []string{"android_stubs_current"},
101 aidl: "-p" + buildDir + "/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700102 },
103 {
104
Colin Cross6cef4812019-10-17 14:23:50 -0700105 name: "system_current",
106 properties: `sdk_version: "system_current",`,
107 bootclasspath: []string{"android_system_stubs_current", "core-lambda-stubs"},
108 system: "core-current-stubs-system-modules",
109 java9classpath: []string{"android_system_stubs_current"},
110 aidl: "-p" + buildDir + "/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700111 },
112 {
113
Colin Cross74362a42019-10-28 08:05:02 -0700114 name: "system_29",
115 properties: `sdk_version: "system_29",`,
Colin Cross617b1452019-10-25 15:22:50 -0700116 bootclasspath: []string{`""`},
117 forces8: true,
Colin Cross74362a42019-10-28 08:05:02 -0700118 java8classpath: []string{"prebuilts/sdk/29/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
119 aidl: "-pprebuilts/sdk/29/public/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700120 },
121 {
122
Colin Cross17dec172020-05-14 18:05:32 -0700123 name: "system_30",
124 properties: `sdk_version: "system_30",`,
125 bootclasspath: []string{`""`},
126 system: "sdk_public_30_system_modules",
127 java8classpath: []string{"prebuilts/sdk/30/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
128 java9classpath: []string{"prebuilts/sdk/30/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
129 aidl: "-pprebuilts/sdk/30/public/framework.aidl",
130 },
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"},
138 aidl: "-p" + buildDir + "/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700139 },
140 {
141
Pete Gillin880f9642020-07-01 13:17:16 +0100142 name: "core_current",
143 properties: `sdk_version: "core_current",`,
144 bootclasspath: []string{"core.current.stubs", "core-lambda-stubs"},
145 system: "core-current-stubs-system-modules",
Colin Cross3047fa22019-04-18 10:56:44 -0700146 },
147 {
148
Colin Cross617b1452019-10-25 15:22:50 -0700149 name: "nostdlib",
150 properties: `sdk_version: "none", system_modules: "none"`,
151 system: "none",
152 bootclasspath: []string{`""`},
153 java8classpath: []string{},
Paul Duffin52d398a2019-06-11 12:31:14 +0100154 },
155 {
156
Colin Cross617b1452019-10-25 15:22:50 -0700157 name: "nostdlib system_modules",
Pete Gillin84c38072020-07-09 18:03:41 +0100158 properties: `sdk_version: "none", system_modules: "stable-core-platform-api-stubs-system-modules"`,
159 system: "stable-core-platform-api-stubs-system-modules",
160 bootclasspath: []string{"stable-core-platform-api-stubs-system-modules-lib"},
Colin Cross617b1452019-10-25 15:22:50 -0700161 java8classpath: []string{},
Paul Duffin52d398a2019-06-11 12:31:14 +0100162 },
163 {
164
Colin Cross617b1452019-10-25 15:22:50 -0700165 name: "host default",
166 moduleType: "java_library_host",
167 properties: ``,
168 host: android.Host,
169 bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"},
170 java8classpath: []string{},
Colin Cross3047fa22019-04-18 10:56:44 -0700171 },
172 {
Colin Cross3047fa22019-04-18 10:56:44 -0700173
Colin Cross617b1452019-10-25 15:22:50 -0700174 name: "host supported default",
175 host: android.Host,
176 properties: `host_supported: true,`,
177 java8classpath: []string{},
178 bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"},
Colin Cross3047fa22019-04-18 10:56:44 -0700179 },
180 {
Colin Cross617b1452019-10-25 15:22:50 -0700181 name: "host supported nostdlib",
182 host: android.Host,
183 properties: `host_supported: true, sdk_version: "none", system_modules: "none"`,
184 java8classpath: []string{},
Paul Duffin52d398a2019-06-11 12:31:14 +0100185 },
186 {
Colin Cross3047fa22019-04-18 10:56:44 -0700187
Colin Cross74362a42019-10-28 08:05:02 -0700188 name: "unbundled sdk v29",
Colin Cross617b1452019-10-25 15:22:50 -0700189 unbundled: true,
Colin Cross74362a42019-10-28 08:05:02 -0700190 properties: `sdk_version: "29",`,
Colin Cross617b1452019-10-25 15:22:50 -0700191 bootclasspath: []string{`""`},
192 forces8: true,
Colin Cross74362a42019-10-28 08:05:02 -0700193 java8classpath: []string{"prebuilts/sdk/29/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
194 aidl: "-pprebuilts/sdk/29/public/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700195 },
196 {
197
Colin Cross17dec172020-05-14 18:05:32 -0700198 name: "unbundled sdk v30",
199 unbundled: true,
200 properties: `sdk_version: "30",`,
201 bootclasspath: []string{`""`},
202 system: "sdk_public_30_system_modules",
203 java8classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
204 java9classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
205 aidl: "-pprebuilts/sdk/30/public/framework.aidl",
206 },
207 {
208
Colin Cross617b1452019-10-25 15:22:50 -0700209 name: "unbundled current",
210 unbundled: true,
211 properties: `sdk_version: "current",`,
212 bootclasspath: []string{`""`},
Colin Cross17dec172020-05-14 18:05:32 -0700213 system: "sdk_public_current_system_modules",
Colin Cross617b1452019-10-25 15:22:50 -0700214 java8classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
Colin Cross17dec172020-05-14 18:05:32 -0700215 java9classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
Colin Cross617b1452019-10-25 15:22:50 -0700216 aidl: "-pprebuilts/sdk/current/public/framework.aidl",
Colin Cross3047fa22019-04-18 10:56:44 -0700217 },
218
219 {
Jiyong Park50146e92020-01-30 18:00:15 +0900220 name: "module_current",
221 properties: `sdk_version: "module_current",`,
222 bootclasspath: []string{"android_module_lib_stubs_current", "core-lambda-stubs"},
223 system: "core-current-stubs-system-modules",
224 java9classpath: []string{"android_module_lib_stubs_current"},
Anton Hansson3f07ab22020-04-09 13:29:59 +0100225 aidl: "-p" + buildDir + "/framework_non_updatable.aidl",
Jiyong Park50146e92020-01-30 18:00:15 +0900226 },
Jiyong Parkaae9bd12020-02-12 04:36:43 +0900227 {
228 name: "system_server_current",
229 properties: `sdk_version: "system_server_current",`,
Anton Hanssonba6ab2e2020-03-19 15:23:38 +0000230 bootclasspath: []string{"android_system_server_stubs_current", "core-lambda-stubs"},
Jiyong Parkaae9bd12020-02-12 04:36:43 +0900231 system: "core-current-stubs-system-modules",
Anton Hanssonba6ab2e2020-03-19 15:23:38 +0000232 java9classpath: []string{"android_system_server_stubs_current"},
Jiyong Parkaae9bd12020-02-12 04:36:43 +0900233 aidl: "-p" + buildDir + "/framework.aidl",
234 },
Colin Cross3047fa22019-04-18 10:56:44 -0700235 }
236
Colin Crossfb6d7812019-01-09 22:17:55 -0800237 for _, testcase := range classpathTestcases {
238 t.Run(testcase.name, func(t *testing.T) {
239 moduleType := "java_library"
240 if testcase.moduleType != "" {
241 moduleType = testcase.moduleType
242 }
243
Pete Gillinbdf5d712019-10-21 14:29:58 +0100244 props := `
Colin Crossfb6d7812019-01-09 22:17:55 -0800245 name: "foo",
246 srcs: ["a.java"],
Colin Cross3047fa22019-04-18 10:56:44 -0700247 target: {
248 android: {
249 srcs: ["bar-doc/IFoo.aidl"],
250 },
251 },
Pete Gillinbdf5d712019-10-21 14:29:58 +0100252 `
253 bp := moduleType + " {" + props + testcase.properties + `
254 }`
255 bpJava8 := moduleType + " {" + props + `java_version: "1.8",
Colin Crossfb6d7812019-01-09 22:17:55 -0800256 ` + testcase.properties + `
257 }`
258
259 variant := "android_common"
260 if testcase.host == android.Host {
261 variant = android.BuildOs.String() + "_common"
262 }
263
264 convertModulesToPaths := func(cp []string) []string {
265 ret := make([]string, len(cp))
266 for i, e := range cp {
Paul Duffin76101fa2021-03-13 09:55:25 +0000267 ret[i] = defaultModuleToPath(e)
Colin Crossfb6d7812019-01-09 22:17:55 -0800268 }
269 return ret
270 }
271
272 bootclasspath := convertModulesToPaths(testcase.bootclasspath)
Colin Cross617b1452019-10-25 15:22:50 -0700273 java8classpath := convertModulesToPaths(testcase.java8classpath)
274 java9classpath := convertModulesToPaths(testcase.java9classpath)
Colin Crossfb6d7812019-01-09 22:17:55 -0800275
Pete Gillinbdf5d712019-10-21 14:29:58 +0100276 bc := ""
277 var bcDeps []string
278 if len(bootclasspath) > 0 {
279 bc = "-bootclasspath " + strings.Join(bootclasspath, ":")
280 if bootclasspath[0] != `""` {
281 bcDeps = bootclasspath
282 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800283 }
284
Colin Cross617b1452019-10-25 15:22:50 -0700285 j8c := ""
286 if len(java8classpath) > 0 {
287 j8c = "-classpath " + strings.Join(java8classpath, ":")
288 }
289
290 j9c := ""
291 if len(java9classpath) > 0 {
292 j9c = "-classpath " + strings.Join(java9classpath, ":")
Colin Crossfb6d7812019-01-09 22:17:55 -0800293 }
Pete Gillinbdf5d712019-10-21 14:29:58 +0100294
Colin Crossfb6d7812019-01-09 22:17:55 -0800295 system := ""
Pete Gillinbdf5d712019-10-21 14:29:58 +0100296 var systemDeps []string
Colin Crossfb6d7812019-01-09 22:17:55 -0800297 if testcase.system == "none" {
298 system = "--system=none"
299 } else if testcase.system != "" {
Colin Cross17dec172020-05-14 18:05:32 -0700300 dir := ""
301 if strings.HasPrefix(testcase.system, "sdk_public_") {
302 dir = "prebuilts/sdk"
Paul Duffin76101fa2021-03-13 09:55:25 +0000303 } else {
304 dir = defaultJavaDir
Colin Cross17dec172020-05-14 18:05:32 -0700305 }
306 system = "--system=" + filepath.Join(buildDir, ".intermediates", dir, testcase.system, "android_common", "system")
Pete Gillinbdf5d712019-10-21 14:29:58 +0100307 // The module-relative parts of these paths are hardcoded in system_modules.go:
308 systemDeps = []string{
Colin Cross17dec172020-05-14 18:05:32 -0700309 filepath.Join(buildDir, ".intermediates", dir, testcase.system, "android_common", "system", "lib", "modules"),
310 filepath.Join(buildDir, ".intermediates", dir, testcase.system, "android_common", "system", "lib", "jrt-fs.jar"),
311 filepath.Join(buildDir, ".intermediates", dir, testcase.system, "android_common", "system", "release"),
Pete Gillinbdf5d712019-10-21 14:29:58 +0100312 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800313 }
314
Paul Duffin76101fa2021-03-13 09:55:25 +0000315 checkClasspath := func(t *testing.T, result *android.TestResult, isJava8 bool) {
316 foo := result.ModuleForTests("foo", variant)
Colin Crossc0806172019-06-14 18:51:47 -0700317 javac := foo.Rule("javac")
Pete Gillinbdf5d712019-10-21 14:29:58 +0100318 var deps []string
Colin Crossc0806172019-06-14 18:51:47 -0700319
320 aidl := foo.MaybeRule("aidl")
Pete Gillinbdf5d712019-10-21 14:29:58 +0100321 if aidl.Rule != nil {
322 deps = append(deps, aidl.Output.String())
323 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800324
325 got := javac.Args["bootClasspath"]
Pete Gillinbdf5d712019-10-21 14:29:58 +0100326 expected := ""
Colin Cross617b1452019-10-25 15:22:50 -0700327 if isJava8 || testcase.forces8 {
Pete Gillinbdf5d712019-10-21 14:29:58 +0100328 expected = bc
329 deps = append(deps, bcDeps...)
330 } else {
331 expected = system
332 deps = append(deps, systemDeps...)
333 }
334 if got != expected {
335 t.Errorf("bootclasspath expected %q != got %q", expected, got)
Colin Crossfb6d7812019-01-09 22:17:55 -0800336 }
337
Colin Cross617b1452019-10-25 15:22:50 -0700338 if isJava8 || testcase.forces8 {
339 expected = j8c
340 deps = append(deps, java8classpath...)
341 } else {
342 expected = j9c
343 deps = append(deps, java9classpath...)
Colin Crossfb6d7812019-01-09 22:17:55 -0800344 }
Colin Cross617b1452019-10-25 15:22:50 -0700345 got = javac.Args["classpath"]
346 if got != expected {
347 t.Errorf("classpath expected %q != got %q", expected, got)
348 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800349
350 if !reflect.DeepEqual(javac.Implicits.Strings(), deps) {
351 t.Errorf("implicits expected %q != got %q", deps, javac.Implicits.Strings())
352 }
Colin Cross3047fa22019-04-18 10:56:44 -0700353 }
354
Paul Duffin76101fa2021-03-13 09:55:25 +0000355 fixtureFactory := javaFixtureFactory.Extend(
Paul Duffin171de3e2021-03-13 10:18:26 +0000356 FixtureWithPrebuiltApis(map[string][]string{
357 "29": {},
358 "30": {},
359 "current": {},
360 }),
Paul Duffin76101fa2021-03-13 09:55:25 +0000361 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
362 if testcase.unbundled {
363 variables.Unbundled_build = proptools.BoolPtr(true)
364 variables.Always_use_prebuilt_sdks = proptools.BoolPtr(true)
365 }
366 }),
367 android.FixtureModifyEnv(func(env map[string]string) {
368 if env["ANDROID_JAVA8_HOME"] == "" {
369 env["ANDROID_JAVA8_HOME"] = "jdk8"
370 }
371 }),
372 )
373
Pete Gillin1b3370f2019-10-01 13:57:31 +0100374 // Test with legacy javac -source 1.8 -target 1.8
Pete Gillin0c2143e2019-05-02 15:32:11 +0100375 t.Run("Java language level 8", func(t *testing.T) {
Paul Duffin76101fa2021-03-13 09:55:25 +0000376 result := fixtureFactory.RunTestWithBp(t, bpJava8)
Colin Cross3047fa22019-04-18 10:56:44 -0700377
Paul Duffin76101fa2021-03-13 09:55:25 +0000378 checkClasspath(t, result, true /* isJava8 */)
Colin Cross3047fa22019-04-18 10:56:44 -0700379
380 if testcase.host != android.Host {
Paul Duffin76101fa2021-03-13 09:55:25 +0000381 aidl := result.ModuleForTests("foo", variant).Rule("aidl")
Colin Cross3047fa22019-04-18 10:56:44 -0700382
Paul Duffin76101fa2021-03-13 09:55:25 +0000383 android.AssertStringDoesContain(t, "aidl command", aidl.RuleParams.Command, testcase.aidl+" -I.")
Colin Cross3047fa22019-04-18 10:56:44 -0700384 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800385 })
386
Pete Gillin1b3370f2019-10-01 13:57:31 +0100387 // Test with default javac -source 9 -target 9
Pete Gillin0c2143e2019-05-02 15:32:11 +0100388 t.Run("Java language level 9", func(t *testing.T) {
Paul Duffin76101fa2021-03-13 09:55:25 +0000389 result := fixtureFactory.RunTestWithBp(t, bp)
Colin Crossfb6d7812019-01-09 22:17:55 -0800390
Paul Duffin76101fa2021-03-13 09:55:25 +0000391 checkClasspath(t, result, false /* isJava8 */)
Pete Gillinbdf5d712019-10-21 14:29:58 +0100392
393 if testcase.host != android.Host {
Paul Duffin76101fa2021-03-13 09:55:25 +0000394 aidl := result.ModuleForTests("foo", variant).Rule("aidl")
Pete Gillinbdf5d712019-10-21 14:29:58 +0100395
Paul Duffin76101fa2021-03-13 09:55:25 +0000396 android.AssertStringDoesContain(t, "aidl command", aidl.RuleParams.Command, testcase.aidl+" -I.")
Colin Crossfb6d7812019-01-09 22:17:55 -0800397 }
398 })
Colin Crossff0daf42019-04-02 16:10:56 -0700399
Paul Duffin76101fa2021-03-13 09:55:25 +0000400 prepareWithPlatformVersionRel := android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
401 variables.Platform_sdk_codename = proptools.StringPtr("REL")
402 variables.Platform_sdk_final = proptools.BoolPtr(true)
403 })
404
Pete Gillinbdf5d712019-10-21 14:29:58 +0100405 // Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 8 -target 8
406 t.Run("REL + Java language level 8", func(t *testing.T) {
Paul Duffin76101fa2021-03-13 09:55:25 +0000407 result := fixtureFactory.Extend(prepareWithPlatformVersionRel).RunTestWithBp(t, bpJava8)
Colin Crossff0daf42019-04-02 16:10:56 -0700408
Paul Duffin76101fa2021-03-13 09:55:25 +0000409 checkClasspath(t, result, true /* isJava8 */)
Colin Crossff0daf42019-04-02 16:10:56 -0700410 })
Pete Gillinbdf5d712019-10-21 14:29:58 +0100411
Colin Cross6cef4812019-10-17 14:23:50 -0700412 // Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 9 -target 9
413 t.Run("REL + Java language level 9", func(t *testing.T) {
Paul Duffin76101fa2021-03-13 09:55:25 +0000414 result := fixtureFactory.Extend(prepareWithPlatformVersionRel).RunTestWithBp(t, bp)
Colin Cross6cef4812019-10-17 14:23:50 -0700415
Paul Duffin76101fa2021-03-13 09:55:25 +0000416 checkClasspath(t, result, false /* isJava8 */)
Colin Cross6cef4812019-10-17 14:23:50 -0700417 })
Colin Crossfb6d7812019-01-09 22:17:55 -0800418 })
419 }
Colin Crossfb6d7812019-01-09 22:17:55 -0800420}