blob: 2e205b16c1184abc90d644f988d425b3b2330ce1 [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",
Chris Parsonscd209032023-09-19 01:12:48 +0000466 java_resource_dirs: ["res", "res1"],
Liz Kammer02914402023-08-07 13:38:18 -0400467 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000468}`,
Alix289e9c62023-08-16 15:06:31 +0000469 ExpectedBazelTargets: []string{
470 MakeBazelTarget("java_resources", "java-lib-1_resource_dir_res1", AttrNameToString{
471 "resource_strip_prefix": `"res1"`,
472 "resources": `["res1/b.res"]`,
473 }),
474 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
475 "additional_resources": `["java-lib-1_resource_dir_res1"]`,
476 "resources": `["res/a.res"]`,
477 "resource_strip_prefix": `"res"`,
Liz Kammer02914402023-08-07 13:38:18 -0400478 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +0000479 }),
480 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
481 },
482 })
483}
484
485func TestJavaLibraryJavaResourcesAndResourceDirs(t *testing.T) {
486 runJavaLibraryTestCase(t, Bp2buildTestCase{
487 Filesystem: map[string]string{
488 "resdir/a.res": "",
489 },
490 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400491 name: "java-lib-1",
492 java_resources: ["res1", "res2"],
493 java_resource_dirs: ["resdir"],
494 sdk_version: "current",
Alix289e9c62023-08-16 15:06:31 +0000495}`,
496 ExpectedBazelTargets: []string{
497 MakeBazelTarget("java_resources", "java-lib-1_resource_dir_resdir", AttrNameToString{
498 "resource_strip_prefix": `"resdir"`,
499 "resources": `["resdir/a.res"]`,
500 }),
501 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
502 "additional_resources": `["java-lib-1_resource_dir_resdir"]`,
503 "resource_strip_prefix": `"."`,
504 "resources": `[
505 "res1",
506 "res2",
507 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400508 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +0000509 }),
510 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
511 },
Sam Delmerico79985812022-03-23 20:20:42 +0000512 })
513}
Sam Delmerico97bd1272022-08-25 14:45:31 -0400514
515func TestJavaLibraryAidl(t *testing.T) {
516 runJavaLibraryTestCase(t, Bp2buildTestCase{
517 Description: "Java library - aidl creates separate dependency",
518 ModuleTypeUnderTest: "java_library",
519 ModuleTypeUnderTestFactory: java.LibraryFactory,
520 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400521 name: "example_lib",
522 srcs: [
523 "a.java",
524 "b.java",
525 "a.aidl",
526 "b.aidl",
527 ],
528 bazel_module: { bp2build_available: true },
529 sdk_version: "current",
Sam Delmerico97bd1272022-08-25 14:45:31 -0400530}`,
531 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000532 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400533 "srcs": `[
534 "a.aidl",
535 "b.aidl",
536 ]`,
537 }),
Alixe06d75b2022-08-31 18:28:19 +0000538 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400539 "deps": `[":example_lib_aidl_library"]`,
540 }),
Alixe06d75b2022-08-31 18:28:19 +0000541 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400542 "deps": `[":example_lib_java_aidl_library"]`,
543 "exports": `[":example_lib_java_aidl_library"]`,
544 "srcs": `[
545 "a.java",
546 "b.java",
547 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400548 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400549 }),
Alix341484b2022-10-31 19:08:18 +0000550 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400551 }})
552}
553
554func TestJavaLibraryAidlSrcsNoFileGroup(t *testing.T) {
555 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
556 Description: "Java library - aidl filegroup is parsed",
557 ModuleTypeUnderTest: "java_library",
558 ModuleTypeUnderTestFactory: java.LibraryFactory,
559 Blueprint: `
560java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400561 name: "example_lib",
562 srcs: [
563 "a.java",
564 "b.aidl",
565 ],
566 sdk_version: "current",
567 bazel_module: { bp2build_available: true },
Sam Delmerico97bd1272022-08-25 14:45:31 -0400568}`,
569 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000570 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400571 "srcs": `["b.aidl"]`,
572 }),
Alixe06d75b2022-08-31 18:28:19 +0000573 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400574 "deps": `[":example_lib_aidl_library"]`,
575 }),
Alixe06d75b2022-08-31 18:28:19 +0000576 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400577 "deps": `[":example_lib_java_aidl_library"]`,
578 "exports": `[":example_lib_java_aidl_library"]`,
579 "srcs": `["a.java"]`,
580 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400581 }),
Alix341484b2022-10-31 19:08:18 +0000582 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400583 },
584 }, func(ctx android.RegistrationContext) {
585 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
586 })
587}
588
589func TestJavaLibraryAidlFilegroup(t *testing.T) {
590 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
591 Description: "Java library - aidl filegroup is parsed",
592 ModuleTypeUnderTest: "java_library",
593 ModuleTypeUnderTestFactory: java.LibraryFactory,
594 Blueprint: `
595filegroup {
596 name: "random_other_files",
597 srcs: [
598 "a.java",
599 "b.java",
600 ],
601}
602filegroup {
603 name: "aidl_files",
604 srcs: [
605 "a.aidl",
606 "b.aidl",
607 ],
608}
Liz Kammer79ff08f2023-09-27 14:43:45 -0400609filegroup {
610 name: "aidls_files",
611 srcs: [
612 "a.aidl",
613 "b.aidl",
614 ],
615}
Sam Delmerico97bd1272022-08-25 14:45:31 -0400616java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400617 name: "example_lib",
618 srcs: [
619 "a.java",
620 "b.java",
621 ":aidl_files",
Liz Kammer79ff08f2023-09-27 14:43:45 -0400622 ":aidls_files",
Liz Kammer02914402023-08-07 13:38:18 -0400623 ":random_other_files",
624 ],
625 sdk_version: "current",
626 bazel_module: { bp2build_available: true },
Sam Delmerico97bd1272022-08-25 14:45:31 -0400627}`,
628 ExpectedBazelTargets: []string{
629 MakeBazelTargetNoRestrictions("aidl_library", "aidl_files", AttrNameToString{
630 "srcs": `[
631 "a.aidl",
632 "b.aidl",
633 ]`,
Liz Kammer2b3f56e2023-03-23 11:51:49 -0400634 "tags": `["apex_available=//apex_available:anyapex"]`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400635 }),
Liz Kammer79ff08f2023-09-27 14:43:45 -0400636 MakeBazelTargetNoRestrictions("aidl_library", "aidls_files", AttrNameToString{
637 "srcs": `[
638 "a.aidl",
639 "b.aidl",
640 ]`,
641 "tags": `["apex_available=//apex_available:anyapex"]`,
642 }),
Alixe06d75b2022-08-31 18:28:19 +0000643 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Liz Kammer79ff08f2023-09-27 14:43:45 -0400644 "deps": `[
645 ":aidl_files",
646 ":aidls_files",
647 ]`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400648 }),
Alixe06d75b2022-08-31 18:28:19 +0000649 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400650 "deps": `[":example_lib_java_aidl_library"]`,
651 "exports": `[":example_lib_java_aidl_library"]`,
652 "srcs": `[
653 "a.java",
654 "b.java",
655 ":random_other_files",
656 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400657 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400658 }),
Alix341484b2022-10-31 19:08:18 +0000659 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400660 MakeBazelTargetNoRestrictions("filegroup", "random_other_files", AttrNameToString{
661 "srcs": `[
662 "a.java",
663 "b.java",
664 ]`,
665 }),
666 },
667 }, func(ctx android.RegistrationContext) {
668 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
669 })
670}
Sam Delmerico7c721372022-08-25 13:51:21 -0400671
672func TestJavaLibraryAidlNonAdjacentAidlFilegroup(t *testing.T) {
673 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
674 Description: "java_library with non adjacent aidl filegroup",
675 ModuleTypeUnderTest: "java_library",
676 ModuleTypeUnderTestFactory: java.LibraryFactory,
Chris Parsonsd0783372023-10-05 15:47:07 +0000677 StubbedBuildDefinitions: []string{"//path/to/A:A_aidl"},
Sam Delmerico7c721372022-08-25 13:51:21 -0400678 Filesystem: map[string]string{
679 "path/to/A/Android.bp": `
680filegroup {
Liz Kammer02914402023-08-07 13:38:18 -0400681 name: "A_aidl",
682 srcs: ["aidl/A.aidl"],
683 path: "aidl",
Sam Delmerico7c721372022-08-25 13:51:21 -0400684}`,
685 },
686 Blueprint: `
687java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400688 name: "foo",
689 srcs: [
690 ":A_aidl",
691 ],
692 sdk_version: "current",
Sam Delmerico7c721372022-08-25 13:51:21 -0400693}`,
694 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000695 MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400696 "deps": `["//path/to/A:A_aidl"]`,
697 }),
Alixe06d75b2022-08-31 18:28:19 +0000698 MakeBazelTarget("java_library", "foo", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400699 "exports": `[":foo_java_aidl_library"]`,
700 "sdk_version": `"current"`,
Sam Delmerico7c721372022-08-25 13:51:21 -0400701 }),
Alix341484b2022-10-31 19:08:18 +0000702 MakeNeverlinkDuplicateTarget("java_library", "foo"),
Sam Delmerico7c721372022-08-25 13:51:21 -0400703 },
704 }, func(ctx android.RegistrationContext) {
705 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
706 })
707}
Cole Faustc843b992022-08-02 18:06:50 -0700708
709func TestConvertArmNeonVariant(t *testing.T) {
710 t.Helper()
711 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
712 Description: "Android Library - simple arch feature",
713 ModuleTypeUnderTest: "android_library",
714 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Chris Parsonscd209032023-09-19 01:12:48 +0000715 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Cole Faustc843b992022-08-02 18:06:50 -0700716android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400717 name: "TestLib",
718 manifest: "manifest/AndroidManifest.xml",
719 srcs: ["lib.java"],
720 sdk_version: "current",
721 arch: {
722 arm: {
723 neon: {
724 srcs: ["arm_neon.java"],
725 },
726 },
727 },
Cole Faustc843b992022-08-02 18:06:50 -0700728}
729`,
730 ExpectedBazelTargets: []string{
731 MakeBazelTarget(
732 "android_library",
733 "TestLib",
734 AttrNameToString{
735 "srcs": `["lib.java"] + select({
736 "//build/bazel/platforms/arch/variants:arm-neon": ["arm_neon.java"],
737 "//conditions:default": [],
738 })`,
739 "manifest": `"manifest/AndroidManifest.xml"`,
740 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400741 "sdk_version": `"current"`, // use as default
Cole Faustc843b992022-08-02 18:06:50 -0700742 }),
Alix82fb94e2022-10-26 20:40:18 +0000743 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700744 }})
745}
746
747func TestConvertMultipleArchFeatures(t *testing.T) {
748 t.Helper()
749 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
750 Description: "Android Library - multiple arch features",
751 ModuleTypeUnderTest: "android_library",
752 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Chris Parsonscd209032023-09-19 01:12:48 +0000753 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Cole Faustc843b992022-08-02 18:06:50 -0700754android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400755 name: "TestLib",
756 manifest: "manifest/AndroidManifest.xml",
757 srcs: ["lib.java"],
758 sdk_version: "current",
759 arch: {
760 x86: {
761 ssse3: {
762 srcs: ["ssse3.java"],
763 },
764 sse4_1: {
765 srcs: ["sse4_1.java"],
766 },
767 },
768 },
Cole Faustc843b992022-08-02 18:06:50 -0700769}
770`,
771 ExpectedBazelTargets: []string{
772 MakeBazelTarget(
773 "android_library",
774 "TestLib",
775 AttrNameToString{
776 "srcs": `["lib.java"] + select({
777 "//build/bazel/platforms/arch/variants:x86-sse4_1": ["sse4_1.java"],
778 "//build/bazel/platforms/arch/variants:x86-sse4_1-ssse3": [
779 "sse4_1.java",
780 "ssse3.java",
781 ],
782 "//build/bazel/platforms/arch/variants:x86-ssse3": ["ssse3.java"],
783 "//conditions:default": [],
784 })`,
785 "manifest": `"manifest/AndroidManifest.xml"`,
786 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400787 "sdk_version": `"current"`,
Cole Faustc843b992022-08-02 18:06:50 -0700788 }),
Alix82fb94e2022-10-26 20:40:18 +0000789 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700790 }})
791}
792
793func TestConvertExcludeSrcsArchFeature(t *testing.T) {
794 t.Helper()
795 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
796 Description: "Android Library - exclude_srcs with arch feature",
797 ModuleTypeUnderTest: "android_library",
798 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Chris Parsonscd209032023-09-19 01:12:48 +0000799 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Cole Faustc843b992022-08-02 18:06:50 -0700800android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400801 name: "TestLib",
802 manifest: "manifest/AndroidManifest.xml",
803 srcs: ["lib.java"],
804 arch: {
805 arm: {
806 srcs: ["arm_non_neon.java"],
807 neon: {
808 exclude_srcs: ["arm_non_neon.java"],
809 },
810 },
811 },
812 sdk_version: "current",
Cole Faustc843b992022-08-02 18:06:50 -0700813}
814`,
815 ExpectedBazelTargets: []string{
816 MakeBazelTarget(
817 "android_library",
818 "TestLib",
819 AttrNameToString{
820 "srcs": `["lib.java"] + select({
821 "//build/bazel/platforms/arch/variants:arm-neon": [],
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000822 "//build/bazel_common_rules/platforms/arch:arm": ["arm_non_neon.java"],
Cole Faustc843b992022-08-02 18:06:50 -0700823 "//conditions:default": [],
824 })`,
825 "manifest": `"manifest/AndroidManifest.xml"`,
826 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400827 "sdk_version": `"current"`, // use as default
Cole Faustc843b992022-08-02 18:06:50 -0700828 }),
Alix82fb94e2022-10-26 20:40:18 +0000829 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700830 }})
831}
Alix8062f4d2022-11-14 21:38:07 +0000832
833func TestJavaLibraryKotlinSrcs(t *testing.T) {
834 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000835 Description: "java_library with kotlin srcs",
Alix8062f4d2022-11-14 21:38:07 +0000836 Blueprint: `java_library {
837 name: "java-lib-1",
838 srcs: ["a.java", "b.java", "c.kt"],
839 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400840 sdk_version: "current",
Alix8062f4d2022-11-14 21:38:07 +0000841}
842`,
843 ExpectedBazelTargets: []string{
844 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
845 "srcs": `[
846 "a.java",
847 "b.java",
848 "c.kt",
849 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400850 "sdk_version": `"current"`,
Alix8062f4d2022-11-14 21:38:07 +0000851 }),
Alix266bbf22022-12-15 06:12:46 +0000852 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000853 },
854 })
855}
856
Alixf848bf82023-03-06 19:43:55 +0000857func TestJavaLibraryKotlincflags(t *testing.T) {
858 runJavaLibraryTestCase(t, Bp2buildTestCase{
859 Description: "java_library with kotlincfalgs",
860 Blueprint: `java_library {
861 name: "java-lib-1",
862 srcs: [ "a.kt"],
863 kotlincflags: ["-flag1", "-flag2"],
864 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400865 sdk_version: "current",
Alixf848bf82023-03-06 19:43:55 +0000866}
867`,
868 ExpectedBazelTargets: []string{
869 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
870 "srcs": `["a.kt"]`,
871 "kotlincflags": `[
872 "-flag1",
873 "-flag2",
874 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400875 "sdk_version": `"current"`,
Alixf848bf82023-03-06 19:43:55 +0000876 }),
877 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
878 },
879 })
880}
881
Alix8062f4d2022-11-14 21:38:07 +0000882func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
883 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000884 Description: "java_library with kotlin common_srcs",
Alix8062f4d2022-11-14 21:38:07 +0000885 Blueprint: `java_library {
886 name: "java-lib-1",
887 srcs: ["a.java", "b.java"],
888 common_srcs: ["c.kt"],
889 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400890 sdk_version: "current",
Alix8062f4d2022-11-14 21:38:07 +0000891}
892`,
893 ExpectedBazelTargets: []string{
894 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
895 "srcs": `[
896 "a.java",
897 "b.java",
898 ]`,
899 "common_srcs": `["c.kt"]`,
Liz Kammer02914402023-08-07 13:38:18 -0400900 "sdk_version": `"current"`,
Alix8062f4d2022-11-14 21:38:07 +0000901 }),
Alix266bbf22022-12-15 06:12:46 +0000902 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000903 },
904 })
905}
Alix495cc8a2023-01-12 18:20:32 +0000906
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400907func TestJavaLibraryArchVariantDeps(t *testing.T) {
Alix495cc8a2023-01-12 18:20:32 +0000908 runJavaLibraryTestCase(t, Bp2buildTestCase{
Chris Parsonscd209032023-09-19 01:12:48 +0000909 Description: "java_library with arch variant libs",
910 StubbedBuildDefinitions: []string{"java-lib-2", "java-lib-3", "java-lib-4"},
Alix495cc8a2023-01-12 18:20:32 +0000911 Blueprint: `java_library {
912 name: "java-lib-1",
913 srcs: ["a.java"],
914 libs: ["java-lib-2"],
Liz Kammer02914402023-08-07 13:38:18 -0400915 sdk_version: "current",
Alix495cc8a2023-01-12 18:20:32 +0000916 target: {
917 android: {
918 libs: ["java-lib-3"],
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400919 static_libs: ["java-lib-4"],
Alix495cc8a2023-01-12 18:20:32 +0000920 },
921 },
922 bazel_module: { bp2build_available: true },
923}
924
Liz Kammer02914402023-08-07 13:38:18 -0400925 java_library{
926 name: "java-lib-2",
Alix495cc8a2023-01-12 18:20:32 +0000927}
928
Liz Kammer02914402023-08-07 13:38:18 -0400929 java_library{
930 name: "java-lib-3",
Alix495cc8a2023-01-12 18:20:32 +0000931}
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400932
Liz Kammer02914402023-08-07 13:38:18 -0400933 java_library{
934 name: "java-lib-4",
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400935}
Alix495cc8a2023-01-12 18:20:32 +0000936`,
937 ExpectedBazelTargets: []string{
938 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
939 "srcs": `["a.java"]`,
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400940 "exports": `select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000941 "//build/bazel_common_rules/platforms/os:android": [":java-lib-4"],
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400942 "//conditions:default": [],
943 })`,
Alix495cc8a2023-01-12 18:20:32 +0000944 "deps": `[":java-lib-2-neverlink"] + select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000945 "//build/bazel_common_rules/platforms/os:android": [
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400946 ":java-lib-3-neverlink",
947 ":java-lib-4",
948 ],
Alix495cc8a2023-01-12 18:20:32 +0000949 "//conditions:default": [],
950 })`,
Liz Kammer02914402023-08-07 13:38:18 -0400951 "sdk_version": `"current"`,
Alix495cc8a2023-01-12 18:20:32 +0000952 }),
953 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Alix495cc8a2023-01-12 18:20:32 +0000954 },
955 })
956}
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500957
958func TestJavaLibraryArchVariantSrcsWithExcludes(t *testing.T) {
959 runJavaLibraryTestCase(t, Bp2buildTestCase{
960 Description: "java_library with arch variant libs",
961 Blueprint: `java_library {
962 name: "java-lib-1",
963 srcs: ["a.java", "b.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400964 sdk_version: "current",
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500965 target: {
966 android: {
967 exclude_srcs: ["a.java"],
968 },
969 },
970 bazel_module: { bp2build_available: true },
971}
972`,
973 ExpectedBazelTargets: []string{
974 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
975 "srcs": `["b.java"] + select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000976 "//build/bazel_common_rules/platforms/os:android": [],
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500977 "//conditions:default": ["a.java"],
978 })`,
Liz Kammer02914402023-08-07 13:38:18 -0400979 "sdk_version": `"current"`,
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500980 }),
981 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
982 },
983 })
984}
Alixb29a3cd2023-05-09 20:37:49 +0000985
986func TestJavaLibraryJavaResourcesSingleFilegroup(t *testing.T) {
987 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
988 Filesystem: map[string]string{
989 "res/a.res": "",
990 "res/b.res": "",
991 "res/dir1/b.res": "",
992 },
993 Description: "java_library",
994 Blueprint: `java_library {
995 name: "java-lib-1",
996 srcs: ["a.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400997 sdk_version: "current",
Alixb29a3cd2023-05-09 20:37:49 +0000998 java_resources: [":filegroup1"],
999 bazel_module: { bp2build_available: true },
1000}
1001
1002filegroup {
1003 name: "filegroup1",
1004 path: "foo",
1005 srcs: ["foo/a", "foo/b"],
1006}
1007
1008`,
1009 ExpectedBazelTargets: []string{
1010 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
1011 "srcs": `["a.java"]`,
1012 "resources": `[":filegroup1"]`,
1013 "resource_strip_prefix": `"foo"`,
Liz Kammer02914402023-08-07 13:38:18 -04001014 "sdk_version": `"current"`,
Alixb29a3cd2023-05-09 20:37:49 +00001015 }),
1016 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
1017 MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
1018 "srcs": `[
1019 "foo/a",
1020 "foo/b",
1021 ]`}),
1022 },
1023 }, func(ctx android.RegistrationContext) {
1024 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
1025 })
1026}
Alix289e9c62023-08-16 15:06:31 +00001027
1028func TestJavaLibraryJavaResourcesMultipleFilegroup(t *testing.T) {
1029 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
1030 Filesystem: map[string]string{
1031 "a.res": "",
1032 },
1033 Description: "with java_resources that has multiple filegroups",
1034 Blueprint: `java_library {
1035 name: "java-lib-1",
1036 srcs: ["a.java"],
1037 java_resources: ["a.res", ":filegroup1", ":filegroup2"],
Liz Kammer02914402023-08-07 13:38:18 -04001038 sdk_version: "current",
Alix289e9c62023-08-16 15:06:31 +00001039 bazel_module: { bp2build_available: true },
1040}
1041
1042filegroup {
1043 name: "filegroup1",
1044 path: "foo",
1045 srcs: ["foo/a"],
1046}
1047
1048filegroup {
1049 name: "filegroup2",
1050 path: "bar",
1051 srcs: ["bar/a"],
1052}
1053`,
1054 ExpectedBazelTargets: []string{
1055 MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup1", AttrNameToString{
1056 "resource_strip_prefix": `"foo"`,
1057 "resources": `[":filegroup1"]`,
1058 }),
1059 MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup2", AttrNameToString{
1060 "resource_strip_prefix": `"bar"`,
1061 "resources": `[":filegroup2"]`,
1062 }),
1063 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
1064 "srcs": `["a.java"]`,
1065 "resources": `["a.res"]`,
1066 "resource_strip_prefix": `"."`,
1067 "additional_resources": `[
1068 "java-lib-1_filegroup_resources_filegroup1",
1069 "java-lib-1_filegroup_resources_filegroup2",
1070 ]`,
Liz Kammer02914402023-08-07 13:38:18 -04001071 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +00001072 }),
1073 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
1074 MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
1075 "srcs": `["foo/a"]`}),
1076 MakeBazelTargetNoRestrictions("filegroup", "filegroup2", AttrNameToString{
1077 "srcs": `["bar/a"]`}),
1078 },
1079 }, func(ctx android.RegistrationContext) {
1080 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
1081 })
1082}
Zi Wang734266b2023-10-06 11:25:06 -07001083
1084func TestJavaLibrarySameNameAsPrebuilt(t *testing.T) {
1085 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
1086 Description: "java_library and prebuilt module have the same name",
1087 Filesystem: map[string]string{
1088 "foo/bar/Android.bp": simpleModule("java_import", "test_lib"),
1089 },
1090 Blueprint: `java_library {
1091 name: "test_lib",
1092 srcs: ["a.java"],
1093 sdk_version: "current",
1094 bazel_module: { bp2build_available: true },
1095}
1096`,
1097 ExpectedBazelTargets: []string{
1098 MakeBazelTarget("java_library", "test_lib", AttrNameToString{
1099 "srcs": `["a.java"]`,
1100 "sdk_version": `"current"`,
1101 }),
1102 MakeNeverlinkDuplicateTarget("java_library", "test_lib"),
1103 },
1104 }, func(ctx android.RegistrationContext) {
1105 ctx.RegisterModuleType("java_import", java.ImportFactory)
1106 })
1107}