blob: 00056f8ff7e3d22a32ddf45733e0a24607bba121 [file] [log] [blame]
Wei Libafb6d62021-12-10 03:14:59 -08001// 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 (
Sam Delmericoc0161432022-02-25 21:34:51 +000018 "fmt"
Wei Libafb6d62021-12-10 03:14:59 -080019 "testing"
20
21 "android/soong/android"
22 "android/soong/java"
23)
24
Sam Delmerico3177a6e2022-06-21 19:28:33 +000025func runJavaLibraryTestCaseWithRegistrationCtxFunc(t *testing.T, tc Bp2buildTestCase, registrationCtxFunc func(ctx android.RegistrationContext)) {
Wei Libafb6d62021-12-10 03:14:59 -080026 t.Helper()
Sam Delmerico3177a6e2022-06-21 19:28:33 +000027 (&tc).ModuleTypeUnderTest = "java_library"
28 (&tc).ModuleTypeUnderTestFactory = java.LibraryFactory
29 RunBp2BuildTestCase(t, registrationCtxFunc, tc)
Sam Delmerico77267c72022-03-18 14:11:07 +000030}
31
Sam Delmerico3177a6e2022-06-21 19:28:33 +000032func runJavaLibraryTestCase(t *testing.T, tc Bp2buildTestCase) {
Sam Delmerico58614c02022-03-15 21:02:09 +000033 t.Helper()
Sam Delmerico77267c72022-03-18 14:11:07 +000034 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, tc, func(ctx android.RegistrationContext) {})
Wei Libafb6d62021-12-10 03:14:59 -080035}
36
37func TestJavaLibrary(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000038 runJavaLibraryTestCase(t, Bp2buildTestCase{
39 Description: "java_library with srcs, exclude_srcs and libs",
40 Blueprint: `java_library {
Wei Libafb6d62021-12-10 03:14:59 -080041 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}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000053 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +000054 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Wei Libafb6d62021-12-10 03:14:59 -080055 "srcs": `["a.java"]`,
56 "deps": `[":java-lib-2"]`,
57 }),
Alixe06d75b2022-08-31 18:28:19 +000058 MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{
Wei Libafb6d62021-12-10 03:14:59 -080059 "srcs": `["b.java"]`,
60 }),
61 },
62 })
63}
Sam Delmericoc0161432022-02-25 21:34:51 +000064
65func TestJavaLibraryConvertsStaticLibsToDepsAndExports(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000066 runJavaLibraryTestCase(t, Bp2buildTestCase{
67 Blueprint: `java_library {
Sam Delmericoc0161432022-02-25 21:34:51 +000068 name: "java-lib-1",
69 srcs: ["a.java"],
70 libs: ["java-lib-2"],
71 static_libs: ["java-lib-3"],
72 bazel_module: { bp2build_available: true },
73}
74
75java_library {
76 name: "java-lib-2",
77 srcs: ["b.java"],
78 bazel_module: { bp2build_available: false },
79}
80
81java_library {
82 name: "java-lib-3",
83 srcs: ["c.java"],
84 bazel_module: { bp2build_available: false },
85}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000086 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +000087 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmericoc0161432022-02-25 21:34:51 +000088 "srcs": `["a.java"]`,
89 "deps": `[
90 ":java-lib-2",
91 ":java-lib-3",
92 ]`,
93 "exports": `[":java-lib-3"]`,
94 }),
95 },
96 })
97}
98
99func TestJavaLibraryConvertsStaticLibsToExportsIfNoSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000100 runJavaLibraryTestCase(t, Bp2buildTestCase{
101 Blueprint: `java_library {
Sam Delmericoc0161432022-02-25 21:34:51 +0000102 name: "java-lib-1",
103 static_libs: ["java-lib-2"],
104 bazel_module: { bp2build_available: true },
105}
106
107java_library {
108 name: "java-lib-2",
109 srcs: ["a.java"],
110 bazel_module: { bp2build_available: false },
111}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000112 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000113 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmericoc0161432022-02-25 21:34:51 +0000114 "exports": `[":java-lib-2"]`,
115 }),
116 },
117 })
118}
119
120func TestJavaLibraryFailsToConvertLibsWithNoSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000121 runJavaLibraryTestCase(t, Bp2buildTestCase{
122 ExpectedErr: fmt.Errorf("Module has direct dependencies but no sources. Bazel will not allow this."),
123 Blueprint: `java_library {
Sam Delmericoc0161432022-02-25 21:34:51 +0000124 name: "java-lib-1",
125 libs: ["java-lib-2"],
126 bazel_module: { bp2build_available: true },
127}
128
129java_library {
130 name: "java-lib-2",
131 srcs: ["a.java"],
132 bazel_module: { bp2build_available: false },
133}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000134 ExpectedBazelTargets: []string{},
Sam Delmericoc0161432022-02-25 21:34:51 +0000135 })
136}
Sam Delmerico77267c72022-03-18 14:11:07 +0000137
138func TestJavaLibraryPlugins(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000139 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
140 Blueprint: `java_library {
Sam Delmerico77267c72022-03-18 14:11:07 +0000141 name: "java-lib-1",
142 plugins: ["java-plugin-1"],
143 bazel_module: { bp2build_available: true },
144}
145
146java_plugin {
147 name: "java-plugin-1",
148 srcs: ["a.java"],
149 bazel_module: { bp2build_available: false },
150}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000151 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000152 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico77267c72022-03-18 14:11:07 +0000153 "plugins": `[":java-plugin-1"]`,
154 }),
155 },
156 }, func(ctx android.RegistrationContext) {
157 ctx.RegisterModuleType("java_plugin", java.PluginFactory)
158 })
159}
Sam Delmerico58614c02022-03-15 21:02:09 +0000160
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400161func TestJavaLibraryJavaVersion(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000162 runJavaLibraryTestCase(t, Bp2buildTestCase{
163 Blueprint: `java_library {
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400164 name: "java-lib-1",
165 srcs: ["a.java"],
166 java_version: "11",
167}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000168 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000169 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400170 "srcs": `["a.java"]`,
171 "javacopts": `["-source 11 -target 11"]`,
172 }),
173 },
174 })
175}
176
Sam Delmerico58614c02022-03-15 21:02:09 +0000177func TestJavaLibraryErrorproneJavacflagsEnabledManually(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000178 runJavaLibraryTestCase(t, Bp2buildTestCase{
179 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000180 name: "java-lib-1",
181 srcs: ["a.java"],
182 javacflags: ["-Xsuper-fast"],
183 errorprone: {
184 enabled: true,
185 javacflags: ["-Xep:SpeedLimit:OFF"],
186 },
187}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000188 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000189 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico58614c02022-03-15 21:02:09 +0000190 "javacopts": `[
191 "-Xsuper-fast",
192 "-Xep:SpeedLimit:OFF",
193 ]`,
194 "srcs": `["a.java"]`,
195 }),
196 },
197 })
198}
199
200func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000201 runJavaLibraryTestCase(t, Bp2buildTestCase{
202 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000203 name: "java-lib-1",
204 srcs: ["a.java"],
205 javacflags: ["-Xsuper-fast"],
206 errorprone: {
207 javacflags: ["-Xep:SpeedLimit:OFF"],
208 },
209}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000210 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000211 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico58614c02022-03-15 21:02:09 +0000212 "javacopts": `["-Xsuper-fast"]`,
213 "srcs": `["a.java"]`,
214 }),
215 },
216 })
217}
218
219func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledManually(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000220 runJavaLibraryTestCase(t, Bp2buildTestCase{
221 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000222 name: "java-lib-1",
223 srcs: ["a.java"],
224 javacflags: ["-Xsuper-fast"],
225 errorprone: {
226 enabled: false,
227 javacflags: ["-Xep:SpeedLimit:OFF"],
228 },
229}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000230 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000231 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico58614c02022-03-15 21:02:09 +0000232 "javacopts": `["-Xsuper-fast"]`,
233 "srcs": `["a.java"]`,
234 }),
235 },
236 })
237}
Sam Delmerico24da73c2022-03-16 20:36:54 +0000238
239func TestJavaLibraryLogTags(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000240 runJavaLibraryTestCase(t, Bp2buildTestCase{
241 Description: "Java library - logtags creates separate dependency",
242 ModuleTypeUnderTest: "java_library",
243 ModuleTypeUnderTestFactory: java.LibraryFactory,
244 Blueprint: `java_library {
Sam Delmerico24da73c2022-03-16 20:36:54 +0000245 name: "example_lib",
246 srcs: [
247 "a.java",
248 "b.java",
249 "a.logtag",
250 "b.logtag",
251 ],
252 bazel_module: { bp2build_available: true },
253}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000254 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000255 MakeBazelTarget("event_log_tags", "example_lib_logtags", AttrNameToString{
Sam Delmerico24da73c2022-03-16 20:36:54 +0000256 "srcs": `[
257 "a.logtag",
258 "b.logtag",
259 ]`,
260 }),
Alixe06d75b2022-08-31 18:28:19 +0000261 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico24da73c2022-03-16 20:36:54 +0000262 "srcs": `[
263 "a.java",
264 "b.java",
265 ":example_lib_logtags",
266 ]`,
267 }),
268 }})
269}
Sam Delmerico79985812022-03-23 20:20:42 +0000270
271func TestJavaLibraryResources(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000272 runJavaLibraryTestCase(t, Bp2buildTestCase{
273 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000274 "res/a.res": "",
275 "res/b.res": "",
276 "res/dir1/b.res": "",
277 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000278 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000279 name: "java-lib-1",
280 java_resources: ["res/a.res", "res/b.res"],
281}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000282 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000283 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000284 "resources": `[
285 "res/a.res",
286 "res/b.res",
287 ]`,
288 }),
289 },
290 })
291}
292
293func TestJavaLibraryResourceDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000294 runJavaLibraryTestCase(t, Bp2buildTestCase{
295 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000296 "res/a.res": "",
297 "res/b.res": "",
298 "res/dir1/b.res": "",
299 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000300 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000301 name: "java-lib-1",
302 java_resource_dirs: ["res"],
303}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000304 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000305 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000306 "resource_strip_prefix": `"res"`,
307 "resources": `[
308 "res/a.res",
309 "res/b.res",
310 "res/dir1/b.res",
311 ]`,
312 }),
313 },
314 })
315}
316
317func TestJavaLibraryResourcesExcludeDir(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000318 runJavaLibraryTestCase(t, Bp2buildTestCase{
319 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000320 "res/a.res": "",
321 "res/exclude/b.res": "",
322 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000323 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000324 name: "java-lib-1",
325 java_resource_dirs: ["res"],
326 exclude_java_resource_dirs: ["res/exclude"],
327}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000328 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000329 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000330 "resource_strip_prefix": `"res"`,
331 "resources": `["res/a.res"]`,
332 }),
333 },
334 })
335}
336
337func TestJavaLibraryResourcesExcludeFile(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000338 runJavaLibraryTestCase(t, Bp2buildTestCase{
339 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000340 "res/a.res": "",
341 "res/dir1/b.res": "",
342 "res/dir1/exclude.res": "",
343 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000344 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000345 name: "java-lib-1",
346 java_resource_dirs: ["res"],
347 exclude_java_resources: ["res/dir1/exclude.res"],
348}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000349 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000350 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000351 "resource_strip_prefix": `"res"`,
352 "resources": `[
353 "res/a.res",
354 "res/dir1/b.res",
355 ]`,
356 }),
357 },
358 })
359}
360
361func TestJavaLibraryResourcesFailsWithMultipleDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000362 runJavaLibraryTestCase(t, Bp2buildTestCase{
363 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000364 "res/a.res": "",
365 "res1/a.res": "",
366 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000367 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000368 name: "java-lib-1",
369 java_resource_dirs: ["res", "res1"],
370}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000371 ExpectedErr: fmt.Errorf("bp2build does not support more than one directory in java_resource_dirs (b/226423379)"),
372 ExpectedBazelTargets: []string{},
Sam Delmerico79985812022-03-23 20:20:42 +0000373 })
374}
Sam Delmerico97bd1272022-08-25 14:45:31 -0400375
376func TestJavaLibraryAidl(t *testing.T) {
377 runJavaLibraryTestCase(t, Bp2buildTestCase{
378 Description: "Java library - aidl creates separate dependency",
379 ModuleTypeUnderTest: "java_library",
380 ModuleTypeUnderTestFactory: java.LibraryFactory,
381 Blueprint: `java_library {
382 name: "example_lib",
383 srcs: [
384 "a.java",
385 "b.java",
386 "a.aidl",
387 "b.aidl",
388 ],
389 bazel_module: { bp2build_available: true },
390}`,
391 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000392 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400393 "srcs": `[
394 "a.aidl",
395 "b.aidl",
396 ]`,
397 }),
Alixe06d75b2022-08-31 18:28:19 +0000398 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400399 "deps": `[":example_lib_aidl_library"]`,
400 }),
Alixe06d75b2022-08-31 18:28:19 +0000401 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400402 "deps": `[":example_lib_java_aidl_library"]`,
403 "exports": `[":example_lib_java_aidl_library"]`,
404 "srcs": `[
405 "a.java",
406 "b.java",
407 ]`,
408 }),
409 }})
410}
411
412func TestJavaLibraryAidlSrcsNoFileGroup(t *testing.T) {
413 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
414 Description: "Java library - aidl filegroup is parsed",
415 ModuleTypeUnderTest: "java_library",
416 ModuleTypeUnderTestFactory: java.LibraryFactory,
417 Blueprint: `
418java_library {
419 name: "example_lib",
420 srcs: [
421 "a.java",
422 "b.aidl",
423 ],
424 bazel_module: { bp2build_available: true },
425}`,
426 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000427 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400428 "srcs": `["b.aidl"]`,
429 }),
Alixe06d75b2022-08-31 18:28:19 +0000430 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400431 "deps": `[":example_lib_aidl_library"]`,
432 }),
Alixe06d75b2022-08-31 18:28:19 +0000433 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400434 "deps": `[":example_lib_java_aidl_library"]`,
435 "exports": `[":example_lib_java_aidl_library"]`,
436 "srcs": `["a.java"]`,
437 }),
438 },
439 }, func(ctx android.RegistrationContext) {
440 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
441 })
442}
443
444func TestJavaLibraryAidlFilegroup(t *testing.T) {
445 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
446 Description: "Java library - aidl filegroup is parsed",
447 ModuleTypeUnderTest: "java_library",
448 ModuleTypeUnderTestFactory: java.LibraryFactory,
449 Blueprint: `
450filegroup {
451 name: "random_other_files",
452 srcs: [
453 "a.java",
454 "b.java",
455 ],
456}
457filegroup {
458 name: "aidl_files",
459 srcs: [
460 "a.aidl",
461 "b.aidl",
462 ],
463}
464java_library {
465 name: "example_lib",
466 srcs: [
467 "a.java",
468 "b.java",
469 ":aidl_files",
470 ":random_other_files",
471 ],
472 bazel_module: { bp2build_available: true },
473}`,
474 ExpectedBazelTargets: []string{
475 MakeBazelTargetNoRestrictions("aidl_library", "aidl_files", AttrNameToString{
476 "srcs": `[
477 "a.aidl",
478 "b.aidl",
479 ]`,
480 }),
Alixe06d75b2022-08-31 18:28:19 +0000481 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400482 "deps": `[":aidl_files"]`,
483 }),
Alixe06d75b2022-08-31 18:28:19 +0000484 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400485 "deps": `[":example_lib_java_aidl_library"]`,
486 "exports": `[":example_lib_java_aidl_library"]`,
487 "srcs": `[
488 "a.java",
489 "b.java",
490 ":random_other_files",
491 ]`,
492 }),
493 MakeBazelTargetNoRestrictions("filegroup", "random_other_files", AttrNameToString{
494 "srcs": `[
495 "a.java",
496 "b.java",
497 ]`,
498 }),
499 },
500 }, func(ctx android.RegistrationContext) {
501 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
502 })
503}
Sam Delmerico7c721372022-08-25 13:51:21 -0400504
505func TestJavaLibraryAidlNonAdjacentAidlFilegroup(t *testing.T) {
506 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
507 Description: "java_library with non adjacent aidl filegroup",
508 ModuleTypeUnderTest: "java_library",
509 ModuleTypeUnderTestFactory: java.LibraryFactory,
510 Filesystem: map[string]string{
511 "path/to/A/Android.bp": `
512filegroup {
513 name: "A_aidl",
514 srcs: ["aidl/A.aidl"],
515 path: "aidl",
516}`,
517 },
518 Blueprint: `
519java_library {
520 name: "foo",
521 srcs: [
522 ":A_aidl",
523 ],
524}`,
525 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000526 MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400527 "deps": `["//path/to/A:A_aidl"]`,
528 }),
Alixe06d75b2022-08-31 18:28:19 +0000529 MakeBazelTarget("java_library", "foo", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400530 "exports": `[":foo_java_aidl_library"]`,
531 }),
532 },
533 }, func(ctx android.RegistrationContext) {
534 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
535 })
536}
Cole Faustc843b992022-08-02 18:06:50 -0700537
538func TestConvertArmNeonVariant(t *testing.T) {
539 t.Helper()
540 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
541 Description: "Android Library - simple arch feature",
542 ModuleTypeUnderTest: "android_library",
543 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
544 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
545android_library {
546 name: "TestLib",
547 manifest: "manifest/AndroidManifest.xml",
548 srcs: ["lib.java"],
549 arch: {
550 arm: {
551 neon: {
552 srcs: ["arm_neon.java"],
553 },
554 },
555 },
556}
557`,
558 ExpectedBazelTargets: []string{
559 MakeBazelTarget(
560 "android_library",
561 "TestLib",
562 AttrNameToString{
563 "srcs": `["lib.java"] + select({
564 "//build/bazel/platforms/arch/variants:arm-neon": ["arm_neon.java"],
565 "//conditions:default": [],
566 })`,
567 "manifest": `"manifest/AndroidManifest.xml"`,
568 "resource_files": `[]`,
569 }),
570 }})
571}
572
573func TestConvertMultipleArchFeatures(t *testing.T) {
574 t.Helper()
575 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
576 Description: "Android Library - multiple arch features",
577 ModuleTypeUnderTest: "android_library",
578 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
579 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
580android_library {
581 name: "TestLib",
582 manifest: "manifest/AndroidManifest.xml",
583 srcs: ["lib.java"],
584 arch: {
585 x86: {
586 ssse3: {
587 srcs: ["ssse3.java"],
588 },
589 sse4_1: {
590 srcs: ["sse4_1.java"],
591 },
592 },
593 },
594}
595`,
596 ExpectedBazelTargets: []string{
597 MakeBazelTarget(
598 "android_library",
599 "TestLib",
600 AttrNameToString{
601 "srcs": `["lib.java"] + select({
602 "//build/bazel/platforms/arch/variants:x86-sse4_1": ["sse4_1.java"],
603 "//build/bazel/platforms/arch/variants:x86-sse4_1-ssse3": [
604 "sse4_1.java",
605 "ssse3.java",
606 ],
607 "//build/bazel/platforms/arch/variants:x86-ssse3": ["ssse3.java"],
608 "//conditions:default": [],
609 })`,
610 "manifest": `"manifest/AndroidManifest.xml"`,
611 "resource_files": `[]`,
612 }),
613 }})
614}
615
616func TestConvertExcludeSrcsArchFeature(t *testing.T) {
617 t.Helper()
618 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
619 Description: "Android Library - exclude_srcs with arch feature",
620 ModuleTypeUnderTest: "android_library",
621 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
622 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
623android_library {
624 name: "TestLib",
625 manifest: "manifest/AndroidManifest.xml",
626 srcs: ["lib.java"],
627 arch: {
628 arm: {
629 srcs: ["arm_non_neon.java"],
630 neon: {
631 exclude_srcs: ["arm_non_neon.java"],
632 },
633 },
634 },
635}
636`,
637 ExpectedBazelTargets: []string{
638 MakeBazelTarget(
639 "android_library",
640 "TestLib",
641 AttrNameToString{
642 "srcs": `["lib.java"] + select({
643 "//build/bazel/platforms/arch/variants:arm-neon": [],
644 "//build/bazel/platforms/arch:arm": ["arm_non_neon.java"],
645 "//conditions:default": [],
646 })`,
647 "manifest": `"manifest/AndroidManifest.xml"`,
648 "resource_files": `[]`,
649 }),
650 }})
651}
Alix8062f4d2022-11-14 21:38:07 +0000652
653func TestJavaLibraryKotlinSrcs(t *testing.T) {
654 runJavaLibraryTestCase(t, Bp2buildTestCase{
655 Description: "java_library with kotlin srcs",
656 Blueprint: `java_library {
657 name: "java-lib-1",
658 srcs: ["a.java", "b.java", "c.kt"],
659 bazel_module: { bp2build_available: true },
660}
661`,
662 ExpectedBazelTargets: []string{
663 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
664 "srcs": `[
665 "a.java",
666 "b.java",
667 "c.kt",
668 ]`,
669 }),
670 },
671 })
672}
673
674func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
675 runJavaLibraryTestCase(t, Bp2buildTestCase{
676 Description: "java_library with kotlin common_srcs",
677 Blueprint: `java_library {
678 name: "java-lib-1",
679 srcs: ["a.java", "b.java"],
680 common_srcs: ["c.kt"],
681 bazel_module: { bp2build_available: true },
682}
683`,
684 ExpectedBazelTargets: []string{
685 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
686 "srcs": `[
687 "a.java",
688 "b.java",
689 ]`,
690 "common_srcs": `["c.kt"]`,
691 }),
692 },
693 })
694}