blob: 7e4e44ec8ff7c7df16f94db343e20657382be0f7 [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
Alixb1e5c6a2023-06-20 21:00:40 +0000195func TestJavaLibraryErrorproneEnabledManually(t *testing.T) {
196 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
Chris Parsonscd209032023-09-19 01:12:48 +0000197 StubbedBuildDefinitions: []string{"plugin2"},
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000198 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000199 name: "java-lib-1",
200 srcs: ["a.java"],
201 javacflags: ["-Xsuper-fast"],
Liz Kammer02914402023-08-07 13:38:18 -0400202 sdk_version: "current",
Sam Delmerico58614c02022-03-15 21:02:09 +0000203 errorprone: {
204 enabled: true,
205 javacflags: ["-Xep:SpeedLimit:OFF"],
Alixb1e5c6a2023-06-20 21:00:40 +0000206 extra_check_modules: ["plugin2"],
Sam Delmerico58614c02022-03-15 21:02:09 +0000207 },
Alixb1e5c6a2023-06-20 21:00:40 +0000208}
209java_plugin {
210 name: "plugin2",
211 srcs: ["a.java"],
Sam Delmerico58614c02022-03-15 21:02:09 +0000212}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000213 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000214 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico58614c02022-03-15 21:02:09 +0000215 "javacopts": `[
216 "-Xsuper-fast",
217 "-Xep:SpeedLimit:OFF",
218 ]`,
Alixb1e5c6a2023-06-20 21:00:40 +0000219 "plugins": `[":plugin2"]`,
220 "srcs": `["a.java"]`,
221 "errorprone_force_enable": `True`,
Liz Kammer02914402023-08-07 13:38:18 -0400222 "sdk_version": `"current"`,
Sam Delmerico58614c02022-03-15 21:02:09 +0000223 }),
Alix341484b2022-10-31 19:08:18 +0000224 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000225 },
Alixb1e5c6a2023-06-20 21:00:40 +0000226 }, func(ctx android.RegistrationContext) {
227 ctx.RegisterModuleType("java_plugin", java.PluginFactory)
Sam Delmerico58614c02022-03-15 21:02:09 +0000228 })
229}
230
231func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000232 runJavaLibraryTestCase(t, Bp2buildTestCase{
233 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000234 name: "java-lib-1",
235 srcs: ["a.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400236 sdk_version: "current",
Sam Delmerico58614c02022-03-15 21:02:09 +0000237 javacflags: ["-Xsuper-fast"],
238 errorprone: {
239 javacflags: ["-Xep:SpeedLimit:OFF"],
240 },
241}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000242 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000243 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400244 "javacopts": `["-Xsuper-fast"]`,
245 "srcs": `["a.java"]`,
246 "sdk_version": `"current"`,
Sam Delmerico58614c02022-03-15 21:02:09 +0000247 }),
Alix341484b2022-10-31 19:08:18 +0000248 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000249 },
250 })
251}
252
Alixb1e5c6a2023-06-20 21:00:40 +0000253func TestJavaLibraryErrorproneDisabledManually(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000254 runJavaLibraryTestCase(t, Bp2buildTestCase{
255 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000256 name: "java-lib-1",
257 srcs: ["a.java"],
258 javacflags: ["-Xsuper-fast"],
Liz Kammer02914402023-08-07 13:38:18 -0400259 sdk_version: "current",
Sam Delmerico58614c02022-03-15 21:02:09 +0000260 errorprone: {
Alixb1e5c6a2023-06-20 21:00:40 +0000261 enabled: false,
Sam Delmerico58614c02022-03-15 21:02:09 +0000262 },
263}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000264 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000265 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Alixb1e5c6a2023-06-20 21:00:40 +0000266 "javacopts": `[
267 "-Xsuper-fast",
268 "-XepDisableAllChecks",
269 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400270 "srcs": `["a.java"]`,
271 "sdk_version": `"current"`,
Sam Delmerico58614c02022-03-15 21:02:09 +0000272 }),
Alix341484b2022-10-31 19:08:18 +0000273 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000274 },
275 })
276}
Sam Delmerico24da73c2022-03-16 20:36:54 +0000277
278func TestJavaLibraryLogTags(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000279 runJavaLibraryTestCase(t, Bp2buildTestCase{
280 Description: "Java library - logtags creates separate dependency",
281 ModuleTypeUnderTest: "java_library",
282 ModuleTypeUnderTestFactory: java.LibraryFactory,
283 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400284 name: "example_lib",
285 srcs: [
286 "a.java",
287 "b.java",
288 "a.logtag",
289 "b.logtag",
290 ],
291 sdk_version: "current",
292 bazel_module: { bp2build_available: true },
Sam Delmerico24da73c2022-03-16 20:36:54 +0000293}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000294 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000295 MakeBazelTarget("event_log_tags", "example_lib_logtags", AttrNameToString{
Sam Delmerico24da73c2022-03-16 20:36:54 +0000296 "srcs": `[
297 "a.logtag",
298 "b.logtag",
299 ]`,
300 }),
Alixe06d75b2022-08-31 18:28:19 +0000301 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico24da73c2022-03-16 20:36:54 +0000302 "srcs": `[
303 "a.java",
304 "b.java",
305 ":example_lib_logtags",
306 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400307 "sdk_version": `"current"`,
Sam Delmerico24da73c2022-03-16 20:36:54 +0000308 }),
Alix341484b2022-10-31 19:08:18 +0000309 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico24da73c2022-03-16 20:36:54 +0000310 }})
311}
Sam Delmerico79985812022-03-23 20:20:42 +0000312
313func TestJavaLibraryResources(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000314 runJavaLibraryTestCase(t, Bp2buildTestCase{
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400315 Dir: "adir",
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000316 Filesystem: map[string]string{
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400317 "adir/res/a.res": "",
318 "adir/res/b.res": "",
319 "adir/res/dir1/b.res": "",
320 "adir/Android.bp": `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400321 name: "java-lib-1",
322 java_resources: ["res/a.res", "res/b.res"],
323 sdk_version: "current",
324 bazel_module: { bp2build_available: true },
Sam Delmerico79985812022-03-23 20:20:42 +0000325}`,
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400326 },
327 Blueprint: "",
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000328 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000329 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000330 "resources": `[
331 "res/a.res",
332 "res/b.res",
333 ]`,
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400334 "resource_strip_prefix": `"adir"`,
Liz Kammer02914402023-08-07 13:38:18 -0400335 "sdk_version": `"current"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000336 }),
Alix341484b2022-10-31 19:08:18 +0000337 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000338 },
339 })
340}
341
342func TestJavaLibraryResourceDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000343 runJavaLibraryTestCase(t, Bp2buildTestCase{
344 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000345 "res/a.res": "",
346 "res/b.res": "",
347 "res/dir1/b.res": "",
348 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000349 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400350 name: "java-lib-1",
Sam Delmerico79985812022-03-23 20:20:42 +0000351 java_resource_dirs: ["res"],
Liz Kammer02914402023-08-07 13:38:18 -0400352 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000353}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000354 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000355 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000356 "resource_strip_prefix": `"res"`,
357 "resources": `[
358 "res/a.res",
359 "res/b.res",
360 "res/dir1/b.res",
361 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400362 "sdk_version": `"current"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000363 }),
Alix341484b2022-10-31 19:08:18 +0000364 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000365 },
366 })
367}
368
369func TestJavaLibraryResourcesExcludeDir(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000370 runJavaLibraryTestCase(t, Bp2buildTestCase{
371 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000372 "res/a.res": "",
373 "res/exclude/b.res": "",
374 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000375 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400376 name: "java-lib-1",
Sam Delmerico79985812022-03-23 20:20:42 +0000377 java_resource_dirs: ["res"],
Liz Kammer02914402023-08-07 13:38:18 -0400378 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000379 exclude_java_resource_dirs: ["res/exclude"],
380}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000381 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000382 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000383 "resource_strip_prefix": `"res"`,
384 "resources": `["res/a.res"]`,
Liz Kammer02914402023-08-07 13:38:18 -0400385 "sdk_version": `"current"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000386 }),
Alix341484b2022-10-31 19:08:18 +0000387 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000388 },
389 })
390}
391
392func TestJavaLibraryResourcesExcludeFile(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000393 runJavaLibraryTestCase(t, Bp2buildTestCase{
394 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000395 "res/a.res": "",
396 "res/dir1/b.res": "",
397 "res/dir1/exclude.res": "",
398 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000399 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400400 name: "java-lib-1",
Sam Delmerico79985812022-03-23 20:20:42 +0000401 java_resource_dirs: ["res"],
Liz Kammer02914402023-08-07 13:38:18 -0400402 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000403 exclude_java_resources: ["res/dir1/exclude.res"],
404}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000405 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000406 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000407 "resource_strip_prefix": `"res"`,
408 "resources": `[
409 "res/a.res",
410 "res/dir1/b.res",
411 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400412 "sdk_version": `"current"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000413 }),
Alix341484b2022-10-31 19:08:18 +0000414 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000415 },
416 })
417}
418
Alix289e9c62023-08-16 15:06:31 +0000419func TestJavaLibraryResourcesWithMultipleDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000420 runJavaLibraryTestCase(t, Bp2buildTestCase{
421 Filesystem: map[string]string{
Chris Parsonscd209032023-09-19 01:12:48 +0000422 "res/a.res": "",
423 "res1/b.res": "",
Sam Delmerico79985812022-03-23 20:20:42 +0000424 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000425 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400426 name: "java-lib-1",
Chris Parsonscd209032023-09-19 01:12:48 +0000427 java_resource_dirs: ["res", "res1"],
Liz Kammer02914402023-08-07 13:38:18 -0400428 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000429}`,
Alix289e9c62023-08-16 15:06:31 +0000430 ExpectedBazelTargets: []string{
431 MakeBazelTarget("java_resources", "java-lib-1_resource_dir_res1", AttrNameToString{
432 "resource_strip_prefix": `"res1"`,
433 "resources": `["res1/b.res"]`,
434 }),
435 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
436 "additional_resources": `["java-lib-1_resource_dir_res1"]`,
437 "resources": `["res/a.res"]`,
438 "resource_strip_prefix": `"res"`,
Liz Kammer02914402023-08-07 13:38:18 -0400439 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +0000440 }),
441 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
442 },
443 })
444}
445
446func TestJavaLibraryJavaResourcesAndResourceDirs(t *testing.T) {
447 runJavaLibraryTestCase(t, Bp2buildTestCase{
448 Filesystem: map[string]string{
449 "resdir/a.res": "",
450 },
451 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400452 name: "java-lib-1",
453 java_resources: ["res1", "res2"],
454 java_resource_dirs: ["resdir"],
455 sdk_version: "current",
Alix289e9c62023-08-16 15:06:31 +0000456}`,
457 ExpectedBazelTargets: []string{
458 MakeBazelTarget("java_resources", "java-lib-1_resource_dir_resdir", AttrNameToString{
459 "resource_strip_prefix": `"resdir"`,
460 "resources": `["resdir/a.res"]`,
461 }),
462 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
463 "additional_resources": `["java-lib-1_resource_dir_resdir"]`,
464 "resource_strip_prefix": `"."`,
465 "resources": `[
466 "res1",
467 "res2",
468 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400469 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +0000470 }),
471 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
472 },
Sam Delmerico79985812022-03-23 20:20:42 +0000473 })
474}
Sam Delmerico97bd1272022-08-25 14:45:31 -0400475
476func TestJavaLibraryAidl(t *testing.T) {
477 runJavaLibraryTestCase(t, Bp2buildTestCase{
478 Description: "Java library - aidl creates separate dependency",
479 ModuleTypeUnderTest: "java_library",
480 ModuleTypeUnderTestFactory: java.LibraryFactory,
481 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400482 name: "example_lib",
483 srcs: [
484 "a.java",
485 "b.java",
486 "a.aidl",
487 "b.aidl",
488 ],
489 bazel_module: { bp2build_available: true },
490 sdk_version: "current",
Sam Delmerico97bd1272022-08-25 14:45:31 -0400491}`,
492 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000493 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400494 "srcs": `[
495 "a.aidl",
496 "b.aidl",
497 ]`,
498 }),
Alixe06d75b2022-08-31 18:28:19 +0000499 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400500 "deps": `[":example_lib_aidl_library"]`,
501 }),
Alixe06d75b2022-08-31 18:28:19 +0000502 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400503 "deps": `[":example_lib_java_aidl_library"]`,
504 "exports": `[":example_lib_java_aidl_library"]`,
505 "srcs": `[
506 "a.java",
507 "b.java",
508 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400509 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400510 }),
Alix341484b2022-10-31 19:08:18 +0000511 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400512 }})
513}
514
515func TestJavaLibraryAidlSrcsNoFileGroup(t *testing.T) {
516 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
517 Description: "Java library - aidl filegroup is parsed",
518 ModuleTypeUnderTest: "java_library",
519 ModuleTypeUnderTestFactory: java.LibraryFactory,
520 Blueprint: `
521java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400522 name: "example_lib",
523 srcs: [
524 "a.java",
525 "b.aidl",
526 ],
527 sdk_version: "current",
528 bazel_module: { bp2build_available: true },
Sam Delmerico97bd1272022-08-25 14:45:31 -0400529}`,
530 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000531 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400532 "srcs": `["b.aidl"]`,
533 }),
Alixe06d75b2022-08-31 18:28:19 +0000534 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400535 "deps": `[":example_lib_aidl_library"]`,
536 }),
Alixe06d75b2022-08-31 18:28:19 +0000537 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400538 "deps": `[":example_lib_java_aidl_library"]`,
539 "exports": `[":example_lib_java_aidl_library"]`,
540 "srcs": `["a.java"]`,
541 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400542 }),
Alix341484b2022-10-31 19:08:18 +0000543 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400544 },
545 }, func(ctx android.RegistrationContext) {
546 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
547 })
548}
549
550func TestJavaLibraryAidlFilegroup(t *testing.T) {
551 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
552 Description: "Java library - aidl filegroup is parsed",
553 ModuleTypeUnderTest: "java_library",
554 ModuleTypeUnderTestFactory: java.LibraryFactory,
555 Blueprint: `
556filegroup {
557 name: "random_other_files",
558 srcs: [
559 "a.java",
560 "b.java",
561 ],
562}
563filegroup {
564 name: "aidl_files",
565 srcs: [
566 "a.aidl",
567 "b.aidl",
568 ],
569}
570java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400571 name: "example_lib",
572 srcs: [
573 "a.java",
574 "b.java",
575 ":aidl_files",
576 ":random_other_files",
577 ],
578 sdk_version: "current",
579 bazel_module: { bp2build_available: true },
Sam Delmerico97bd1272022-08-25 14:45:31 -0400580}`,
581 ExpectedBazelTargets: []string{
582 MakeBazelTargetNoRestrictions("aidl_library", "aidl_files", AttrNameToString{
583 "srcs": `[
584 "a.aidl",
585 "b.aidl",
586 ]`,
Liz Kammer2b3f56e2023-03-23 11:51:49 -0400587 "tags": `["apex_available=//apex_available:anyapex"]`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400588 }),
Alixe06d75b2022-08-31 18:28:19 +0000589 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400590 "deps": `[":aidl_files"]`,
591 }),
Alixe06d75b2022-08-31 18:28:19 +0000592 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400593 "deps": `[":example_lib_java_aidl_library"]`,
594 "exports": `[":example_lib_java_aidl_library"]`,
595 "srcs": `[
596 "a.java",
597 "b.java",
598 ":random_other_files",
599 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400600 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400601 }),
Alix341484b2022-10-31 19:08:18 +0000602 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400603 MakeBazelTargetNoRestrictions("filegroup", "random_other_files", AttrNameToString{
604 "srcs": `[
605 "a.java",
606 "b.java",
607 ]`,
608 }),
609 },
610 }, func(ctx android.RegistrationContext) {
611 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
612 })
613}
Sam Delmerico7c721372022-08-25 13:51:21 -0400614
615func TestJavaLibraryAidlNonAdjacentAidlFilegroup(t *testing.T) {
616 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
617 Description: "java_library with non adjacent aidl filegroup",
618 ModuleTypeUnderTest: "java_library",
619 ModuleTypeUnderTestFactory: java.LibraryFactory,
Chris Parsonscd209032023-09-19 01:12:48 +0000620 StubbedBuildDefinitions: []string{"A_aidl"},
Sam Delmerico7c721372022-08-25 13:51:21 -0400621 Filesystem: map[string]string{
622 "path/to/A/Android.bp": `
623filegroup {
Liz Kammer02914402023-08-07 13:38:18 -0400624 name: "A_aidl",
625 srcs: ["aidl/A.aidl"],
626 path: "aidl",
Sam Delmerico7c721372022-08-25 13:51:21 -0400627}`,
628 },
629 Blueprint: `
630java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400631 name: "foo",
632 srcs: [
633 ":A_aidl",
634 ],
635 sdk_version: "current",
Sam Delmerico7c721372022-08-25 13:51:21 -0400636}`,
637 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000638 MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400639 "deps": `["//path/to/A:A_aidl"]`,
640 }),
Alixe06d75b2022-08-31 18:28:19 +0000641 MakeBazelTarget("java_library", "foo", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400642 "exports": `[":foo_java_aidl_library"]`,
643 "sdk_version": `"current"`,
Sam Delmerico7c721372022-08-25 13:51:21 -0400644 }),
Alix341484b2022-10-31 19:08:18 +0000645 MakeNeverlinkDuplicateTarget("java_library", "foo"),
Sam Delmerico7c721372022-08-25 13:51:21 -0400646 },
647 }, func(ctx android.RegistrationContext) {
648 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
649 })
650}
Cole Faustc843b992022-08-02 18:06:50 -0700651
652func TestConvertArmNeonVariant(t *testing.T) {
653 t.Helper()
654 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
655 Description: "Android Library - simple arch feature",
656 ModuleTypeUnderTest: "android_library",
657 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Chris Parsonscd209032023-09-19 01:12:48 +0000658 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Cole Faustc843b992022-08-02 18:06:50 -0700659android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400660 name: "TestLib",
661 manifest: "manifest/AndroidManifest.xml",
662 srcs: ["lib.java"],
663 sdk_version: "current",
664 arch: {
665 arm: {
666 neon: {
667 srcs: ["arm_neon.java"],
668 },
669 },
670 },
Cole Faustc843b992022-08-02 18:06:50 -0700671}
672`,
673 ExpectedBazelTargets: []string{
674 MakeBazelTarget(
675 "android_library",
676 "TestLib",
677 AttrNameToString{
678 "srcs": `["lib.java"] + select({
679 "//build/bazel/platforms/arch/variants:arm-neon": ["arm_neon.java"],
680 "//conditions:default": [],
681 })`,
682 "manifest": `"manifest/AndroidManifest.xml"`,
683 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400684 "sdk_version": `"current"`, // use as default
Cole Faustc843b992022-08-02 18:06:50 -0700685 }),
Alix82fb94e2022-10-26 20:40:18 +0000686 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700687 }})
688}
689
690func TestConvertMultipleArchFeatures(t *testing.T) {
691 t.Helper()
692 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
693 Description: "Android Library - multiple arch features",
694 ModuleTypeUnderTest: "android_library",
695 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Chris Parsonscd209032023-09-19 01:12:48 +0000696 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Cole Faustc843b992022-08-02 18:06:50 -0700697android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400698 name: "TestLib",
699 manifest: "manifest/AndroidManifest.xml",
700 srcs: ["lib.java"],
701 sdk_version: "current",
702 arch: {
703 x86: {
704 ssse3: {
705 srcs: ["ssse3.java"],
706 },
707 sse4_1: {
708 srcs: ["sse4_1.java"],
709 },
710 },
711 },
Cole Faustc843b992022-08-02 18:06:50 -0700712}
713`,
714 ExpectedBazelTargets: []string{
715 MakeBazelTarget(
716 "android_library",
717 "TestLib",
718 AttrNameToString{
719 "srcs": `["lib.java"] + select({
720 "//build/bazel/platforms/arch/variants:x86-sse4_1": ["sse4_1.java"],
721 "//build/bazel/platforms/arch/variants:x86-sse4_1-ssse3": [
722 "sse4_1.java",
723 "ssse3.java",
724 ],
725 "//build/bazel/platforms/arch/variants:x86-ssse3": ["ssse3.java"],
726 "//conditions:default": [],
727 })`,
728 "manifest": `"manifest/AndroidManifest.xml"`,
729 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400730 "sdk_version": `"current"`,
Cole Faustc843b992022-08-02 18:06:50 -0700731 }),
Alix82fb94e2022-10-26 20:40:18 +0000732 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700733 }})
734}
735
736func TestConvertExcludeSrcsArchFeature(t *testing.T) {
737 t.Helper()
738 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
739 Description: "Android Library - exclude_srcs with arch feature",
740 ModuleTypeUnderTest: "android_library",
741 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Chris Parsonscd209032023-09-19 01:12:48 +0000742 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Cole Faustc843b992022-08-02 18:06:50 -0700743android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400744 name: "TestLib",
745 manifest: "manifest/AndroidManifest.xml",
746 srcs: ["lib.java"],
747 arch: {
748 arm: {
749 srcs: ["arm_non_neon.java"],
750 neon: {
751 exclude_srcs: ["arm_non_neon.java"],
752 },
753 },
754 },
755 sdk_version: "current",
Cole Faustc843b992022-08-02 18:06:50 -0700756}
757`,
758 ExpectedBazelTargets: []string{
759 MakeBazelTarget(
760 "android_library",
761 "TestLib",
762 AttrNameToString{
763 "srcs": `["lib.java"] + select({
764 "//build/bazel/platforms/arch/variants:arm-neon": [],
765 "//build/bazel/platforms/arch:arm": ["arm_non_neon.java"],
766 "//conditions:default": [],
767 })`,
768 "manifest": `"manifest/AndroidManifest.xml"`,
769 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400770 "sdk_version": `"current"`, // use as default
Cole Faustc843b992022-08-02 18:06:50 -0700771 }),
Alix82fb94e2022-10-26 20:40:18 +0000772 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700773 }})
774}
Alix8062f4d2022-11-14 21:38:07 +0000775
776func TestJavaLibraryKotlinSrcs(t *testing.T) {
777 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000778 Description: "java_library with kotlin srcs",
Alix8062f4d2022-11-14 21:38:07 +0000779 Blueprint: `java_library {
780 name: "java-lib-1",
781 srcs: ["a.java", "b.java", "c.kt"],
782 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400783 sdk_version: "current",
Alix8062f4d2022-11-14 21:38:07 +0000784}
785`,
786 ExpectedBazelTargets: []string{
787 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
788 "srcs": `[
789 "a.java",
790 "b.java",
791 "c.kt",
792 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400793 "sdk_version": `"current"`,
Alix8062f4d2022-11-14 21:38:07 +0000794 }),
Alix266bbf22022-12-15 06:12:46 +0000795 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000796 },
797 })
798}
799
Alixf848bf82023-03-06 19:43:55 +0000800func TestJavaLibraryKotlincflags(t *testing.T) {
801 runJavaLibraryTestCase(t, Bp2buildTestCase{
802 Description: "java_library with kotlincfalgs",
803 Blueprint: `java_library {
804 name: "java-lib-1",
805 srcs: [ "a.kt"],
806 kotlincflags: ["-flag1", "-flag2"],
807 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400808 sdk_version: "current",
Alixf848bf82023-03-06 19:43:55 +0000809}
810`,
811 ExpectedBazelTargets: []string{
812 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
813 "srcs": `["a.kt"]`,
814 "kotlincflags": `[
815 "-flag1",
816 "-flag2",
817 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400818 "sdk_version": `"current"`,
Alixf848bf82023-03-06 19:43:55 +0000819 }),
820 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
821 },
822 })
823}
824
Alix8062f4d2022-11-14 21:38:07 +0000825func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
826 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000827 Description: "java_library with kotlin common_srcs",
Alix8062f4d2022-11-14 21:38:07 +0000828 Blueprint: `java_library {
829 name: "java-lib-1",
830 srcs: ["a.java", "b.java"],
831 common_srcs: ["c.kt"],
832 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400833 sdk_version: "current",
Alix8062f4d2022-11-14 21:38:07 +0000834}
835`,
836 ExpectedBazelTargets: []string{
837 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
838 "srcs": `[
839 "a.java",
840 "b.java",
841 ]`,
842 "common_srcs": `["c.kt"]`,
Liz Kammer02914402023-08-07 13:38:18 -0400843 "sdk_version": `"current"`,
Alix8062f4d2022-11-14 21:38:07 +0000844 }),
Alix266bbf22022-12-15 06:12:46 +0000845 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000846 },
847 })
848}
Alix495cc8a2023-01-12 18:20:32 +0000849
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400850func TestJavaLibraryArchVariantDeps(t *testing.T) {
Alix495cc8a2023-01-12 18:20:32 +0000851 runJavaLibraryTestCase(t, Bp2buildTestCase{
Chris Parsonscd209032023-09-19 01:12:48 +0000852 Description: "java_library with arch variant libs",
853 StubbedBuildDefinitions: []string{"java-lib-2", "java-lib-3", "java-lib-4"},
Alix495cc8a2023-01-12 18:20:32 +0000854 Blueprint: `java_library {
855 name: "java-lib-1",
856 srcs: ["a.java"],
857 libs: ["java-lib-2"],
Liz Kammer02914402023-08-07 13:38:18 -0400858 sdk_version: "current",
Alix495cc8a2023-01-12 18:20:32 +0000859 target: {
860 android: {
861 libs: ["java-lib-3"],
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400862 static_libs: ["java-lib-4"],
Alix495cc8a2023-01-12 18:20:32 +0000863 },
864 },
865 bazel_module: { bp2build_available: true },
866}
867
Liz Kammer02914402023-08-07 13:38:18 -0400868 java_library{
869 name: "java-lib-2",
Alix495cc8a2023-01-12 18:20:32 +0000870}
871
Liz Kammer02914402023-08-07 13:38:18 -0400872 java_library{
873 name: "java-lib-3",
Alix495cc8a2023-01-12 18:20:32 +0000874}
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400875
Liz Kammer02914402023-08-07 13:38:18 -0400876 java_library{
877 name: "java-lib-4",
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400878}
Alix495cc8a2023-01-12 18:20:32 +0000879`,
880 ExpectedBazelTargets: []string{
881 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
882 "srcs": `["a.java"]`,
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400883 "exports": `select({
884 "//build/bazel/platforms/os:android": [":java-lib-4"],
885 "//conditions:default": [],
886 })`,
Alix495cc8a2023-01-12 18:20:32 +0000887 "deps": `[":java-lib-2-neverlink"] + select({
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400888 "//build/bazel/platforms/os:android": [
889 ":java-lib-3-neverlink",
890 ":java-lib-4",
891 ],
Alix495cc8a2023-01-12 18:20:32 +0000892 "//conditions:default": [],
893 })`,
Liz Kammer02914402023-08-07 13:38:18 -0400894 "sdk_version": `"current"`,
Alix495cc8a2023-01-12 18:20:32 +0000895 }),
896 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Alix495cc8a2023-01-12 18:20:32 +0000897 },
898 })
899}
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500900
901func TestJavaLibraryArchVariantSrcsWithExcludes(t *testing.T) {
902 runJavaLibraryTestCase(t, Bp2buildTestCase{
903 Description: "java_library with arch variant libs",
904 Blueprint: `java_library {
905 name: "java-lib-1",
906 srcs: ["a.java", "b.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400907 sdk_version: "current",
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500908 target: {
909 android: {
910 exclude_srcs: ["a.java"],
911 },
912 },
913 bazel_module: { bp2build_available: true },
914}
915`,
916 ExpectedBazelTargets: []string{
917 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
918 "srcs": `["b.java"] + select({
919 "//build/bazel/platforms/os:android": [],
920 "//conditions:default": ["a.java"],
921 })`,
Liz Kammer02914402023-08-07 13:38:18 -0400922 "sdk_version": `"current"`,
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500923 }),
924 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
925 },
926 })
927}
Alixb29a3cd2023-05-09 20:37:49 +0000928
929func TestJavaLibraryJavaResourcesSingleFilegroup(t *testing.T) {
930 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
931 Filesystem: map[string]string{
932 "res/a.res": "",
933 "res/b.res": "",
934 "res/dir1/b.res": "",
935 },
936 Description: "java_library",
937 Blueprint: `java_library {
938 name: "java-lib-1",
939 srcs: ["a.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400940 sdk_version: "current",
Alixb29a3cd2023-05-09 20:37:49 +0000941 java_resources: [":filegroup1"],
942 bazel_module: { bp2build_available: true },
943}
944
945filegroup {
946 name: "filegroup1",
947 path: "foo",
948 srcs: ["foo/a", "foo/b"],
949}
950
951`,
952 ExpectedBazelTargets: []string{
953 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
954 "srcs": `["a.java"]`,
955 "resources": `[":filegroup1"]`,
956 "resource_strip_prefix": `"foo"`,
Liz Kammer02914402023-08-07 13:38:18 -0400957 "sdk_version": `"current"`,
Alixb29a3cd2023-05-09 20:37:49 +0000958 }),
959 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
960 MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
961 "srcs": `[
962 "foo/a",
963 "foo/b",
964 ]`}),
965 },
966 }, func(ctx android.RegistrationContext) {
967 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
968 })
969}
Alix289e9c62023-08-16 15:06:31 +0000970
971func TestJavaLibraryJavaResourcesMultipleFilegroup(t *testing.T) {
972 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
973 Filesystem: map[string]string{
974 "a.res": "",
975 },
976 Description: "with java_resources that has multiple filegroups",
977 Blueprint: `java_library {
978 name: "java-lib-1",
979 srcs: ["a.java"],
980 java_resources: ["a.res", ":filegroup1", ":filegroup2"],
Liz Kammer02914402023-08-07 13:38:18 -0400981 sdk_version: "current",
Alix289e9c62023-08-16 15:06:31 +0000982 bazel_module: { bp2build_available: true },
983}
984
985filegroup {
986 name: "filegroup1",
987 path: "foo",
988 srcs: ["foo/a"],
989}
990
991filegroup {
992 name: "filegroup2",
993 path: "bar",
994 srcs: ["bar/a"],
995}
996`,
997 ExpectedBazelTargets: []string{
998 MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup1", AttrNameToString{
999 "resource_strip_prefix": `"foo"`,
1000 "resources": `[":filegroup1"]`,
1001 }),
1002 MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup2", AttrNameToString{
1003 "resource_strip_prefix": `"bar"`,
1004 "resources": `[":filegroup2"]`,
1005 }),
1006 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
1007 "srcs": `["a.java"]`,
1008 "resources": `["a.res"]`,
1009 "resource_strip_prefix": `"."`,
1010 "additional_resources": `[
1011 "java-lib-1_filegroup_resources_filegroup1",
1012 "java-lib-1_filegroup_resources_filegroup2",
1013 ]`,
Liz Kammer02914402023-08-07 13:38:18 -04001014 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +00001015 }),
1016 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
1017 MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
1018 "srcs": `["foo/a"]`}),
1019 MakeBazelTargetNoRestrictions("filegroup", "filegroup2", AttrNameToString{
1020 "srcs": `["bar/a"]`}),
1021 },
1022 }, func(ctx android.RegistrationContext) {
1023 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
1024 })
1025}