• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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