blob: 5c769a53ccb128a2cec5793fdfcdb962db723a27 [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
Alixb1e5c6a2023-06-20 21:00:40 +0000186func TestJavaLibraryErrorproneEnabledManually(t *testing.T) {
187 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000188 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"],
Alixb1e5c6a2023-06-20 21:00:40 +0000195 extra_check_modules: ["plugin2"],
Sam Delmerico58614c02022-03-15 21:02:09 +0000196 },
Alixb1e5c6a2023-06-20 21:00:40 +0000197}
198java_plugin {
199 name: "plugin2",
200 srcs: ["a.java"],
201 bazel_module: { bp2build_available: false },
Sam Delmerico58614c02022-03-15 21:02:09 +0000202}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000203 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000204 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico58614c02022-03-15 21:02:09 +0000205 "javacopts": `[
206 "-Xsuper-fast",
207 "-Xep:SpeedLimit:OFF",
208 ]`,
Alixb1e5c6a2023-06-20 21:00:40 +0000209 "plugins": `[":plugin2"]`,
210 "srcs": `["a.java"]`,
211 "errorprone_force_enable": `True`,
Sam Delmerico58614c02022-03-15 21:02:09 +0000212 }),
Alix341484b2022-10-31 19:08:18 +0000213 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000214 },
Alixb1e5c6a2023-06-20 21:00:40 +0000215 }, func(ctx android.RegistrationContext) {
216 ctx.RegisterModuleType("java_plugin", java.PluginFactory)
Sam Delmerico58614c02022-03-15 21:02:09 +0000217 })
218}
219
220func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000221 runJavaLibraryTestCase(t, Bp2buildTestCase{
222 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000223 name: "java-lib-1",
224 srcs: ["a.java"],
225 javacflags: ["-Xsuper-fast"],
226 errorprone: {
227 javacflags: ["-Xep:SpeedLimit:OFF"],
228 },
229}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000230 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000231 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico58614c02022-03-15 21:02:09 +0000232 "javacopts": `["-Xsuper-fast"]`,
233 "srcs": `["a.java"]`,
234 }),
Alix341484b2022-10-31 19:08:18 +0000235 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000236 },
237 })
238}
239
Alixb1e5c6a2023-06-20 21:00:40 +0000240func TestJavaLibraryErrorproneDisabledManually(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000241 runJavaLibraryTestCase(t, Bp2buildTestCase{
242 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000243 name: "java-lib-1",
244 srcs: ["a.java"],
245 javacflags: ["-Xsuper-fast"],
246 errorprone: {
Alixb1e5c6a2023-06-20 21:00:40 +0000247 enabled: false,
Sam Delmerico58614c02022-03-15 21:02:09 +0000248 },
249}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000250 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000251 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Alixb1e5c6a2023-06-20 21:00:40 +0000252 "javacopts": `[
253 "-Xsuper-fast",
254 "-XepDisableAllChecks",
255 ]`,
256 "srcs": `["a.java"]`,
Sam Delmerico58614c02022-03-15 21:02:09 +0000257 }),
Alix341484b2022-10-31 19:08:18 +0000258 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000259 },
260 })
261}
Sam Delmerico24da73c2022-03-16 20:36:54 +0000262
263func TestJavaLibraryLogTags(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000264 runJavaLibraryTestCase(t, Bp2buildTestCase{
265 Description: "Java library - logtags creates separate dependency",
266 ModuleTypeUnderTest: "java_library",
267 ModuleTypeUnderTestFactory: java.LibraryFactory,
268 Blueprint: `java_library {
Sam Delmerico24da73c2022-03-16 20:36:54 +0000269 name: "example_lib",
270 srcs: [
271 "a.java",
272 "b.java",
273 "a.logtag",
274 "b.logtag",
275 ],
276 bazel_module: { bp2build_available: true },
277}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000278 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000279 MakeBazelTarget("event_log_tags", "example_lib_logtags", AttrNameToString{
Sam Delmerico24da73c2022-03-16 20:36:54 +0000280 "srcs": `[
281 "a.logtag",
282 "b.logtag",
283 ]`,
284 }),
Alixe06d75b2022-08-31 18:28:19 +0000285 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico24da73c2022-03-16 20:36:54 +0000286 "srcs": `[
287 "a.java",
288 "b.java",
289 ":example_lib_logtags",
290 ]`,
291 }),
Alix341484b2022-10-31 19:08:18 +0000292 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico24da73c2022-03-16 20:36:54 +0000293 }})
294}
Sam Delmerico79985812022-03-23 20:20:42 +0000295
296func TestJavaLibraryResources(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000297 runJavaLibraryTestCase(t, Bp2buildTestCase{
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400298 Dir: "adir",
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000299 Filesystem: map[string]string{
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400300 "adir/res/a.res": "",
301 "adir/res/b.res": "",
302 "adir/res/dir1/b.res": "",
303 "adir/Android.bp": `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000304 name: "java-lib-1",
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400305 java_resources: ["res/a.res", "res/b.res"],
306 bazel_module: { bp2build_available: true },
Sam Delmerico79985812022-03-23 20:20:42 +0000307}`,
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400308 },
309 Blueprint: "",
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000310 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000311 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000312 "resources": `[
313 "res/a.res",
314 "res/b.res",
315 ]`,
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400316 "resource_strip_prefix": `"adir"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000317 }),
Alix341484b2022-10-31 19:08:18 +0000318 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000319 },
320 })
321}
322
323func TestJavaLibraryResourceDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000324 runJavaLibraryTestCase(t, Bp2buildTestCase{
325 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000326 "res/a.res": "",
327 "res/b.res": "",
328 "res/dir1/b.res": "",
329 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000330 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000331 name: "java-lib-1",
332 java_resource_dirs: ["res"],
333}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000334 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000335 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000336 "resource_strip_prefix": `"res"`,
337 "resources": `[
338 "res/a.res",
339 "res/b.res",
340 "res/dir1/b.res",
341 ]`,
342 }),
Alix341484b2022-10-31 19:08:18 +0000343 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000344 },
345 })
346}
347
348func TestJavaLibraryResourcesExcludeDir(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000349 runJavaLibraryTestCase(t, Bp2buildTestCase{
350 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000351 "res/a.res": "",
352 "res/exclude/b.res": "",
353 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000354 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000355 name: "java-lib-1",
356 java_resource_dirs: ["res"],
357 exclude_java_resource_dirs: ["res/exclude"],
358}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000359 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000360 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000361 "resource_strip_prefix": `"res"`,
362 "resources": `["res/a.res"]`,
363 }),
Alix341484b2022-10-31 19:08:18 +0000364 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000365 },
366 })
367}
368
369func TestJavaLibraryResourcesExcludeFile(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000370 runJavaLibraryTestCase(t, Bp2buildTestCase{
371 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000372 "res/a.res": "",
373 "res/dir1/b.res": "",
374 "res/dir1/exclude.res": "",
375 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000376 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000377 name: "java-lib-1",
378 java_resource_dirs: ["res"],
379 exclude_java_resources: ["res/dir1/exclude.res"],
380}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000381 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000382 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000383 "resource_strip_prefix": `"res"`,
384 "resources": `[
385 "res/a.res",
386 "res/dir1/b.res",
387 ]`,
388 }),
Alix341484b2022-10-31 19:08:18 +0000389 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000390 },
391 })
392}
393
Alix289e9c62023-08-16 15:06:31 +0000394func TestJavaLibraryResourcesWithMultipleDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000395 runJavaLibraryTestCase(t, Bp2buildTestCase{
396 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000397 "res/a.res": "",
Alix289e9c62023-08-16 15:06:31 +0000398 "res1/b.res": "",
Sam Delmerico79985812022-03-23 20:20:42 +0000399 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000400 Blueprint: `java_library {
Sam Delmerico79985812022-03-23 20:20:42 +0000401 name: "java-lib-1",
402 java_resource_dirs: ["res", "res1"],
403}`,
Alix289e9c62023-08-16 15:06:31 +0000404 ExpectedBazelTargets: []string{
405 MakeBazelTarget("java_resources", "java-lib-1_resource_dir_res1", AttrNameToString{
406 "resource_strip_prefix": `"res1"`,
407 "resources": `["res1/b.res"]`,
408 }),
409 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
410 "additional_resources": `["java-lib-1_resource_dir_res1"]`,
411 "resources": `["res/a.res"]`,
412 "resource_strip_prefix": `"res"`,
413 }),
414 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
415 },
416 })
417}
418
419func TestJavaLibraryJavaResourcesAndResourceDirs(t *testing.T) {
420 runJavaLibraryTestCase(t, Bp2buildTestCase{
421 Filesystem: map[string]string{
422 "resdir/a.res": "",
423 },
424 Blueprint: `java_library {
425 name: "java-lib-1",
426 java_resources: ["res1", "res2"],
427 java_resource_dirs: ["resdir"],
428}`,
429 ExpectedBazelTargets: []string{
430 MakeBazelTarget("java_resources", "java-lib-1_resource_dir_resdir", AttrNameToString{
431 "resource_strip_prefix": `"resdir"`,
432 "resources": `["resdir/a.res"]`,
433 }),
434 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
435 "additional_resources": `["java-lib-1_resource_dir_resdir"]`,
436 "resource_strip_prefix": `"."`,
437 "resources": `[
438 "res1",
439 "res2",
440 ]`,
441 }),
442 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
443 },
Sam Delmerico79985812022-03-23 20:20:42 +0000444 })
445}
Sam Delmerico97bd1272022-08-25 14:45:31 -0400446
447func TestJavaLibraryAidl(t *testing.T) {
448 runJavaLibraryTestCase(t, Bp2buildTestCase{
449 Description: "Java library - aidl creates separate dependency",
450 ModuleTypeUnderTest: "java_library",
451 ModuleTypeUnderTestFactory: java.LibraryFactory,
452 Blueprint: `java_library {
453 name: "example_lib",
454 srcs: [
455 "a.java",
456 "b.java",
457 "a.aidl",
458 "b.aidl",
459 ],
460 bazel_module: { bp2build_available: true },
461}`,
462 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000463 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400464 "srcs": `[
465 "a.aidl",
466 "b.aidl",
467 ]`,
468 }),
Alixe06d75b2022-08-31 18:28:19 +0000469 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400470 "deps": `[":example_lib_aidl_library"]`,
471 }),
Alixe06d75b2022-08-31 18:28:19 +0000472 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400473 "deps": `[":example_lib_java_aidl_library"]`,
474 "exports": `[":example_lib_java_aidl_library"]`,
475 "srcs": `[
476 "a.java",
477 "b.java",
478 ]`,
479 }),
Alix341484b2022-10-31 19:08:18 +0000480 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400481 }})
482}
483
484func TestJavaLibraryAidlSrcsNoFileGroup(t *testing.T) {
485 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
486 Description: "Java library - aidl filegroup is parsed",
487 ModuleTypeUnderTest: "java_library",
488 ModuleTypeUnderTestFactory: java.LibraryFactory,
489 Blueprint: `
490java_library {
491 name: "example_lib",
492 srcs: [
493 "a.java",
494 "b.aidl",
495 ],
496 bazel_module: { bp2build_available: true },
497}`,
498 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000499 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400500 "srcs": `["b.aidl"]`,
501 }),
Alixe06d75b2022-08-31 18:28:19 +0000502 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400503 "deps": `[":example_lib_aidl_library"]`,
504 }),
Alixe06d75b2022-08-31 18:28:19 +0000505 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400506 "deps": `[":example_lib_java_aidl_library"]`,
507 "exports": `[":example_lib_java_aidl_library"]`,
508 "srcs": `["a.java"]`,
509 }),
Alix341484b2022-10-31 19:08:18 +0000510 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400511 },
512 }, func(ctx android.RegistrationContext) {
513 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
514 })
515}
516
517func TestJavaLibraryAidlFilegroup(t *testing.T) {
518 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
519 Description: "Java library - aidl filegroup is parsed",
520 ModuleTypeUnderTest: "java_library",
521 ModuleTypeUnderTestFactory: java.LibraryFactory,
522 Blueprint: `
523filegroup {
524 name: "random_other_files",
525 srcs: [
526 "a.java",
527 "b.java",
528 ],
529}
530filegroup {
531 name: "aidl_files",
532 srcs: [
533 "a.aidl",
534 "b.aidl",
535 ],
536}
537java_library {
538 name: "example_lib",
539 srcs: [
540 "a.java",
541 "b.java",
542 ":aidl_files",
543 ":random_other_files",
544 ],
545 bazel_module: { bp2build_available: true },
546}`,
547 ExpectedBazelTargets: []string{
548 MakeBazelTargetNoRestrictions("aidl_library", "aidl_files", AttrNameToString{
549 "srcs": `[
550 "a.aidl",
551 "b.aidl",
552 ]`,
Liz Kammer2b3f56e2023-03-23 11:51:49 -0400553 "tags": `["apex_available=//apex_available:anyapex"]`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400554 }),
Alixe06d75b2022-08-31 18:28:19 +0000555 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400556 "deps": `[":aidl_files"]`,
557 }),
Alixe06d75b2022-08-31 18:28:19 +0000558 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400559 "deps": `[":example_lib_java_aidl_library"]`,
560 "exports": `[":example_lib_java_aidl_library"]`,
561 "srcs": `[
562 "a.java",
563 "b.java",
564 ":random_other_files",
565 ]`,
566 }),
Alix341484b2022-10-31 19:08:18 +0000567 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400568 MakeBazelTargetNoRestrictions("filegroup", "random_other_files", AttrNameToString{
569 "srcs": `[
570 "a.java",
571 "b.java",
572 ]`,
573 }),
574 },
575 }, func(ctx android.RegistrationContext) {
576 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
577 })
578}
Sam Delmerico7c721372022-08-25 13:51:21 -0400579
580func TestJavaLibraryAidlNonAdjacentAidlFilegroup(t *testing.T) {
581 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
582 Description: "java_library with non adjacent aidl filegroup",
583 ModuleTypeUnderTest: "java_library",
584 ModuleTypeUnderTestFactory: java.LibraryFactory,
585 Filesystem: map[string]string{
586 "path/to/A/Android.bp": `
587filegroup {
588 name: "A_aidl",
589 srcs: ["aidl/A.aidl"],
590 path: "aidl",
591}`,
592 },
593 Blueprint: `
594java_library {
595 name: "foo",
596 srcs: [
597 ":A_aidl",
598 ],
599}`,
600 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000601 MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400602 "deps": `["//path/to/A:A_aidl"]`,
603 }),
Alixe06d75b2022-08-31 18:28:19 +0000604 MakeBazelTarget("java_library", "foo", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400605 "exports": `[":foo_java_aidl_library"]`,
606 }),
Alix341484b2022-10-31 19:08:18 +0000607 MakeNeverlinkDuplicateTarget("java_library", "foo"),
Sam Delmerico7c721372022-08-25 13:51:21 -0400608 },
609 }, func(ctx android.RegistrationContext) {
610 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
611 })
612}
Cole Faustc843b992022-08-02 18:06:50 -0700613
614func TestConvertArmNeonVariant(t *testing.T) {
615 t.Helper()
616 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
617 Description: "Android Library - simple arch feature",
618 ModuleTypeUnderTest: "android_library",
619 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
620 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
621android_library {
622 name: "TestLib",
623 manifest: "manifest/AndroidManifest.xml",
624 srcs: ["lib.java"],
625 arch: {
626 arm: {
627 neon: {
628 srcs: ["arm_neon.java"],
629 },
630 },
631 },
632}
633`,
634 ExpectedBazelTargets: []string{
635 MakeBazelTarget(
636 "android_library",
637 "TestLib",
638 AttrNameToString{
639 "srcs": `["lib.java"] + select({
640 "//build/bazel/platforms/arch/variants:arm-neon": ["arm_neon.java"],
641 "//conditions:default": [],
642 })`,
643 "manifest": `"manifest/AndroidManifest.xml"`,
644 "resource_files": `[]`,
645 }),
Alix82fb94e2022-10-26 20:40:18 +0000646 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700647 }})
648}
649
650func TestConvertMultipleArchFeatures(t *testing.T) {
651 t.Helper()
652 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
653 Description: "Android Library - multiple arch features",
654 ModuleTypeUnderTest: "android_library",
655 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
656 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
657android_library {
658 name: "TestLib",
659 manifest: "manifest/AndroidManifest.xml",
660 srcs: ["lib.java"],
661 arch: {
662 x86: {
663 ssse3: {
664 srcs: ["ssse3.java"],
665 },
666 sse4_1: {
667 srcs: ["sse4_1.java"],
668 },
669 },
670 },
671}
672`,
673 ExpectedBazelTargets: []string{
674 MakeBazelTarget(
675 "android_library",
676 "TestLib",
677 AttrNameToString{
678 "srcs": `["lib.java"] + select({
679 "//build/bazel/platforms/arch/variants:x86-sse4_1": ["sse4_1.java"],
680 "//build/bazel/platforms/arch/variants:x86-sse4_1-ssse3": [
681 "sse4_1.java",
682 "ssse3.java",
683 ],
684 "//build/bazel/platforms/arch/variants:x86-ssse3": ["ssse3.java"],
685 "//conditions:default": [],
686 })`,
687 "manifest": `"manifest/AndroidManifest.xml"`,
688 "resource_files": `[]`,
689 }),
Alix82fb94e2022-10-26 20:40:18 +0000690 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700691 }})
692}
693
694func TestConvertExcludeSrcsArchFeature(t *testing.T) {
695 t.Helper()
696 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
697 Description: "Android Library - exclude_srcs with arch feature",
698 ModuleTypeUnderTest: "android_library",
699 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
700 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
701android_library {
702 name: "TestLib",
703 manifest: "manifest/AndroidManifest.xml",
704 srcs: ["lib.java"],
705 arch: {
706 arm: {
707 srcs: ["arm_non_neon.java"],
708 neon: {
709 exclude_srcs: ["arm_non_neon.java"],
710 },
711 },
712 },
713}
714`,
715 ExpectedBazelTargets: []string{
716 MakeBazelTarget(
717 "android_library",
718 "TestLib",
719 AttrNameToString{
720 "srcs": `["lib.java"] + select({
721 "//build/bazel/platforms/arch/variants:arm-neon": [],
722 "//build/bazel/platforms/arch:arm": ["arm_non_neon.java"],
723 "//conditions:default": [],
724 })`,
725 "manifest": `"manifest/AndroidManifest.xml"`,
726 "resource_files": `[]`,
727 }),
Alix82fb94e2022-10-26 20:40:18 +0000728 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700729 }})
730}
Alix8062f4d2022-11-14 21:38:07 +0000731
732func TestJavaLibraryKotlinSrcs(t *testing.T) {
733 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000734 Description: "java_library with kotlin srcs",
Alix8062f4d2022-11-14 21:38:07 +0000735 Blueprint: `java_library {
736 name: "java-lib-1",
737 srcs: ["a.java", "b.java", "c.kt"],
738 bazel_module: { bp2build_available: true },
739}
740`,
741 ExpectedBazelTargets: []string{
742 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
743 "srcs": `[
744 "a.java",
745 "b.java",
746 "c.kt",
747 ]`,
748 }),
Alix266bbf22022-12-15 06:12:46 +0000749 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000750 },
751 })
752}
753
Alixf848bf82023-03-06 19:43:55 +0000754func TestJavaLibraryKotlincflags(t *testing.T) {
755 runJavaLibraryTestCase(t, Bp2buildTestCase{
756 Description: "java_library with kotlincfalgs",
757 Blueprint: `java_library {
758 name: "java-lib-1",
759 srcs: [ "a.kt"],
760 kotlincflags: ["-flag1", "-flag2"],
761 bazel_module: { bp2build_available: true },
762}
763`,
764 ExpectedBazelTargets: []string{
765 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
766 "srcs": `["a.kt"]`,
767 "kotlincflags": `[
768 "-flag1",
769 "-flag2",
770 ]`,
771 }),
772 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
773 },
774 })
775}
776
Alix8062f4d2022-11-14 21:38:07 +0000777func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
778 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000779 Description: "java_library with kotlin common_srcs",
Alix8062f4d2022-11-14 21:38:07 +0000780 Blueprint: `java_library {
781 name: "java-lib-1",
782 srcs: ["a.java", "b.java"],
783 common_srcs: ["c.kt"],
784 bazel_module: { bp2build_available: true },
785}
786`,
787 ExpectedBazelTargets: []string{
788 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
789 "srcs": `[
790 "a.java",
791 "b.java",
792 ]`,
793 "common_srcs": `["c.kt"]`,
794 }),
Alix266bbf22022-12-15 06:12:46 +0000795 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000796 },
797 })
798}
Alix495cc8a2023-01-12 18:20:32 +0000799
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400800func TestJavaLibraryArchVariantDeps(t *testing.T) {
Alix495cc8a2023-01-12 18:20:32 +0000801 runJavaLibraryTestCase(t, Bp2buildTestCase{
802 Description: "java_library with arch variant libs",
803 Blueprint: `java_library {
804 name: "java-lib-1",
805 srcs: ["a.java"],
806 libs: ["java-lib-2"],
807 target: {
808 android: {
809 libs: ["java-lib-3"],
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400810 static_libs: ["java-lib-4"],
Alix495cc8a2023-01-12 18:20:32 +0000811 },
812 },
813 bazel_module: { bp2build_available: true },
814}
815
816 java_library{
817 name: "java-lib-2",
818}
819
820 java_library{
821 name: "java-lib-3",
822}
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400823
824 java_library{
825 name: "java-lib-4",
826}
Alix495cc8a2023-01-12 18:20:32 +0000827`,
828 ExpectedBazelTargets: []string{
829 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
830 "srcs": `["a.java"]`,
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400831 "exports": `select({
832 "//build/bazel/platforms/os:android": [":java-lib-4"],
833 "//conditions:default": [],
834 })`,
Alix495cc8a2023-01-12 18:20:32 +0000835 "deps": `[":java-lib-2-neverlink"] + select({
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400836 "//build/bazel/platforms/os:android": [
837 ":java-lib-3-neverlink",
838 ":java-lib-4",
839 ],
Alix495cc8a2023-01-12 18:20:32 +0000840 "//conditions:default": [],
841 })`,
842 }),
843 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
844 MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{}),
845 MakeNeverlinkDuplicateTarget("java_library", "java-lib-2"),
846 MakeBazelTarget("java_library", "java-lib-3", AttrNameToString{}),
847 MakeNeverlinkDuplicateTarget("java_library", "java-lib-3"),
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400848 MakeBazelTarget("java_library", "java-lib-4", AttrNameToString{}),
849 MakeNeverlinkDuplicateTarget("java_library", "java-lib-4"),
Alix495cc8a2023-01-12 18:20:32 +0000850 },
851 })
852}
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500853
854func TestJavaLibraryArchVariantSrcsWithExcludes(t *testing.T) {
855 runJavaLibraryTestCase(t, Bp2buildTestCase{
856 Description: "java_library with arch variant libs",
857 Blueprint: `java_library {
858 name: "java-lib-1",
859 srcs: ["a.java", "b.java"],
860 target: {
861 android: {
862 exclude_srcs: ["a.java"],
863 },
864 },
865 bazel_module: { bp2build_available: true },
866}
867`,
868 ExpectedBazelTargets: []string{
869 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
870 "srcs": `["b.java"] + select({
871 "//build/bazel/platforms/os:android": [],
872 "//conditions:default": ["a.java"],
873 })`,
874 }),
875 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
876 },
877 })
878}
Alixb29a3cd2023-05-09 20:37:49 +0000879
880func TestJavaLibraryJavaResourcesSingleFilegroup(t *testing.T) {
881 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
882 Filesystem: map[string]string{
883 "res/a.res": "",
884 "res/b.res": "",
885 "res/dir1/b.res": "",
886 },
887 Description: "java_library",
888 Blueprint: `java_library {
889 name: "java-lib-1",
890 srcs: ["a.java"],
891 java_resources: [":filegroup1"],
892 bazel_module: { bp2build_available: true },
893}
894
895filegroup {
896 name: "filegroup1",
897 path: "foo",
898 srcs: ["foo/a", "foo/b"],
899}
900
901`,
902 ExpectedBazelTargets: []string{
903 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
904 "srcs": `["a.java"]`,
905 "resources": `[":filegroup1"]`,
906 "resource_strip_prefix": `"foo"`,
907 }),
908 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
909 MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
910 "srcs": `[
911 "foo/a",
912 "foo/b",
913 ]`}),
914 },
915 }, func(ctx android.RegistrationContext) {
916 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
917 })
918}
Alix289e9c62023-08-16 15:06:31 +0000919
920func TestJavaLibraryJavaResourcesMultipleFilegroup(t *testing.T) {
921 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
922 Filesystem: map[string]string{
923 "a.res": "",
924 },
925 Description: "with java_resources that has multiple filegroups",
926 Blueprint: `java_library {
927 name: "java-lib-1",
928 srcs: ["a.java"],
929 java_resources: ["a.res", ":filegroup1", ":filegroup2"],
930 bazel_module: { bp2build_available: true },
931}
932
933filegroup {
934 name: "filegroup1",
935 path: "foo",
936 srcs: ["foo/a"],
937}
938
939filegroup {
940 name: "filegroup2",
941 path: "bar",
942 srcs: ["bar/a"],
943}
944`,
945 ExpectedBazelTargets: []string{
946 MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup1", AttrNameToString{
947 "resource_strip_prefix": `"foo"`,
948 "resources": `[":filegroup1"]`,
949 }),
950 MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup2", AttrNameToString{
951 "resource_strip_prefix": `"bar"`,
952 "resources": `[":filegroup2"]`,
953 }),
954 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
955 "srcs": `["a.java"]`,
956 "resources": `["a.res"]`,
957 "resource_strip_prefix": `"."`,
958 "additional_resources": `[
959 "java-lib-1_filegroup_resources_filegroup1",
960 "java-lib-1_filegroup_resources_filegroup2",
961 ]`,
962 }),
963 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
964 MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
965 "srcs": `["foo/a"]`}),
966 MakeBazelTargetNoRestrictions("filegroup", "filegroup2", AttrNameToString{
967 "srcs": `["bar/a"]`}),
968 },
969 }, func(ctx android.RegistrationContext) {
970 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
971 })
972}