blob: 3260b1e9fdc0d1c7318f62c9a48fdd46e2490c6d [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{
72 Blueprint: `java_library {
Sam Delmericoc0161432022-02-25 21:34:51 +000073 name: "java-lib-1",
74 srcs: ["a.java"],
75 libs: ["java-lib-2"],
76 static_libs: ["java-lib-3"],
Liz Kammer02914402023-08-07 13:38:18 -040077 sdk_version: "current",
Sam Delmericoc0161432022-02-25 21:34:51 +000078 bazel_module: { bp2build_available: true },
79}
80
81java_library {
82 name: "java-lib-2",
83 srcs: ["b.java"],
Liz Kammer02914402023-08-07 13:38:18 -040084 sdk_version: "current",
Sam Delmericoc0161432022-02-25 21:34:51 +000085 bazel_module: { bp2build_available: false },
86}
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 bazel_module: { bp2build_available: false },
93}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000094 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +000095 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmericoc0161432022-02-25 21:34:51 +000096 "srcs": `["a.java"]`,
97 "deps": `[
Alix341484b2022-10-31 19:08:18 +000098 ":java-lib-2-neverlink",
Sam Delmericoc0161432022-02-25 21:34:51 +000099 ":java-lib-3",
100 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400101 "exports": `[":java-lib-3"]`,
102 "sdk_version": `"current"`,
Sam Delmericoc0161432022-02-25 21:34:51 +0000103 }),
Alix341484b2022-10-31 19:08:18 +0000104 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmericoc0161432022-02-25 21:34:51 +0000105 },
106 })
107}
108
109func TestJavaLibraryConvertsStaticLibsToExportsIfNoSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000110 runJavaLibraryTestCase(t, Bp2buildTestCase{
111 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"],
121 bazel_module: { bp2build_available: false },
122}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000123 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000124 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400125 "exports": `[":java-lib-2"]`,
126 "sdk_version": `"current"`,
Sam Delmericoc0161432022-02-25 21:34:51 +0000127 }),
Alix341484b2022-10-31 19:08:18 +0000128 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmericoc0161432022-02-25 21:34:51 +0000129 },
130 })
131}
132
Liz Kammer02914402023-08-07 13:38:18 -0400133func TestJavaLibraryFailsToConvertNoSdkVersion(t *testing.T) {
134 runJavaLibraryTestCase(t, Bp2buildTestCase{
135 Blueprint: `
136java_library {
137 name: "lib",
138 bazel_module: { bp2build_available: true },
139}
140`,
141 ExpectedBazelTargets: []string{}, // no targets expected because sdk_version is not set
142 })
143}
144
Sam Delmerico77267c72022-03-18 14:11:07 +0000145func TestJavaLibraryPlugins(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000146 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
147 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"],
157 bazel_module: { bp2build_available: false },
158}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000159 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000160 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400161 "plugins": `[":java-plugin-1"]`,
162 "sdk_version": `"current"`,
Sam Delmerico77267c72022-03-18 14:11:07 +0000163 }),
Alix341484b2022-10-31 19:08:18 +0000164 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico77267c72022-03-18 14:11:07 +0000165 },
166 }, func(ctx android.RegistrationContext) {
167 ctx.RegisterModuleType("java_plugin", java.PluginFactory)
168 })
169}
Sam Delmerico58614c02022-03-15 21:02:09 +0000170
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400171func TestJavaLibraryJavaVersion(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000172 runJavaLibraryTestCase(t, Bp2buildTestCase{
173 Blueprint: `java_library {
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400174 name: "java-lib-1",
175 srcs: ["a.java"],
176 java_version: "11",
Liz Kammer02914402023-08-07 13:38:18 -0400177 sdk_version: "current",
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400178}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000179 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000180 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Romain Jobredeaux2eef2e12023-02-24 12:07:08 -0500181 "srcs": `["a.java"]`,
182 "java_version": `"11"`,
Liz Kammer02914402023-08-07 13:38:18 -0400183 "sdk_version": `"current"`,
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400184 }),
Romain Jobredeaux2eef2e12023-02-24 12:07:08 -0500185 MakeNeverlinkDuplicateTargetWithAttrs(
186 "java_library",
187 "java-lib-1",
Liz Kammer02914402023-08-07 13:38:18 -0400188 AttrNameToString{
189 "java_version": `"11"`,
190 "sdk_version": `"current"`,
191 }),
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400192 },
193 })
194}
195
Alixb1e5c6a2023-06-20 21:00:40 +0000196func TestJavaLibraryErrorproneEnabledManually(t *testing.T) {
197 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
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"],
212 bazel_module: { bp2build_available: false },
Sam Delmerico58614c02022-03-15 21:02:09 +0000213}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000214 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000215 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico58614c02022-03-15 21:02:09 +0000216 "javacopts": `[
217 "-Xsuper-fast",
218 "-Xep:SpeedLimit:OFF",
219 ]`,
Alixb1e5c6a2023-06-20 21:00:40 +0000220 "plugins": `[":plugin2"]`,
221 "srcs": `["a.java"]`,
222 "errorprone_force_enable": `True`,
Liz Kammer02914402023-08-07 13:38:18 -0400223 "sdk_version": `"current"`,
Sam Delmerico58614c02022-03-15 21:02:09 +0000224 }),
Alix341484b2022-10-31 19:08:18 +0000225 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000226 },
Alixb1e5c6a2023-06-20 21:00:40 +0000227 }, func(ctx android.RegistrationContext) {
228 ctx.RegisterModuleType("java_plugin", java.PluginFactory)
Sam Delmerico58614c02022-03-15 21:02:09 +0000229 })
230}
231
232func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000233 runJavaLibraryTestCase(t, Bp2buildTestCase{
234 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000235 name: "java-lib-1",
236 srcs: ["a.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400237 sdk_version: "current",
Sam Delmerico58614c02022-03-15 21:02:09 +0000238 javacflags: ["-Xsuper-fast"],
239 errorprone: {
240 javacflags: ["-Xep:SpeedLimit:OFF"],
241 },
242}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000243 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000244 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400245 "javacopts": `["-Xsuper-fast"]`,
246 "srcs": `["a.java"]`,
247 "sdk_version": `"current"`,
Sam Delmerico58614c02022-03-15 21:02:09 +0000248 }),
Alix341484b2022-10-31 19:08:18 +0000249 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000250 },
251 })
252}
253
Alixb1e5c6a2023-06-20 21:00:40 +0000254func TestJavaLibraryErrorproneDisabledManually(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000255 runJavaLibraryTestCase(t, Bp2buildTestCase{
256 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000257 name: "java-lib-1",
258 srcs: ["a.java"],
259 javacflags: ["-Xsuper-fast"],
Liz Kammer02914402023-08-07 13:38:18 -0400260 sdk_version: "current",
Sam Delmerico58614c02022-03-15 21:02:09 +0000261 errorprone: {
Alixb1e5c6a2023-06-20 21:00:40 +0000262 enabled: false,
Sam Delmerico58614c02022-03-15 21:02:09 +0000263 },
264}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000265 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000266 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Alixb1e5c6a2023-06-20 21:00:40 +0000267 "javacopts": `[
268 "-Xsuper-fast",
269 "-XepDisableAllChecks",
270 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400271 "srcs": `["a.java"]`,
272 "sdk_version": `"current"`,
Sam Delmerico58614c02022-03-15 21:02:09 +0000273 }),
Alix341484b2022-10-31 19:08:18 +0000274 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000275 },
276 })
277}
Sam Delmerico24da73c2022-03-16 20:36:54 +0000278
279func TestJavaLibraryLogTags(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000280 runJavaLibraryTestCase(t, Bp2buildTestCase{
281 Description: "Java library - logtags creates separate dependency",
282 ModuleTypeUnderTest: "java_library",
283 ModuleTypeUnderTestFactory: java.LibraryFactory,
284 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400285 name: "example_lib",
286 srcs: [
287 "a.java",
288 "b.java",
289 "a.logtag",
290 "b.logtag",
291 ],
292 sdk_version: "current",
293 bazel_module: { bp2build_available: true },
Sam Delmerico24da73c2022-03-16 20:36:54 +0000294}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000295 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000296 MakeBazelTarget("event_log_tags", "example_lib_logtags", AttrNameToString{
Sam Delmerico24da73c2022-03-16 20:36:54 +0000297 "srcs": `[
298 "a.logtag",
299 "b.logtag",
300 ]`,
301 }),
Alixe06d75b2022-08-31 18:28:19 +0000302 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico24da73c2022-03-16 20:36:54 +0000303 "srcs": `[
304 "a.java",
305 "b.java",
306 ":example_lib_logtags",
307 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400308 "sdk_version": `"current"`,
Sam Delmerico24da73c2022-03-16 20:36:54 +0000309 }),
Alix341484b2022-10-31 19:08:18 +0000310 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico24da73c2022-03-16 20:36:54 +0000311 }})
312}
Sam Delmerico79985812022-03-23 20:20:42 +0000313
314func TestJavaLibraryResources(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000315 runJavaLibraryTestCase(t, Bp2buildTestCase{
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400316 Dir: "adir",
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000317 Filesystem: map[string]string{
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400318 "adir/res/a.res": "",
319 "adir/res/b.res": "",
320 "adir/res/dir1/b.res": "",
321 "adir/Android.bp": `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400322 name: "java-lib-1",
323 java_resources: ["res/a.res", "res/b.res"],
324 sdk_version: "current",
325 bazel_module: { bp2build_available: true },
Sam Delmerico79985812022-03-23 20:20:42 +0000326}`,
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400327 },
328 Blueprint: "",
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000329 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000330 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000331 "resources": `[
332 "res/a.res",
333 "res/b.res",
334 ]`,
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400335 "resource_strip_prefix": `"adir"`,
Liz Kammer02914402023-08-07 13:38:18 -0400336 "sdk_version": `"current"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000337 }),
Alix341484b2022-10-31 19:08:18 +0000338 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000339 },
340 })
341}
342
343func TestJavaLibraryResourceDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000344 runJavaLibraryTestCase(t, Bp2buildTestCase{
345 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000346 "res/a.res": "",
347 "res/b.res": "",
348 "res/dir1/b.res": "",
349 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000350 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400351 name: "java-lib-1",
Sam Delmerico79985812022-03-23 20:20:42 +0000352 java_resource_dirs: ["res"],
Liz Kammer02914402023-08-07 13:38:18 -0400353 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000354}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000355 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000356 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000357 "resource_strip_prefix": `"res"`,
358 "resources": `[
359 "res/a.res",
360 "res/b.res",
361 "res/dir1/b.res",
362 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400363 "sdk_version": `"current"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000364 }),
Alix341484b2022-10-31 19:08:18 +0000365 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000366 },
367 })
368}
369
370func TestJavaLibraryResourcesExcludeDir(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000371 runJavaLibraryTestCase(t, Bp2buildTestCase{
372 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000373 "res/a.res": "",
374 "res/exclude/b.res": "",
375 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000376 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400377 name: "java-lib-1",
Sam Delmerico79985812022-03-23 20:20:42 +0000378 java_resource_dirs: ["res"],
Liz Kammer02914402023-08-07 13:38:18 -0400379 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000380 exclude_java_resource_dirs: ["res/exclude"],
381}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000382 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000383 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000384 "resource_strip_prefix": `"res"`,
385 "resources": `["res/a.res"]`,
Liz Kammer02914402023-08-07 13:38:18 -0400386 "sdk_version": `"current"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000387 }),
Alix341484b2022-10-31 19:08:18 +0000388 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000389 },
390 })
391}
392
393func TestJavaLibraryResourcesExcludeFile(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000394 runJavaLibraryTestCase(t, Bp2buildTestCase{
395 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000396 "res/a.res": "",
397 "res/dir1/b.res": "",
398 "res/dir1/exclude.res": "",
399 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000400 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400401 name: "java-lib-1",
Sam Delmerico79985812022-03-23 20:20:42 +0000402 java_resource_dirs: ["res"],
Liz Kammer02914402023-08-07 13:38:18 -0400403 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000404 exclude_java_resources: ["res/dir1/exclude.res"],
405}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000406 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000407 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000408 "resource_strip_prefix": `"res"`,
409 "resources": `[
410 "res/a.res",
411 "res/dir1/b.res",
412 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400413 "sdk_version": `"current"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000414 }),
Alix341484b2022-10-31 19:08:18 +0000415 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000416 },
417 })
418}
419
Alix289e9c62023-08-16 15:06:31 +0000420func TestJavaLibraryResourcesWithMultipleDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000421 runJavaLibraryTestCase(t, Bp2buildTestCase{
422 Filesystem: map[string]string{
Liz Kammer33dddf52023-09-07 14:54:41 -0400423 "res/a.res": "",
424 "res1/b.res": "",
425 "res2/b.java": "",
Sam Delmerico79985812022-03-23 20:20:42 +0000426 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000427 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400428 name: "java-lib-1",
Liz Kammer33dddf52023-09-07 14:54:41 -0400429 java_resource_dirs: ["res", "res1", "res2"],
Liz Kammer02914402023-08-07 13:38:18 -0400430 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000431}`,
Alix289e9c62023-08-16 15:06:31 +0000432 ExpectedBazelTargets: []string{
433 MakeBazelTarget("java_resources", "java-lib-1_resource_dir_res1", AttrNameToString{
434 "resource_strip_prefix": `"res1"`,
435 "resources": `["res1/b.res"]`,
436 }),
437 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
438 "additional_resources": `["java-lib-1_resource_dir_res1"]`,
439 "resources": `["res/a.res"]`,
440 "resource_strip_prefix": `"res"`,
Liz Kammer02914402023-08-07 13:38:18 -0400441 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +0000442 }),
443 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
444 },
445 })
446}
447
448func TestJavaLibraryJavaResourcesAndResourceDirs(t *testing.T) {
449 runJavaLibraryTestCase(t, Bp2buildTestCase{
450 Filesystem: map[string]string{
451 "resdir/a.res": "",
452 },
453 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400454 name: "java-lib-1",
455 java_resources: ["res1", "res2"],
456 java_resource_dirs: ["resdir"],
457 sdk_version: "current",
Alix289e9c62023-08-16 15:06:31 +0000458}`,
459 ExpectedBazelTargets: []string{
460 MakeBazelTarget("java_resources", "java-lib-1_resource_dir_resdir", AttrNameToString{
461 "resource_strip_prefix": `"resdir"`,
462 "resources": `["resdir/a.res"]`,
463 }),
464 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
465 "additional_resources": `["java-lib-1_resource_dir_resdir"]`,
466 "resource_strip_prefix": `"."`,
467 "resources": `[
468 "res1",
469 "res2",
470 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400471 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +0000472 }),
473 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
474 },
Sam Delmerico79985812022-03-23 20:20:42 +0000475 })
476}
Sam Delmerico97bd1272022-08-25 14:45:31 -0400477
478func TestJavaLibraryAidl(t *testing.T) {
479 runJavaLibraryTestCase(t, Bp2buildTestCase{
480 Description: "Java library - aidl creates separate dependency",
481 ModuleTypeUnderTest: "java_library",
482 ModuleTypeUnderTestFactory: java.LibraryFactory,
483 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400484 name: "example_lib",
485 srcs: [
486 "a.java",
487 "b.java",
488 "a.aidl",
489 "b.aidl",
490 ],
491 bazel_module: { bp2build_available: true },
492 sdk_version: "current",
Sam Delmerico97bd1272022-08-25 14:45:31 -0400493}`,
494 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000495 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400496 "srcs": `[
497 "a.aidl",
498 "b.aidl",
499 ]`,
500 }),
Alixe06d75b2022-08-31 18:28:19 +0000501 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400502 "deps": `[":example_lib_aidl_library"]`,
503 }),
Alixe06d75b2022-08-31 18:28:19 +0000504 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400505 "deps": `[":example_lib_java_aidl_library"]`,
506 "exports": `[":example_lib_java_aidl_library"]`,
507 "srcs": `[
508 "a.java",
509 "b.java",
510 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400511 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400512 }),
Alix341484b2022-10-31 19:08:18 +0000513 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400514 }})
515}
516
517func TestJavaLibraryAidlSrcsNoFileGroup(t *testing.T) {
518 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
519 Description: "Java library - aidl filegroup is parsed",
520 ModuleTypeUnderTest: "java_library",
521 ModuleTypeUnderTestFactory: java.LibraryFactory,
522 Blueprint: `
523java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400524 name: "example_lib",
525 srcs: [
526 "a.java",
527 "b.aidl",
528 ],
529 sdk_version: "current",
530 bazel_module: { bp2build_available: true },
Sam Delmerico97bd1272022-08-25 14:45:31 -0400531}`,
532 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000533 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400534 "srcs": `["b.aidl"]`,
535 }),
Alixe06d75b2022-08-31 18:28:19 +0000536 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400537 "deps": `[":example_lib_aidl_library"]`,
538 }),
Alixe06d75b2022-08-31 18:28:19 +0000539 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400540 "deps": `[":example_lib_java_aidl_library"]`,
541 "exports": `[":example_lib_java_aidl_library"]`,
542 "srcs": `["a.java"]`,
543 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400544 }),
Alix341484b2022-10-31 19:08:18 +0000545 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400546 },
547 }, func(ctx android.RegistrationContext) {
548 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
549 })
550}
551
552func TestJavaLibraryAidlFilegroup(t *testing.T) {
553 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
554 Description: "Java library - aidl filegroup is parsed",
555 ModuleTypeUnderTest: "java_library",
556 ModuleTypeUnderTestFactory: java.LibraryFactory,
557 Blueprint: `
558filegroup {
559 name: "random_other_files",
560 srcs: [
561 "a.java",
562 "b.java",
563 ],
564}
565filegroup {
566 name: "aidl_files",
567 srcs: [
568 "a.aidl",
569 "b.aidl",
570 ],
571}
572java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400573 name: "example_lib",
574 srcs: [
575 "a.java",
576 "b.java",
577 ":aidl_files",
578 ":random_other_files",
579 ],
580 sdk_version: "current",
581 bazel_module: { bp2build_available: true },
Sam Delmerico97bd1272022-08-25 14:45:31 -0400582}`,
583 ExpectedBazelTargets: []string{
584 MakeBazelTargetNoRestrictions("aidl_library", "aidl_files", AttrNameToString{
585 "srcs": `[
586 "a.aidl",
587 "b.aidl",
588 ]`,
Liz Kammer2b3f56e2023-03-23 11:51:49 -0400589 "tags": `["apex_available=//apex_available:anyapex"]`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400590 }),
Alixe06d75b2022-08-31 18:28:19 +0000591 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400592 "deps": `[":aidl_files"]`,
593 }),
Alixe06d75b2022-08-31 18:28:19 +0000594 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400595 "deps": `[":example_lib_java_aidl_library"]`,
596 "exports": `[":example_lib_java_aidl_library"]`,
597 "srcs": `[
598 "a.java",
599 "b.java",
600 ":random_other_files",
601 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400602 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400603 }),
Alix341484b2022-10-31 19:08:18 +0000604 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400605 MakeBazelTargetNoRestrictions("filegroup", "random_other_files", AttrNameToString{
606 "srcs": `[
607 "a.java",
608 "b.java",
609 ]`,
610 }),
611 },
612 }, func(ctx android.RegistrationContext) {
613 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
614 })
615}
Sam Delmerico7c721372022-08-25 13:51:21 -0400616
617func TestJavaLibraryAidlNonAdjacentAidlFilegroup(t *testing.T) {
618 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
619 Description: "java_library with non adjacent aidl filegroup",
620 ModuleTypeUnderTest: "java_library",
621 ModuleTypeUnderTestFactory: java.LibraryFactory,
622 Filesystem: map[string]string{
623 "path/to/A/Android.bp": `
624filegroup {
Liz Kammer02914402023-08-07 13:38:18 -0400625 name: "A_aidl",
626 srcs: ["aidl/A.aidl"],
627 path: "aidl",
Sam Delmerico7c721372022-08-25 13:51:21 -0400628}`,
629 },
630 Blueprint: `
631java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400632 name: "foo",
633 srcs: [
634 ":A_aidl",
635 ],
636 sdk_version: "current",
Sam Delmerico7c721372022-08-25 13:51:21 -0400637}`,
638 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000639 MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400640 "deps": `["//path/to/A:A_aidl"]`,
641 }),
Alixe06d75b2022-08-31 18:28:19 +0000642 MakeBazelTarget("java_library", "foo", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400643 "exports": `[":foo_java_aidl_library"]`,
644 "sdk_version": `"current"`,
Sam Delmerico7c721372022-08-25 13:51:21 -0400645 }),
Alix341484b2022-10-31 19:08:18 +0000646 MakeNeverlinkDuplicateTarget("java_library", "foo"),
Sam Delmerico7c721372022-08-25 13:51:21 -0400647 },
648 }, func(ctx android.RegistrationContext) {
649 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
650 })
651}
Cole Faustc843b992022-08-02 18:06:50 -0700652
653func TestConvertArmNeonVariant(t *testing.T) {
654 t.Helper()
655 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
656 Description: "Android Library - simple arch feature",
657 ModuleTypeUnderTest: "android_library",
658 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Sam Delmerico130d75b2023-08-31 00:51:44 +0000659 Blueprint: SimpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
Cole Faustc843b992022-08-02 18:06:50 -0700660android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400661 name: "TestLib",
662 manifest: "manifest/AndroidManifest.xml",
663 srcs: ["lib.java"],
664 sdk_version: "current",
665 arch: {
666 arm: {
667 neon: {
668 srcs: ["arm_neon.java"],
669 },
670 },
671 },
Cole Faustc843b992022-08-02 18:06:50 -0700672}
673`,
674 ExpectedBazelTargets: []string{
675 MakeBazelTarget(
676 "android_library",
677 "TestLib",
678 AttrNameToString{
679 "srcs": `["lib.java"] + select({
680 "//build/bazel/platforms/arch/variants:arm-neon": ["arm_neon.java"],
681 "//conditions:default": [],
682 })`,
683 "manifest": `"manifest/AndroidManifest.xml"`,
684 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400685 "sdk_version": `"current"`, // use as default
Cole Faustc843b992022-08-02 18:06:50 -0700686 }),
Alix82fb94e2022-10-26 20:40:18 +0000687 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700688 }})
689}
690
691func TestConvertMultipleArchFeatures(t *testing.T) {
692 t.Helper()
693 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
694 Description: "Android Library - multiple arch features",
695 ModuleTypeUnderTest: "android_library",
696 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Sam Delmerico130d75b2023-08-31 00:51:44 +0000697 Blueprint: SimpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
Cole Faustc843b992022-08-02 18:06:50 -0700698android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400699 name: "TestLib",
700 manifest: "manifest/AndroidManifest.xml",
701 srcs: ["lib.java"],
702 sdk_version: "current",
703 arch: {
704 x86: {
705 ssse3: {
706 srcs: ["ssse3.java"],
707 },
708 sse4_1: {
709 srcs: ["sse4_1.java"],
710 },
711 },
712 },
Cole Faustc843b992022-08-02 18:06:50 -0700713}
714`,
715 ExpectedBazelTargets: []string{
716 MakeBazelTarget(
717 "android_library",
718 "TestLib",
719 AttrNameToString{
720 "srcs": `["lib.java"] + select({
721 "//build/bazel/platforms/arch/variants:x86-sse4_1": ["sse4_1.java"],
722 "//build/bazel/platforms/arch/variants:x86-sse4_1-ssse3": [
723 "sse4_1.java",
724 "ssse3.java",
725 ],
726 "//build/bazel/platforms/arch/variants:x86-ssse3": ["ssse3.java"],
727 "//conditions:default": [],
728 })`,
729 "manifest": `"manifest/AndroidManifest.xml"`,
730 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400731 "sdk_version": `"current"`,
Cole Faustc843b992022-08-02 18:06:50 -0700732 }),
Alix82fb94e2022-10-26 20:40:18 +0000733 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700734 }})
735}
736
737func TestConvertExcludeSrcsArchFeature(t *testing.T) {
738 t.Helper()
739 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
740 Description: "Android Library - exclude_srcs with arch feature",
741 ModuleTypeUnderTest: "android_library",
742 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Sam Delmerico130d75b2023-08-31 00:51:44 +0000743 Blueprint: SimpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
Cole Faustc843b992022-08-02 18:06:50 -0700744android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400745 name: "TestLib",
746 manifest: "manifest/AndroidManifest.xml",
747 srcs: ["lib.java"],
748 arch: {
749 arm: {
750 srcs: ["arm_non_neon.java"],
751 neon: {
752 exclude_srcs: ["arm_non_neon.java"],
753 },
754 },
755 },
756 sdk_version: "current",
Cole Faustc843b992022-08-02 18:06:50 -0700757}
758`,
759 ExpectedBazelTargets: []string{
760 MakeBazelTarget(
761 "android_library",
762 "TestLib",
763 AttrNameToString{
764 "srcs": `["lib.java"] + select({
765 "//build/bazel/platforms/arch/variants:arm-neon": [],
766 "//build/bazel/platforms/arch:arm": ["arm_non_neon.java"],
767 "//conditions:default": [],
768 })`,
769 "manifest": `"manifest/AndroidManifest.xml"`,
770 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400771 "sdk_version": `"current"`, // use as default
Cole Faustc843b992022-08-02 18:06:50 -0700772 }),
Alix82fb94e2022-10-26 20:40:18 +0000773 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700774 }})
775}
Alix8062f4d2022-11-14 21:38:07 +0000776
777func TestJavaLibraryKotlinSrcs(t *testing.T) {
778 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000779 Description: "java_library with kotlin srcs",
Alix8062f4d2022-11-14 21:38:07 +0000780 Blueprint: `java_library {
781 name: "java-lib-1",
782 srcs: ["a.java", "b.java", "c.kt"],
783 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400784 sdk_version: "current",
Alix8062f4d2022-11-14 21:38:07 +0000785}
786`,
787 ExpectedBazelTargets: []string{
788 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
789 "srcs": `[
790 "a.java",
791 "b.java",
792 "c.kt",
793 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400794 "sdk_version": `"current"`,
Alix8062f4d2022-11-14 21:38:07 +0000795 }),
Alix266bbf22022-12-15 06:12:46 +0000796 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000797 },
798 })
799}
800
Alixf848bf82023-03-06 19:43:55 +0000801func TestJavaLibraryKotlincflags(t *testing.T) {
802 runJavaLibraryTestCase(t, Bp2buildTestCase{
803 Description: "java_library with kotlincfalgs",
804 Blueprint: `java_library {
805 name: "java-lib-1",
806 srcs: [ "a.kt"],
807 kotlincflags: ["-flag1", "-flag2"],
808 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400809 sdk_version: "current",
Alixf848bf82023-03-06 19:43:55 +0000810}
811`,
812 ExpectedBazelTargets: []string{
813 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
814 "srcs": `["a.kt"]`,
815 "kotlincflags": `[
816 "-flag1",
817 "-flag2",
818 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400819 "sdk_version": `"current"`,
Alixf848bf82023-03-06 19:43:55 +0000820 }),
821 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
822 },
823 })
824}
825
Alix8062f4d2022-11-14 21:38:07 +0000826func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
827 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000828 Description: "java_library with kotlin common_srcs",
Alix8062f4d2022-11-14 21:38:07 +0000829 Blueprint: `java_library {
830 name: "java-lib-1",
831 srcs: ["a.java", "b.java"],
832 common_srcs: ["c.kt"],
833 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400834 sdk_version: "current",
Alix8062f4d2022-11-14 21:38:07 +0000835}
836`,
837 ExpectedBazelTargets: []string{
838 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
839 "srcs": `[
840 "a.java",
841 "b.java",
842 ]`,
843 "common_srcs": `["c.kt"]`,
Liz Kammer02914402023-08-07 13:38:18 -0400844 "sdk_version": `"current"`,
Alix8062f4d2022-11-14 21:38:07 +0000845 }),
Alix266bbf22022-12-15 06:12:46 +0000846 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000847 },
848 })
849}
Alix495cc8a2023-01-12 18:20:32 +0000850
Zi Wangdd936362023-09-15 09:46:17 -0700851func TestJavaLibraryLibsWithNoSrcs(t *testing.T) {
852 runJavaLibraryTestCase(t, Bp2buildTestCase{
853 Description: "java_library that has libs but no srcs",
854 Blueprint: `java_library {
855 name: "java-lib-1",
856 libs: ["java-lib-2"],
857 sdk_version: "current",
858 bazel_module: { bp2build_available: true },
859}
860
861java_library{
862 name: "java-lib-2",
863 bazel_module: { bp2build_available: false },
864}
865`,
866 ExpectedBazelTargets: []string{
867 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
868 "sdk_version": `"current"`,
869 }),
870 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
871 },
872 })
873}
874
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400875func TestJavaLibraryArchVariantDeps(t *testing.T) {
Alix495cc8a2023-01-12 18:20:32 +0000876 runJavaLibraryTestCase(t, Bp2buildTestCase{
877 Description: "java_library with arch variant libs",
878 Blueprint: `java_library {
879 name: "java-lib-1",
880 srcs: ["a.java"],
881 libs: ["java-lib-2"],
Liz Kammer02914402023-08-07 13:38:18 -0400882 sdk_version: "current",
Alix495cc8a2023-01-12 18:20:32 +0000883 target: {
884 android: {
885 libs: ["java-lib-3"],
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400886 static_libs: ["java-lib-4"],
Alix495cc8a2023-01-12 18:20:32 +0000887 },
888 },
889 bazel_module: { bp2build_available: true },
890}
891
Liz Kammer02914402023-08-07 13:38:18 -0400892 java_library{
893 name: "java-lib-2",
894 bazel_module: { bp2build_available: false },
Alix495cc8a2023-01-12 18:20:32 +0000895}
896
Liz Kammer02914402023-08-07 13:38:18 -0400897 java_library{
898 name: "java-lib-3",
899 bazel_module: { bp2build_available: false },
Alix495cc8a2023-01-12 18:20:32 +0000900}
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400901
Liz Kammer02914402023-08-07 13:38:18 -0400902 java_library{
903 name: "java-lib-4",
904 bazel_module: { bp2build_available: false },
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400905}
Alix495cc8a2023-01-12 18:20:32 +0000906`,
907 ExpectedBazelTargets: []string{
908 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
909 "srcs": `["a.java"]`,
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400910 "exports": `select({
911 "//build/bazel/platforms/os:android": [":java-lib-4"],
912 "//conditions:default": [],
913 })`,
Alix495cc8a2023-01-12 18:20:32 +0000914 "deps": `[":java-lib-2-neverlink"] + select({
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400915 "//build/bazel/platforms/os:android": [
916 ":java-lib-3-neverlink",
917 ":java-lib-4",
918 ],
Alix495cc8a2023-01-12 18:20:32 +0000919 "//conditions:default": [],
920 })`,
Liz Kammer02914402023-08-07 13:38:18 -0400921 "sdk_version": `"current"`,
Alix495cc8a2023-01-12 18:20:32 +0000922 }),
923 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Alix495cc8a2023-01-12 18:20:32 +0000924 },
925 })
926}
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500927
928func TestJavaLibraryArchVariantSrcsWithExcludes(t *testing.T) {
929 runJavaLibraryTestCase(t, Bp2buildTestCase{
930 Description: "java_library with arch variant libs",
931 Blueprint: `java_library {
932 name: "java-lib-1",
933 srcs: ["a.java", "b.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400934 sdk_version: "current",
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500935 target: {
936 android: {
937 exclude_srcs: ["a.java"],
938 },
939 },
940 bazel_module: { bp2build_available: true },
941}
942`,
943 ExpectedBazelTargets: []string{
944 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
945 "srcs": `["b.java"] + select({
946 "//build/bazel/platforms/os:android": [],
947 "//conditions:default": ["a.java"],
948 })`,
Liz Kammer02914402023-08-07 13:38:18 -0400949 "sdk_version": `"current"`,
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500950 }),
951 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
952 },
953 })
954}
Alixb29a3cd2023-05-09 20:37:49 +0000955
956func TestJavaLibraryJavaResourcesSingleFilegroup(t *testing.T) {
957 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
958 Filesystem: map[string]string{
959 "res/a.res": "",
960 "res/b.res": "",
961 "res/dir1/b.res": "",
962 },
963 Description: "java_library",
964 Blueprint: `java_library {
965 name: "java-lib-1",
966 srcs: ["a.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400967 sdk_version: "current",
Alixb29a3cd2023-05-09 20:37:49 +0000968 java_resources: [":filegroup1"],
969 bazel_module: { bp2build_available: true },
970}
971
972filegroup {
973 name: "filegroup1",
974 path: "foo",
975 srcs: ["foo/a", "foo/b"],
976}
977
978`,
979 ExpectedBazelTargets: []string{
980 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
981 "srcs": `["a.java"]`,
982 "resources": `[":filegroup1"]`,
983 "resource_strip_prefix": `"foo"`,
Liz Kammer02914402023-08-07 13:38:18 -0400984 "sdk_version": `"current"`,
Alixb29a3cd2023-05-09 20:37:49 +0000985 }),
986 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
987 MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
988 "srcs": `[
989 "foo/a",
990 "foo/b",
991 ]`}),
992 },
993 }, func(ctx android.RegistrationContext) {
994 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
995 })
996}
Alix289e9c62023-08-16 15:06:31 +0000997
998func TestJavaLibraryJavaResourcesMultipleFilegroup(t *testing.T) {
999 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
1000 Filesystem: map[string]string{
1001 "a.res": "",
1002 },
1003 Description: "with java_resources that has multiple filegroups",
1004 Blueprint: `java_library {
1005 name: "java-lib-1",
1006 srcs: ["a.java"],
1007 java_resources: ["a.res", ":filegroup1", ":filegroup2"],
Liz Kammer02914402023-08-07 13:38:18 -04001008 sdk_version: "current",
Alix289e9c62023-08-16 15:06:31 +00001009 bazel_module: { bp2build_available: true },
1010}
1011
1012filegroup {
1013 name: "filegroup1",
1014 path: "foo",
1015 srcs: ["foo/a"],
1016}
1017
1018filegroup {
1019 name: "filegroup2",
1020 path: "bar",
1021 srcs: ["bar/a"],
1022}
1023`,
1024 ExpectedBazelTargets: []string{
1025 MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup1", AttrNameToString{
1026 "resource_strip_prefix": `"foo"`,
1027 "resources": `[":filegroup1"]`,
1028 }),
1029 MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup2", AttrNameToString{
1030 "resource_strip_prefix": `"bar"`,
1031 "resources": `[":filegroup2"]`,
1032 }),
1033 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
1034 "srcs": `["a.java"]`,
1035 "resources": `["a.res"]`,
1036 "resource_strip_prefix": `"."`,
1037 "additional_resources": `[
1038 "java-lib-1_filegroup_resources_filegroup1",
1039 "java-lib-1_filegroup_resources_filegroup2",
1040 ]`,
Liz Kammer02914402023-08-07 13:38:18 -04001041 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +00001042 }),
1043 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
1044 MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
1045 "srcs": `["foo/a"]`}),
1046 MakeBazelTargetNoRestrictions("filegroup", "filegroup2", AttrNameToString{
1047 "srcs": `["bar/a"]`}),
1048 },
1049 }, func(ctx android.RegistrationContext) {
1050 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
1051 })
1052}
Liz Kammer65942c82023-09-07 15:59:42 -04001053
1054func TestJavaSdkVersionCorePlatformDoesNotConvert(t *testing.T) {
1055 runJavaLibraryTestCase(t, Bp2buildTestCase{
1056 Blueprint: `java_library {
1057 name: "java-lib-1",
1058 sdk_version: "core_platform",
1059 bazel_module: { bp2build_available: true },
1060}`,
1061 ExpectedBazelTargets: []string{},
1062 })
1063}