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