java_library_conversion_test.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868
  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. Dir: "adir",
  265. Filesystem: map[string]string{
  266. "adir/res/a.res": "",
  267. "adir/res/b.res": "",
  268. "adir/res/dir1/b.res": "",
  269. "adir/Android.bp": `java_library {
  270. name: "java-lib-1",
  271. java_resources: ["res/a.res", "res/b.res"],
  272. bazel_module: { bp2build_available: true },
  273. }`,
  274. },
  275. Blueprint: "",
  276. ExpectedBazelTargets: []string{
  277. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  278. "resources": `[
  279. "res/a.res",
  280. "res/b.res",
  281. ]`,
  282. "resource_strip_prefix": `"adir"`,
  283. }),
  284. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  285. },
  286. })
  287. }
  288. func TestJavaLibraryResourceDirs(t *testing.T) {
  289. runJavaLibraryTestCase(t, Bp2buildTestCase{
  290. Filesystem: map[string]string{
  291. "res/a.res": "",
  292. "res/b.res": "",
  293. "res/dir1/b.res": "",
  294. },
  295. Blueprint: `java_library {
  296. name: "java-lib-1",
  297. java_resource_dirs: ["res"],
  298. }`,
  299. ExpectedBazelTargets: []string{
  300. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  301. "resource_strip_prefix": `"res"`,
  302. "resources": `[
  303. "res/a.res",
  304. "res/b.res",
  305. "res/dir1/b.res",
  306. ]`,
  307. }),
  308. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  309. },
  310. })
  311. }
  312. func TestJavaLibraryResourcesExcludeDir(t *testing.T) {
  313. runJavaLibraryTestCase(t, Bp2buildTestCase{
  314. Filesystem: map[string]string{
  315. "res/a.res": "",
  316. "res/exclude/b.res": "",
  317. },
  318. Blueprint: `java_library {
  319. name: "java-lib-1",
  320. java_resource_dirs: ["res"],
  321. exclude_java_resource_dirs: ["res/exclude"],
  322. }`,
  323. ExpectedBazelTargets: []string{
  324. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  325. "resource_strip_prefix": `"res"`,
  326. "resources": `["res/a.res"]`,
  327. }),
  328. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  329. },
  330. })
  331. }
  332. func TestJavaLibraryResourcesExcludeFile(t *testing.T) {
  333. runJavaLibraryTestCase(t, Bp2buildTestCase{
  334. Filesystem: map[string]string{
  335. "res/a.res": "",
  336. "res/dir1/b.res": "",
  337. "res/dir1/exclude.res": "",
  338. },
  339. Blueprint: `java_library {
  340. name: "java-lib-1",
  341. java_resource_dirs: ["res"],
  342. exclude_java_resources: ["res/dir1/exclude.res"],
  343. }`,
  344. ExpectedBazelTargets: []string{
  345. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  346. "resource_strip_prefix": `"res"`,
  347. "resources": `[
  348. "res/a.res",
  349. "res/dir1/b.res",
  350. ]`,
  351. }),
  352. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  353. },
  354. })
  355. }
  356. func TestJavaLibraryResourcesFailsWithMultipleDirs(t *testing.T) {
  357. runJavaLibraryTestCase(t, Bp2buildTestCase{
  358. Filesystem: map[string]string{
  359. "res/a.res": "",
  360. "res1/a.res": "",
  361. },
  362. Blueprint: `java_library {
  363. name: "java-lib-1",
  364. java_resource_dirs: ["res", "res1"],
  365. }`,
  366. ExpectedErr: fmt.Errorf("bp2build does not support more than one directory in java_resource_dirs (b/226423379)"),
  367. ExpectedBazelTargets: []string{},
  368. })
  369. }
  370. func TestJavaLibraryAidl(t *testing.T) {
  371. runJavaLibraryTestCase(t, Bp2buildTestCase{
  372. Description: "Java library - aidl creates separate dependency",
  373. ModuleTypeUnderTest: "java_library",
  374. ModuleTypeUnderTestFactory: java.LibraryFactory,
  375. Blueprint: `java_library {
  376. name: "example_lib",
  377. srcs: [
  378. "a.java",
  379. "b.java",
  380. "a.aidl",
  381. "b.aidl",
  382. ],
  383. bazel_module: { bp2build_available: true },
  384. }`,
  385. ExpectedBazelTargets: []string{
  386. MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
  387. "srcs": `[
  388. "a.aidl",
  389. "b.aidl",
  390. ]`,
  391. }),
  392. MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
  393. "deps": `[":example_lib_aidl_library"]`,
  394. }),
  395. MakeBazelTarget("java_library", "example_lib", AttrNameToString{
  396. "deps": `[":example_lib_java_aidl_library"]`,
  397. "exports": `[":example_lib_java_aidl_library"]`,
  398. "srcs": `[
  399. "a.java",
  400. "b.java",
  401. ]`,
  402. }),
  403. MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
  404. }})
  405. }
  406. func TestJavaLibraryAidlSrcsNoFileGroup(t *testing.T) {
  407. runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
  408. Description: "Java library - aidl filegroup is parsed",
  409. ModuleTypeUnderTest: "java_library",
  410. ModuleTypeUnderTestFactory: java.LibraryFactory,
  411. Blueprint: `
  412. java_library {
  413. name: "example_lib",
  414. srcs: [
  415. "a.java",
  416. "b.aidl",
  417. ],
  418. bazel_module: { bp2build_available: true },
  419. }`,
  420. ExpectedBazelTargets: []string{
  421. MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
  422. "srcs": `["b.aidl"]`,
  423. }),
  424. MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
  425. "deps": `[":example_lib_aidl_library"]`,
  426. }),
  427. MakeBazelTarget("java_library", "example_lib", AttrNameToString{
  428. "deps": `[":example_lib_java_aidl_library"]`,
  429. "exports": `[":example_lib_java_aidl_library"]`,
  430. "srcs": `["a.java"]`,
  431. }),
  432. MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
  433. },
  434. }, func(ctx android.RegistrationContext) {
  435. ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
  436. })
  437. }
  438. func TestJavaLibraryAidlFilegroup(t *testing.T) {
  439. runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
  440. Description: "Java library - aidl filegroup is parsed",
  441. ModuleTypeUnderTest: "java_library",
  442. ModuleTypeUnderTestFactory: java.LibraryFactory,
  443. Blueprint: `
  444. filegroup {
  445. name: "random_other_files",
  446. srcs: [
  447. "a.java",
  448. "b.java",
  449. ],
  450. }
  451. filegroup {
  452. name: "aidl_files",
  453. srcs: [
  454. "a.aidl",
  455. "b.aidl",
  456. ],
  457. }
  458. java_library {
  459. name: "example_lib",
  460. srcs: [
  461. "a.java",
  462. "b.java",
  463. ":aidl_files",
  464. ":random_other_files",
  465. ],
  466. bazel_module: { bp2build_available: true },
  467. }`,
  468. ExpectedBazelTargets: []string{
  469. MakeBazelTargetNoRestrictions("aidl_library", "aidl_files", AttrNameToString{
  470. "srcs": `[
  471. "a.aidl",
  472. "b.aidl",
  473. ]`,
  474. "tags": `["apex_available=//apex_available:anyapex"]`,
  475. }),
  476. MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
  477. "deps": `[":aidl_files"]`,
  478. }),
  479. MakeBazelTarget("java_library", "example_lib", AttrNameToString{
  480. "deps": `[":example_lib_java_aidl_library"]`,
  481. "exports": `[":example_lib_java_aidl_library"]`,
  482. "srcs": `[
  483. "a.java",
  484. "b.java",
  485. ":random_other_files",
  486. ]`,
  487. }),
  488. MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
  489. MakeBazelTargetNoRestrictions("filegroup", "random_other_files", AttrNameToString{
  490. "srcs": `[
  491. "a.java",
  492. "b.java",
  493. ]`,
  494. }),
  495. },
  496. }, func(ctx android.RegistrationContext) {
  497. ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
  498. })
  499. }
  500. func TestJavaLibraryAidlNonAdjacentAidlFilegroup(t *testing.T) {
  501. runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
  502. Description: "java_library with non adjacent aidl filegroup",
  503. ModuleTypeUnderTest: "java_library",
  504. ModuleTypeUnderTestFactory: java.LibraryFactory,
  505. Filesystem: map[string]string{
  506. "path/to/A/Android.bp": `
  507. filegroup {
  508. name: "A_aidl",
  509. srcs: ["aidl/A.aidl"],
  510. path: "aidl",
  511. }`,
  512. },
  513. Blueprint: `
  514. java_library {
  515. name: "foo",
  516. srcs: [
  517. ":A_aidl",
  518. ],
  519. }`,
  520. ExpectedBazelTargets: []string{
  521. MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{
  522. "deps": `["//path/to/A:A_aidl"]`,
  523. }),
  524. MakeBazelTarget("java_library", "foo", AttrNameToString{
  525. "exports": `[":foo_java_aidl_library"]`,
  526. }),
  527. MakeNeverlinkDuplicateTarget("java_library", "foo"),
  528. },
  529. }, func(ctx android.RegistrationContext) {
  530. ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
  531. })
  532. }
  533. func TestConvertArmNeonVariant(t *testing.T) {
  534. t.Helper()
  535. RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
  536. Description: "Android Library - simple arch feature",
  537. ModuleTypeUnderTest: "android_library",
  538. ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
  539. Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
  540. android_library {
  541. name: "TestLib",
  542. manifest: "manifest/AndroidManifest.xml",
  543. srcs: ["lib.java"],
  544. arch: {
  545. arm: {
  546. neon: {
  547. srcs: ["arm_neon.java"],
  548. },
  549. },
  550. },
  551. }
  552. `,
  553. ExpectedBazelTargets: []string{
  554. MakeBazelTarget(
  555. "android_library",
  556. "TestLib",
  557. AttrNameToString{
  558. "srcs": `["lib.java"] + select({
  559. "//build/bazel/platforms/arch/variants:arm-neon": ["arm_neon.java"],
  560. "//conditions:default": [],
  561. })`,
  562. "manifest": `"manifest/AndroidManifest.xml"`,
  563. "resource_files": `[]`,
  564. }),
  565. MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
  566. }})
  567. }
  568. func TestConvertMultipleArchFeatures(t *testing.T) {
  569. t.Helper()
  570. RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
  571. Description: "Android Library - multiple arch features",
  572. ModuleTypeUnderTest: "android_library",
  573. ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
  574. Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
  575. android_library {
  576. name: "TestLib",
  577. manifest: "manifest/AndroidManifest.xml",
  578. srcs: ["lib.java"],
  579. arch: {
  580. x86: {
  581. ssse3: {
  582. srcs: ["ssse3.java"],
  583. },
  584. sse4_1: {
  585. srcs: ["sse4_1.java"],
  586. },
  587. },
  588. },
  589. }
  590. `,
  591. ExpectedBazelTargets: []string{
  592. MakeBazelTarget(
  593. "android_library",
  594. "TestLib",
  595. AttrNameToString{
  596. "srcs": `["lib.java"] + select({
  597. "//build/bazel/platforms/arch/variants:x86-sse4_1": ["sse4_1.java"],
  598. "//build/bazel/platforms/arch/variants:x86-sse4_1-ssse3": [
  599. "sse4_1.java",
  600. "ssse3.java",
  601. ],
  602. "//build/bazel/platforms/arch/variants:x86-ssse3": ["ssse3.java"],
  603. "//conditions:default": [],
  604. })`,
  605. "manifest": `"manifest/AndroidManifest.xml"`,
  606. "resource_files": `[]`,
  607. }),
  608. MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
  609. }})
  610. }
  611. func TestConvertExcludeSrcsArchFeature(t *testing.T) {
  612. t.Helper()
  613. RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
  614. Description: "Android Library - exclude_srcs with arch feature",
  615. ModuleTypeUnderTest: "android_library",
  616. ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
  617. Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
  618. android_library {
  619. name: "TestLib",
  620. manifest: "manifest/AndroidManifest.xml",
  621. srcs: ["lib.java"],
  622. arch: {
  623. arm: {
  624. srcs: ["arm_non_neon.java"],
  625. neon: {
  626. exclude_srcs: ["arm_non_neon.java"],
  627. },
  628. },
  629. },
  630. }
  631. `,
  632. ExpectedBazelTargets: []string{
  633. MakeBazelTarget(
  634. "android_library",
  635. "TestLib",
  636. AttrNameToString{
  637. "srcs": `["lib.java"] + select({
  638. "//build/bazel/platforms/arch/variants:arm-neon": [],
  639. "//build/bazel/platforms/arch:arm": ["arm_non_neon.java"],
  640. "//conditions:default": [],
  641. })`,
  642. "manifest": `"manifest/AndroidManifest.xml"`,
  643. "resource_files": `[]`,
  644. }),
  645. MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
  646. }})
  647. }
  648. func TestJavaLibraryKotlinSrcs(t *testing.T) {
  649. runJavaLibraryTestCase(t, Bp2buildTestCase{
  650. Description: "java_library with kotlin srcs",
  651. Blueprint: `java_library {
  652. name: "java-lib-1",
  653. srcs: ["a.java", "b.java", "c.kt"],
  654. bazel_module: { bp2build_available: true },
  655. }
  656. `,
  657. ExpectedBazelTargets: []string{
  658. MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
  659. "srcs": `[
  660. "a.java",
  661. "b.java",
  662. "c.kt",
  663. ]`,
  664. }),
  665. MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
  666. },
  667. })
  668. }
  669. func TestJavaLibraryKotlincflags(t *testing.T) {
  670. runJavaLibraryTestCase(t, Bp2buildTestCase{
  671. Description: "java_library with kotlincfalgs",
  672. Blueprint: `java_library {
  673. name: "java-lib-1",
  674. srcs: [ "a.kt"],
  675. kotlincflags: ["-flag1", "-flag2"],
  676. bazel_module: { bp2build_available: true },
  677. }
  678. `,
  679. ExpectedBazelTargets: []string{
  680. MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
  681. "srcs": `["a.kt"]`,
  682. "kotlincflags": `[
  683. "-flag1",
  684. "-flag2",
  685. ]`,
  686. }),
  687. MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
  688. },
  689. })
  690. }
  691. func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
  692. runJavaLibraryTestCase(t, Bp2buildTestCase{
  693. Description: "java_library with kotlin common_srcs",
  694. Blueprint: `java_library {
  695. name: "java-lib-1",
  696. srcs: ["a.java", "b.java"],
  697. common_srcs: ["c.kt"],
  698. bazel_module: { bp2build_available: true },
  699. }
  700. `,
  701. ExpectedBazelTargets: []string{
  702. MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
  703. "srcs": `[
  704. "a.java",
  705. "b.java",
  706. ]`,
  707. "common_srcs": `["c.kt"]`,
  708. }),
  709. MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
  710. },
  711. })
  712. }
  713. func TestJavaLibraryArchVariantDeps(t *testing.T) {
  714. runJavaLibraryTestCase(t, Bp2buildTestCase{
  715. Description: "java_library with arch variant libs",
  716. Blueprint: `java_library {
  717. name: "java-lib-1",
  718. srcs: ["a.java"],
  719. libs: ["java-lib-2"],
  720. target: {
  721. android: {
  722. libs: ["java-lib-3"],
  723. static_libs: ["java-lib-4"],
  724. },
  725. },
  726. bazel_module: { bp2build_available: true },
  727. }
  728. java_library{
  729. name: "java-lib-2",
  730. }
  731. java_library{
  732. name: "java-lib-3",
  733. }
  734. java_library{
  735. name: "java-lib-4",
  736. }
  737. `,
  738. ExpectedBazelTargets: []string{
  739. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  740. "srcs": `["a.java"]`,
  741. "exports": `select({
  742. "//build/bazel/platforms/os:android": [":java-lib-4"],
  743. "//conditions:default": [],
  744. })`,
  745. "deps": `[":java-lib-2-neverlink"] + select({
  746. "//build/bazel/platforms/os:android": [
  747. ":java-lib-3-neverlink",
  748. ":java-lib-4",
  749. ],
  750. "//conditions:default": [],
  751. })`,
  752. }),
  753. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  754. MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{}),
  755. MakeNeverlinkDuplicateTarget("java_library", "java-lib-2"),
  756. MakeBazelTarget("java_library", "java-lib-3", AttrNameToString{}),
  757. MakeNeverlinkDuplicateTarget("java_library", "java-lib-3"),
  758. MakeBazelTarget("java_library", "java-lib-4", AttrNameToString{}),
  759. MakeNeverlinkDuplicateTarget("java_library", "java-lib-4"),
  760. },
  761. })
  762. }
  763. func TestJavaLibraryArchVariantSrcsWithExcludes(t *testing.T) {
  764. runJavaLibraryTestCase(t, Bp2buildTestCase{
  765. Description: "java_library with arch variant libs",
  766. Blueprint: `java_library {
  767. name: "java-lib-1",
  768. srcs: ["a.java", "b.java"],
  769. target: {
  770. android: {
  771. exclude_srcs: ["a.java"],
  772. },
  773. },
  774. bazel_module: { bp2build_available: true },
  775. }
  776. `,
  777. ExpectedBazelTargets: []string{
  778. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  779. "srcs": `["b.java"] + select({
  780. "//build/bazel/platforms/os:android": [],
  781. "//conditions:default": ["a.java"],
  782. })`,
  783. }),
  784. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  785. },
  786. })
  787. }
  788. func TestJavaLibraryJavaResourcesSingleFilegroup(t *testing.T) {
  789. runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
  790. Filesystem: map[string]string{
  791. "res/a.res": "",
  792. "res/b.res": "",
  793. "res/dir1/b.res": "",
  794. },
  795. Description: "java_library",
  796. Blueprint: `java_library {
  797. name: "java-lib-1",
  798. srcs: ["a.java"],
  799. java_resources: [":filegroup1"],
  800. bazel_module: { bp2build_available: true },
  801. }
  802. filegroup {
  803. name: "filegroup1",
  804. path: "foo",
  805. srcs: ["foo/a", "foo/b"],
  806. }
  807. `,
  808. ExpectedBazelTargets: []string{
  809. MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
  810. "srcs": `["a.java"]`,
  811. "resources": `[":filegroup1"]`,
  812. "resource_strip_prefix": `"foo"`,
  813. }),
  814. MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
  815. MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
  816. "srcs": `[
  817. "foo/a",
  818. "foo/b",
  819. ]`}),
  820. },
  821. }, func(ctx android.RegistrationContext) {
  822. ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
  823. })
  824. }