sdk_test.go 23 KB

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