blob: 5099b498ad22d33d280e4127254aab2e84584399 [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 (
18 "testing"
19
20 "android/soong/android"
21 "android/soong/java"
22)
23
Sam Delmerico3177a6e2022-06-21 19:28:33 +000024func runJavaLibraryTestCaseWithRegistrationCtxFunc(t *testing.T, tc Bp2buildTestCase, registrationCtxFunc func(ctx android.RegistrationContext)) {
Wei Libafb6d62021-12-10 03:14:59 -080025 t.Helper()
Sam Delmerico3177a6e2022-06-21 19:28:33 +000026 (&tc).ModuleTypeUnderTest = "java_library"
27 (&tc).ModuleTypeUnderTestFactory = java.LibraryFactory
28 RunBp2BuildTestCase(t, registrationCtxFunc, tc)
Sam Delmerico77267c72022-03-18 14:11:07 +000029}
30
Sam Delmerico3177a6e2022-06-21 19:28:33 +000031func runJavaLibraryTestCase(t *testing.T, tc Bp2buildTestCase) {
Sam Delmerico58614c02022-03-15 21:02:09 +000032 t.Helper()
Sam Delmerico77267c72022-03-18 14:11:07 +000033 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, tc, func(ctx android.RegistrationContext) {})
Wei Libafb6d62021-12-10 03:14:59 -080034}
35
36func TestJavaLibrary(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000037 runJavaLibraryTestCase(t, Bp2buildTestCase{
38 Description: "java_library with srcs, exclude_srcs and libs",
39 Blueprint: `java_library {
Wei Libafb6d62021-12-10 03:14:59 -080040 name: "java-lib-1",
41 srcs: ["a.java", "b.java"],
42 exclude_srcs: ["b.java"],
43 libs: ["java-lib-2"],
Liz Kammer02914402023-08-07 13:38:18 -040044 sdk_version: "current",
Wei Libafb6d62021-12-10 03:14:59 -080045 bazel_module: { bp2build_available: true },
46}
47
48java_library {
49 name: "java-lib-2",
50 srcs: ["b.java"],
Liz Kammer02914402023-08-07 13:38:18 -040051 sdk_version: "current",
Wei Libafb6d62021-12-10 03:14:59 -080052 bazel_module: { bp2build_available: true },
53}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000054 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +000055 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -040056 "srcs": `["a.java"]`,
57 "deps": `[":java-lib-2-neverlink"]`,
58 "sdk_version": `"current"`,
Wei Libafb6d62021-12-10 03:14:59 -080059 }),
Alix341484b2022-10-31 19:08:18 +000060 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Alixe06d75b2022-08-31 18:28:19 +000061 MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -040062 "srcs": `["b.java"]`,
63 "sdk_version": `"current"`,
Wei Libafb6d62021-12-10 03:14:59 -080064 }),
Alix341484b2022-10-31 19:08:18 +000065 MakeNeverlinkDuplicateTarget("java_library", "java-lib-2"),
Wei Libafb6d62021-12-10 03:14:59 -080066 },
67 })
68}
Sam Delmericoc0161432022-02-25 21:34:51 +000069
70func TestJavaLibraryConvertsStaticLibsToDepsAndExports(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000071 runJavaLibraryTestCase(t, Bp2buildTestCase{
Chris Parsonscd209032023-09-19 01:12:48 +000072 StubbedBuildDefinitions: []string{"java-lib-2", "java-lib-3"},
Sam Delmerico3177a6e2022-06-21 19:28:33 +000073 Blueprint: `java_library {
Sam Delmericoc0161432022-02-25 21:34:51 +000074 name: "java-lib-1",
75 srcs: ["a.java"],
76 libs: ["java-lib-2"],
77 static_libs: ["java-lib-3"],
Liz Kammer02914402023-08-07 13:38:18 -040078 sdk_version: "current",
Sam Delmericoc0161432022-02-25 21:34:51 +000079 bazel_module: { bp2build_available: true },
80}
81
82java_library {
83 name: "java-lib-2",
84 srcs: ["b.java"],
Liz Kammer02914402023-08-07 13:38:18 -040085 sdk_version: "current",
Sam Delmericoc0161432022-02-25 21:34:51 +000086}
87
88java_library {
89 name: "java-lib-3",
90 srcs: ["c.java"],
Liz Kammer02914402023-08-07 13:38:18 -040091 sdk_version: "current",
Sam Delmericoc0161432022-02-25 21:34:51 +000092}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000093 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +000094 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmericoc0161432022-02-25 21:34:51 +000095 "srcs": `["a.java"]`,
96 "deps": `[
Alix341484b2022-10-31 19:08:18 +000097 ":java-lib-2-neverlink",
Sam Delmericoc0161432022-02-25 21:34:51 +000098 ":java-lib-3",
99 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400100 "exports": `[":java-lib-3"]`,
101 "sdk_version": `"current"`,
Sam Delmericoc0161432022-02-25 21:34:51 +0000102 }),
Alix341484b2022-10-31 19:08:18 +0000103 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmericoc0161432022-02-25 21:34:51 +0000104 },
105 })
106}
107
108func TestJavaLibraryConvertsStaticLibsToExportsIfNoSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000109 runJavaLibraryTestCase(t, Bp2buildTestCase{
Chris Parsonscd209032023-09-19 01:12:48 +0000110 StubbedBuildDefinitions: []string{"java-lib-2"},
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000111 Blueprint: `java_library {
Sam Delmericoc0161432022-02-25 21:34:51 +0000112 name: "java-lib-1",
113 static_libs: ["java-lib-2"],
Liz Kammer02914402023-08-07 13:38:18 -0400114 sdk_version: "current",
Sam Delmericoc0161432022-02-25 21:34:51 +0000115 bazel_module: { bp2build_available: true },
116}
117
118java_library {
119 name: "java-lib-2",
120 srcs: ["a.java"],
Sam Delmericoc0161432022-02-25 21:34:51 +0000121}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000122 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000123 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400124 "exports": `[":java-lib-2"]`,
125 "sdk_version": `"current"`,
Sam Delmericoc0161432022-02-25 21:34:51 +0000126 }),
Alix341484b2022-10-31 19:08:18 +0000127 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmericoc0161432022-02-25 21:34:51 +0000128 },
129 })
130}
131
Liz Kammer02914402023-08-07 13:38:18 -0400132func TestJavaLibraryFailsToConvertNoSdkVersion(t *testing.T) {
133 runJavaLibraryTestCase(t, Bp2buildTestCase{
134 Blueprint: `
135java_library {
136 name: "lib",
137 bazel_module: { bp2build_available: true },
138}
139`,
140 ExpectedBazelTargets: []string{}, // no targets expected because sdk_version is not set
141 })
142}
143
Sam Delmerico77267c72022-03-18 14:11:07 +0000144func TestJavaLibraryPlugins(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000145 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
Chris Parsonscd209032023-09-19 01:12:48 +0000146 StubbedBuildDefinitions: []string{"java-plugin-1"},
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000147 Blueprint: `java_library {
Sam Delmerico77267c72022-03-18 14:11:07 +0000148 name: "java-lib-1",
149 plugins: ["java-plugin-1"],
Liz Kammer02914402023-08-07 13:38:18 -0400150 sdk_version: "current",
Sam Delmerico77267c72022-03-18 14:11:07 +0000151 bazel_module: { bp2build_available: true },
152}
153
154java_plugin {
155 name: "java-plugin-1",
156 srcs: ["a.java"],
Sam Delmerico77267c72022-03-18 14:11:07 +0000157}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000158 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000159 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400160 "plugins": `[":java-plugin-1"]`,
161 "sdk_version": `"current"`,
Sam Delmerico77267c72022-03-18 14:11:07 +0000162 }),
Alix341484b2022-10-31 19:08:18 +0000163 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico77267c72022-03-18 14:11:07 +0000164 },
165 }, func(ctx android.RegistrationContext) {
166 ctx.RegisterModuleType("java_plugin", java.PluginFactory)
167 })
168}
Sam Delmerico58614c02022-03-15 21:02:09 +0000169
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400170func TestJavaLibraryJavaVersion(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000171 runJavaLibraryTestCase(t, Bp2buildTestCase{
172 Blueprint: `java_library {
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400173 name: "java-lib-1",
174 srcs: ["a.java"],
175 java_version: "11",
Liz Kammer02914402023-08-07 13:38:18 -0400176 sdk_version: "current",
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400177}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000178 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000179 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Romain Jobredeaux2eef2e12023-02-24 12:07:08 -0500180 "srcs": `["a.java"]`,
181 "java_version": `"11"`,
Liz Kammer02914402023-08-07 13:38:18 -0400182 "sdk_version": `"current"`,
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400183 }),
Romain Jobredeaux2eef2e12023-02-24 12:07:08 -0500184 MakeNeverlinkDuplicateTargetWithAttrs(
185 "java_library",
186 "java-lib-1",
Liz Kammer02914402023-08-07 13:38:18 -0400187 AttrNameToString{
188 "java_version": `"11"`,
189 "sdk_version": `"current"`,
190 }),
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400191 },
192 })
193}
194
Liz Kammer9f52f6b2023-10-06 16:47:00 -0400195func TestJavaLibraryOpenjdk9(t *testing.T) {
196 runJavaLibraryTestCase(t, Bp2buildTestCase{
197 Blueprint: `java_library {
198 name: "java-lib-1",
199 srcs: ["a.java"],
200 exclude_srcs: ["b.java"],
201 javacflags: ["flag"],
202 target: {
203 android: {
204 srcs: ["android.java"],
205 },
206 },
207 openjdk9: {
208 srcs: ["b.java", "foo.java"],
209 javacflags: ["extraflag"],
210 },
211 sdk_version: "current",
212}`,
213 ExpectedBazelTargets: []string{
214 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
215 "srcs": `[
216 "a.java",
217 "foo.java",
218 ] + select({
219 "//build/bazel_common_rules/platforms/os:android": ["android.java"],
220 "//conditions:default": [],
221 })`,
222 "sdk_version": `"current"`,
223 "javacopts": `[
224 "flag",
225 "extraflag",
226 ]`,
227 }),
228 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
229 },
230 })
231
232}
233
Alixb1e5c6a2023-06-20 21:00:40 +0000234func TestJavaLibraryErrorproneEnabledManually(t *testing.T) {
235 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
Chris Parsonscd209032023-09-19 01:12:48 +0000236 StubbedBuildDefinitions: []string{"plugin2"},
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000237 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000238 name: "java-lib-1",
239 srcs: ["a.java"],
240 javacflags: ["-Xsuper-fast"],
Liz Kammer02914402023-08-07 13:38:18 -0400241 sdk_version: "current",
Sam Delmerico58614c02022-03-15 21:02:09 +0000242 errorprone: {
243 enabled: true,
244 javacflags: ["-Xep:SpeedLimit:OFF"],
Alixb1e5c6a2023-06-20 21:00:40 +0000245 extra_check_modules: ["plugin2"],
Sam Delmerico58614c02022-03-15 21:02:09 +0000246 },
Alixb1e5c6a2023-06-20 21:00:40 +0000247}
248java_plugin {
249 name: "plugin2",
250 srcs: ["a.java"],
Sam Delmerico58614c02022-03-15 21:02:09 +0000251}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000252 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000253 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico58614c02022-03-15 21:02:09 +0000254 "javacopts": `[
255 "-Xsuper-fast",
256 "-Xep:SpeedLimit:OFF",
257 ]`,
Alixb1e5c6a2023-06-20 21:00:40 +0000258 "plugins": `[":plugin2"]`,
259 "srcs": `["a.java"]`,
260 "errorprone_force_enable": `True`,
Liz Kammer02914402023-08-07 13:38:18 -0400261 "sdk_version": `"current"`,
Sam Delmerico58614c02022-03-15 21:02:09 +0000262 }),
Alix341484b2022-10-31 19:08:18 +0000263 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000264 },
Alixb1e5c6a2023-06-20 21:00:40 +0000265 }, func(ctx android.RegistrationContext) {
266 ctx.RegisterModuleType("java_plugin", java.PluginFactory)
Sam Delmerico58614c02022-03-15 21:02:09 +0000267 })
268}
269
270func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000271 runJavaLibraryTestCase(t, Bp2buildTestCase{
272 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000273 name: "java-lib-1",
274 srcs: ["a.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400275 sdk_version: "current",
Sam Delmerico58614c02022-03-15 21:02:09 +0000276 javacflags: ["-Xsuper-fast"],
277 errorprone: {
278 javacflags: ["-Xep:SpeedLimit:OFF"],
279 },
280}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000281 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000282 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400283 "javacopts": `["-Xsuper-fast"]`,
284 "srcs": `["a.java"]`,
285 "sdk_version": `"current"`,
Sam Delmerico58614c02022-03-15 21:02:09 +0000286 }),
Alix341484b2022-10-31 19:08:18 +0000287 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000288 },
289 })
290}
291
Alixb1e5c6a2023-06-20 21:00:40 +0000292func TestJavaLibraryErrorproneDisabledManually(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000293 runJavaLibraryTestCase(t, Bp2buildTestCase{
294 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000295 name: "java-lib-1",
296 srcs: ["a.java"],
297 javacflags: ["-Xsuper-fast"],
Liz Kammer02914402023-08-07 13:38:18 -0400298 sdk_version: "current",
Sam Delmerico58614c02022-03-15 21:02:09 +0000299 errorprone: {
Alixb1e5c6a2023-06-20 21:00:40 +0000300 enabled: false,
Sam Delmerico58614c02022-03-15 21:02:09 +0000301 },
302}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000303 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000304 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Alixb1e5c6a2023-06-20 21:00:40 +0000305 "javacopts": `[
306 "-Xsuper-fast",
307 "-XepDisableAllChecks",
308 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400309 "srcs": `["a.java"]`,
310 "sdk_version": `"current"`,
Sam Delmerico58614c02022-03-15 21:02:09 +0000311 }),
Alix341484b2022-10-31 19:08:18 +0000312 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000313 },
314 })
315}
Sam Delmerico24da73c2022-03-16 20:36:54 +0000316
317func TestJavaLibraryLogTags(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000318 runJavaLibraryTestCase(t, Bp2buildTestCase{
319 Description: "Java library - logtags creates separate dependency",
320 ModuleTypeUnderTest: "java_library",
321 ModuleTypeUnderTestFactory: java.LibraryFactory,
322 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400323 name: "example_lib",
324 srcs: [
325 "a.java",
326 "b.java",
327 "a.logtag",
328 "b.logtag",
329 ],
330 sdk_version: "current",
331 bazel_module: { bp2build_available: true },
Sam Delmerico24da73c2022-03-16 20:36:54 +0000332}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000333 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000334 MakeBazelTarget("event_log_tags", "example_lib_logtags", AttrNameToString{
Sam Delmerico24da73c2022-03-16 20:36:54 +0000335 "srcs": `[
336 "a.logtag",
337 "b.logtag",
338 ]`,
339 }),
Alixe06d75b2022-08-31 18:28:19 +0000340 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico24da73c2022-03-16 20:36:54 +0000341 "srcs": `[
342 "a.java",
343 "b.java",
344 ":example_lib_logtags",
345 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400346 "sdk_version": `"current"`,
Sam Delmerico24da73c2022-03-16 20:36:54 +0000347 }),
Alix341484b2022-10-31 19:08:18 +0000348 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico24da73c2022-03-16 20:36:54 +0000349 }})
350}
Sam Delmerico79985812022-03-23 20:20:42 +0000351
352func TestJavaLibraryResources(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000353 runJavaLibraryTestCase(t, Bp2buildTestCase{
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400354 Dir: "adir",
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000355 Filesystem: map[string]string{
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400356 "adir/res/a.res": "",
357 "adir/res/b.res": "",
358 "adir/res/dir1/b.res": "",
359 "adir/Android.bp": `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400360 name: "java-lib-1",
361 java_resources: ["res/a.res", "res/b.res"],
362 sdk_version: "current",
363 bazel_module: { bp2build_available: true },
Sam Delmerico79985812022-03-23 20:20:42 +0000364}`,
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400365 },
366 Blueprint: "",
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000367 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000368 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000369 "resources": `[
370 "res/a.res",
371 "res/b.res",
372 ]`,
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400373 "resource_strip_prefix": `"adir"`,
Liz Kammer02914402023-08-07 13:38:18 -0400374 "sdk_version": `"current"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000375 }),
Alix341484b2022-10-31 19:08:18 +0000376 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000377 },
378 })
379}
380
381func TestJavaLibraryResourceDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000382 runJavaLibraryTestCase(t, Bp2buildTestCase{
383 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000384 "res/a.res": "",
385 "res/b.res": "",
386 "res/dir1/b.res": "",
387 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000388 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400389 name: "java-lib-1",
Sam Delmerico79985812022-03-23 20:20:42 +0000390 java_resource_dirs: ["res"],
Liz Kammer02914402023-08-07 13:38:18 -0400391 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000392}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000393 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000394 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000395 "resource_strip_prefix": `"res"`,
396 "resources": `[
397 "res/a.res",
398 "res/b.res",
399 "res/dir1/b.res",
400 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400401 "sdk_version": `"current"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000402 }),
Alix341484b2022-10-31 19:08:18 +0000403 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000404 },
405 })
406}
407
408func TestJavaLibraryResourcesExcludeDir(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000409 runJavaLibraryTestCase(t, Bp2buildTestCase{
410 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000411 "res/a.res": "",
412 "res/exclude/b.res": "",
413 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000414 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400415 name: "java-lib-1",
Sam Delmerico79985812022-03-23 20:20:42 +0000416 java_resource_dirs: ["res"],
Liz Kammer02914402023-08-07 13:38:18 -0400417 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000418 exclude_java_resource_dirs: ["res/exclude"],
419}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000420 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000421 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000422 "resource_strip_prefix": `"res"`,
423 "resources": `["res/a.res"]`,
Liz Kammer02914402023-08-07 13:38:18 -0400424 "sdk_version": `"current"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000425 }),
Alix341484b2022-10-31 19:08:18 +0000426 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000427 },
428 })
429}
430
431func TestJavaLibraryResourcesExcludeFile(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000432 runJavaLibraryTestCase(t, Bp2buildTestCase{
433 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000434 "res/a.res": "",
435 "res/dir1/b.res": "",
436 "res/dir1/exclude.res": "",
437 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000438 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400439 name: "java-lib-1",
Sam Delmerico79985812022-03-23 20:20:42 +0000440 java_resource_dirs: ["res"],
Liz Kammer02914402023-08-07 13:38:18 -0400441 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000442 exclude_java_resources: ["res/dir1/exclude.res"],
443}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000444 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000445 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000446 "resource_strip_prefix": `"res"`,
447 "resources": `[
448 "res/a.res",
449 "res/dir1/b.res",
450 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400451 "sdk_version": `"current"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000452 }),
Alix341484b2022-10-31 19:08:18 +0000453 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000454 },
455 })
456}
457
Alix289e9c62023-08-16 15:06:31 +0000458func TestJavaLibraryResourcesWithMultipleDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000459 runJavaLibraryTestCase(t, Bp2buildTestCase{
460 Filesystem: map[string]string{
Chris Parsonscd209032023-09-19 01:12:48 +0000461 "res/a.res": "",
462 "res1/b.res": "",
Sam Delmerico79985812022-03-23 20:20:42 +0000463 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000464 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400465 name: "java-lib-1",
Liz Kammer93b7e952023-10-09 14:07:46 -0400466 srcs: ["foo.java"],
Chris Parsonscd209032023-09-19 01:12:48 +0000467 java_resource_dirs: ["res", "res1"],
Liz Kammer02914402023-08-07 13:38:18 -0400468 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000469}`,
Alix289e9c62023-08-16 15:06:31 +0000470 ExpectedBazelTargets: []string{
471 MakeBazelTarget("java_resources", "java-lib-1_resource_dir_res1", AttrNameToString{
472 "resource_strip_prefix": `"res1"`,
473 "resources": `["res1/b.res"]`,
474 }),
475 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Liz Kammer93b7e952023-10-09 14:07:46 -0400476 "deps": `["java-lib-1_resource_dir_res1"]`,
Alix289e9c62023-08-16 15:06:31 +0000477 "resources": `["res/a.res"]`,
478 "resource_strip_prefix": `"res"`,
Liz Kammer93b7e952023-10-09 14:07:46 -0400479 "srcs": `["foo.java"]`,
Liz Kammer02914402023-08-07 13:38:18 -0400480 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +0000481 }),
482 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
483 },
484 })
485}
486
487func TestJavaLibraryJavaResourcesAndResourceDirs(t *testing.T) {
488 runJavaLibraryTestCase(t, Bp2buildTestCase{
489 Filesystem: map[string]string{
490 "resdir/a.res": "",
491 },
492 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400493 name: "java-lib-1",
494 java_resources: ["res1", "res2"],
495 java_resource_dirs: ["resdir"],
496 sdk_version: "current",
Liz Kammer93b7e952023-10-09 14:07:46 -0400497 srcs: ["foo.java"],
Alix289e9c62023-08-16 15:06:31 +0000498}`,
499 ExpectedBazelTargets: []string{
500 MakeBazelTarget("java_resources", "java-lib-1_resource_dir_resdir", AttrNameToString{
501 "resource_strip_prefix": `"resdir"`,
502 "resources": `["resdir/a.res"]`,
503 }),
504 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Liz Kammer93b7e952023-10-09 14:07:46 -0400505 "deps": `["java-lib-1_resource_dir_resdir"]`,
Alix289e9c62023-08-16 15:06:31 +0000506 "resource_strip_prefix": `"."`,
507 "resources": `[
508 "res1",
509 "res2",
510 ]`,
Liz Kammer93b7e952023-10-09 14:07:46 -0400511 "srcs": `["foo.java"]`,
Liz Kammer02914402023-08-07 13:38:18 -0400512 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +0000513 }),
514 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
515 },
Sam Delmerico79985812022-03-23 20:20:42 +0000516 })
517}
Sam Delmerico97bd1272022-08-25 14:45:31 -0400518
519func TestJavaLibraryAidl(t *testing.T) {
520 runJavaLibraryTestCase(t, Bp2buildTestCase{
521 Description: "Java library - aidl creates separate dependency",
522 ModuleTypeUnderTest: "java_library",
523 ModuleTypeUnderTestFactory: java.LibraryFactory,
524 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400525 name: "example_lib",
526 srcs: [
527 "a.java",
528 "b.java",
529 "a.aidl",
530 "b.aidl",
531 ],
532 bazel_module: { bp2build_available: true },
533 sdk_version: "current",
Sam Delmerico97bd1272022-08-25 14:45:31 -0400534}`,
535 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000536 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400537 "srcs": `[
538 "a.aidl",
539 "b.aidl",
540 ]`,
541 }),
Alixe06d75b2022-08-31 18:28:19 +0000542 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400543 "deps": `[":example_lib_aidl_library"]`,
544 }),
Alixe06d75b2022-08-31 18:28:19 +0000545 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400546 "deps": `[":example_lib_java_aidl_library"]`,
547 "exports": `[":example_lib_java_aidl_library"]`,
548 "srcs": `[
549 "a.java",
550 "b.java",
551 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400552 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400553 }),
Alix341484b2022-10-31 19:08:18 +0000554 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400555 }})
556}
557
558func TestJavaLibraryAidlSrcsNoFileGroup(t *testing.T) {
559 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
560 Description: "Java library - aidl filegroup is parsed",
561 ModuleTypeUnderTest: "java_library",
562 ModuleTypeUnderTestFactory: java.LibraryFactory,
563 Blueprint: `
564java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400565 name: "example_lib",
566 srcs: [
567 "a.java",
568 "b.aidl",
569 ],
570 sdk_version: "current",
571 bazel_module: { bp2build_available: true },
Sam Delmerico97bd1272022-08-25 14:45:31 -0400572}`,
573 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000574 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400575 "srcs": `["b.aidl"]`,
576 }),
Alixe06d75b2022-08-31 18:28:19 +0000577 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400578 "deps": `[":example_lib_aidl_library"]`,
579 }),
Alixe06d75b2022-08-31 18:28:19 +0000580 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400581 "deps": `[":example_lib_java_aidl_library"]`,
582 "exports": `[":example_lib_java_aidl_library"]`,
583 "srcs": `["a.java"]`,
584 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400585 }),
Alix341484b2022-10-31 19:08:18 +0000586 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400587 },
588 }, func(ctx android.RegistrationContext) {
589 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
590 })
591}
592
593func TestJavaLibraryAidlFilegroup(t *testing.T) {
594 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
595 Description: "Java library - aidl filegroup is parsed",
596 ModuleTypeUnderTest: "java_library",
597 ModuleTypeUnderTestFactory: java.LibraryFactory,
598 Blueprint: `
599filegroup {
600 name: "random_other_files",
601 srcs: [
602 "a.java",
603 "b.java",
604 ],
605}
606filegroup {
607 name: "aidl_files",
608 srcs: [
609 "a.aidl",
610 "b.aidl",
611 ],
612}
Liz Kammer79ff08f2023-09-27 14:43:45 -0400613filegroup {
614 name: "aidls_files",
615 srcs: [
616 "a.aidl",
617 "b.aidl",
618 ],
619}
Sam Delmerico97bd1272022-08-25 14:45:31 -0400620java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400621 name: "example_lib",
622 srcs: [
623 "a.java",
624 "b.java",
625 ":aidl_files",
Liz Kammer79ff08f2023-09-27 14:43:45 -0400626 ":aidls_files",
Liz Kammer02914402023-08-07 13:38:18 -0400627 ":random_other_files",
628 ],
629 sdk_version: "current",
630 bazel_module: { bp2build_available: true },
Sam Delmerico97bd1272022-08-25 14:45:31 -0400631}`,
632 ExpectedBazelTargets: []string{
633 MakeBazelTargetNoRestrictions("aidl_library", "aidl_files", AttrNameToString{
634 "srcs": `[
635 "a.aidl",
636 "b.aidl",
637 ]`,
Liz Kammer2b3f56e2023-03-23 11:51:49 -0400638 "tags": `["apex_available=//apex_available:anyapex"]`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400639 }),
Liz Kammer79ff08f2023-09-27 14:43:45 -0400640 MakeBazelTargetNoRestrictions("aidl_library", "aidls_files", AttrNameToString{
641 "srcs": `[
642 "a.aidl",
643 "b.aidl",
644 ]`,
645 "tags": `["apex_available=//apex_available:anyapex"]`,
646 }),
Alixe06d75b2022-08-31 18:28:19 +0000647 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Liz Kammer79ff08f2023-09-27 14:43:45 -0400648 "deps": `[
649 ":aidl_files",
650 ":aidls_files",
651 ]`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400652 }),
Alixe06d75b2022-08-31 18:28:19 +0000653 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400654 "deps": `[":example_lib_java_aidl_library"]`,
655 "exports": `[":example_lib_java_aidl_library"]`,
656 "srcs": `[
657 "a.java",
658 "b.java",
659 ":random_other_files",
660 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400661 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400662 }),
Alix341484b2022-10-31 19:08:18 +0000663 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400664 MakeBazelTargetNoRestrictions("filegroup", "random_other_files", AttrNameToString{
665 "srcs": `[
666 "a.java",
667 "b.java",
668 ]`,
669 }),
670 },
671 }, func(ctx android.RegistrationContext) {
672 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
673 })
674}
Sam Delmerico7c721372022-08-25 13:51:21 -0400675
676func TestJavaLibraryAidlNonAdjacentAidlFilegroup(t *testing.T) {
677 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
678 Description: "java_library with non adjacent aidl filegroup",
679 ModuleTypeUnderTest: "java_library",
680 ModuleTypeUnderTestFactory: java.LibraryFactory,
Chris Parsonsd0783372023-10-05 15:47:07 +0000681 StubbedBuildDefinitions: []string{"//path/to/A:A_aidl"},
Sam Delmerico7c721372022-08-25 13:51:21 -0400682 Filesystem: map[string]string{
683 "path/to/A/Android.bp": `
684filegroup {
Liz Kammer02914402023-08-07 13:38:18 -0400685 name: "A_aidl",
686 srcs: ["aidl/A.aidl"],
687 path: "aidl",
Sam Delmerico7c721372022-08-25 13:51:21 -0400688}`,
689 },
690 Blueprint: `
691java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400692 name: "foo",
693 srcs: [
694 ":A_aidl",
695 ],
696 sdk_version: "current",
Sam Delmerico7c721372022-08-25 13:51:21 -0400697}`,
698 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000699 MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400700 "deps": `["//path/to/A:A_aidl"]`,
701 }),
Alixe06d75b2022-08-31 18:28:19 +0000702 MakeBazelTarget("java_library", "foo", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400703 "exports": `[":foo_java_aidl_library"]`,
704 "sdk_version": `"current"`,
Sam Delmerico7c721372022-08-25 13:51:21 -0400705 }),
Alix341484b2022-10-31 19:08:18 +0000706 MakeNeverlinkDuplicateTarget("java_library", "foo"),
Sam Delmerico7c721372022-08-25 13:51:21 -0400707 },
708 }, func(ctx android.RegistrationContext) {
709 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
710 })
711}
Cole Faustc843b992022-08-02 18:06:50 -0700712
713func TestConvertArmNeonVariant(t *testing.T) {
714 t.Helper()
715 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
716 Description: "Android Library - simple arch feature",
717 ModuleTypeUnderTest: "android_library",
718 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Chris Parsonscd209032023-09-19 01:12:48 +0000719 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Cole Faustc843b992022-08-02 18:06:50 -0700720android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400721 name: "TestLib",
722 manifest: "manifest/AndroidManifest.xml",
723 srcs: ["lib.java"],
724 sdk_version: "current",
725 arch: {
726 arm: {
727 neon: {
728 srcs: ["arm_neon.java"],
729 },
730 },
731 },
Cole Faustc843b992022-08-02 18:06:50 -0700732}
733`,
734 ExpectedBazelTargets: []string{
735 MakeBazelTarget(
736 "android_library",
737 "TestLib",
738 AttrNameToString{
739 "srcs": `["lib.java"] + select({
740 "//build/bazel/platforms/arch/variants:arm-neon": ["arm_neon.java"],
741 "//conditions:default": [],
742 })`,
743 "manifest": `"manifest/AndroidManifest.xml"`,
744 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400745 "sdk_version": `"current"`, // use as default
Cole Faustc843b992022-08-02 18:06:50 -0700746 }),
Alix82fb94e2022-10-26 20:40:18 +0000747 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700748 }})
749}
750
751func TestConvertMultipleArchFeatures(t *testing.T) {
752 t.Helper()
753 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
754 Description: "Android Library - multiple arch features",
755 ModuleTypeUnderTest: "android_library",
756 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Chris Parsonscd209032023-09-19 01:12:48 +0000757 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Cole Faustc843b992022-08-02 18:06:50 -0700758android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400759 name: "TestLib",
760 manifest: "manifest/AndroidManifest.xml",
761 srcs: ["lib.java"],
762 sdk_version: "current",
763 arch: {
764 x86: {
765 ssse3: {
766 srcs: ["ssse3.java"],
767 },
768 sse4_1: {
769 srcs: ["sse4_1.java"],
770 },
771 },
772 },
Cole Faustc843b992022-08-02 18:06:50 -0700773}
774`,
775 ExpectedBazelTargets: []string{
776 MakeBazelTarget(
777 "android_library",
778 "TestLib",
779 AttrNameToString{
780 "srcs": `["lib.java"] + select({
781 "//build/bazel/platforms/arch/variants:x86-sse4_1": ["sse4_1.java"],
782 "//build/bazel/platforms/arch/variants:x86-sse4_1-ssse3": [
783 "sse4_1.java",
784 "ssse3.java",
785 ],
786 "//build/bazel/platforms/arch/variants:x86-ssse3": ["ssse3.java"],
787 "//conditions:default": [],
788 })`,
789 "manifest": `"manifest/AndroidManifest.xml"`,
790 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400791 "sdk_version": `"current"`,
Cole Faustc843b992022-08-02 18:06:50 -0700792 }),
Alix82fb94e2022-10-26 20:40:18 +0000793 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700794 }})
795}
796
797func TestConvertExcludeSrcsArchFeature(t *testing.T) {
798 t.Helper()
799 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
800 Description: "Android Library - exclude_srcs with arch feature",
801 ModuleTypeUnderTest: "android_library",
802 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Chris Parsonscd209032023-09-19 01:12:48 +0000803 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Cole Faustc843b992022-08-02 18:06:50 -0700804android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400805 name: "TestLib",
806 manifest: "manifest/AndroidManifest.xml",
807 srcs: ["lib.java"],
808 arch: {
809 arm: {
810 srcs: ["arm_non_neon.java"],
811 neon: {
812 exclude_srcs: ["arm_non_neon.java"],
813 },
814 },
815 },
816 sdk_version: "current",
Cole Faustc843b992022-08-02 18:06:50 -0700817}
818`,
819 ExpectedBazelTargets: []string{
820 MakeBazelTarget(
821 "android_library",
822 "TestLib",
823 AttrNameToString{
824 "srcs": `["lib.java"] + select({
825 "//build/bazel/platforms/arch/variants:arm-neon": [],
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000826 "//build/bazel_common_rules/platforms/arch:arm": ["arm_non_neon.java"],
Cole Faustc843b992022-08-02 18:06:50 -0700827 "//conditions:default": [],
828 })`,
829 "manifest": `"manifest/AndroidManifest.xml"`,
830 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400831 "sdk_version": `"current"`, // use as default
Cole Faustc843b992022-08-02 18:06:50 -0700832 }),
Alix82fb94e2022-10-26 20:40:18 +0000833 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700834 }})
835}
Alix8062f4d2022-11-14 21:38:07 +0000836
837func TestJavaLibraryKotlinSrcs(t *testing.T) {
838 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000839 Description: "java_library with kotlin srcs",
Alix8062f4d2022-11-14 21:38:07 +0000840 Blueprint: `java_library {
841 name: "java-lib-1",
842 srcs: ["a.java", "b.java", "c.kt"],
843 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400844 sdk_version: "current",
Alix8062f4d2022-11-14 21:38:07 +0000845}
846`,
847 ExpectedBazelTargets: []string{
848 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
849 "srcs": `[
850 "a.java",
851 "b.java",
852 "c.kt",
853 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400854 "sdk_version": `"current"`,
Alix8062f4d2022-11-14 21:38:07 +0000855 }),
Alix266bbf22022-12-15 06:12:46 +0000856 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000857 },
858 })
859}
860
Alixf848bf82023-03-06 19:43:55 +0000861func TestJavaLibraryKotlincflags(t *testing.T) {
862 runJavaLibraryTestCase(t, Bp2buildTestCase{
863 Description: "java_library with kotlincfalgs",
864 Blueprint: `java_library {
865 name: "java-lib-1",
866 srcs: [ "a.kt"],
867 kotlincflags: ["-flag1", "-flag2"],
868 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400869 sdk_version: "current",
Alixf848bf82023-03-06 19:43:55 +0000870}
871`,
872 ExpectedBazelTargets: []string{
873 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
874 "srcs": `["a.kt"]`,
875 "kotlincflags": `[
876 "-flag1",
877 "-flag2",
878 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400879 "sdk_version": `"current"`,
Alixf848bf82023-03-06 19:43:55 +0000880 }),
881 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
882 },
883 })
884}
885
Alix8062f4d2022-11-14 21:38:07 +0000886func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
887 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000888 Description: "java_library with kotlin common_srcs",
Alix8062f4d2022-11-14 21:38:07 +0000889 Blueprint: `java_library {
890 name: "java-lib-1",
891 srcs: ["a.java", "b.java"],
892 common_srcs: ["c.kt"],
893 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400894 sdk_version: "current",
Alix8062f4d2022-11-14 21:38:07 +0000895}
896`,
897 ExpectedBazelTargets: []string{
898 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
899 "srcs": `[
900 "a.java",
901 "b.java",
902 ]`,
903 "common_srcs": `["c.kt"]`,
Liz Kammer02914402023-08-07 13:38:18 -0400904 "sdk_version": `"current"`,
Alix8062f4d2022-11-14 21:38:07 +0000905 }),
Alix266bbf22022-12-15 06:12:46 +0000906 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000907 },
908 })
909}
Alix495cc8a2023-01-12 18:20:32 +0000910
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400911func TestJavaLibraryArchVariantDeps(t *testing.T) {
Alix495cc8a2023-01-12 18:20:32 +0000912 runJavaLibraryTestCase(t, Bp2buildTestCase{
Chris Parsonscd209032023-09-19 01:12:48 +0000913 Description: "java_library with arch variant libs",
914 StubbedBuildDefinitions: []string{"java-lib-2", "java-lib-3", "java-lib-4"},
Alix495cc8a2023-01-12 18:20:32 +0000915 Blueprint: `java_library {
916 name: "java-lib-1",
917 srcs: ["a.java"],
918 libs: ["java-lib-2"],
Liz Kammer02914402023-08-07 13:38:18 -0400919 sdk_version: "current",
Alix495cc8a2023-01-12 18:20:32 +0000920 target: {
921 android: {
922 libs: ["java-lib-3"],
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400923 static_libs: ["java-lib-4"],
Alix495cc8a2023-01-12 18:20:32 +0000924 },
925 },
926 bazel_module: { bp2build_available: true },
927}
928
Liz Kammer02914402023-08-07 13:38:18 -0400929 java_library{
930 name: "java-lib-2",
Alix495cc8a2023-01-12 18:20:32 +0000931}
932
Liz Kammer02914402023-08-07 13:38:18 -0400933 java_library{
934 name: "java-lib-3",
Alix495cc8a2023-01-12 18:20:32 +0000935}
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400936
Liz Kammer02914402023-08-07 13:38:18 -0400937 java_library{
938 name: "java-lib-4",
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400939}
Alix495cc8a2023-01-12 18:20:32 +0000940`,
941 ExpectedBazelTargets: []string{
942 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
943 "srcs": `["a.java"]`,
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400944 "exports": `select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000945 "//build/bazel_common_rules/platforms/os:android": [":java-lib-4"],
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400946 "//conditions:default": [],
947 })`,
Alix495cc8a2023-01-12 18:20:32 +0000948 "deps": `[":java-lib-2-neverlink"] + select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000949 "//build/bazel_common_rules/platforms/os:android": [
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400950 ":java-lib-3-neverlink",
951 ":java-lib-4",
952 ],
Alix495cc8a2023-01-12 18:20:32 +0000953 "//conditions:default": [],
954 })`,
Liz Kammer02914402023-08-07 13:38:18 -0400955 "sdk_version": `"current"`,
Alix495cc8a2023-01-12 18:20:32 +0000956 }),
957 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Alix495cc8a2023-01-12 18:20:32 +0000958 },
959 })
960}
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500961
962func TestJavaLibraryArchVariantSrcsWithExcludes(t *testing.T) {
963 runJavaLibraryTestCase(t, Bp2buildTestCase{
964 Description: "java_library with arch variant libs",
965 Blueprint: `java_library {
966 name: "java-lib-1",
967 srcs: ["a.java", "b.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400968 sdk_version: "current",
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500969 target: {
970 android: {
971 exclude_srcs: ["a.java"],
972 },
973 },
974 bazel_module: { bp2build_available: true },
975}
976`,
977 ExpectedBazelTargets: []string{
978 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
979 "srcs": `["b.java"] + select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000980 "//build/bazel_common_rules/platforms/os:android": [],
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500981 "//conditions:default": ["a.java"],
982 })`,
Liz Kammer02914402023-08-07 13:38:18 -0400983 "sdk_version": `"current"`,
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500984 }),
985 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
986 },
987 })
988}
Alixb29a3cd2023-05-09 20:37:49 +0000989
990func TestJavaLibraryJavaResourcesSingleFilegroup(t *testing.T) {
991 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
992 Filesystem: map[string]string{
993 "res/a.res": "",
994 "res/b.res": "",
995 "res/dir1/b.res": "",
996 },
997 Description: "java_library",
998 Blueprint: `java_library {
999 name: "java-lib-1",
1000 srcs: ["a.java"],
Liz Kammer02914402023-08-07 13:38:18 -04001001 sdk_version: "current",
Alixb29a3cd2023-05-09 20:37:49 +00001002 java_resources: [":filegroup1"],
1003 bazel_module: { bp2build_available: true },
1004}
1005
1006filegroup {
1007 name: "filegroup1",
1008 path: "foo",
1009 srcs: ["foo/a", "foo/b"],
1010}
1011
1012`,
1013 ExpectedBazelTargets: []string{
1014 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
1015 "srcs": `["a.java"]`,
1016 "resources": `[":filegroup1"]`,
1017 "resource_strip_prefix": `"foo"`,
Liz Kammer02914402023-08-07 13:38:18 -04001018 "sdk_version": `"current"`,
Alixb29a3cd2023-05-09 20:37:49 +00001019 }),
1020 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
1021 MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
1022 "srcs": `[
1023 "foo/a",
1024 "foo/b",
1025 ]`}),
1026 },
1027 }, func(ctx android.RegistrationContext) {
1028 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
1029 })
1030}
Alix289e9c62023-08-16 15:06:31 +00001031
1032func TestJavaLibraryJavaResourcesMultipleFilegroup(t *testing.T) {
1033 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
1034 Filesystem: map[string]string{
1035 "a.res": "",
1036 },
1037 Description: "with java_resources that has multiple filegroups",
1038 Blueprint: `java_library {
1039 name: "java-lib-1",
1040 srcs: ["a.java"],
1041 java_resources: ["a.res", ":filegroup1", ":filegroup2"],
Liz Kammer02914402023-08-07 13:38:18 -04001042 sdk_version: "current",
Alix289e9c62023-08-16 15:06:31 +00001043 bazel_module: { bp2build_available: true },
1044}
1045
1046filegroup {
1047 name: "filegroup1",
1048 path: "foo",
1049 srcs: ["foo/a"],
1050}
1051
1052filegroup {
1053 name: "filegroup2",
1054 path: "bar",
1055 srcs: ["bar/a"],
1056}
1057`,
1058 ExpectedBazelTargets: []string{
1059 MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup1", AttrNameToString{
1060 "resource_strip_prefix": `"foo"`,
1061 "resources": `[":filegroup1"]`,
1062 }),
1063 MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup2", AttrNameToString{
1064 "resource_strip_prefix": `"bar"`,
1065 "resources": `[":filegroup2"]`,
1066 }),
1067 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
1068 "srcs": `["a.java"]`,
1069 "resources": `["a.res"]`,
1070 "resource_strip_prefix": `"."`,
Liz Kammer93b7e952023-10-09 14:07:46 -04001071 "deps": `[
Alix289e9c62023-08-16 15:06:31 +00001072 "java-lib-1_filegroup_resources_filegroup1",
1073 "java-lib-1_filegroup_resources_filegroup2",
1074 ]`,
Liz Kammer02914402023-08-07 13:38:18 -04001075 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +00001076 }),
1077 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
1078 MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
1079 "srcs": `["foo/a"]`}),
1080 MakeBazelTargetNoRestrictions("filegroup", "filegroup2", AttrNameToString{
1081 "srcs": `["bar/a"]`}),
1082 },
1083 }, func(ctx android.RegistrationContext) {
1084 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
1085 })
1086}
Zi Wang734266b2023-10-06 11:25:06 -07001087
1088func TestJavaLibrarySameNameAsPrebuilt(t *testing.T) {
1089 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
1090 Description: "java_library and prebuilt module have the same name",
1091 Filesystem: map[string]string{
1092 "foo/bar/Android.bp": simpleModule("java_import", "test_lib"),
1093 },
1094 Blueprint: `java_library {
1095 name: "test_lib",
1096 srcs: ["a.java"],
1097 sdk_version: "current",
1098 bazel_module: { bp2build_available: true },
1099}
1100`,
1101 ExpectedBazelTargets: []string{
1102 MakeBazelTarget("java_library", "test_lib", AttrNameToString{
1103 "srcs": `["a.java"]`,
1104 "sdk_version": `"current"`,
1105 }),
1106 MakeNeverlinkDuplicateTarget("java_library", "test_lib"),
1107 },
1108 }, func(ctx android.RegistrationContext) {
1109 ctx.RegisterModuleType("java_import", java.ImportFactory)
1110 })
1111}
usta15ab5502023-09-26 18:25:57 -04001112
1113func TestJavaLibrarySharding(t *testing.T) {
1114 runJavaLibraryTestCase(t, Bp2buildTestCase{
1115 Description: "java library with sharded compilation",
1116 Blueprint: `java_library {
1117 name: "lib1",
1118 srcs: ["a.java"],
1119 javac_shard_size: 3,
1120 sdk_version: "current",
1121 }`,
1122 ExpectedBazelTargets: []string{
1123 MakeBazelTarget("java_library", "lib1", AttrNameToString{
1124 "srcs": `["a.java"]`,
1125 "sdk_version": `"current"`,
1126 "javac_shard_size": "3",
1127 }),
1128 MakeNeverlinkDuplicateTarget("java_library", "lib1"),
1129 },
1130 })
1131}