blob: 9cb9443cc888f504bbf40bda2596e1c518c3294e [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}
Liz Kammer79ff08f2023-09-27 14:43:45 -0400570filegroup {
571 name: "aidls_files",
572 srcs: [
573 "a.aidl",
574 "b.aidl",
575 ],
576}
Sam Delmerico97bd1272022-08-25 14:45:31 -0400577java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400578 name: "example_lib",
579 srcs: [
580 "a.java",
581 "b.java",
582 ":aidl_files",
Liz Kammer79ff08f2023-09-27 14:43:45 -0400583 ":aidls_files",
Liz Kammer02914402023-08-07 13:38:18 -0400584 ":random_other_files",
585 ],
586 sdk_version: "current",
587 bazel_module: { bp2build_available: true },
Sam Delmerico97bd1272022-08-25 14:45:31 -0400588}`,
589 ExpectedBazelTargets: []string{
590 MakeBazelTargetNoRestrictions("aidl_library", "aidl_files", AttrNameToString{
591 "srcs": `[
592 "a.aidl",
593 "b.aidl",
594 ]`,
Liz Kammer2b3f56e2023-03-23 11:51:49 -0400595 "tags": `["apex_available=//apex_available:anyapex"]`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400596 }),
Liz Kammer79ff08f2023-09-27 14:43:45 -0400597 MakeBazelTargetNoRestrictions("aidl_library", "aidls_files", AttrNameToString{
598 "srcs": `[
599 "a.aidl",
600 "b.aidl",
601 ]`,
602 "tags": `["apex_available=//apex_available:anyapex"]`,
603 }),
Alixe06d75b2022-08-31 18:28:19 +0000604 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Liz Kammer79ff08f2023-09-27 14:43:45 -0400605 "deps": `[
606 ":aidl_files",
607 ":aidls_files",
608 ]`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400609 }),
Alixe06d75b2022-08-31 18:28:19 +0000610 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400611 "deps": `[":example_lib_java_aidl_library"]`,
612 "exports": `[":example_lib_java_aidl_library"]`,
613 "srcs": `[
614 "a.java",
615 "b.java",
616 ":random_other_files",
617 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400618 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400619 }),
Alix341484b2022-10-31 19:08:18 +0000620 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400621 MakeBazelTargetNoRestrictions("filegroup", "random_other_files", AttrNameToString{
622 "srcs": `[
623 "a.java",
624 "b.java",
625 ]`,
626 }),
627 },
628 }, func(ctx android.RegistrationContext) {
629 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
630 })
631}
Sam Delmerico7c721372022-08-25 13:51:21 -0400632
633func TestJavaLibraryAidlNonAdjacentAidlFilegroup(t *testing.T) {
634 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
635 Description: "java_library with non adjacent aidl filegroup",
636 ModuleTypeUnderTest: "java_library",
637 ModuleTypeUnderTestFactory: java.LibraryFactory,
Chris Parsonsd0783372023-10-05 15:47:07 +0000638 StubbedBuildDefinitions: []string{"//path/to/A:A_aidl"},
Sam Delmerico7c721372022-08-25 13:51:21 -0400639 Filesystem: map[string]string{
640 "path/to/A/Android.bp": `
641filegroup {
Liz Kammer02914402023-08-07 13:38:18 -0400642 name: "A_aidl",
643 srcs: ["aidl/A.aidl"],
644 path: "aidl",
Sam Delmerico7c721372022-08-25 13:51:21 -0400645}`,
646 },
647 Blueprint: `
648java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400649 name: "foo",
650 srcs: [
651 ":A_aidl",
652 ],
653 sdk_version: "current",
Sam Delmerico7c721372022-08-25 13:51:21 -0400654}`,
655 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000656 MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400657 "deps": `["//path/to/A:A_aidl"]`,
658 }),
Alixe06d75b2022-08-31 18:28:19 +0000659 MakeBazelTarget("java_library", "foo", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400660 "exports": `[":foo_java_aidl_library"]`,
661 "sdk_version": `"current"`,
Sam Delmerico7c721372022-08-25 13:51:21 -0400662 }),
Alix341484b2022-10-31 19:08:18 +0000663 MakeNeverlinkDuplicateTarget("java_library", "foo"),
Sam Delmerico7c721372022-08-25 13:51:21 -0400664 },
665 }, func(ctx android.RegistrationContext) {
666 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
667 })
668}
Cole Faustc843b992022-08-02 18:06:50 -0700669
670func TestConvertArmNeonVariant(t *testing.T) {
671 t.Helper()
672 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
673 Description: "Android Library - simple arch feature",
674 ModuleTypeUnderTest: "android_library",
675 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Chris Parsonscd209032023-09-19 01:12:48 +0000676 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Cole Faustc843b992022-08-02 18:06:50 -0700677android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400678 name: "TestLib",
679 manifest: "manifest/AndroidManifest.xml",
680 srcs: ["lib.java"],
681 sdk_version: "current",
682 arch: {
683 arm: {
684 neon: {
685 srcs: ["arm_neon.java"],
686 },
687 },
688 },
Cole Faustc843b992022-08-02 18:06:50 -0700689}
690`,
691 ExpectedBazelTargets: []string{
692 MakeBazelTarget(
693 "android_library",
694 "TestLib",
695 AttrNameToString{
696 "srcs": `["lib.java"] + select({
697 "//build/bazel/platforms/arch/variants:arm-neon": ["arm_neon.java"],
698 "//conditions:default": [],
699 })`,
700 "manifest": `"manifest/AndroidManifest.xml"`,
701 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400702 "sdk_version": `"current"`, // use as default
Cole Faustc843b992022-08-02 18:06:50 -0700703 }),
Alix82fb94e2022-10-26 20:40:18 +0000704 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700705 }})
706}
707
708func TestConvertMultipleArchFeatures(t *testing.T) {
709 t.Helper()
710 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
711 Description: "Android Library - multiple arch features",
712 ModuleTypeUnderTest: "android_library",
713 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Chris Parsonscd209032023-09-19 01:12:48 +0000714 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Cole Faustc843b992022-08-02 18:06:50 -0700715android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400716 name: "TestLib",
717 manifest: "manifest/AndroidManifest.xml",
718 srcs: ["lib.java"],
719 sdk_version: "current",
720 arch: {
721 x86: {
722 ssse3: {
723 srcs: ["ssse3.java"],
724 },
725 sse4_1: {
726 srcs: ["sse4_1.java"],
727 },
728 },
729 },
Cole Faustc843b992022-08-02 18:06:50 -0700730}
731`,
732 ExpectedBazelTargets: []string{
733 MakeBazelTarget(
734 "android_library",
735 "TestLib",
736 AttrNameToString{
737 "srcs": `["lib.java"] + select({
738 "//build/bazel/platforms/arch/variants:x86-sse4_1": ["sse4_1.java"],
739 "//build/bazel/platforms/arch/variants:x86-sse4_1-ssse3": [
740 "sse4_1.java",
741 "ssse3.java",
742 ],
743 "//build/bazel/platforms/arch/variants:x86-ssse3": ["ssse3.java"],
744 "//conditions:default": [],
745 })`,
746 "manifest": `"manifest/AndroidManifest.xml"`,
747 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400748 "sdk_version": `"current"`,
Cole Faustc843b992022-08-02 18:06:50 -0700749 }),
Alix82fb94e2022-10-26 20:40:18 +0000750 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700751 }})
752}
753
754func TestConvertExcludeSrcsArchFeature(t *testing.T) {
755 t.Helper()
756 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
757 Description: "Android Library - exclude_srcs with arch feature",
758 ModuleTypeUnderTest: "android_library",
759 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Chris Parsonscd209032023-09-19 01:12:48 +0000760 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Cole Faustc843b992022-08-02 18:06:50 -0700761android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400762 name: "TestLib",
763 manifest: "manifest/AndroidManifest.xml",
764 srcs: ["lib.java"],
765 arch: {
766 arm: {
767 srcs: ["arm_non_neon.java"],
768 neon: {
769 exclude_srcs: ["arm_non_neon.java"],
770 },
771 },
772 },
773 sdk_version: "current",
Cole Faustc843b992022-08-02 18:06:50 -0700774}
775`,
776 ExpectedBazelTargets: []string{
777 MakeBazelTarget(
778 "android_library",
779 "TestLib",
780 AttrNameToString{
781 "srcs": `["lib.java"] + select({
782 "//build/bazel/platforms/arch/variants:arm-neon": [],
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000783 "//build/bazel_common_rules/platforms/arch:arm": ["arm_non_neon.java"],
Cole Faustc843b992022-08-02 18:06:50 -0700784 "//conditions:default": [],
785 })`,
786 "manifest": `"manifest/AndroidManifest.xml"`,
787 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400788 "sdk_version": `"current"`, // use as default
Cole Faustc843b992022-08-02 18:06:50 -0700789 }),
Alix82fb94e2022-10-26 20:40:18 +0000790 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700791 }})
792}
Alix8062f4d2022-11-14 21:38:07 +0000793
794func TestJavaLibraryKotlinSrcs(t *testing.T) {
795 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000796 Description: "java_library with kotlin srcs",
Alix8062f4d2022-11-14 21:38:07 +0000797 Blueprint: `java_library {
798 name: "java-lib-1",
799 srcs: ["a.java", "b.java", "c.kt"],
800 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400801 sdk_version: "current",
Alix8062f4d2022-11-14 21:38:07 +0000802}
803`,
804 ExpectedBazelTargets: []string{
805 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
806 "srcs": `[
807 "a.java",
808 "b.java",
809 "c.kt",
810 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400811 "sdk_version": `"current"`,
Alix8062f4d2022-11-14 21:38:07 +0000812 }),
Alix266bbf22022-12-15 06:12:46 +0000813 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000814 },
815 })
816}
817
Alixf848bf82023-03-06 19:43:55 +0000818func TestJavaLibraryKotlincflags(t *testing.T) {
819 runJavaLibraryTestCase(t, Bp2buildTestCase{
820 Description: "java_library with kotlincfalgs",
821 Blueprint: `java_library {
822 name: "java-lib-1",
823 srcs: [ "a.kt"],
824 kotlincflags: ["-flag1", "-flag2"],
825 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400826 sdk_version: "current",
Alixf848bf82023-03-06 19:43:55 +0000827}
828`,
829 ExpectedBazelTargets: []string{
830 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
831 "srcs": `["a.kt"]`,
832 "kotlincflags": `[
833 "-flag1",
834 "-flag2",
835 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400836 "sdk_version": `"current"`,
Alixf848bf82023-03-06 19:43:55 +0000837 }),
838 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
839 },
840 })
841}
842
Alix8062f4d2022-11-14 21:38:07 +0000843func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
844 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000845 Description: "java_library with kotlin common_srcs",
Alix8062f4d2022-11-14 21:38:07 +0000846 Blueprint: `java_library {
847 name: "java-lib-1",
848 srcs: ["a.java", "b.java"],
849 common_srcs: ["c.kt"],
850 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400851 sdk_version: "current",
Alix8062f4d2022-11-14 21:38:07 +0000852}
853`,
854 ExpectedBazelTargets: []string{
855 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
856 "srcs": `[
857 "a.java",
858 "b.java",
859 ]`,
860 "common_srcs": `["c.kt"]`,
Liz Kammer02914402023-08-07 13:38:18 -0400861 "sdk_version": `"current"`,
Alix8062f4d2022-11-14 21:38:07 +0000862 }),
Alix266bbf22022-12-15 06:12:46 +0000863 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000864 },
865 })
866}
Alix495cc8a2023-01-12 18:20:32 +0000867
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400868func TestJavaLibraryArchVariantDeps(t *testing.T) {
Alix495cc8a2023-01-12 18:20:32 +0000869 runJavaLibraryTestCase(t, Bp2buildTestCase{
Chris Parsonscd209032023-09-19 01:12:48 +0000870 Description: "java_library with arch variant libs",
871 StubbedBuildDefinitions: []string{"java-lib-2", "java-lib-3", "java-lib-4"},
Alix495cc8a2023-01-12 18:20:32 +0000872 Blueprint: `java_library {
873 name: "java-lib-1",
874 srcs: ["a.java"],
875 libs: ["java-lib-2"],
Liz Kammer02914402023-08-07 13:38:18 -0400876 sdk_version: "current",
Alix495cc8a2023-01-12 18:20:32 +0000877 target: {
878 android: {
879 libs: ["java-lib-3"],
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400880 static_libs: ["java-lib-4"],
Alix495cc8a2023-01-12 18:20:32 +0000881 },
882 },
883 bazel_module: { bp2build_available: true },
884}
885
Liz Kammer02914402023-08-07 13:38:18 -0400886 java_library{
887 name: "java-lib-2",
Alix495cc8a2023-01-12 18:20:32 +0000888}
889
Liz Kammer02914402023-08-07 13:38:18 -0400890 java_library{
891 name: "java-lib-3",
Alix495cc8a2023-01-12 18:20:32 +0000892}
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400893
Liz Kammer02914402023-08-07 13:38:18 -0400894 java_library{
895 name: "java-lib-4",
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400896}
Alix495cc8a2023-01-12 18:20:32 +0000897`,
898 ExpectedBazelTargets: []string{
899 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
900 "srcs": `["a.java"]`,
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400901 "exports": `select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000902 "//build/bazel_common_rules/platforms/os:android": [":java-lib-4"],
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400903 "//conditions:default": [],
904 })`,
Alix495cc8a2023-01-12 18:20:32 +0000905 "deps": `[":java-lib-2-neverlink"] + select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000906 "//build/bazel_common_rules/platforms/os:android": [
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400907 ":java-lib-3-neverlink",
908 ":java-lib-4",
909 ],
Alix495cc8a2023-01-12 18:20:32 +0000910 "//conditions:default": [],
911 })`,
Liz Kammer02914402023-08-07 13:38:18 -0400912 "sdk_version": `"current"`,
Alix495cc8a2023-01-12 18:20:32 +0000913 }),
914 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Alix495cc8a2023-01-12 18:20:32 +0000915 },
916 })
917}
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500918
919func TestJavaLibraryArchVariantSrcsWithExcludes(t *testing.T) {
920 runJavaLibraryTestCase(t, Bp2buildTestCase{
921 Description: "java_library with arch variant libs",
922 Blueprint: `java_library {
923 name: "java-lib-1",
924 srcs: ["a.java", "b.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400925 sdk_version: "current",
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500926 target: {
927 android: {
928 exclude_srcs: ["a.java"],
929 },
930 },
931 bazel_module: { bp2build_available: true },
932}
933`,
934 ExpectedBazelTargets: []string{
935 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
936 "srcs": `["b.java"] + select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000937 "//build/bazel_common_rules/platforms/os:android": [],
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500938 "//conditions:default": ["a.java"],
939 })`,
Liz Kammer02914402023-08-07 13:38:18 -0400940 "sdk_version": `"current"`,
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500941 }),
942 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
943 },
944 })
945}
Alixb29a3cd2023-05-09 20:37:49 +0000946
947func TestJavaLibraryJavaResourcesSingleFilegroup(t *testing.T) {
948 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
949 Filesystem: map[string]string{
950 "res/a.res": "",
951 "res/b.res": "",
952 "res/dir1/b.res": "",
953 },
954 Description: "java_library",
955 Blueprint: `java_library {
956 name: "java-lib-1",
957 srcs: ["a.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400958 sdk_version: "current",
Alixb29a3cd2023-05-09 20:37:49 +0000959 java_resources: [":filegroup1"],
960 bazel_module: { bp2build_available: true },
961}
962
963filegroup {
964 name: "filegroup1",
965 path: "foo",
966 srcs: ["foo/a", "foo/b"],
967}
968
969`,
970 ExpectedBazelTargets: []string{
971 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
972 "srcs": `["a.java"]`,
973 "resources": `[":filegroup1"]`,
974 "resource_strip_prefix": `"foo"`,
Liz Kammer02914402023-08-07 13:38:18 -0400975 "sdk_version": `"current"`,
Alixb29a3cd2023-05-09 20:37:49 +0000976 }),
977 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
978 MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
979 "srcs": `[
980 "foo/a",
981 "foo/b",
982 ]`}),
983 },
984 }, func(ctx android.RegistrationContext) {
985 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
986 })
987}
Alix289e9c62023-08-16 15:06:31 +0000988
989func TestJavaLibraryJavaResourcesMultipleFilegroup(t *testing.T) {
990 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
991 Filesystem: map[string]string{
992 "a.res": "",
993 },
994 Description: "with java_resources that has multiple filegroups",
995 Blueprint: `java_library {
996 name: "java-lib-1",
997 srcs: ["a.java"],
998 java_resources: ["a.res", ":filegroup1", ":filegroup2"],
Liz Kammer02914402023-08-07 13:38:18 -0400999 sdk_version: "current",
Alix289e9c62023-08-16 15:06:31 +00001000 bazel_module: { bp2build_available: true },
1001}
1002
1003filegroup {
1004 name: "filegroup1",
1005 path: "foo",
1006 srcs: ["foo/a"],
1007}
1008
1009filegroup {
1010 name: "filegroup2",
1011 path: "bar",
1012 srcs: ["bar/a"],
1013}
1014`,
1015 ExpectedBazelTargets: []string{
1016 MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup1", AttrNameToString{
1017 "resource_strip_prefix": `"foo"`,
1018 "resources": `[":filegroup1"]`,
1019 }),
1020 MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup2", AttrNameToString{
1021 "resource_strip_prefix": `"bar"`,
1022 "resources": `[":filegroup2"]`,
1023 }),
1024 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
1025 "srcs": `["a.java"]`,
1026 "resources": `["a.res"]`,
1027 "resource_strip_prefix": `"."`,
1028 "additional_resources": `[
1029 "java-lib-1_filegroup_resources_filegroup1",
1030 "java-lib-1_filegroup_resources_filegroup2",
1031 ]`,
Liz Kammer02914402023-08-07 13:38:18 -04001032 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +00001033 }),
1034 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
1035 MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
1036 "srcs": `["foo/a"]`}),
1037 MakeBazelTargetNoRestrictions("filegroup", "filegroup2", AttrNameToString{
1038 "srcs": `["bar/a"]`}),
1039 },
1040 }, func(ctx android.RegistrationContext) {
1041 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
1042 })
1043}
Zi Wang734266b2023-10-06 11:25:06 -07001044
1045func TestJavaLibrarySameNameAsPrebuilt(t *testing.T) {
1046 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
1047 Description: "java_library and prebuilt module have the same name",
1048 Filesystem: map[string]string{
1049 "foo/bar/Android.bp": simpleModule("java_import", "test_lib"),
1050 },
1051 Blueprint: `java_library {
1052 name: "test_lib",
1053 srcs: ["a.java"],
1054 sdk_version: "current",
1055 bazel_module: { bp2build_available: true },
1056}
1057`,
1058 ExpectedBazelTargets: []string{
1059 MakeBazelTarget("java_library", "test_lib", AttrNameToString{
1060 "srcs": `["a.java"]`,
1061 "sdk_version": `"current"`,
1062 }),
1063 MakeNeverlinkDuplicateTarget("java_library", "test_lib"),
1064 },
1065 }, func(ctx android.RegistrationContext) {
1066 ctx.RegisterModuleType("java_import", java.ImportFactory)
1067 })
1068}