java_library_conversion_test.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824
  1. // Copyright 2021 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 bp2build
  15. import (
  16. "fmt"
  17. "testing"
  18. "android/soong/android"
  19. "android/soong/java"
  20. )
  21. func runJavaLibraryTestCaseWithRegistrationCtxFunc(t *testing.T, tc Bp2buildTestCase, registrationCtxFunc func(ctx android.RegistrationContext)) {
  22. t.Helper()
  23. (&tc).ModuleTypeUnderTest = "java_library"
  24. (&tc).ModuleTypeUnderTestFactory = java.LibraryFactory
  25. RunBp2BuildTestCase(t, registrationCtxFunc, tc)
  26. }
  27. func runJavaLibraryTestCase(t *testing.T, tc Bp2buildTestCase) {
  28. t.Helper()
  29. runJavaLibraryTestCaseWithRegistrationCtxFunc(t, tc, func(ctx android.RegistrationContext) {})
  30. }
  31. func TestJavaLibrary(t *testing.T) {
  32. runJavaLibraryTestCase(t, Bp2buildTestCase{
  33. Description: "java_library with srcs, exclude_srcs and libs",
  34. Blueprint: `java_library {
  35. name: "java-lib-1",
  36. srcs: ["a.java", "b.java"],
  37. exclude_srcs: ["b.java"],
  38. libs: ["java-lib-2"],
  39. bazel_module: { bp2build_available: true },
  40. }
  41. java_library {
  42. name: "java-lib-2",
  43. srcs: ["b.java"],
  44. bazel_module: { bp2build_available: true },
  45. }`,
  46. ExpectedBazelTargets: []string{
  47. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  48. "srcs": `["a.java"]`,
  49. "deps": `[":java-lib-2-neverlink"]`,
  50. }),
  51. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  52. MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{
  53. "srcs": `["b.java"]`,
  54. }),
  55. MakeNeverlinkDuplicateTarget("java_library", "java-lib-2"),
  56. },
  57. })
  58. }
  59. func TestJavaLibraryConvertsStaticLibsToDepsAndExports(t *testing.T) {
  60. runJavaLibraryTestCase(t, Bp2buildTestCase{
  61. Blueprint: `java_library {
  62. name: "java-lib-1",
  63. srcs: ["a.java"],
  64. libs: ["java-lib-2"],
  65. static_libs: ["java-lib-3"],
  66. bazel_module: { bp2build_available: true },
  67. }
  68. java_library {
  69. name: "java-lib-2",
  70. srcs: ["b.java"],
  71. bazel_module: { bp2build_available: false },
  72. }
  73. java_library {
  74. name: "java-lib-3",
  75. srcs: ["c.java"],
  76. bazel_module: { bp2build_available: false },
  77. }`,
  78. ExpectedBazelTargets: []string{
  79. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  80. "srcs": `["a.java"]`,
  81. "deps": `[
  82. ":java-lib-2-neverlink",
  83. ":java-lib-3",
  84. ]`,
  85. "exports": `[":java-lib-3"]`,
  86. }),
  87. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  88. },
  89. })
  90. }
  91. func TestJavaLibraryConvertsStaticLibsToExportsIfNoSrcs(t *testing.T) {
  92. runJavaLibraryTestCase(t, Bp2buildTestCase{
  93. Blueprint: `java_library {
  94. name: "java-lib-1",
  95. static_libs: ["java-lib-2"],
  96. bazel_module: { bp2build_available: true },
  97. }
  98. java_library {
  99. name: "java-lib-2",
  100. srcs: ["a.java"],
  101. bazel_module: { bp2build_available: false },
  102. }`,
  103. ExpectedBazelTargets: []string{
  104. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  105. "exports": `[":java-lib-2"]`,
  106. }),
  107. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  108. },
  109. })
  110. }
  111. func TestJavaLibraryFailsToConvertLibsWithNoSrcs(t *testing.T) {
  112. runJavaLibraryTestCase(t, Bp2buildTestCase{
  113. ExpectedErr: fmt.Errorf("Module has direct dependencies but no sources. Bazel will not allow this."),
  114. Blueprint: `java_library {
  115. name: "java-lib-1",
  116. libs: ["java-lib-2"],
  117. bazel_module: { bp2build_available: true },
  118. }
  119. java_library {
  120. name: "java-lib-2",
  121. srcs: ["a.java"],
  122. bazel_module: { bp2build_available: false },
  123. }`,
  124. ExpectedBazelTargets: []string{},
  125. })
  126. }
  127. func TestJavaLibraryPlugins(t *testing.T) {
  128. runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
  129. Blueprint: `java_library {
  130. name: "java-lib-1",
  131. plugins: ["java-plugin-1"],
  132. bazel_module: { bp2build_available: true },
  133. }
  134. java_plugin {
  135. name: "java-plugin-1",
  136. srcs: ["a.java"],
  137. bazel_module: { bp2build_available: false },
  138. }`,
  139. ExpectedBazelTargets: []string{
  140. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  141. "plugins": `[":java-plugin-1"]`,
  142. }),
  143. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  144. },
  145. }, func(ctx android.RegistrationContext) {
  146. ctx.RegisterModuleType("java_plugin", java.PluginFactory)
  147. })
  148. }
  149. func TestJavaLibraryJavaVersion(t *testing.T) {
  150. runJavaLibraryTestCase(t, Bp2buildTestCase{
  151. Blueprint: `java_library {
  152. name: "java-lib-1",
  153. srcs: ["a.java"],
  154. java_version: "11",
  155. }`,
  156. ExpectedBazelTargets: []string{
  157. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  158. "srcs": `["a.java"]`,
  159. "java_version": `"11"`,
  160. }),
  161. MakeNeverlinkDuplicateTargetWithAttrs(
  162. "java_library",
  163. "java-lib-1",
  164. AttrNameToString{"java_version": `"11"`}),
  165. },
  166. })
  167. }
  168. func TestJavaLibraryErrorproneJavacflagsEnabledManually(t *testing.T) {
  169. runJavaLibraryTestCase(t, Bp2buildTestCase{
  170. Blueprint: `java_library {
  171. name: "java-lib-1",
  172. srcs: ["a.java"],
  173. javacflags: ["-Xsuper-fast"],
  174. errorprone: {
  175. enabled: true,
  176. javacflags: ["-Xep:SpeedLimit:OFF"],
  177. },
  178. }`,
  179. ExpectedBazelTargets: []string{
  180. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  181. "javacopts": `[
  182. "-Xsuper-fast",
  183. "-Xep:SpeedLimit:OFF",
  184. ]`,
  185. "srcs": `["a.java"]`,
  186. }),
  187. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  188. },
  189. })
  190. }
  191. func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(t *testing.T) {
  192. runJavaLibraryTestCase(t, Bp2buildTestCase{
  193. Blueprint: `java_library {
  194. name: "java-lib-1",
  195. srcs: ["a.java"],
  196. javacflags: ["-Xsuper-fast"],
  197. errorprone: {
  198. javacflags: ["-Xep:SpeedLimit:OFF"],
  199. },
  200. }`,
  201. ExpectedBazelTargets: []string{
  202. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  203. "javacopts": `["-Xsuper-fast"]`,
  204. "srcs": `["a.java"]`,
  205. }),
  206. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  207. },
  208. })
  209. }
  210. func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledManually(t *testing.T) {
  211. runJavaLibraryTestCase(t, Bp2buildTestCase{
  212. Blueprint: `java_library {
  213. name: "java-lib-1",
  214. srcs: ["a.java"],
  215. javacflags: ["-Xsuper-fast"],
  216. errorprone: {
  217. enabled: false,
  218. javacflags: ["-Xep:SpeedLimit:OFF"],
  219. },
  220. }`,
  221. ExpectedBazelTargets: []string{
  222. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  223. "javacopts": `["-Xsuper-fast"]`,
  224. "srcs": `["a.java"]`,
  225. }),
  226. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  227. },
  228. })
  229. }
  230. func TestJavaLibraryLogTags(t *testing.T) {
  231. runJavaLibraryTestCase(t, Bp2buildTestCase{
  232. Description: "Java library - logtags creates separate dependency",
  233. ModuleTypeUnderTest: "java_library",
  234. ModuleTypeUnderTestFactory: java.LibraryFactory,
  235. Blueprint: `java_library {
  236. name: "example_lib",
  237. srcs: [
  238. "a.java",
  239. "b.java",
  240. "a.logtag",
  241. "b.logtag",
  242. ],
  243. bazel_module: { bp2build_available: true },
  244. }`,
  245. ExpectedBazelTargets: []string{
  246. MakeBazelTarget("event_log_tags", "example_lib_logtags", AttrNameToString{
  247. "srcs": `[
  248. "a.logtag",
  249. "b.logtag",
  250. ]`,
  251. }),
  252. MakeBazelTarget("java_library", "example_lib", AttrNameToString{
  253. "srcs": `[
  254. "a.java",
  255. "b.java",
  256. ":example_lib_logtags",
  257. ]`,
  258. }),
  259. MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
  260. }})
  261. }
  262. func TestJavaLibraryResources(t *testing.T) {
  263. runJavaLibraryTestCase(t, Bp2buildTestCase{
  264. Filesystem: map[string]string{
  265. "res/a.res": "",
  266. "res/b.res": "",
  267. "res/dir1/b.res": "",
  268. },
  269. Blueprint: `java_library {
  270. name: "java-lib-1",
  271. java_resources: ["res/a.res", "res/b.res"],
  272. }`,
  273. ExpectedBazelTargets: []string{
  274. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  275. "resources": `[
  276. "res/a.res",
  277. "res/b.res",
  278. ]`,
  279. }),
  280. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  281. },
  282. })
  283. }
  284. func TestJavaLibraryResourceDirs(t *testing.T) {
  285. runJavaLibraryTestCase(t, Bp2buildTestCase{
  286. Filesystem: map[string]string{
  287. "res/a.res": "",
  288. "res/b.res": "",
  289. "res/dir1/b.res": "",
  290. },
  291. Blueprint: `java_library {
  292. name: "java-lib-1",
  293. java_resource_dirs: ["res"],
  294. }`,
  295. ExpectedBazelTargets: []string{
  296. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  297. "resource_strip_prefix": `"res"`,
  298. "resources": `[
  299. "res/a.res",
  300. "res/b.res",
  301. "res/dir1/b.res",
  302. ]`,
  303. }),
  304. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  305. },
  306. })
  307. }
  308. func TestJavaLibraryResourcesExcludeDir(t *testing.T) {
  309. runJavaLibraryTestCase(t, Bp2buildTestCase{
  310. Filesystem: map[string]string{
  311. "res/a.res": "",
  312. "res/exclude/b.res": "",
  313. },
  314. Blueprint: `java_library {
  315. name: "java-lib-1",
  316. java_resource_dirs: ["res"],
  317. exclude_java_resource_dirs: ["res/exclude"],
  318. }`,
  319. ExpectedBazelTargets: []string{
  320. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  321. "resource_strip_prefix": `"res"`,
  322. "resources": `["res/a.res"]`,
  323. }),
  324. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  325. },
  326. })
  327. }
  328. func TestJavaLibraryResourcesExcludeFile(t *testing.T) {
  329. runJavaLibraryTestCase(t, Bp2buildTestCase{
  330. Filesystem: map[string]string{
  331. "res/a.res": "",
  332. "res/dir1/b.res": "",
  333. "res/dir1/exclude.res": "",
  334. },
  335. Blueprint: `java_library {
  336. name: "java-lib-1",
  337. java_resource_dirs: ["res"],
  338. exclude_java_resources: ["res/dir1/exclude.res"],
  339. }`,
  340. ExpectedBazelTargets: []string{
  341. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  342. "resource_strip_prefix": `"res"`,
  343. "resources": `[
  344. "res/a.res",
  345. "res/dir1/b.res",
  346. ]`,
  347. }),
  348. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  349. },
  350. })
  351. }
  352. func TestJavaLibraryResourcesFailsWithMultipleDirs(t *testing.T) {
  353. runJavaLibraryTestCase(t, Bp2buildTestCase{
  354. Filesystem: map[string]string{
  355. "res/a.res": "",
  356. "res1/a.res": "",
  357. },
  358. Blueprint: `java_library {
  359. name: "java-lib-1",
  360. java_resource_dirs: ["res", "res1"],
  361. }`,
  362. ExpectedErr: fmt.Errorf("bp2build does not support more than one directory in java_resource_dirs (b/226423379)"),
  363. ExpectedBazelTargets: []string{},
  364. })
  365. }
  366. func TestJavaLibraryAidl(t *testing.T) {
  367. runJavaLibraryTestCase(t, Bp2buildTestCase{
  368. Description: "Java library - aidl creates separate dependency",
  369. ModuleTypeUnderTest: "java_library",
  370. ModuleTypeUnderTestFactory: java.LibraryFactory,
  371. Blueprint: `java_library {
  372. name: "example_lib",
  373. srcs: [
  374. "a.java",
  375. "b.java",
  376. "a.aidl",
  377. "b.aidl",
  378. ],
  379. bazel_module: { bp2build_available: true },
  380. }`,
  381. ExpectedBazelTargets: []string{
  382. MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
  383. "srcs": `[
  384. "a.aidl",
  385. "b.aidl",
  386. ]`,
  387. }),
  388. MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
  389. "deps": `[":example_lib_aidl_library"]`,
  390. }),
  391. MakeBazelTarget("java_library", "example_lib", AttrNameToString{
  392. "deps": `[":example_lib_java_aidl_library"]`,
  393. "exports": `[":example_lib_java_aidl_library"]`,
  394. "srcs": `[
  395. "a.java",
  396. "b.java",
  397. ]`,
  398. }),
  399. MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
  400. }})
  401. }
  402. func TestJavaLibraryAidlSrcsNoFileGroup(t *testing.T) {
  403. runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
  404. Description: "Java library - aidl filegroup is parsed",
  405. ModuleTypeUnderTest: "java_library",
  406. ModuleTypeUnderTestFactory: java.LibraryFactory,
  407. Blueprint: `
  408. java_library {
  409. name: "example_lib",
  410. srcs: [
  411. "a.java",
  412. "b.aidl",
  413. ],
  414. bazel_module: { bp2build_available: true },
  415. }`,
  416. ExpectedBazelTargets: []string{
  417. MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
  418. "srcs": `["b.aidl"]`,
  419. }),
  420. MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
  421. "deps": `[":example_lib_aidl_library"]`,
  422. }),
  423. MakeBazelTarget("java_library", "example_lib", AttrNameToString{
  424. "deps": `[":example_lib_java_aidl_library"]`,
  425. "exports": `[":example_lib_java_aidl_library"]`,
  426. "srcs": `["a.java"]`,
  427. }),
  428. MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
  429. },
  430. }, func(ctx android.RegistrationContext) {
  431. ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
  432. })
  433. }
  434. func TestJavaLibraryAidlFilegroup(t *testing.T) {
  435. runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
  436. Description: "Java library - aidl filegroup is parsed",
  437. ModuleTypeUnderTest: "java_library",
  438. ModuleTypeUnderTestFactory: java.LibraryFactory,
  439. Blueprint: `
  440. filegroup {
  441. name: "random_other_files",
  442. srcs: [
  443. "a.java",
  444. "b.java",
  445. ],
  446. }
  447. filegroup {
  448. name: "aidl_files",
  449. srcs: [
  450. "a.aidl",
  451. "b.aidl",
  452. ],
  453. }
  454. java_library {
  455. name: "example_lib",
  456. srcs: [
  457. "a.java",
  458. "b.java",
  459. ":aidl_files",
  460. ":random_other_files",
  461. ],
  462. bazel_module: { bp2build_available: true },
  463. }`,
  464. ExpectedBazelTargets: []string{
  465. MakeBazelTargetNoRestrictions("aidl_library", "aidl_files", AttrNameToString{
  466. "srcs": `[
  467. "a.aidl",
  468. "b.aidl",
  469. ]`,
  470. "tags": `["apex_available=//apex_available:anyapex"]`,
  471. }),
  472. MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
  473. "deps": `[":aidl_files"]`,
  474. }),
  475. MakeBazelTarget("java_library", "example_lib", AttrNameToString{
  476. "deps": `[":example_lib_java_aidl_library"]`,
  477. "exports": `[":example_lib_java_aidl_library"]`,
  478. "srcs": `[
  479. "a.java",
  480. "b.java",
  481. ":random_other_files",
  482. ]`,
  483. }),
  484. MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
  485. MakeBazelTargetNoRestrictions("filegroup", "random_other_files", AttrNameToString{
  486. "srcs": `[
  487. "a.java",
  488. "b.java",
  489. ]`,
  490. }),
  491. },
  492. }, func(ctx android.RegistrationContext) {
  493. ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
  494. })
  495. }
  496. func TestJavaLibraryAidlNonAdjacentAidlFilegroup(t *testing.T) {
  497. runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
  498. Description: "java_library with non adjacent aidl filegroup",
  499. ModuleTypeUnderTest: "java_library",
  500. ModuleTypeUnderTestFactory: java.LibraryFactory,
  501. Filesystem: map[string]string{
  502. "path/to/A/Android.bp": `
  503. filegroup {
  504. name: "A_aidl",
  505. srcs: ["aidl/A.aidl"],
  506. path: "aidl",
  507. }`,
  508. },
  509. Blueprint: `
  510. java_library {
  511. name: "foo",
  512. srcs: [
  513. ":A_aidl",
  514. ],
  515. }`,
  516. ExpectedBazelTargets: []string{
  517. MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{
  518. "deps": `["//path/to/A:A_aidl"]`,
  519. }),
  520. MakeBazelTarget("java_library", "foo", AttrNameToString{
  521. "exports": `[":foo_java_aidl_library"]`,
  522. }),
  523. MakeNeverlinkDuplicateTarget("java_library", "foo"),
  524. },
  525. }, func(ctx android.RegistrationContext) {
  526. ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
  527. })
  528. }
  529. func TestConvertArmNeonVariant(t *testing.T) {
  530. t.Helper()
  531. RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
  532. Description: "Android Library - simple arch feature",
  533. ModuleTypeUnderTest: "android_library",
  534. ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
  535. Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
  536. android_library {
  537. name: "TestLib",
  538. manifest: "manifest/AndroidManifest.xml",
  539. srcs: ["lib.java"],
  540. arch: {
  541. arm: {
  542. neon: {
  543. srcs: ["arm_neon.java"],
  544. },
  545. },
  546. },
  547. }
  548. `,
  549. ExpectedBazelTargets: []string{
  550. MakeBazelTarget(
  551. "android_library",
  552. "TestLib",
  553. AttrNameToString{
  554. "srcs": `["lib.java"] + select({
  555. "//build/bazel/platforms/arch/variants:arm-neon": ["arm_neon.java"],
  556. "//conditions:default": [],
  557. })`,
  558. "manifest": `"manifest/AndroidManifest.xml"`,
  559. "resource_files": `[]`,
  560. }),
  561. MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
  562. }})
  563. }
  564. func TestConvertMultipleArchFeatures(t *testing.T) {
  565. t.Helper()
  566. RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
  567. Description: "Android Library - multiple arch features",
  568. ModuleTypeUnderTest: "android_library",
  569. ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
  570. Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
  571. android_library {
  572. name: "TestLib",
  573. manifest: "manifest/AndroidManifest.xml",
  574. srcs: ["lib.java"],
  575. arch: {
  576. x86: {
  577. ssse3: {
  578. srcs: ["ssse3.java"],
  579. },
  580. sse4_1: {
  581. srcs: ["sse4_1.java"],
  582. },
  583. },
  584. },
  585. }
  586. `,
  587. ExpectedBazelTargets: []string{
  588. MakeBazelTarget(
  589. "android_library",
  590. "TestLib",
  591. AttrNameToString{
  592. "srcs": `["lib.java"] + select({
  593. "//build/bazel/platforms/arch/variants:x86-sse4_1": ["sse4_1.java"],
  594. "//build/bazel/platforms/arch/variants:x86-sse4_1-ssse3": [
  595. "sse4_1.java",
  596. "ssse3.java",
  597. ],
  598. "//build/bazel/platforms/arch/variants:x86-ssse3": ["ssse3.java"],
  599. "//conditions:default": [],
  600. })`,
  601. "manifest": `"manifest/AndroidManifest.xml"`,
  602. "resource_files": `[]`,
  603. }),
  604. MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
  605. }})
  606. }
  607. func TestConvertExcludeSrcsArchFeature(t *testing.T) {
  608. t.Helper()
  609. RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
  610. Description: "Android Library - exclude_srcs with arch feature",
  611. ModuleTypeUnderTest: "android_library",
  612. ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
  613. Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
  614. android_library {
  615. name: "TestLib",
  616. manifest: "manifest/AndroidManifest.xml",
  617. srcs: ["lib.java"],
  618. arch: {
  619. arm: {
  620. srcs: ["arm_non_neon.java"],
  621. neon: {
  622. exclude_srcs: ["arm_non_neon.java"],
  623. },
  624. },
  625. },
  626. }
  627. `,
  628. ExpectedBazelTargets: []string{
  629. MakeBazelTarget(
  630. "android_library",
  631. "TestLib",
  632. AttrNameToString{
  633. "srcs": `["lib.java"] + select({
  634. "//build/bazel/platforms/arch/variants:arm-neon": [],
  635. "//build/bazel/platforms/arch:arm": ["arm_non_neon.java"],
  636. "//conditions:default": [],
  637. })`,
  638. "manifest": `"manifest/AndroidManifest.xml"`,
  639. "resource_files": `[]`,
  640. }),
  641. MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
  642. }})
  643. }
  644. func TestJavaLibraryKotlinSrcs(t *testing.T) {
  645. runJavaLibraryTestCase(t, Bp2buildTestCase{
  646. Description: "java_library with kotlin srcs",
  647. Blueprint: `java_library {
  648. name: "java-lib-1",
  649. srcs: ["a.java", "b.java", "c.kt"],
  650. bazel_module: { bp2build_available: true },
  651. }
  652. `,
  653. ExpectedBazelTargets: []string{
  654. MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
  655. "srcs": `[
  656. "a.java",
  657. "b.java",
  658. "c.kt",
  659. ]`,
  660. }),
  661. MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
  662. },
  663. })
  664. }
  665. func TestJavaLibraryKotlincflags(t *testing.T) {
  666. runJavaLibraryTestCase(t, Bp2buildTestCase{
  667. Description: "java_library with kotlincfalgs",
  668. Blueprint: `java_library {
  669. name: "java-lib-1",
  670. srcs: [ "a.kt"],
  671. kotlincflags: ["-flag1", "-flag2"],
  672. bazel_module: { bp2build_available: true },
  673. }
  674. `,
  675. ExpectedBazelTargets: []string{
  676. MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
  677. "srcs": `["a.kt"]`,
  678. "kotlincflags": `[
  679. "-flag1",
  680. "-flag2",
  681. ]`,
  682. }),
  683. MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
  684. },
  685. })
  686. }
  687. func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
  688. runJavaLibraryTestCase(t, Bp2buildTestCase{
  689. Description: "java_library with kotlin common_srcs",
  690. Blueprint: `java_library {
  691. name: "java-lib-1",
  692. srcs: ["a.java", "b.java"],
  693. common_srcs: ["c.kt"],
  694. bazel_module: { bp2build_available: true },
  695. }
  696. `,
  697. ExpectedBazelTargets: []string{
  698. MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
  699. "srcs": `[
  700. "a.java",
  701. "b.java",
  702. ]`,
  703. "common_srcs": `["c.kt"]`,
  704. }),
  705. MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
  706. },
  707. })
  708. }
  709. func TestJavaLibraryArchVariantDeps(t *testing.T) {
  710. runJavaLibraryTestCase(t, Bp2buildTestCase{
  711. Description: "java_library with arch variant libs",
  712. Blueprint: `java_library {
  713. name: "java-lib-1",
  714. srcs: ["a.java"],
  715. libs: ["java-lib-2"],
  716. target: {
  717. android: {
  718. libs: ["java-lib-3"],
  719. static_libs: ["java-lib-4"],
  720. },
  721. },
  722. bazel_module: { bp2build_available: true },
  723. }
  724. java_library{
  725. name: "java-lib-2",
  726. }
  727. java_library{
  728. name: "java-lib-3",
  729. }
  730. java_library{
  731. name: "java-lib-4",
  732. }
  733. `,
  734. ExpectedBazelTargets: []string{
  735. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  736. "srcs": `["a.java"]`,
  737. "exports": `select({
  738. "//build/bazel/platforms/os:android": [":java-lib-4"],
  739. "//conditions:default": [],
  740. })`,
  741. "deps": `[":java-lib-2-neverlink"] + select({
  742. "//build/bazel/platforms/os:android": [
  743. ":java-lib-3-neverlink",
  744. ":java-lib-4",
  745. ],
  746. "//conditions:default": [],
  747. })`,
  748. }),
  749. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  750. MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{}),
  751. MakeNeverlinkDuplicateTarget("java_library", "java-lib-2"),
  752. MakeBazelTarget("java_library", "java-lib-3", AttrNameToString{}),
  753. MakeNeverlinkDuplicateTarget("java_library", "java-lib-3"),
  754. MakeBazelTarget("java_library", "java-lib-4", AttrNameToString{}),
  755. MakeNeverlinkDuplicateTarget("java_library", "java-lib-4"),
  756. },
  757. })
  758. }
  759. func TestJavaLibraryArchVariantSrcsWithExcludes(t *testing.T) {
  760. runJavaLibraryTestCase(t, Bp2buildTestCase{
  761. Description: "java_library with arch variant libs",
  762. Blueprint: `java_library {
  763. name: "java-lib-1",
  764. srcs: ["a.java", "b.java"],
  765. target: {
  766. android: {
  767. exclude_srcs: ["a.java"],
  768. },
  769. },
  770. bazel_module: { bp2build_available: true },
  771. }
  772. `,
  773. ExpectedBazelTargets: []string{
  774. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  775. "srcs": `["b.java"] + select({
  776. "//build/bazel/platforms/os:android": [],
  777. "//conditions:default": ["a.java"],
  778. })`,
  779. }),
  780. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  781. },
  782. })
  783. }