1// 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 ( 18 "path/filepath" 19 "strings" 20 "testing" 21 22 "github.com/google/blueprint/proptools" 23 24 "android/soong/android" 25 "android/soong/java/config" 26) 27 28type 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 // Indicates how this test case is affected by the setting of Always_use_prebuilt_sdks. 48 // 49 // If this is nil then the test case is unaffected by the setting of Always_use_prebuilt_sdks. 50 // Otherwise, the test case can only be used when 51 // Always_use_prebuilt_sdks=*forAlwaysUsePrebuiltSdks. 52 forAlwaysUsePrebuiltSdks *bool 53} 54 55func TestClasspath(t *testing.T) { 56 t.Parallel() 57 const frameworkAidl = "-I" + defaultJavaDir + "/framework/aidl" 58 var classpathTestcases = []classpathTestCase{ 59 { 60 name: "default", 61 bootclasspath: config.StableCorePlatformBootclasspathLibraries, 62 system: config.StableCorePlatformSystemModules, 63 java8classpath: config.FrameworkLibraries, 64 java9classpath: config.FrameworkLibraries, 65 aidl: frameworkAidl, 66 }, 67 { 68 name: `sdk_version:"core_platform"`, 69 properties: `sdk_version:"core_platform"`, 70 bootclasspath: config.StableCorePlatformBootclasspathLibraries, 71 system: config.StableCorePlatformSystemModules, 72 java8classpath: []string{}, 73 aidl: "", 74 }, 75 { 76 name: "blank sdk version", 77 properties: `sdk_version: "",`, 78 bootclasspath: config.StableCorePlatformBootclasspathLibraries, 79 system: config.StableCorePlatformSystemModules, 80 java8classpath: config.FrameworkLibraries, 81 java9classpath: config.FrameworkLibraries, 82 aidl: frameworkAidl, 83 }, 84 { 85 86 name: "sdk v29", 87 properties: `sdk_version: "29",`, 88 bootclasspath: []string{`""`}, 89 forces8: true, 90 java8classpath: []string{"prebuilts/sdk/29/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 91 aidl: "-pprebuilts/sdk/29/public/framework.aidl", 92 }, 93 { 94 95 name: "sdk v30", 96 properties: `sdk_version: "30",`, 97 bootclasspath: []string{`""`}, 98 system: "sdk_public_30_system_modules", 99 java8classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 100 java9classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 101 aidl: "-pprebuilts/sdk/30/public/framework.aidl", 102 }, 103 { 104 // Test case only applies when Always_use_prebuilt_sdks=false (the default). 105 forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false), 106 107 name: "current", 108 properties: `sdk_version: "current",`, 109 bootclasspath: []string{"android_stubs_current", "core-lambda-stubs"}, 110 system: "core-public-stubs-system-modules", 111 java9classpath: []string{"android_stubs_current"}, 112 aidl: "-pout/soong/framework.aidl", 113 }, 114 { 115 // Test case only applies when Always_use_prebuilt_sdks=true. 116 forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true), 117 118 name: "current", 119 properties: `sdk_version: "current",`, 120 bootclasspath: []string{`""`}, 121 system: "sdk_public_current_system_modules", 122 java8classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 123 java9classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 124 aidl: "-pprebuilts/sdk/current/public/framework.aidl", 125 }, 126 { 127 // Test case only applies when Always_use_prebuilt_sdks=false (the default). 128 forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false), 129 130 name: "system_current", 131 properties: `sdk_version: "system_current",`, 132 bootclasspath: []string{"android_system_stubs_current", "core-lambda-stubs"}, 133 system: "core-public-stubs-system-modules", 134 java9classpath: []string{"android_system_stubs_current"}, 135 aidl: "-pout/soong/framework.aidl", 136 }, 137 { 138 // Test case only applies when Always_use_prebuilt_sdks=true. 139 forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true), 140 141 name: "system_current", 142 properties: `sdk_version: "system_current",`, 143 bootclasspath: []string{`""`}, 144 system: "sdk_public_current_system_modules", 145 java8classpath: []string{"prebuilts/sdk/current/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 146 java9classpath: []string{"prebuilts/sdk/current/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 147 aidl: "-pprebuilts/sdk/current/public/framework.aidl", 148 }, 149 { 150 name: "system_29", 151 properties: `sdk_version: "system_29",`, 152 bootclasspath: []string{`""`}, 153 forces8: true, 154 java8classpath: []string{"prebuilts/sdk/29/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 155 aidl: "-pprebuilts/sdk/29/public/framework.aidl", 156 }, 157 { 158 name: "system_30", 159 properties: `sdk_version: "system_30",`, 160 bootclasspath: []string{`""`}, 161 system: "sdk_public_30_system_modules", 162 java8classpath: []string{"prebuilts/sdk/30/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 163 java9classpath: []string{"prebuilts/sdk/30/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 164 aidl: "-pprebuilts/sdk/30/public/framework.aidl", 165 }, 166 { 167 // Test case only applies when Always_use_prebuilt_sdks=false (the default). 168 forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false), 169 170 name: "test_current", 171 properties: `sdk_version: "test_current",`, 172 bootclasspath: []string{"android_test_stubs_current", "core-lambda-stubs"}, 173 system: "core-public-stubs-system-modules", 174 java9classpath: []string{"android_test_stubs_current"}, 175 aidl: "-pout/soong/framework.aidl", 176 }, 177 { 178 // Test case only applies when Always_use_prebuilt_sdks=true. 179 forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true), 180 181 name: "test_current", 182 properties: `sdk_version: "test_current",`, 183 bootclasspath: []string{`""`}, 184 system: "sdk_public_current_system_modules", 185 java8classpath: []string{"prebuilts/sdk/current/test/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 186 java9classpath: []string{"prebuilts/sdk/current/test/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 187 aidl: "-pprebuilts/sdk/current/public/framework.aidl", 188 }, 189 { 190 name: "test_30", 191 properties: `sdk_version: "test_30",`, 192 bootclasspath: []string{`""`}, 193 system: "sdk_public_30_system_modules", 194 java8classpath: []string{"prebuilts/sdk/30/test/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 195 java9classpath: []string{"prebuilts/sdk/30/test/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 196 aidl: "-pprebuilts/sdk/30/public/framework.aidl", 197 }, 198 { 199 // Test case only applies when Always_use_prebuilt_sdks=false (the default). 200 forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false), 201 202 name: "core_current", 203 properties: `sdk_version: "core_current",`, 204 bootclasspath: []string{"core.current.stubs", "core-lambda-stubs"}, 205 system: "core-public-stubs-system-modules", 206 }, 207 { 208 // Test case only applies when Always_use_prebuilt_sdks=true. 209 forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true), 210 211 name: "core_current", 212 properties: `sdk_version: "core_current",`, 213 bootclasspath: []string{`""`}, 214 system: "sdk_public_current_system_modules", 215 java8classpath: []string{"prebuilts/sdk/current/core/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 216 java9classpath: []string{"prebuilts/sdk/current/core/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 217 aidl: "-pprebuilts/sdk/current/public/framework.aidl", 218 }, 219 { 220 221 name: "nostdlib", 222 properties: `sdk_version: "none", system_modules: "none"`, 223 system: "none", 224 bootclasspath: []string{`""`}, 225 java8classpath: []string{}, 226 }, 227 { 228 229 name: "nostdlib system_modules", 230 properties: `sdk_version: "none", system_modules: "stable-core-platform-api-stubs-system-modules"`, 231 system: "stable-core-platform-api-stubs-system-modules", 232 bootclasspath: []string{"stable-core-platform-api-stubs-system-modules-lib"}, 233 java8classpath: []string{}, 234 }, 235 { 236 237 name: "host default", 238 moduleType: "java_library_host", 239 properties: ``, 240 host: android.Host, 241 bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"}, 242 java8classpath: []string{}, 243 }, 244 { 245 246 name: "host supported default", 247 host: android.Host, 248 properties: `host_supported: true,`, 249 java8classpath: []string{}, 250 bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"}, 251 }, 252 { 253 name: "host supported nostdlib", 254 host: android.Host, 255 properties: `host_supported: true, sdk_version: "none", system_modules: "none"`, 256 java8classpath: []string{}, 257 }, 258 { 259 260 name: "unbundled sdk v29", 261 unbundled: true, 262 properties: `sdk_version: "29",`, 263 bootclasspath: []string{`""`}, 264 forces8: true, 265 java8classpath: []string{"prebuilts/sdk/29/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 266 aidl: "-pprebuilts/sdk/29/public/framework.aidl", 267 }, 268 { 269 270 name: "unbundled sdk v30", 271 unbundled: true, 272 properties: `sdk_version: "30",`, 273 bootclasspath: []string{`""`}, 274 system: "sdk_public_30_system_modules", 275 java8classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 276 java9classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 277 aidl: "-pprebuilts/sdk/30/public/framework.aidl", 278 }, 279 { 280 281 name: "unbundled current", 282 unbundled: true, 283 properties: `sdk_version: "current",`, 284 bootclasspath: []string{`""`}, 285 system: "sdk_public_current_system_modules", 286 java8classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 287 java9classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 288 aidl: "-pprebuilts/sdk/current/public/framework.aidl", 289 }, 290 { 291 // Test case only applies when Always_use_prebuilt_sdks=false (the default). 292 forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false), 293 294 name: "module_current", 295 properties: `sdk_version: "module_current",`, 296 bootclasspath: []string{"android_module_lib_stubs_current", "core-lambda-stubs"}, 297 system: "core-module-lib-stubs-system-modules", 298 java9classpath: []string{"android_module_lib_stubs_current"}, 299 aidl: "-pout/soong/framework_non_updatable.aidl", 300 }, 301 { 302 // Test case only applies when Always_use_prebuilt_sdks=true. 303 forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true), 304 305 name: "module_current", 306 properties: `sdk_version: "module_current",`, 307 bootclasspath: []string{`""`}, 308 system: "sdk_module-lib_current_system_modules", 309 java8classpath: []string{"prebuilts/sdk/current/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 310 java9classpath: []string{"prebuilts/sdk/current/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 311 aidl: "-pprebuilts/sdk/current/public/framework.aidl", 312 }, 313 { 314 name: "module_30", 315 properties: `sdk_version: "module_30",`, 316 bootclasspath: []string{`""`}, 317 system: "sdk_public_30_system_modules", 318 java8classpath: []string{"prebuilts/sdk/30/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 319 java9classpath: []string{"prebuilts/sdk/30/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 320 aidl: "-pprebuilts/sdk/30/public/framework.aidl", 321 }, 322 { 323 name: "module_31", 324 properties: `sdk_version: "module_31",`, 325 bootclasspath: []string{`""`}, 326 system: "sdk_public_31_system_modules", 327 java8classpath: []string{"prebuilts/sdk/31/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 328 java9classpath: []string{"prebuilts/sdk/31/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 329 aidl: "-pprebuilts/sdk/31/public/framework.aidl", 330 }, 331 { 332 name: "module_32", 333 properties: `sdk_version: "module_32",`, 334 bootclasspath: []string{`""`}, 335 system: "sdk_module-lib_32_system_modules", 336 java8classpath: []string{"prebuilts/sdk/32/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 337 java9classpath: []string{"prebuilts/sdk/32/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 338 aidl: "-pprebuilts/sdk/32/public/framework.aidl", 339 }, 340 { 341 // Test case only applies when Always_use_prebuilt_sdks=false (the default). 342 forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false), 343 344 name: "system_server_current", 345 properties: `sdk_version: "system_server_current",`, 346 bootclasspath: []string{"android_system_server_stubs_current", "core-lambda-stubs"}, 347 system: "core-module-lib-stubs-system-modules", 348 java9classpath: []string{"android_system_server_stubs_current"}, 349 aidl: "-pout/soong/framework.aidl", 350 }, 351 { 352 // Test case only applies when Always_use_prebuilt_sdks=true. 353 forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true), 354 355 name: "system_server_current", 356 properties: `sdk_version: "system_server_current",`, 357 bootclasspath: []string{`""`}, 358 system: "sdk_module-lib_current_system_modules", 359 java8classpath: []string{"prebuilts/sdk/current/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 360 java9classpath: []string{"prebuilts/sdk/current/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 361 aidl: "-pprebuilts/sdk/current/public/framework.aidl", 362 }, 363 { 364 name: "system_server_30", 365 properties: `sdk_version: "system_server_30",`, 366 bootclasspath: []string{`""`}, 367 system: "sdk_public_30_system_modules", 368 java8classpath: []string{"prebuilts/sdk/30/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 369 java9classpath: []string{"prebuilts/sdk/30/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 370 aidl: "-pprebuilts/sdk/30/public/framework.aidl", 371 }, 372 { 373 name: "system_server_31", 374 properties: `sdk_version: "system_server_31",`, 375 bootclasspath: []string{`""`}, 376 system: "sdk_public_31_system_modules", 377 java8classpath: []string{"prebuilts/sdk/31/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 378 java9classpath: []string{"prebuilts/sdk/31/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 379 aidl: "-pprebuilts/sdk/31/public/framework.aidl", 380 }, 381 { 382 name: "system_server_32", 383 properties: `sdk_version: "system_server_32",`, 384 bootclasspath: []string{`""`}, 385 system: "sdk_module-lib_32_system_modules", 386 java8classpath: []string{"prebuilts/sdk/32/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 387 java9classpath: []string{"prebuilts/sdk/32/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 388 aidl: "-pprebuilts/sdk/32/public/framework.aidl", 389 }, 390 } 391 392 t.Run("basic", func(t *testing.T) { 393 t.Parallel() 394 testClasspathTestCases(t, classpathTestcases, false) 395 }) 396 397 t.Run("Always_use_prebuilt_sdks=true", func(t *testing.T) { 398 t.Parallel() 399 testClasspathTestCases(t, classpathTestcases, true) 400 }) 401} 402 403func testClasspathTestCases(t *testing.T, classpathTestcases []classpathTestCase, alwaysUsePrebuiltSdks bool) { 404 for _, testcase := range classpathTestcases { 405 if testcase.forAlwaysUsePrebuiltSdks != nil && *testcase.forAlwaysUsePrebuiltSdks != alwaysUsePrebuiltSdks { 406 continue 407 } 408 409 t.Run(testcase.name, func(t *testing.T) { 410 t.Parallel() 411 moduleType := "java_library" 412 if testcase.moduleType != "" { 413 moduleType = testcase.moduleType 414 } 415 416 props := ` 417 name: "foo", 418 srcs: ["a.java"], 419 target: { 420 android: { 421 srcs: ["bar-doc/IFoo.aidl"], 422 }, 423 }, 424 ` 425 bp := moduleType + " {" + props + testcase.properties + ` 426 }` 427 bpJava8 := moduleType + " {" + props + `java_version: "1.8", 428 ` + testcase.properties + ` 429 }` 430 431 variant := func(result *android.TestResult) string { 432 if testcase.host == android.Host { 433 return result.Config.BuildOS.String() + "_common" 434 } 435 return "android_common" 436 } 437 438 convertModulesToPaths := func(cp []string) []string { 439 ret := make([]string, len(cp)) 440 for i, e := range cp { 441 switch { 442 case e == `""`, strings.HasSuffix(e, ".jar"): 443 ret[i] = e 444 default: 445 ret[i] = filepath.Join("out", "soong", ".intermediates", defaultJavaDir, e, "android_common", "turbine", e+".jar") 446 } 447 } 448 return ret 449 } 450 451 bootclasspath := convertModulesToPaths(testcase.bootclasspath) 452 java8classpath := convertModulesToPaths(testcase.java8classpath) 453 java9classpath := convertModulesToPaths(testcase.java9classpath) 454 455 bc := "" 456 var bcDeps []string 457 if len(bootclasspath) > 0 { 458 bc = "-bootclasspath " + strings.Join(bootclasspath, ":") 459 if bootclasspath[0] != `""` { 460 bcDeps = bootclasspath 461 } 462 } 463 464 j8c := "" 465 if len(java8classpath) > 0 { 466 j8c = "-classpath " + strings.Join(java8classpath, ":") 467 } 468 469 j9c := "" 470 if len(java9classpath) > 0 { 471 j9c = "-classpath " + strings.Join(java9classpath, ":") 472 } 473 474 system := "" 475 var systemDeps []string 476 if testcase.system == "none" { 477 system = "--system=none" 478 } else if testcase.system != "" { 479 dir := "" 480 // If the system modules name starts with sdk_ then it is a prebuilt module and so comes 481 // from the prebuilt directory. 482 if strings.HasPrefix(testcase.system, "sdk_") { 483 dir = "prebuilts/sdk" 484 } else { 485 dir = defaultJavaDir 486 } 487 system = "--system=" + filepath.Join("out", "soong", ".intermediates", dir, testcase.system, "android_common", "system") 488 // The module-relative parts of these paths are hardcoded in system_modules.go: 489 systemDeps = []string{ 490 filepath.Join("out", "soong", ".intermediates", dir, testcase.system, "android_common", "system", "lib", "modules"), 491 filepath.Join("out", "soong", ".intermediates", dir, testcase.system, "android_common", "system", "lib", "jrt-fs.jar"), 492 filepath.Join("out", "soong", ".intermediates", dir, testcase.system, "android_common", "system", "release"), 493 } 494 } 495 496 checkClasspath := func(t *testing.T, result *android.TestResult, isJava8 bool) { 497 foo := result.ModuleForTests(t, "foo", variant(result)) 498 javac := foo.Rule("javac") 499 var deps []string 500 501 aidl := foo.MaybeRule("aidl") 502 if aidl.Rule != nil { 503 deps = append(deps, android.PathRelativeToTop(aidl.Output)) 504 } 505 506 got := javac.Args["bootClasspath"] 507 expected := "" 508 if isJava8 || testcase.forces8 { 509 expected = bc 510 deps = append(deps, bcDeps...) 511 } else { 512 expected = system 513 deps = append(deps, systemDeps...) 514 } 515 if got != expected { 516 t.Errorf("bootclasspath expected %q != got %q", expected, got) 517 } 518 519 if isJava8 || testcase.forces8 { 520 expected = j8c 521 deps = append(deps, java8classpath...) 522 } else { 523 expected = j9c 524 deps = append(deps, java9classpath...) 525 } 526 got = javac.Args["classpath"] 527 if got != expected { 528 t.Errorf("classpath expected %q != got %q", expected, got) 529 } 530 531 android.AssertPathsRelativeToTopEquals(t, "implicits", deps, javac.Implicits) 532 } 533 534 preparer := android.NullFixturePreparer 535 if alwaysUsePrebuiltSdks { 536 preparer = android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { 537 variables.Always_use_prebuilt_sdks = proptools.BoolPtr(true) 538 }) 539 } 540 541 fixtureFactory := android.GroupFixturePreparers( 542 prepareForJavaTest, 543 FixtureWithPrebuiltApis(map[string][]string{ 544 "29": {}, 545 "30": {}, 546 "31": {}, 547 "32": {}, 548 "current": {}, 549 }), 550 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { 551 if testcase.unbundled { 552 variables.Unbundled_build = proptools.BoolPtr(true) 553 variables.Always_use_prebuilt_sdks = proptools.BoolPtr(true) 554 } 555 }), 556 android.FixtureModifyEnv(func(env map[string]string) { 557 if env["ANDROID_JAVA8_HOME"] == "" { 558 env["ANDROID_JAVA8_HOME"] = "jdk8" 559 } 560 }), 561 preparer, 562 ) 563 564 // Test with legacy javac -source 1.8 -target 1.8 565 t.Run("Java language level 8", func(t *testing.T) { 566 t.Parallel() 567 result := fixtureFactory.RunTestWithBp(t, bpJava8) 568 569 checkClasspath(t, result, true /* isJava8 */) 570 571 if testcase.host != android.Host { 572 aidl := result.ModuleForTests(t, "foo", variant(result)).Rule("aidl") 573 574 android.AssertStringDoesContain(t, "aidl command", aidl.RuleParams.Command, testcase.aidl+" -I.") 575 } 576 }) 577 578 // Test with default javac -source 9 -target 9 579 t.Run("Java language level 9", func(t *testing.T) { 580 t.Parallel() 581 result := fixtureFactory.RunTestWithBp(t, bp) 582 583 checkClasspath(t, result, false /* isJava8 */) 584 585 if testcase.host != android.Host { 586 aidl := result.ModuleForTests(t, "foo", variant(result)).Rule("aidl") 587 588 android.AssertStringDoesContain(t, "aidl command", aidl.RuleParams.Command, testcase.aidl+" -I.") 589 } 590 }) 591 592 prepareWithPlatformVersionRel := android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { 593 variables.Platform_sdk_codename = proptools.StringPtr("REL") 594 variables.Platform_sdk_final = proptools.BoolPtr(true) 595 }) 596 597 // Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 8 -target 8 598 t.Run("REL + Java language level 8", func(t *testing.T) { 599 t.Parallel() 600 result := android.GroupFixturePreparers( 601 fixtureFactory, prepareWithPlatformVersionRel).RunTestWithBp(t, bpJava8) 602 603 checkClasspath(t, result, true /* isJava8 */) 604 }) 605 606 // Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 9 -target 9 607 t.Run("REL + Java language level 9", func(t *testing.T) { 608 t.Parallel() 609 result := android.GroupFixturePreparers( 610 fixtureFactory, prepareWithPlatformVersionRel).RunTestWithBp(t, bp) 611 612 checkClasspath(t, result, false /* isJava8 */) 613 }) 614 }) 615 } 616} 617