blob: 24b763bcf55896ee4d5a012962612e00191e30f7 [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{
Romain Jobredeaux2eef2e12023-02-24 12:07:08 -0500175 "srcs": `["a.java"]`,
176 "java_version": `"11"`,
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400177 }),
Romain Jobredeaux2eef2e12023-02-24 12:07:08 -0500178 MakeNeverlinkDuplicateTargetWithAttrs(
179 "java_library",
180 "java-lib-1",
181 AttrNameToString{"java_version": `"11"`}),
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400182 },
183 })
184}
185
Sam Delmerico58614c02022-03-15 21:02:09 +0000186func TestJavaLibraryErrorproneJavacflagsEnabledManually(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000187 runJavaLibraryTestCase(t, Bp2buildTestCase{
188 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000189 name: "java-lib-1",
190 srcs: ["a.java"],
191 javacflags: ["-Xsuper-fast"],
192 errorprone: {
193 enabled: true,
194 javacflags: ["-Xep:SpeedLimit:OFF"],
195 },
196}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000197 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000198 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico58614c02022-03-15 21:02:09 +0000199 "javacopts": `[
200 "-Xsuper-fast",
201 "-Xep:SpeedLimit:OFF",
202 ]`,
203 "srcs": `["a.java"]`,
204 }),
Alix341484b2022-10-31 19:08:18 +0000205 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000206 },
207 })
208}
209
210func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000211 runJavaLibraryTestCase(t, Bp2buildTestCase{
212 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000213 name: "java-lib-1",
214 srcs: ["a.java"],
215 javacflags: ["-Xsuper-fast"],
216 errorprone: {
217 javacflags: ["-Xep:SpeedLimit:OFF"],
218 },
219}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000220 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000221 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico58614c02022-03-15 21:02:09 +0000222 "javacopts": `["-Xsuper-fast"]`,
223 "srcs": `["a.java"]`,
224 }),
Alix341484b2022-10-31 19:08:18 +0000225 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000226 },
227 })
228}
229
230func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledManually(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000231 runJavaLibraryTestCase(t, Bp2buildTestCase{
232 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000233 name: "java-lib-1",
234 srcs: ["a.java"],
235 javacflags: ["-Xsuper-fast"],
236 errorprone: {
237 enabled: false,
238 javacflags: ["-Xep:SpeedLimit:OFF"],
239 },
240}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000241 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000242 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico58614c02022-03-15 21:02:09 +0000243 "javacopts": `["-Xsuper-fast"]`,
244 "srcs": `["a.java"]`,
245 }),
Alix341484b2022-10-31 19:08:18 +0000246 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000247 },
248 })
249}
Sam Delmerico24da73c2022-03-16 20:36:54 +0000250
251func TestJavaLibraryLogTags(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000252 runJavaLibraryTestCase(t, Bp2buildTestCase{
253 Description: "Java library - logtags creates separate dependency",
254 ModuleTypeUnderTest: "java_library",
255 ModuleTypeUnderTestFactory: java.LibraryFactory,
256 Blueprint: `java_library {
Sam Delmerico24da73c2022-03-16 20:36:54 +0000257 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}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000266 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000267 MakeBazelTarget("event_log_tags", "example_lib_logtags", AttrNameToString{
Sam Delmerico24da73c2022-03-16 20:36:54 +0000268 "srcs": `[
269 "a.logtag",
270 "b.logtag",
271 ]`,
272 }),
Alixe06d75b2022-08-31 18:28:19 +0000273 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico24da73c2022-03-16 20:36:54 +0000274 "srcs": `[
275 "a.java",
276 "b.java",
277 ":example_lib_logtags",
278 ]`,
279 }),
Alix341484b2022-10-31 19:08:18 +0000280 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico24da73c2022-03-16 20:36:54 +0000281 }})
282}
Sam Delmerico79985812022-03-23 20:20:42 +0000283
284func TestJavaLibraryResources(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000285 runJavaLibraryTestCase(t, Bp2buildTestCase{
286 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000287 "res/a.res": "",
288 "res/b.res": "",
289 "res/dir1/b.res": "",
290 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000291 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000292 name: "java-lib-1",
293 java_resources: ["res/a.res", "res/b.res"],
294}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000295 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000296 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000297 "resources": `[
298 "res/a.res",
299 "res/b.res",
300 ]`,
301 }),
Alix341484b2022-10-31 19:08:18 +0000302 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000303 },
304 })
305}
306
307func TestJavaLibraryResourceDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000308 runJavaLibraryTestCase(t, Bp2buildTestCase{
309 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000310 "res/a.res": "",
311 "res/b.res": "",
312 "res/dir1/b.res": "",
313 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000314 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000315 name: "java-lib-1",
316 java_resource_dirs: ["res"],
317}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000318 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000319 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000320 "resource_strip_prefix": `"res"`,
321 "resources": `[
322 "res/a.res",
323 "res/b.res",
324 "res/dir1/b.res",
325 ]`,
326 }),
Alix341484b2022-10-31 19:08:18 +0000327 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000328 },
329 })
330}
331
332func TestJavaLibraryResourcesExcludeDir(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000333 runJavaLibraryTestCase(t, Bp2buildTestCase{
334 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000335 "res/a.res": "",
336 "res/exclude/b.res": "",
337 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000338 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000339 name: "java-lib-1",
340 java_resource_dirs: ["res"],
341 exclude_java_resource_dirs: ["res/exclude"],
342}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000343 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000344 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000345 "resource_strip_prefix": `"res"`,
346 "resources": `["res/a.res"]`,
347 }),
Alix341484b2022-10-31 19:08:18 +0000348 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000349 },
350 })
351}
352
353func TestJavaLibraryResourcesExcludeFile(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000354 runJavaLibraryTestCase(t, Bp2buildTestCase{
355 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000356 "res/a.res": "",
357 "res/dir1/b.res": "",
358 "res/dir1/exclude.res": "",
359 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000360 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000361 name: "java-lib-1",
362 java_resource_dirs: ["res"],
363 exclude_java_resources: ["res/dir1/exclude.res"],
364}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000365 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000366 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000367 "resource_strip_prefix": `"res"`,
368 "resources": `[
369 "res/a.res",
370 "res/dir1/b.res",
371 ]`,
372 }),
Alix341484b2022-10-31 19:08:18 +0000373 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000374 },
375 })
376}
377
378func TestJavaLibraryResourcesFailsWithMultipleDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000379 runJavaLibraryTestCase(t, Bp2buildTestCase{
380 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000381 "res/a.res": "",
382 "res1/a.res": "",
383 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000384 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000385 name: "java-lib-1",
386 java_resource_dirs: ["res", "res1"],
387}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000388 ExpectedErr: fmt.Errorf("bp2build does not support more than one directory in java_resource_dirs (b/226423379)"),
389 ExpectedBazelTargets: []string{},
Sam Delmerico79985812022-03-23 20:20:42 +0000390 })
391}
Sam Delmerico97bd1272022-08-25 14:45:31 -0400392
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{
Alixe06d75b2022-08-31 18:28:19 +0000409 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400410 "srcs": `[
411 "a.aidl",
412 "b.aidl",
413 ]`,
414 }),
Alixe06d75b2022-08-31 18:28:19 +0000415 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400416 "deps": `[":example_lib_aidl_library"]`,
417 }),
Alixe06d75b2022-08-31 18:28:19 +0000418 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400419 "deps": `[":example_lib_java_aidl_library"]`,
420 "exports": `[":example_lib_java_aidl_library"]`,
421 "srcs": `[
422 "a.java",
423 "b.java",
424 ]`,
425 }),
Alix341484b2022-10-31 19:08:18 +0000426 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400427 }})
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{
Alixe06d75b2022-08-31 18:28:19 +0000445 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400446 "srcs": `["b.aidl"]`,
447 }),
Alixe06d75b2022-08-31 18:28:19 +0000448 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400449 "deps": `[":example_lib_aidl_library"]`,
450 }),
Alixe06d75b2022-08-31 18:28:19 +0000451 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400452 "deps": `[":example_lib_java_aidl_library"]`,
453 "exports": `[":example_lib_java_aidl_library"]`,
454 "srcs": `["a.java"]`,
455 }),
Alix341484b2022-10-31 19:08:18 +0000456 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400457 },
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 ]`,
Liz Kammer2b3f56e2023-03-23 11:51:49 -0400499 "tags": `["apex_available=//apex_available:anyapex"]`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400500 }),
Alixe06d75b2022-08-31 18:28:19 +0000501 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400502 "deps": `[":aidl_files"]`,
503 }),
Alixe06d75b2022-08-31 18:28:19 +0000504 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400505 "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 }),
Alix341484b2022-10-31 19:08:18 +0000513 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400514 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}
Sam Delmerico7c721372022-08-25 13:51:21 -0400525
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{
Alixe06d75b2022-08-31 18:28:19 +0000547 MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400548 "deps": `["//path/to/A:A_aidl"]`,
549 }),
Alixe06d75b2022-08-31 18:28:19 +0000550 MakeBazelTarget("java_library", "foo", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400551 "exports": `[":foo_java_aidl_library"]`,
552 }),
Alix341484b2022-10-31 19:08:18 +0000553 MakeNeverlinkDuplicateTarget("java_library", "foo"),
Sam Delmerico7c721372022-08-25 13:51:21 -0400554 },
555 }, func(ctx android.RegistrationContext) {
556 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
557 })
558}
Cole Faustc843b992022-08-02 18:06:50 -0700559
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 }),
Alix82fb94e2022-10-26 20:40:18 +0000592 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700593 }})
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 }),
Alix82fb94e2022-10-26 20:40:18 +0000636 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700637 }})
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 }),
Alix82fb94e2022-10-26 20:40:18 +0000674 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700675 }})
676}
Alix8062f4d2022-11-14 21:38:07 +0000677
678func TestJavaLibraryKotlinSrcs(t *testing.T) {
679 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000680 Description: "java_library with kotlin srcs",
Alix8062f4d2022-11-14 21:38:07 +0000681 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 }),
Alix266bbf22022-12-15 06:12:46 +0000695 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000696 },
697 })
698}
699
Alixf848bf82023-03-06 19:43:55 +0000700func 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
Alix8062f4d2022-11-14 21:38:07 +0000723func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
724 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000725 Description: "java_library with kotlin common_srcs",
Alix8062f4d2022-11-14 21:38:07 +0000726 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 }),
Alix266bbf22022-12-15 06:12:46 +0000741 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000742 },
743 })
744}
Alix495cc8a2023-01-12 18:20:32 +0000745
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400746func TestJavaLibraryArchVariantDeps(t *testing.T) {
Alix495cc8a2023-01-12 18:20:32 +0000747 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"],
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400756 static_libs: ["java-lib-4"],
Alix495cc8a2023-01-12 18:20:32 +0000757 },
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}
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400769
770 java_library{
771 name: "java-lib-4",
772}
Alix495cc8a2023-01-12 18:20:32 +0000773`,
774 ExpectedBazelTargets: []string{
775 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
776 "srcs": `["a.java"]`,
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400777 "exports": `select({
778 "//build/bazel/platforms/os:android": [":java-lib-4"],
779 "//conditions:default": [],
780 })`,
Alix495cc8a2023-01-12 18:20:32 +0000781 "deps": `[":java-lib-2-neverlink"] + select({
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400782 "//build/bazel/platforms/os:android": [
783 ":java-lib-3-neverlink",
784 ":java-lib-4",
785 ],
Alix495cc8a2023-01-12 18:20:32 +0000786 "//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"),
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400794 MakeBazelTarget("java_library", "java-lib-4", AttrNameToString{}),
795 MakeNeverlinkDuplicateTarget("java_library", "java-lib-4"),
Alix495cc8a2023-01-12 18:20:32 +0000796 },
797 })
798}
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500799
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}