blob: 683ee27cce1a160c4bec16581d430ae30b34841c [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"]`,
Alix341484b2022-10-31 19:08:18 +000056 "deps": `[":java-lib-2-neverlink"]`,
Wei Libafb6d62021-12-10 03:14:59 -080057 }),
Alix341484b2022-10-31 19:08:18 +000058 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Alixe06d75b2022-08-31 18:28:19 +000059 MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{
Wei Libafb6d62021-12-10 03:14:59 -080060 "srcs": `["b.java"]`,
61 }),
Alix341484b2022-10-31 19:08:18 +000062 MakeNeverlinkDuplicateTarget("java_library", "java-lib-2"),
Wei Libafb6d62021-12-10 03:14:59 -080063 },
64 })
65}
Sam Delmericoc0161432022-02-25 21:34:51 +000066
67func TestJavaLibraryConvertsStaticLibsToDepsAndExports(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000068 runJavaLibraryTestCase(t, Bp2buildTestCase{
69 Blueprint: `java_library {
Sam Delmericoc0161432022-02-25 21:34:51 +000070 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}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000088 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +000089 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmericoc0161432022-02-25 21:34:51 +000090 "srcs": `["a.java"]`,
91 "deps": `[
Alix341484b2022-10-31 19:08:18 +000092 ":java-lib-2-neverlink",
Sam Delmericoc0161432022-02-25 21:34:51 +000093 ":java-lib-3",
94 ]`,
95 "exports": `[":java-lib-3"]`,
96 }),
Alix341484b2022-10-31 19:08:18 +000097 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmericoc0161432022-02-25 21:34:51 +000098 },
99 })
100}
101
102func TestJavaLibraryConvertsStaticLibsToExportsIfNoSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000103 runJavaLibraryTestCase(t, Bp2buildTestCase{
104 Blueprint: `java_library {
Sam Delmericoc0161432022-02-25 21:34:51 +0000105 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}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000115 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000116 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmericoc0161432022-02-25 21:34:51 +0000117 "exports": `[":java-lib-2"]`,
118 }),
Alix341484b2022-10-31 19:08:18 +0000119 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmericoc0161432022-02-25 21:34:51 +0000120 },
121 })
122}
123
124func TestJavaLibraryFailsToConvertLibsWithNoSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000125 runJavaLibraryTestCase(t, Bp2buildTestCase{
126 ExpectedErr: fmt.Errorf("Module has direct dependencies but no sources. Bazel will not allow this."),
127 Blueprint: `java_library {
Sam Delmericoc0161432022-02-25 21:34:51 +0000128 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}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000138 ExpectedBazelTargets: []string{},
Sam Delmericoc0161432022-02-25 21:34:51 +0000139 })
140}
Sam Delmerico77267c72022-03-18 14:11:07 +0000141
142func TestJavaLibraryPlugins(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000143 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
144 Blueprint: `java_library {
Sam Delmerico77267c72022-03-18 14:11:07 +0000145 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}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000155 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000156 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico77267c72022-03-18 14:11:07 +0000157 "plugins": `[":java-plugin-1"]`,
158 }),
Alix341484b2022-10-31 19:08:18 +0000159 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico77267c72022-03-18 14:11:07 +0000160 },
161 }, func(ctx android.RegistrationContext) {
162 ctx.RegisterModuleType("java_plugin", java.PluginFactory)
163 })
164}
Sam Delmerico58614c02022-03-15 21:02:09 +0000165
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400166func TestJavaLibraryJavaVersion(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000167 runJavaLibraryTestCase(t, Bp2buildTestCase{
168 Blueprint: `java_library {
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400169 name: "java-lib-1",
170 srcs: ["a.java"],
171 java_version: "11",
172}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000173 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000174 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400175 "srcs": `["a.java"]`,
176 "javacopts": `["-source 11 -target 11"]`,
177 }),
Alix341484b2022-10-31 19:08:18 +0000178 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400179 },
180 })
181}
182
Sam Delmerico58614c02022-03-15 21:02:09 +0000183func TestJavaLibraryErrorproneJavacflagsEnabledManually(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000184 runJavaLibraryTestCase(t, Bp2buildTestCase{
185 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000186 name: "java-lib-1",
187 srcs: ["a.java"],
188 javacflags: ["-Xsuper-fast"],
189 errorprone: {
190 enabled: true,
191 javacflags: ["-Xep:SpeedLimit:OFF"],
192 },
193}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000194 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000195 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico58614c02022-03-15 21:02:09 +0000196 "javacopts": `[
197 "-Xsuper-fast",
198 "-Xep:SpeedLimit:OFF",
199 ]`,
200 "srcs": `["a.java"]`,
201 }),
Alix341484b2022-10-31 19:08:18 +0000202 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000203 },
204 })
205}
206
207func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000208 runJavaLibraryTestCase(t, Bp2buildTestCase{
209 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000210 name: "java-lib-1",
211 srcs: ["a.java"],
212 javacflags: ["-Xsuper-fast"],
213 errorprone: {
214 javacflags: ["-Xep:SpeedLimit:OFF"],
215 },
216}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000217 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000218 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico58614c02022-03-15 21:02:09 +0000219 "javacopts": `["-Xsuper-fast"]`,
220 "srcs": `["a.java"]`,
221 }),
Alix341484b2022-10-31 19:08:18 +0000222 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000223 },
224 })
225}
226
227func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledManually(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000228 runJavaLibraryTestCase(t, Bp2buildTestCase{
229 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000230 name: "java-lib-1",
231 srcs: ["a.java"],
232 javacflags: ["-Xsuper-fast"],
233 errorprone: {
234 enabled: false,
235 javacflags: ["-Xep:SpeedLimit:OFF"],
236 },
237}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000238 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000239 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico58614c02022-03-15 21:02:09 +0000240 "javacopts": `["-Xsuper-fast"]`,
241 "srcs": `["a.java"]`,
242 }),
Alix341484b2022-10-31 19:08:18 +0000243 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000244 },
245 })
246}
Sam Delmerico24da73c2022-03-16 20:36:54 +0000247
248func TestJavaLibraryLogTags(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000249 runJavaLibraryTestCase(t, Bp2buildTestCase{
250 Description: "Java library - logtags creates separate dependency",
251 ModuleTypeUnderTest: "java_library",
252 ModuleTypeUnderTestFactory: java.LibraryFactory,
253 Blueprint: `java_library {
Sam Delmerico24da73c2022-03-16 20:36:54 +0000254 name: "example_lib",
255 srcs: [
256 "a.java",
257 "b.java",
258 "a.logtag",
259 "b.logtag",
260 ],
261 bazel_module: { bp2build_available: true },
262}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000263 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000264 MakeBazelTarget("event_log_tags", "example_lib_logtags", AttrNameToString{
Sam Delmerico24da73c2022-03-16 20:36:54 +0000265 "srcs": `[
266 "a.logtag",
267 "b.logtag",
268 ]`,
269 }),
Alixe06d75b2022-08-31 18:28:19 +0000270 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico24da73c2022-03-16 20:36:54 +0000271 "srcs": `[
272 "a.java",
273 "b.java",
274 ":example_lib_logtags",
275 ]`,
276 }),
Alix341484b2022-10-31 19:08:18 +0000277 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico24da73c2022-03-16 20:36:54 +0000278 }})
279}
Sam Delmerico79985812022-03-23 20:20:42 +0000280
281func TestJavaLibraryResources(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000282 runJavaLibraryTestCase(t, Bp2buildTestCase{
283 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000284 "res/a.res": "",
285 "res/b.res": "",
286 "res/dir1/b.res": "",
287 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000288 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000289 name: "java-lib-1",
290 java_resources: ["res/a.res", "res/b.res"],
291}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000292 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000293 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000294 "resources": `[
295 "res/a.res",
296 "res/b.res",
297 ]`,
298 }),
Alix341484b2022-10-31 19:08:18 +0000299 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000300 },
301 })
302}
303
304func TestJavaLibraryResourceDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000305 runJavaLibraryTestCase(t, Bp2buildTestCase{
306 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000307 "res/a.res": "",
308 "res/b.res": "",
309 "res/dir1/b.res": "",
310 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000311 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000312 name: "java-lib-1",
313 java_resource_dirs: ["res"],
314}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000315 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000316 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000317 "resource_strip_prefix": `"res"`,
318 "resources": `[
319 "res/a.res",
320 "res/b.res",
321 "res/dir1/b.res",
322 ]`,
323 }),
Alix341484b2022-10-31 19:08:18 +0000324 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000325 },
326 })
327}
328
329func TestJavaLibraryResourcesExcludeDir(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000330 runJavaLibraryTestCase(t, Bp2buildTestCase{
331 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000332 "res/a.res": "",
333 "res/exclude/b.res": "",
334 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000335 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000336 name: "java-lib-1",
337 java_resource_dirs: ["res"],
338 exclude_java_resource_dirs: ["res/exclude"],
339}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000340 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000341 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000342 "resource_strip_prefix": `"res"`,
343 "resources": `["res/a.res"]`,
344 }),
Alix341484b2022-10-31 19:08:18 +0000345 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000346 },
347 })
348}
349
350func TestJavaLibraryResourcesExcludeFile(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000351 runJavaLibraryTestCase(t, Bp2buildTestCase{
352 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000353 "res/a.res": "",
354 "res/dir1/b.res": "",
355 "res/dir1/exclude.res": "",
356 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000357 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000358 name: "java-lib-1",
359 java_resource_dirs: ["res"],
360 exclude_java_resources: ["res/dir1/exclude.res"],
361}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000362 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000363 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000364 "resource_strip_prefix": `"res"`,
365 "resources": `[
366 "res/a.res",
367 "res/dir1/b.res",
368 ]`,
369 }),
Alix341484b2022-10-31 19:08:18 +0000370 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000371 },
372 })
373}
374
375func TestJavaLibraryResourcesFailsWithMultipleDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000376 runJavaLibraryTestCase(t, Bp2buildTestCase{
377 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000378 "res/a.res": "",
379 "res1/a.res": "",
380 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000381 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000382 name: "java-lib-1",
383 java_resource_dirs: ["res", "res1"],
384}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000385 ExpectedErr: fmt.Errorf("bp2build does not support more than one directory in java_resource_dirs (b/226423379)"),
386 ExpectedBazelTargets: []string{},
Sam Delmerico79985812022-03-23 20:20:42 +0000387 })
388}
Sam Delmerico97bd1272022-08-25 14:45:31 -0400389
390func TestJavaLibraryAidl(t *testing.T) {
391 runJavaLibraryTestCase(t, Bp2buildTestCase{
392 Description: "Java library - aidl creates separate dependency",
393 ModuleTypeUnderTest: "java_library",
394 ModuleTypeUnderTestFactory: java.LibraryFactory,
395 Blueprint: `java_library {
396 name: "example_lib",
397 srcs: [
398 "a.java",
399 "b.java",
400 "a.aidl",
401 "b.aidl",
402 ],
403 bazel_module: { bp2build_available: true },
404}`,
405 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000406 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400407 "srcs": `[
408 "a.aidl",
409 "b.aidl",
410 ]`,
411 }),
Alixe06d75b2022-08-31 18:28:19 +0000412 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400413 "deps": `[":example_lib_aidl_library"]`,
414 }),
Alixe06d75b2022-08-31 18:28:19 +0000415 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400416 "deps": `[":example_lib_java_aidl_library"]`,
417 "exports": `[":example_lib_java_aidl_library"]`,
418 "srcs": `[
419 "a.java",
420 "b.java",
421 ]`,
422 }),
Alix341484b2022-10-31 19:08:18 +0000423 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400424 }})
425}
426
427func TestJavaLibraryAidlSrcsNoFileGroup(t *testing.T) {
428 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
429 Description: "Java library - aidl filegroup is parsed",
430 ModuleTypeUnderTest: "java_library",
431 ModuleTypeUnderTestFactory: java.LibraryFactory,
432 Blueprint: `
433java_library {
434 name: "example_lib",
435 srcs: [
436 "a.java",
437 "b.aidl",
438 ],
439 bazel_module: { bp2build_available: true },
440}`,
441 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000442 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400443 "srcs": `["b.aidl"]`,
444 }),
Alixe06d75b2022-08-31 18:28:19 +0000445 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400446 "deps": `[":example_lib_aidl_library"]`,
447 }),
Alixe06d75b2022-08-31 18:28:19 +0000448 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400449 "deps": `[":example_lib_java_aidl_library"]`,
450 "exports": `[":example_lib_java_aidl_library"]`,
451 "srcs": `["a.java"]`,
452 }),
Alix341484b2022-10-31 19:08:18 +0000453 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400454 },
455 }, func(ctx android.RegistrationContext) {
456 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
457 })
458}
459
460func TestJavaLibraryAidlFilegroup(t *testing.T) {
461 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
462 Description: "Java library - aidl filegroup is parsed",
463 ModuleTypeUnderTest: "java_library",
464 ModuleTypeUnderTestFactory: java.LibraryFactory,
465 Blueprint: `
466filegroup {
467 name: "random_other_files",
468 srcs: [
469 "a.java",
470 "b.java",
471 ],
472}
473filegroup {
474 name: "aidl_files",
475 srcs: [
476 "a.aidl",
477 "b.aidl",
478 ],
479}
480java_library {
481 name: "example_lib",
482 srcs: [
483 "a.java",
484 "b.java",
485 ":aidl_files",
486 ":random_other_files",
487 ],
488 bazel_module: { bp2build_available: true },
489}`,
490 ExpectedBazelTargets: []string{
491 MakeBazelTargetNoRestrictions("aidl_library", "aidl_files", AttrNameToString{
492 "srcs": `[
493 "a.aidl",
494 "b.aidl",
495 ]`,
Liz Kammer2b3f56e2023-03-23 11:51:49 -0400496 "tags": `["apex_available=//apex_available:anyapex"]`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400497 }),
Alixe06d75b2022-08-31 18:28:19 +0000498 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400499 "deps": `[":aidl_files"]`,
500 }),
Alixe06d75b2022-08-31 18:28:19 +0000501 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400502 "deps": `[":example_lib_java_aidl_library"]`,
503 "exports": `[":example_lib_java_aidl_library"]`,
504 "srcs": `[
505 "a.java",
506 "b.java",
507 ":random_other_files",
508 ]`,
509 }),
Alix341484b2022-10-31 19:08:18 +0000510 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400511 MakeBazelTargetNoRestrictions("filegroup", "random_other_files", AttrNameToString{
512 "srcs": `[
513 "a.java",
514 "b.java",
515 ]`,
516 }),
517 },
518 }, func(ctx android.RegistrationContext) {
519 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
520 })
521}
Sam Delmerico7c721372022-08-25 13:51:21 -0400522
523func TestJavaLibraryAidlNonAdjacentAidlFilegroup(t *testing.T) {
524 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
525 Description: "java_library with non adjacent aidl filegroup",
526 ModuleTypeUnderTest: "java_library",
527 ModuleTypeUnderTestFactory: java.LibraryFactory,
528 Filesystem: map[string]string{
529 "path/to/A/Android.bp": `
530filegroup {
531 name: "A_aidl",
532 srcs: ["aidl/A.aidl"],
533 path: "aidl",
534}`,
535 },
536 Blueprint: `
537java_library {
538 name: "foo",
539 srcs: [
540 ":A_aidl",
541 ],
542}`,
543 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000544 MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400545 "deps": `["//path/to/A:A_aidl"]`,
546 }),
Alixe06d75b2022-08-31 18:28:19 +0000547 MakeBazelTarget("java_library", "foo", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400548 "exports": `[":foo_java_aidl_library"]`,
549 }),
Alix341484b2022-10-31 19:08:18 +0000550 MakeNeverlinkDuplicateTarget("java_library", "foo"),
Sam Delmerico7c721372022-08-25 13:51:21 -0400551 },
552 }, func(ctx android.RegistrationContext) {
553 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
554 })
555}
Cole Faustc843b992022-08-02 18:06:50 -0700556
557func TestConvertArmNeonVariant(t *testing.T) {
558 t.Helper()
559 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
560 Description: "Android Library - simple arch feature",
561 ModuleTypeUnderTest: "android_library",
562 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
563 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
564android_library {
565 name: "TestLib",
566 manifest: "manifest/AndroidManifest.xml",
567 srcs: ["lib.java"],
568 arch: {
569 arm: {
570 neon: {
571 srcs: ["arm_neon.java"],
572 },
573 },
574 },
575}
576`,
577 ExpectedBazelTargets: []string{
578 MakeBazelTarget(
579 "android_library",
580 "TestLib",
581 AttrNameToString{
582 "srcs": `["lib.java"] + select({
583 "//build/bazel/platforms/arch/variants:arm-neon": ["arm_neon.java"],
584 "//conditions:default": [],
585 })`,
586 "manifest": `"manifest/AndroidManifest.xml"`,
587 "resource_files": `[]`,
588 }),
Alix82fb94e2022-10-26 20:40:18 +0000589 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700590 }})
591}
592
593func TestConvertMultipleArchFeatures(t *testing.T) {
594 t.Helper()
595 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
596 Description: "Android Library - multiple arch features",
597 ModuleTypeUnderTest: "android_library",
598 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
599 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
600android_library {
601 name: "TestLib",
602 manifest: "manifest/AndroidManifest.xml",
603 srcs: ["lib.java"],
604 arch: {
605 x86: {
606 ssse3: {
607 srcs: ["ssse3.java"],
608 },
609 sse4_1: {
610 srcs: ["sse4_1.java"],
611 },
612 },
613 },
614}
615`,
616 ExpectedBazelTargets: []string{
617 MakeBazelTarget(
618 "android_library",
619 "TestLib",
620 AttrNameToString{
621 "srcs": `["lib.java"] + select({
622 "//build/bazel/platforms/arch/variants:x86-sse4_1": ["sse4_1.java"],
623 "//build/bazel/platforms/arch/variants:x86-sse4_1-ssse3": [
624 "sse4_1.java",
625 "ssse3.java",
626 ],
627 "//build/bazel/platforms/arch/variants:x86-ssse3": ["ssse3.java"],
628 "//conditions:default": [],
629 })`,
630 "manifest": `"manifest/AndroidManifest.xml"`,
631 "resource_files": `[]`,
632 }),
Alix82fb94e2022-10-26 20:40:18 +0000633 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700634 }})
635}
636
637func TestConvertExcludeSrcsArchFeature(t *testing.T) {
638 t.Helper()
639 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
640 Description: "Android Library - exclude_srcs with arch feature",
641 ModuleTypeUnderTest: "android_library",
642 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
643 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
644android_library {
645 name: "TestLib",
646 manifest: "manifest/AndroidManifest.xml",
647 srcs: ["lib.java"],
648 arch: {
649 arm: {
650 srcs: ["arm_non_neon.java"],
651 neon: {
652 exclude_srcs: ["arm_non_neon.java"],
653 },
654 },
655 },
656}
657`,
658 ExpectedBazelTargets: []string{
659 MakeBazelTarget(
660 "android_library",
661 "TestLib",
662 AttrNameToString{
663 "srcs": `["lib.java"] + select({
664 "//build/bazel/platforms/arch/variants:arm-neon": [],
665 "//build/bazel/platforms/arch:arm": ["arm_non_neon.java"],
666 "//conditions:default": [],
667 })`,
668 "manifest": `"manifest/AndroidManifest.xml"`,
669 "resource_files": `[]`,
670 }),
Alix82fb94e2022-10-26 20:40:18 +0000671 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700672 }})
673}
Alix8062f4d2022-11-14 21:38:07 +0000674
675func TestJavaLibraryKotlinSrcs(t *testing.T) {
676 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000677 Description: "java_library with kotlin srcs",
Alix8062f4d2022-11-14 21:38:07 +0000678 Blueprint: `java_library {
679 name: "java-lib-1",
680 srcs: ["a.java", "b.java", "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 "c.kt",
690 ]`,
691 }),
Alix266bbf22022-12-15 06:12:46 +0000692 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000693 },
694 })
695}
696
Alixf848bf82023-03-06 19:43:55 +0000697func TestJavaLibraryKotlincflags(t *testing.T) {
698 runJavaLibraryTestCase(t, Bp2buildTestCase{
699 Description: "java_library with kotlincfalgs",
700 Blueprint: `java_library {
701 name: "java-lib-1",
702 srcs: [ "a.kt"],
703 kotlincflags: ["-flag1", "-flag2"],
704 bazel_module: { bp2build_available: true },
705}
706`,
707 ExpectedBazelTargets: []string{
708 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
709 "srcs": `["a.kt"]`,
710 "kotlincflags": `[
711 "-flag1",
712 "-flag2",
713 ]`,
714 }),
715 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
716 },
717 })
718}
719
Alix8062f4d2022-11-14 21:38:07 +0000720func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
721 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000722 Description: "java_library with kotlin common_srcs",
Alix8062f4d2022-11-14 21:38:07 +0000723 Blueprint: `java_library {
724 name: "java-lib-1",
725 srcs: ["a.java", "b.java"],
726 common_srcs: ["c.kt"],
727 bazel_module: { bp2build_available: true },
728}
729`,
730 ExpectedBazelTargets: []string{
731 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
732 "srcs": `[
733 "a.java",
734 "b.java",
735 ]`,
736 "common_srcs": `["c.kt"]`,
737 }),
Alix266bbf22022-12-15 06:12:46 +0000738 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000739 },
740 })
741}
Alix495cc8a2023-01-12 18:20:32 +0000742
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400743func TestJavaLibraryArchVariantDeps(t *testing.T) {
Alix495cc8a2023-01-12 18:20:32 +0000744 runJavaLibraryTestCase(t, Bp2buildTestCase{
745 Description: "java_library with arch variant libs",
746 Blueprint: `java_library {
747 name: "java-lib-1",
748 srcs: ["a.java"],
749 libs: ["java-lib-2"],
750 target: {
751 android: {
752 libs: ["java-lib-3"],
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400753 static_libs: ["java-lib-4"],
Alix495cc8a2023-01-12 18:20:32 +0000754 },
755 },
756 bazel_module: { bp2build_available: true },
757}
758
759 java_library{
760 name: "java-lib-2",
761}
762
763 java_library{
764 name: "java-lib-3",
765}
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400766
767 java_library{
768 name: "java-lib-4",
769}
Alix495cc8a2023-01-12 18:20:32 +0000770`,
771 ExpectedBazelTargets: []string{
772 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
773 "srcs": `["a.java"]`,
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400774 "exports": `select({
775 "//build/bazel/platforms/os:android": [":java-lib-4"],
776 "//conditions:default": [],
777 })`,
Alix495cc8a2023-01-12 18:20:32 +0000778 "deps": `[":java-lib-2-neverlink"] + select({
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400779 "//build/bazel/platforms/os:android": [
780 ":java-lib-3-neverlink",
781 ":java-lib-4",
782 ],
Alix495cc8a2023-01-12 18:20:32 +0000783 "//conditions:default": [],
784 })`,
785 }),
786 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
787 MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{}),
788 MakeNeverlinkDuplicateTarget("java_library", "java-lib-2"),
789 MakeBazelTarget("java_library", "java-lib-3", AttrNameToString{}),
790 MakeNeverlinkDuplicateTarget("java_library", "java-lib-3"),
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400791 MakeBazelTarget("java_library", "java-lib-4", AttrNameToString{}),
792 MakeNeverlinkDuplicateTarget("java_library", "java-lib-4"),
Alix495cc8a2023-01-12 18:20:32 +0000793 },
794 })
795}
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500796
797func TestJavaLibraryArchVariantSrcsWithExcludes(t *testing.T) {
798 runJavaLibraryTestCase(t, Bp2buildTestCase{
799 Description: "java_library with arch variant libs",
800 Blueprint: `java_library {
801 name: "java-lib-1",
802 srcs: ["a.java", "b.java"],
803 target: {
804 android: {
805 exclude_srcs: ["a.java"],
806 },
807 },
808 bazel_module: { bp2build_available: true },
809}
810`,
811 ExpectedBazelTargets: []string{
812 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
813 "srcs": `["b.java"] + select({
814 "//build/bazel/platforms/os:android": [],
815 "//conditions:default": ["a.java"],
816 })`,
817 }),
818 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
819 },
820 })
821}