blob: 60766f42ad1fec7b7ed04b2662b957f7782f7e9e [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{
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400286 Dir: "adir",
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000287 Filesystem: map[string]string{
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400288 "adir/res/a.res": "",
289 "adir/res/b.res": "",
290 "adir/res/dir1/b.res": "",
291 "adir/Android.bp": `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000292 name: "java-lib-1",
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400293 java_resources: ["res/a.res", "res/b.res"],
294 bazel_module: { bp2build_available: true },
Sam Delmerico79985812022-03-23 20:20:42 +0000295}`,
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400296 },
297 Blueprint: "",
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000298 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000299 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000300 "resources": `[
301 "res/a.res",
302 "res/b.res",
303 ]`,
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400304 "resource_strip_prefix": `"adir"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000305 }),
Alix341484b2022-10-31 19:08:18 +0000306 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000307 },
308 })
309}
310
311func TestJavaLibraryResourceDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000312 runJavaLibraryTestCase(t, Bp2buildTestCase{
313 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000314 "res/a.res": "",
315 "res/b.res": "",
316 "res/dir1/b.res": "",
317 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000318 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000319 name: "java-lib-1",
320 java_resource_dirs: ["res"],
321}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000322 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000323 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000324 "resource_strip_prefix": `"res"`,
325 "resources": `[
326 "res/a.res",
327 "res/b.res",
328 "res/dir1/b.res",
329 ]`,
330 }),
Alix341484b2022-10-31 19:08:18 +0000331 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000332 },
333 })
334}
335
336func TestJavaLibraryResourcesExcludeDir(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000337 runJavaLibraryTestCase(t, Bp2buildTestCase{
338 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000339 "res/a.res": "",
340 "res/exclude/b.res": "",
341 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000342 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000343 name: "java-lib-1",
344 java_resource_dirs: ["res"],
345 exclude_java_resource_dirs: ["res/exclude"],
346}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000347 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000348 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000349 "resource_strip_prefix": `"res"`,
350 "resources": `["res/a.res"]`,
351 }),
Alix341484b2022-10-31 19:08:18 +0000352 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000353 },
354 })
355}
356
357func TestJavaLibraryResourcesExcludeFile(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000358 runJavaLibraryTestCase(t, Bp2buildTestCase{
359 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000360 "res/a.res": "",
361 "res/dir1/b.res": "",
362 "res/dir1/exclude.res": "",
363 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000364 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000365 name: "java-lib-1",
366 java_resource_dirs: ["res"],
367 exclude_java_resources: ["res/dir1/exclude.res"],
368}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000369 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000370 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000371 "resource_strip_prefix": `"res"`,
372 "resources": `[
373 "res/a.res",
374 "res/dir1/b.res",
375 ]`,
376 }),
Alix341484b2022-10-31 19:08:18 +0000377 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000378 },
379 })
380}
381
382func TestJavaLibraryResourcesFailsWithMultipleDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000383 runJavaLibraryTestCase(t, Bp2buildTestCase{
384 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000385 "res/a.res": "",
386 "res1/a.res": "",
387 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000388 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000389 name: "java-lib-1",
390 java_resource_dirs: ["res", "res1"],
391}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000392 ExpectedErr: fmt.Errorf("bp2build does not support more than one directory in java_resource_dirs (b/226423379)"),
393 ExpectedBazelTargets: []string{},
Sam Delmerico79985812022-03-23 20:20:42 +0000394 })
395}
Sam Delmerico97bd1272022-08-25 14:45:31 -0400396
397func TestJavaLibraryAidl(t *testing.T) {
398 runJavaLibraryTestCase(t, Bp2buildTestCase{
399 Description: "Java library - aidl creates separate dependency",
400 ModuleTypeUnderTest: "java_library",
401 ModuleTypeUnderTestFactory: java.LibraryFactory,
402 Blueprint: `java_library {
403 name: "example_lib",
404 srcs: [
405 "a.java",
406 "b.java",
407 "a.aidl",
408 "b.aidl",
409 ],
410 bazel_module: { bp2build_available: true },
411}`,
412 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000413 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400414 "srcs": `[
415 "a.aidl",
416 "b.aidl",
417 ]`,
418 }),
Alixe06d75b2022-08-31 18:28:19 +0000419 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400420 "deps": `[":example_lib_aidl_library"]`,
421 }),
Alixe06d75b2022-08-31 18:28:19 +0000422 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400423 "deps": `[":example_lib_java_aidl_library"]`,
424 "exports": `[":example_lib_java_aidl_library"]`,
425 "srcs": `[
426 "a.java",
427 "b.java",
428 ]`,
429 }),
Alix341484b2022-10-31 19:08:18 +0000430 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400431 }})
432}
433
434func TestJavaLibraryAidlSrcsNoFileGroup(t *testing.T) {
435 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
436 Description: "Java library - aidl filegroup is parsed",
437 ModuleTypeUnderTest: "java_library",
438 ModuleTypeUnderTestFactory: java.LibraryFactory,
439 Blueprint: `
440java_library {
441 name: "example_lib",
442 srcs: [
443 "a.java",
444 "b.aidl",
445 ],
446 bazel_module: { bp2build_available: true },
447}`,
448 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000449 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400450 "srcs": `["b.aidl"]`,
451 }),
Alixe06d75b2022-08-31 18:28:19 +0000452 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400453 "deps": `[":example_lib_aidl_library"]`,
454 }),
Alixe06d75b2022-08-31 18:28:19 +0000455 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400456 "deps": `[":example_lib_java_aidl_library"]`,
457 "exports": `[":example_lib_java_aidl_library"]`,
458 "srcs": `["a.java"]`,
459 }),
Alix341484b2022-10-31 19:08:18 +0000460 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400461 },
462 }, func(ctx android.RegistrationContext) {
463 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
464 })
465}
466
467func TestJavaLibraryAidlFilegroup(t *testing.T) {
468 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
469 Description: "Java library - aidl filegroup is parsed",
470 ModuleTypeUnderTest: "java_library",
471 ModuleTypeUnderTestFactory: java.LibraryFactory,
472 Blueprint: `
473filegroup {
474 name: "random_other_files",
475 srcs: [
476 "a.java",
477 "b.java",
478 ],
479}
480filegroup {
481 name: "aidl_files",
482 srcs: [
483 "a.aidl",
484 "b.aidl",
485 ],
486}
487java_library {
488 name: "example_lib",
489 srcs: [
490 "a.java",
491 "b.java",
492 ":aidl_files",
493 ":random_other_files",
494 ],
495 bazel_module: { bp2build_available: true },
496}`,
497 ExpectedBazelTargets: []string{
498 MakeBazelTargetNoRestrictions("aidl_library", "aidl_files", AttrNameToString{
499 "srcs": `[
500 "a.aidl",
501 "b.aidl",
502 ]`,
Liz Kammer2b3f56e2023-03-23 11:51:49 -0400503 "tags": `["apex_available=//apex_available:anyapex"]`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400504 }),
Alixe06d75b2022-08-31 18:28:19 +0000505 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400506 "deps": `[":aidl_files"]`,
507 }),
Alixe06d75b2022-08-31 18:28:19 +0000508 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400509 "deps": `[":example_lib_java_aidl_library"]`,
510 "exports": `[":example_lib_java_aidl_library"]`,
511 "srcs": `[
512 "a.java",
513 "b.java",
514 ":random_other_files",
515 ]`,
516 }),
Alix341484b2022-10-31 19:08:18 +0000517 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400518 MakeBazelTargetNoRestrictions("filegroup", "random_other_files", AttrNameToString{
519 "srcs": `[
520 "a.java",
521 "b.java",
522 ]`,
523 }),
524 },
525 }, func(ctx android.RegistrationContext) {
526 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
527 })
528}
Sam Delmerico7c721372022-08-25 13:51:21 -0400529
530func TestJavaLibraryAidlNonAdjacentAidlFilegroup(t *testing.T) {
531 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
532 Description: "java_library with non adjacent aidl filegroup",
533 ModuleTypeUnderTest: "java_library",
534 ModuleTypeUnderTestFactory: java.LibraryFactory,
535 Filesystem: map[string]string{
536 "path/to/A/Android.bp": `
537filegroup {
538 name: "A_aidl",
539 srcs: ["aidl/A.aidl"],
540 path: "aidl",
541}`,
542 },
543 Blueprint: `
544java_library {
545 name: "foo",
546 srcs: [
547 ":A_aidl",
548 ],
549}`,
550 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000551 MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400552 "deps": `["//path/to/A:A_aidl"]`,
553 }),
Alixe06d75b2022-08-31 18:28:19 +0000554 MakeBazelTarget("java_library", "foo", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400555 "exports": `[":foo_java_aidl_library"]`,
556 }),
Alix341484b2022-10-31 19:08:18 +0000557 MakeNeverlinkDuplicateTarget("java_library", "foo"),
Sam Delmerico7c721372022-08-25 13:51:21 -0400558 },
559 }, func(ctx android.RegistrationContext) {
560 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
561 })
562}
Cole Faustc843b992022-08-02 18:06:50 -0700563
564func TestConvertArmNeonVariant(t *testing.T) {
565 t.Helper()
566 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
567 Description: "Android Library - simple arch feature",
568 ModuleTypeUnderTest: "android_library",
569 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
570 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
571android_library {
572 name: "TestLib",
573 manifest: "manifest/AndroidManifest.xml",
574 srcs: ["lib.java"],
575 arch: {
576 arm: {
577 neon: {
578 srcs: ["arm_neon.java"],
579 },
580 },
581 },
582}
583`,
584 ExpectedBazelTargets: []string{
585 MakeBazelTarget(
586 "android_library",
587 "TestLib",
588 AttrNameToString{
589 "srcs": `["lib.java"] + select({
590 "//build/bazel/platforms/arch/variants:arm-neon": ["arm_neon.java"],
591 "//conditions:default": [],
592 })`,
593 "manifest": `"manifest/AndroidManifest.xml"`,
594 "resource_files": `[]`,
595 }),
Alix82fb94e2022-10-26 20:40:18 +0000596 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700597 }})
598}
599
600func TestConvertMultipleArchFeatures(t *testing.T) {
601 t.Helper()
602 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
603 Description: "Android Library - multiple arch features",
604 ModuleTypeUnderTest: "android_library",
605 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
606 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
607android_library {
608 name: "TestLib",
609 manifest: "manifest/AndroidManifest.xml",
610 srcs: ["lib.java"],
611 arch: {
612 x86: {
613 ssse3: {
614 srcs: ["ssse3.java"],
615 },
616 sse4_1: {
617 srcs: ["sse4_1.java"],
618 },
619 },
620 },
621}
622`,
623 ExpectedBazelTargets: []string{
624 MakeBazelTarget(
625 "android_library",
626 "TestLib",
627 AttrNameToString{
628 "srcs": `["lib.java"] + select({
629 "//build/bazel/platforms/arch/variants:x86-sse4_1": ["sse4_1.java"],
630 "//build/bazel/platforms/arch/variants:x86-sse4_1-ssse3": [
631 "sse4_1.java",
632 "ssse3.java",
633 ],
634 "//build/bazel/platforms/arch/variants:x86-ssse3": ["ssse3.java"],
635 "//conditions:default": [],
636 })`,
637 "manifest": `"manifest/AndroidManifest.xml"`,
638 "resource_files": `[]`,
639 }),
Alix82fb94e2022-10-26 20:40:18 +0000640 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700641 }})
642}
643
644func TestConvertExcludeSrcsArchFeature(t *testing.T) {
645 t.Helper()
646 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
647 Description: "Android Library - exclude_srcs with arch feature",
648 ModuleTypeUnderTest: "android_library",
649 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
650 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
651android_library {
652 name: "TestLib",
653 manifest: "manifest/AndroidManifest.xml",
654 srcs: ["lib.java"],
655 arch: {
656 arm: {
657 srcs: ["arm_non_neon.java"],
658 neon: {
659 exclude_srcs: ["arm_non_neon.java"],
660 },
661 },
662 },
663}
664`,
665 ExpectedBazelTargets: []string{
666 MakeBazelTarget(
667 "android_library",
668 "TestLib",
669 AttrNameToString{
670 "srcs": `["lib.java"] + select({
671 "//build/bazel/platforms/arch/variants:arm-neon": [],
672 "//build/bazel/platforms/arch:arm": ["arm_non_neon.java"],
673 "//conditions:default": [],
674 })`,
675 "manifest": `"manifest/AndroidManifest.xml"`,
676 "resource_files": `[]`,
677 }),
Alix82fb94e2022-10-26 20:40:18 +0000678 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700679 }})
680}
Alix8062f4d2022-11-14 21:38:07 +0000681
682func TestJavaLibraryKotlinSrcs(t *testing.T) {
683 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000684 Description: "java_library with kotlin srcs",
Alix8062f4d2022-11-14 21:38:07 +0000685 Blueprint: `java_library {
686 name: "java-lib-1",
687 srcs: ["a.java", "b.java", "c.kt"],
688 bazel_module: { bp2build_available: true },
689}
690`,
691 ExpectedBazelTargets: []string{
692 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
693 "srcs": `[
694 "a.java",
695 "b.java",
696 "c.kt",
697 ]`,
698 }),
Alix266bbf22022-12-15 06:12:46 +0000699 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000700 },
701 })
702}
703
Alixf848bf82023-03-06 19:43:55 +0000704func TestJavaLibraryKotlincflags(t *testing.T) {
705 runJavaLibraryTestCase(t, Bp2buildTestCase{
706 Description: "java_library with kotlincfalgs",
707 Blueprint: `java_library {
708 name: "java-lib-1",
709 srcs: [ "a.kt"],
710 kotlincflags: ["-flag1", "-flag2"],
711 bazel_module: { bp2build_available: true },
712}
713`,
714 ExpectedBazelTargets: []string{
715 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
716 "srcs": `["a.kt"]`,
717 "kotlincflags": `[
718 "-flag1",
719 "-flag2",
720 ]`,
721 }),
722 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
723 },
724 })
725}
726
Alix8062f4d2022-11-14 21:38:07 +0000727func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
728 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000729 Description: "java_library with kotlin common_srcs",
Alix8062f4d2022-11-14 21:38:07 +0000730 Blueprint: `java_library {
731 name: "java-lib-1",
732 srcs: ["a.java", "b.java"],
733 common_srcs: ["c.kt"],
734 bazel_module: { bp2build_available: true },
735}
736`,
737 ExpectedBazelTargets: []string{
738 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
739 "srcs": `[
740 "a.java",
741 "b.java",
742 ]`,
743 "common_srcs": `["c.kt"]`,
744 }),
Alix266bbf22022-12-15 06:12:46 +0000745 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000746 },
747 })
748}
Alix495cc8a2023-01-12 18:20:32 +0000749
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400750func TestJavaLibraryArchVariantDeps(t *testing.T) {
Alix495cc8a2023-01-12 18:20:32 +0000751 runJavaLibraryTestCase(t, Bp2buildTestCase{
752 Description: "java_library with arch variant libs",
753 Blueprint: `java_library {
754 name: "java-lib-1",
755 srcs: ["a.java"],
756 libs: ["java-lib-2"],
757 target: {
758 android: {
759 libs: ["java-lib-3"],
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400760 static_libs: ["java-lib-4"],
Alix495cc8a2023-01-12 18:20:32 +0000761 },
762 },
763 bazel_module: { bp2build_available: true },
764}
765
766 java_library{
767 name: "java-lib-2",
768}
769
770 java_library{
771 name: "java-lib-3",
772}
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400773
774 java_library{
775 name: "java-lib-4",
776}
Alix495cc8a2023-01-12 18:20:32 +0000777`,
778 ExpectedBazelTargets: []string{
779 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
780 "srcs": `["a.java"]`,
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400781 "exports": `select({
782 "//build/bazel/platforms/os:android": [":java-lib-4"],
783 "//conditions:default": [],
784 })`,
Alix495cc8a2023-01-12 18:20:32 +0000785 "deps": `[":java-lib-2-neverlink"] + select({
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400786 "//build/bazel/platforms/os:android": [
787 ":java-lib-3-neverlink",
788 ":java-lib-4",
789 ],
Alix495cc8a2023-01-12 18:20:32 +0000790 "//conditions:default": [],
791 })`,
792 }),
793 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
794 MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{}),
795 MakeNeverlinkDuplicateTarget("java_library", "java-lib-2"),
796 MakeBazelTarget("java_library", "java-lib-3", AttrNameToString{}),
797 MakeNeverlinkDuplicateTarget("java_library", "java-lib-3"),
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400798 MakeBazelTarget("java_library", "java-lib-4", AttrNameToString{}),
799 MakeNeverlinkDuplicateTarget("java_library", "java-lib-4"),
Alix495cc8a2023-01-12 18:20:32 +0000800 },
801 })
802}
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500803
804func TestJavaLibraryArchVariantSrcsWithExcludes(t *testing.T) {
805 runJavaLibraryTestCase(t, Bp2buildTestCase{
806 Description: "java_library with arch variant libs",
807 Blueprint: `java_library {
808 name: "java-lib-1",
809 srcs: ["a.java", "b.java"],
810 target: {
811 android: {
812 exclude_srcs: ["a.java"],
813 },
814 },
815 bazel_module: { bp2build_available: true },
816}
817`,
818 ExpectedBazelTargets: []string{
819 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
820 "srcs": `["b.java"] + select({
821 "//build/bazel/platforms/os:android": [],
822 "//conditions:default": ["a.java"],
823 })`,
824 }),
825 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
826 },
827 })
828}