blob: 512c1e1026a842922d72540a4c5740ae4bc49e58 [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 (
Sam Delmericoc0161432022-02-25 21:34:51 +000018 "fmt"
Wei Libafb6d62021-12-10 03:14:59 -080019 "testing"
20
21 "android/soong/android"
22 "android/soong/java"
23)
24
Sam Delmerico3177a6e2022-06-21 19:28:33 +000025func runJavaLibraryTestCaseWithRegistrationCtxFunc(t *testing.T, tc Bp2buildTestCase, registrationCtxFunc func(ctx android.RegistrationContext)) {
Wei Libafb6d62021-12-10 03:14:59 -080026 t.Helper()
Sam Delmerico3177a6e2022-06-21 19:28:33 +000027 (&tc).ModuleTypeUnderTest = "java_library"
28 (&tc).ModuleTypeUnderTestFactory = java.LibraryFactory
29 RunBp2BuildTestCase(t, registrationCtxFunc, tc)
Sam Delmerico77267c72022-03-18 14:11:07 +000030}
31
Sam Delmerico3177a6e2022-06-21 19:28:33 +000032func runJavaLibraryTestCase(t *testing.T, tc Bp2buildTestCase) {
Sam Delmerico58614c02022-03-15 21:02:09 +000033 t.Helper()
Sam Delmerico77267c72022-03-18 14:11:07 +000034 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, tc, func(ctx android.RegistrationContext) {})
Wei Libafb6d62021-12-10 03:14:59 -080035}
36
37func TestJavaLibrary(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000038 runJavaLibraryTestCase(t, Bp2buildTestCase{
39 Description: "java_library with srcs, exclude_srcs and libs",
40 Blueprint: `java_library {
Wei Libafb6d62021-12-10 03:14:59 -080041 name: "java-lib-1",
42 srcs: ["a.java", "b.java"],
43 exclude_srcs: ["b.java"],
44 libs: ["java-lib-2"],
Liz Kammer02914402023-08-07 13:38:18 -040045 sdk_version: "current",
Wei Libafb6d62021-12-10 03:14:59 -080046 bazel_module: { bp2build_available: true },
47}
48
49java_library {
50 name: "java-lib-2",
51 srcs: ["b.java"],
Liz Kammer02914402023-08-07 13:38:18 -040052 sdk_version: "current",
Wei Libafb6d62021-12-10 03:14:59 -080053 bazel_module: { bp2build_available: true },
54}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000055 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +000056 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -040057 "srcs": `["a.java"]`,
58 "deps": `[":java-lib-2-neverlink"]`,
59 "sdk_version": `"current"`,
Wei Libafb6d62021-12-10 03:14:59 -080060 }),
Alix341484b2022-10-31 19:08:18 +000061 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Alixe06d75b2022-08-31 18:28:19 +000062 MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -040063 "srcs": `["b.java"]`,
64 "sdk_version": `"current"`,
Wei Libafb6d62021-12-10 03:14:59 -080065 }),
Alix341484b2022-10-31 19:08:18 +000066 MakeNeverlinkDuplicateTarget("java_library", "java-lib-2"),
Wei Libafb6d62021-12-10 03:14:59 -080067 },
68 })
69}
Sam Delmericoc0161432022-02-25 21:34:51 +000070
71func TestJavaLibraryConvertsStaticLibsToDepsAndExports(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000072 runJavaLibraryTestCase(t, Bp2buildTestCase{
73 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 bazel_module: { bp2build_available: false },
87}
88
89java_library {
90 name: "java-lib-3",
91 srcs: ["c.java"],
Liz Kammer02914402023-08-07 13:38:18 -040092 sdk_version: "current",
Sam Delmericoc0161432022-02-25 21:34:51 +000093 bazel_module: { bp2build_available: false },
94}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000095 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +000096 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmericoc0161432022-02-25 21:34:51 +000097 "srcs": `["a.java"]`,
98 "deps": `[
Alix341484b2022-10-31 19:08:18 +000099 ":java-lib-2-neverlink",
Sam Delmericoc0161432022-02-25 21:34:51 +0000100 ":java-lib-3",
101 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400102 "exports": `[":java-lib-3"]`,
103 "sdk_version": `"current"`,
Sam Delmericoc0161432022-02-25 21:34:51 +0000104 }),
Alix341484b2022-10-31 19:08:18 +0000105 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmericoc0161432022-02-25 21:34:51 +0000106 },
107 })
108}
109
110func TestJavaLibraryConvertsStaticLibsToExportsIfNoSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000111 runJavaLibraryTestCase(t, Bp2buildTestCase{
112 Blueprint: `java_library {
Sam Delmericoc0161432022-02-25 21:34:51 +0000113 name: "java-lib-1",
114 static_libs: ["java-lib-2"],
Liz Kammer02914402023-08-07 13:38:18 -0400115 sdk_version: "current",
Sam Delmericoc0161432022-02-25 21:34:51 +0000116 bazel_module: { bp2build_available: true },
117}
118
119java_library {
120 name: "java-lib-2",
121 srcs: ["a.java"],
122 bazel_module: { bp2build_available: false },
123}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000124 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000125 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400126 "exports": `[":java-lib-2"]`,
127 "sdk_version": `"current"`,
Sam Delmericoc0161432022-02-25 21:34:51 +0000128 }),
Alix341484b2022-10-31 19:08:18 +0000129 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmericoc0161432022-02-25 21:34:51 +0000130 },
131 })
132}
133
Liz Kammer02914402023-08-07 13:38:18 -0400134func TestJavaLibraryFailsToConvertNoSdkVersion(t *testing.T) {
135 runJavaLibraryTestCase(t, Bp2buildTestCase{
136 Blueprint: `
137java_library {
138 name: "lib",
139 bazel_module: { bp2build_available: true },
140}
141`,
142 ExpectedBazelTargets: []string{}, // no targets expected because sdk_version is not set
143 })
144}
145
Sam Delmericoc0161432022-02-25 21:34:51 +0000146func TestJavaLibraryFailsToConvertLibsWithNoSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000147 runJavaLibraryTestCase(t, Bp2buildTestCase{
148 ExpectedErr: fmt.Errorf("Module has direct dependencies but no sources. Bazel will not allow this."),
149 Blueprint: `java_library {
Sam Delmericoc0161432022-02-25 21:34:51 +0000150 name: "java-lib-1",
151 libs: ["java-lib-2"],
Liz Kammer02914402023-08-07 13:38:18 -0400152 sdk_version: "current",
Sam Delmericoc0161432022-02-25 21:34:51 +0000153 bazel_module: { bp2build_available: true },
154}
155
156java_library {
157 name: "java-lib-2",
158 srcs: ["a.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400159 sdk_version: "current",
Sam Delmericoc0161432022-02-25 21:34:51 +0000160 bazel_module: { bp2build_available: false },
161}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000162 ExpectedBazelTargets: []string{},
Sam Delmericoc0161432022-02-25 21:34:51 +0000163 })
164}
Sam Delmerico77267c72022-03-18 14:11:07 +0000165
166func TestJavaLibraryPlugins(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000167 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
168 Blueprint: `java_library {
Sam Delmerico77267c72022-03-18 14:11:07 +0000169 name: "java-lib-1",
170 plugins: ["java-plugin-1"],
Liz Kammer02914402023-08-07 13:38:18 -0400171 sdk_version: "current",
Sam Delmerico77267c72022-03-18 14:11:07 +0000172 bazel_module: { bp2build_available: true },
173}
174
175java_plugin {
176 name: "java-plugin-1",
177 srcs: ["a.java"],
178 bazel_module: { bp2build_available: false },
179}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000180 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000181 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400182 "plugins": `[":java-plugin-1"]`,
183 "sdk_version": `"current"`,
Sam Delmerico77267c72022-03-18 14:11:07 +0000184 }),
Alix341484b2022-10-31 19:08:18 +0000185 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico77267c72022-03-18 14:11:07 +0000186 },
187 }, func(ctx android.RegistrationContext) {
188 ctx.RegisterModuleType("java_plugin", java.PluginFactory)
189 })
190}
Sam Delmerico58614c02022-03-15 21:02:09 +0000191
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400192func TestJavaLibraryJavaVersion(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000193 runJavaLibraryTestCase(t, Bp2buildTestCase{
194 Blueprint: `java_library {
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400195 name: "java-lib-1",
196 srcs: ["a.java"],
197 java_version: "11",
Liz Kammer02914402023-08-07 13:38:18 -0400198 sdk_version: "current",
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400199}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000200 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000201 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Romain Jobredeaux2eef2e12023-02-24 12:07:08 -0500202 "srcs": `["a.java"]`,
203 "java_version": `"11"`,
Liz Kammer02914402023-08-07 13:38:18 -0400204 "sdk_version": `"current"`,
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400205 }),
Romain Jobredeaux2eef2e12023-02-24 12:07:08 -0500206 MakeNeverlinkDuplicateTargetWithAttrs(
207 "java_library",
208 "java-lib-1",
Liz Kammer02914402023-08-07 13:38:18 -0400209 AttrNameToString{
210 "java_version": `"11"`,
211 "sdk_version": `"current"`,
212 }),
Vinh Tran3ac6daf2022-04-22 19:09:58 -0400213 },
214 })
215}
216
Alixb1e5c6a2023-06-20 21:00:40 +0000217func TestJavaLibraryErrorproneEnabledManually(t *testing.T) {
218 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000219 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000220 name: "java-lib-1",
221 srcs: ["a.java"],
222 javacflags: ["-Xsuper-fast"],
Liz Kammer02914402023-08-07 13:38:18 -0400223 sdk_version: "current",
Sam Delmerico58614c02022-03-15 21:02:09 +0000224 errorprone: {
225 enabled: true,
226 javacflags: ["-Xep:SpeedLimit:OFF"],
Alixb1e5c6a2023-06-20 21:00:40 +0000227 extra_check_modules: ["plugin2"],
Sam Delmerico58614c02022-03-15 21:02:09 +0000228 },
Alixb1e5c6a2023-06-20 21:00:40 +0000229}
230java_plugin {
231 name: "plugin2",
232 srcs: ["a.java"],
233 bazel_module: { bp2build_available: false },
Sam Delmerico58614c02022-03-15 21:02:09 +0000234}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000235 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000236 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico58614c02022-03-15 21:02:09 +0000237 "javacopts": `[
238 "-Xsuper-fast",
239 "-Xep:SpeedLimit:OFF",
240 ]`,
Alixb1e5c6a2023-06-20 21:00:40 +0000241 "plugins": `[":plugin2"]`,
242 "srcs": `["a.java"]`,
243 "errorprone_force_enable": `True`,
Liz Kammer02914402023-08-07 13:38:18 -0400244 "sdk_version": `"current"`,
Sam Delmerico58614c02022-03-15 21:02:09 +0000245 }),
Alix341484b2022-10-31 19:08:18 +0000246 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000247 },
Alixb1e5c6a2023-06-20 21:00:40 +0000248 }, func(ctx android.RegistrationContext) {
249 ctx.RegisterModuleType("java_plugin", java.PluginFactory)
Sam Delmerico58614c02022-03-15 21:02:09 +0000250 })
251}
252
253func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(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"],
Liz Kammer02914402023-08-07 13:38:18 -0400258 sdk_version: "current",
Sam Delmerico58614c02022-03-15 21:02:09 +0000259 javacflags: ["-Xsuper-fast"],
260 errorprone: {
261 javacflags: ["-Xep:SpeedLimit:OFF"],
262 },
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{
Liz Kammer02914402023-08-07 13:38:18 -0400266 "javacopts": `["-Xsuper-fast"]`,
267 "srcs": `["a.java"]`,
268 "sdk_version": `"current"`,
Sam Delmerico58614c02022-03-15 21:02:09 +0000269 }),
Alix341484b2022-10-31 19:08:18 +0000270 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000271 },
272 })
273}
274
Alixb1e5c6a2023-06-20 21:00:40 +0000275func TestJavaLibraryErrorproneDisabledManually(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000276 runJavaLibraryTestCase(t, Bp2buildTestCase{
277 Blueprint: `java_library {
Sam Delmerico58614c02022-03-15 21:02:09 +0000278 name: "java-lib-1",
279 srcs: ["a.java"],
280 javacflags: ["-Xsuper-fast"],
Liz Kammer02914402023-08-07 13:38:18 -0400281 sdk_version: "current",
Sam Delmerico58614c02022-03-15 21:02:09 +0000282 errorprone: {
Alixb1e5c6a2023-06-20 21:00:40 +0000283 enabled: false,
Sam Delmerico58614c02022-03-15 21:02:09 +0000284 },
285}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000286 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000287 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Alixb1e5c6a2023-06-20 21:00:40 +0000288 "javacopts": `[
289 "-Xsuper-fast",
290 "-XepDisableAllChecks",
291 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400292 "srcs": `["a.java"]`,
293 "sdk_version": `"current"`,
Sam Delmerico58614c02022-03-15 21:02:09 +0000294 }),
Alix341484b2022-10-31 19:08:18 +0000295 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico58614c02022-03-15 21:02:09 +0000296 },
297 })
298}
Sam Delmerico24da73c2022-03-16 20:36:54 +0000299
300func TestJavaLibraryLogTags(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000301 runJavaLibraryTestCase(t, Bp2buildTestCase{
302 Description: "Java library - logtags creates separate dependency",
303 ModuleTypeUnderTest: "java_library",
304 ModuleTypeUnderTestFactory: java.LibraryFactory,
305 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400306 name: "example_lib",
307 srcs: [
308 "a.java",
309 "b.java",
310 "a.logtag",
311 "b.logtag",
312 ],
313 sdk_version: "current",
314 bazel_module: { bp2build_available: true },
Sam Delmerico24da73c2022-03-16 20:36:54 +0000315}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000316 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000317 MakeBazelTarget("event_log_tags", "example_lib_logtags", AttrNameToString{
Sam Delmerico24da73c2022-03-16 20:36:54 +0000318 "srcs": `[
319 "a.logtag",
320 "b.logtag",
321 ]`,
322 }),
Alixe06d75b2022-08-31 18:28:19 +0000323 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico24da73c2022-03-16 20:36:54 +0000324 "srcs": `[
325 "a.java",
326 "b.java",
327 ":example_lib_logtags",
328 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400329 "sdk_version": `"current"`,
Sam Delmerico24da73c2022-03-16 20:36:54 +0000330 }),
Alix341484b2022-10-31 19:08:18 +0000331 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico24da73c2022-03-16 20:36:54 +0000332 }})
333}
Sam Delmerico79985812022-03-23 20:20:42 +0000334
335func TestJavaLibraryResources(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000336 runJavaLibraryTestCase(t, Bp2buildTestCase{
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400337 Dir: "adir",
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000338 Filesystem: map[string]string{
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400339 "adir/res/a.res": "",
340 "adir/res/b.res": "",
341 "adir/res/dir1/b.res": "",
342 "adir/Android.bp": `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400343 name: "java-lib-1",
344 java_resources: ["res/a.res", "res/b.res"],
345 sdk_version: "current",
346 bazel_module: { bp2build_available: true },
Sam Delmerico79985812022-03-23 20:20:42 +0000347}`,
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400348 },
349 Blueprint: "",
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000350 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000351 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000352 "resources": `[
353 "res/a.res",
354 "res/b.res",
355 ]`,
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400356 "resource_strip_prefix": `"adir"`,
Liz Kammer02914402023-08-07 13:38:18 -0400357 "sdk_version": `"current"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000358 }),
Alix341484b2022-10-31 19:08:18 +0000359 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000360 },
361 })
362}
363
364func TestJavaLibraryResourceDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000365 runJavaLibraryTestCase(t, Bp2buildTestCase{
366 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000367 "res/a.res": "",
368 "res/b.res": "",
369 "res/dir1/b.res": "",
370 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000371 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400372 name: "java-lib-1",
Sam Delmerico79985812022-03-23 20:20:42 +0000373 java_resource_dirs: ["res"],
Liz Kammer02914402023-08-07 13:38:18 -0400374 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000375}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000376 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000377 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000378 "resource_strip_prefix": `"res"`,
379 "resources": `[
380 "res/a.res",
381 "res/b.res",
382 "res/dir1/b.res",
383 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400384 "sdk_version": `"current"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000385 }),
Alix341484b2022-10-31 19:08:18 +0000386 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000387 },
388 })
389}
390
391func TestJavaLibraryResourcesExcludeDir(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000392 runJavaLibraryTestCase(t, Bp2buildTestCase{
393 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000394 "res/a.res": "",
395 "res/exclude/b.res": "",
396 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000397 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400398 name: "java-lib-1",
Sam Delmerico79985812022-03-23 20:20:42 +0000399 java_resource_dirs: ["res"],
Liz Kammer02914402023-08-07 13:38:18 -0400400 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000401 exclude_java_resource_dirs: ["res/exclude"],
402}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000403 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000404 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000405 "resource_strip_prefix": `"res"`,
406 "resources": `["res/a.res"]`,
Liz Kammer02914402023-08-07 13:38:18 -0400407 "sdk_version": `"current"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000408 }),
Alix341484b2022-10-31 19:08:18 +0000409 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000410 },
411 })
412}
413
414func TestJavaLibraryResourcesExcludeFile(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000415 runJavaLibraryTestCase(t, Bp2buildTestCase{
416 Filesystem: map[string]string{
Sam Delmerico79985812022-03-23 20:20:42 +0000417 "res/a.res": "",
418 "res/dir1/b.res": "",
419 "res/dir1/exclude.res": "",
420 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000421 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400422 name: "java-lib-1",
Sam Delmerico79985812022-03-23 20:20:42 +0000423 java_resource_dirs: ["res"],
Liz Kammer02914402023-08-07 13:38:18 -0400424 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000425 exclude_java_resources: ["res/dir1/exclude.res"],
426}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000427 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000428 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
Sam Delmerico79985812022-03-23 20:20:42 +0000429 "resource_strip_prefix": `"res"`,
430 "resources": `[
431 "res/a.res",
432 "res/dir1/b.res",
433 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400434 "sdk_version": `"current"`,
Sam Delmerico79985812022-03-23 20:20:42 +0000435 }),
Alix341484b2022-10-31 19:08:18 +0000436 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Sam Delmerico79985812022-03-23 20:20:42 +0000437 },
438 })
439}
440
Alix289e9c62023-08-16 15:06:31 +0000441func TestJavaLibraryResourcesWithMultipleDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000442 runJavaLibraryTestCase(t, Bp2buildTestCase{
443 Filesystem: map[string]string{
Liz Kammer33dddf52023-09-07 14:54:41 -0400444 "res/a.res": "",
445 "res1/b.res": "",
446 "res2/b.java": "",
Sam Delmerico79985812022-03-23 20:20:42 +0000447 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000448 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400449 name: "java-lib-1",
Liz Kammer33dddf52023-09-07 14:54:41 -0400450 java_resource_dirs: ["res", "res1", "res2"],
Liz Kammer02914402023-08-07 13:38:18 -0400451 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000452}`,
Alix289e9c62023-08-16 15:06:31 +0000453 ExpectedBazelTargets: []string{
454 MakeBazelTarget("java_resources", "java-lib-1_resource_dir_res1", AttrNameToString{
455 "resource_strip_prefix": `"res1"`,
456 "resources": `["res1/b.res"]`,
457 }),
458 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
459 "additional_resources": `["java-lib-1_resource_dir_res1"]`,
460 "resources": `["res/a.res"]`,
461 "resource_strip_prefix": `"res"`,
Liz Kammer02914402023-08-07 13:38:18 -0400462 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +0000463 }),
464 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
465 },
466 })
467}
468
469func TestJavaLibraryJavaResourcesAndResourceDirs(t *testing.T) {
470 runJavaLibraryTestCase(t, Bp2buildTestCase{
471 Filesystem: map[string]string{
472 "resdir/a.res": "",
473 },
474 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400475 name: "java-lib-1",
476 java_resources: ["res1", "res2"],
477 java_resource_dirs: ["resdir"],
478 sdk_version: "current",
Alix289e9c62023-08-16 15:06:31 +0000479}`,
480 ExpectedBazelTargets: []string{
481 MakeBazelTarget("java_resources", "java-lib-1_resource_dir_resdir", AttrNameToString{
482 "resource_strip_prefix": `"resdir"`,
483 "resources": `["resdir/a.res"]`,
484 }),
485 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
486 "additional_resources": `["java-lib-1_resource_dir_resdir"]`,
487 "resource_strip_prefix": `"."`,
488 "resources": `[
489 "res1",
490 "res2",
491 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400492 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +0000493 }),
494 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
495 },
Sam Delmerico79985812022-03-23 20:20:42 +0000496 })
497}
Sam Delmerico97bd1272022-08-25 14:45:31 -0400498
499func TestJavaLibraryAidl(t *testing.T) {
500 runJavaLibraryTestCase(t, Bp2buildTestCase{
501 Description: "Java library - aidl creates separate dependency",
502 ModuleTypeUnderTest: "java_library",
503 ModuleTypeUnderTestFactory: java.LibraryFactory,
504 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400505 name: "example_lib",
506 srcs: [
507 "a.java",
508 "b.java",
509 "a.aidl",
510 "b.aidl",
511 ],
512 bazel_module: { bp2build_available: true },
513 sdk_version: "current",
Sam Delmerico97bd1272022-08-25 14:45:31 -0400514}`,
515 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000516 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400517 "srcs": `[
518 "a.aidl",
519 "b.aidl",
520 ]`,
521 }),
Alixe06d75b2022-08-31 18:28:19 +0000522 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400523 "deps": `[":example_lib_aidl_library"]`,
524 }),
Alixe06d75b2022-08-31 18:28:19 +0000525 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400526 "deps": `[":example_lib_java_aidl_library"]`,
527 "exports": `[":example_lib_java_aidl_library"]`,
528 "srcs": `[
529 "a.java",
530 "b.java",
531 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400532 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400533 }),
Alix341484b2022-10-31 19:08:18 +0000534 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400535 }})
536}
537
538func TestJavaLibraryAidlSrcsNoFileGroup(t *testing.T) {
539 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
540 Description: "Java library - aidl filegroup is parsed",
541 ModuleTypeUnderTest: "java_library",
542 ModuleTypeUnderTestFactory: java.LibraryFactory,
543 Blueprint: `
544java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400545 name: "example_lib",
546 srcs: [
547 "a.java",
548 "b.aidl",
549 ],
550 sdk_version: "current",
551 bazel_module: { bp2build_available: true },
Sam Delmerico97bd1272022-08-25 14:45:31 -0400552}`,
553 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000554 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400555 "srcs": `["b.aidl"]`,
556 }),
Alixe06d75b2022-08-31 18:28:19 +0000557 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400558 "deps": `[":example_lib_aidl_library"]`,
559 }),
Alixe06d75b2022-08-31 18:28:19 +0000560 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400561 "deps": `[":example_lib_java_aidl_library"]`,
562 "exports": `[":example_lib_java_aidl_library"]`,
563 "srcs": `["a.java"]`,
564 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400565 }),
Alix341484b2022-10-31 19:08:18 +0000566 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400567 },
568 }, func(ctx android.RegistrationContext) {
569 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
570 })
571}
572
573func TestJavaLibraryAidlFilegroup(t *testing.T) {
574 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
575 Description: "Java library - aidl filegroup is parsed",
576 ModuleTypeUnderTest: "java_library",
577 ModuleTypeUnderTestFactory: java.LibraryFactory,
578 Blueprint: `
579filegroup {
580 name: "random_other_files",
581 srcs: [
582 "a.java",
583 "b.java",
584 ],
585}
586filegroup {
587 name: "aidl_files",
588 srcs: [
589 "a.aidl",
590 "b.aidl",
591 ],
592}
593java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400594 name: "example_lib",
595 srcs: [
596 "a.java",
597 "b.java",
598 ":aidl_files",
599 ":random_other_files",
600 ],
601 sdk_version: "current",
602 bazel_module: { bp2build_available: true },
Sam Delmerico97bd1272022-08-25 14:45:31 -0400603}`,
604 ExpectedBazelTargets: []string{
605 MakeBazelTargetNoRestrictions("aidl_library", "aidl_files", AttrNameToString{
606 "srcs": `[
607 "a.aidl",
608 "b.aidl",
609 ]`,
Liz Kammer2b3f56e2023-03-23 11:51:49 -0400610 "tags": `["apex_available=//apex_available:anyapex"]`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400611 }),
Alixe06d75b2022-08-31 18:28:19 +0000612 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400613 "deps": `[":aidl_files"]`,
614 }),
Alixe06d75b2022-08-31 18:28:19 +0000615 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400616 "deps": `[":example_lib_java_aidl_library"]`,
617 "exports": `[":example_lib_java_aidl_library"]`,
618 "srcs": `[
619 "a.java",
620 "b.java",
621 ":random_other_files",
622 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400623 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400624 }),
Alix341484b2022-10-31 19:08:18 +0000625 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400626 MakeBazelTargetNoRestrictions("filegroup", "random_other_files", AttrNameToString{
627 "srcs": `[
628 "a.java",
629 "b.java",
630 ]`,
631 }),
632 },
633 }, func(ctx android.RegistrationContext) {
634 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
635 })
636}
Sam Delmerico7c721372022-08-25 13:51:21 -0400637
638func TestJavaLibraryAidlNonAdjacentAidlFilegroup(t *testing.T) {
639 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
640 Description: "java_library with non adjacent aidl filegroup",
641 ModuleTypeUnderTest: "java_library",
642 ModuleTypeUnderTestFactory: java.LibraryFactory,
643 Filesystem: map[string]string{
644 "path/to/A/Android.bp": `
645filegroup {
Liz Kammer02914402023-08-07 13:38:18 -0400646 name: "A_aidl",
647 srcs: ["aidl/A.aidl"],
648 path: "aidl",
Sam Delmerico7c721372022-08-25 13:51:21 -0400649}`,
650 },
651 Blueprint: `
652java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400653 name: "foo",
654 srcs: [
655 ":A_aidl",
656 ],
657 sdk_version: "current",
Sam Delmerico7c721372022-08-25 13:51:21 -0400658}`,
659 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000660 MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400661 "deps": `["//path/to/A:A_aidl"]`,
662 }),
Alixe06d75b2022-08-31 18:28:19 +0000663 MakeBazelTarget("java_library", "foo", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400664 "exports": `[":foo_java_aidl_library"]`,
665 "sdk_version": `"current"`,
Sam Delmerico7c721372022-08-25 13:51:21 -0400666 }),
Alix341484b2022-10-31 19:08:18 +0000667 MakeNeverlinkDuplicateTarget("java_library", "foo"),
Sam Delmerico7c721372022-08-25 13:51:21 -0400668 },
669 }, func(ctx android.RegistrationContext) {
670 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
671 })
672}
Cole Faustc843b992022-08-02 18:06:50 -0700673
674func TestConvertArmNeonVariant(t *testing.T) {
675 t.Helper()
676 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
677 Description: "Android Library - simple arch feature",
678 ModuleTypeUnderTest: "android_library",
679 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
680 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
681android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400682 name: "TestLib",
683 manifest: "manifest/AndroidManifest.xml",
684 srcs: ["lib.java"],
685 sdk_version: "current",
686 arch: {
687 arm: {
688 neon: {
689 srcs: ["arm_neon.java"],
690 },
691 },
692 },
Cole Faustc843b992022-08-02 18:06:50 -0700693}
694`,
695 ExpectedBazelTargets: []string{
696 MakeBazelTarget(
697 "android_library",
698 "TestLib",
699 AttrNameToString{
700 "srcs": `["lib.java"] + select({
701 "//build/bazel/platforms/arch/variants:arm-neon": ["arm_neon.java"],
702 "//conditions:default": [],
703 })`,
704 "manifest": `"manifest/AndroidManifest.xml"`,
705 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400706 "sdk_version": `"current"`, // use as default
Cole Faustc843b992022-08-02 18:06:50 -0700707 }),
Alix82fb94e2022-10-26 20:40:18 +0000708 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700709 }})
710}
711
712func TestConvertMultipleArchFeatures(t *testing.T) {
713 t.Helper()
714 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
715 Description: "Android Library - multiple arch features",
716 ModuleTypeUnderTest: "android_library",
717 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
718 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
719android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400720 name: "TestLib",
721 manifest: "manifest/AndroidManifest.xml",
722 srcs: ["lib.java"],
723 sdk_version: "current",
724 arch: {
725 x86: {
726 ssse3: {
727 srcs: ["ssse3.java"],
728 },
729 sse4_1: {
730 srcs: ["sse4_1.java"],
731 },
732 },
733 },
Cole Faustc843b992022-08-02 18:06:50 -0700734}
735`,
736 ExpectedBazelTargets: []string{
737 MakeBazelTarget(
738 "android_library",
739 "TestLib",
740 AttrNameToString{
741 "srcs": `["lib.java"] + select({
742 "//build/bazel/platforms/arch/variants:x86-sse4_1": ["sse4_1.java"],
743 "//build/bazel/platforms/arch/variants:x86-sse4_1-ssse3": [
744 "sse4_1.java",
745 "ssse3.java",
746 ],
747 "//build/bazel/platforms/arch/variants:x86-ssse3": ["ssse3.java"],
748 "//conditions:default": [],
749 })`,
750 "manifest": `"manifest/AndroidManifest.xml"`,
751 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400752 "sdk_version": `"current"`,
Cole Faustc843b992022-08-02 18:06:50 -0700753 }),
Alix82fb94e2022-10-26 20:40:18 +0000754 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700755 }})
756}
757
758func TestConvertExcludeSrcsArchFeature(t *testing.T) {
759 t.Helper()
760 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
761 Description: "Android Library - exclude_srcs with arch feature",
762 ModuleTypeUnderTest: "android_library",
763 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
764 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
765android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400766 name: "TestLib",
767 manifest: "manifest/AndroidManifest.xml",
768 srcs: ["lib.java"],
769 arch: {
770 arm: {
771 srcs: ["arm_non_neon.java"],
772 neon: {
773 exclude_srcs: ["arm_non_neon.java"],
774 },
775 },
776 },
777 sdk_version: "current",
Cole Faustc843b992022-08-02 18:06:50 -0700778}
779`,
780 ExpectedBazelTargets: []string{
781 MakeBazelTarget(
782 "android_library",
783 "TestLib",
784 AttrNameToString{
785 "srcs": `["lib.java"] + select({
786 "//build/bazel/platforms/arch/variants:arm-neon": [],
787 "//build/bazel/platforms/arch:arm": ["arm_non_neon.java"],
788 "//conditions:default": [],
789 })`,
790 "manifest": `"manifest/AndroidManifest.xml"`,
791 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400792 "sdk_version": `"current"`, // use as default
Cole Faustc843b992022-08-02 18:06:50 -0700793 }),
Alix82fb94e2022-10-26 20:40:18 +0000794 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700795 }})
796}
Alix8062f4d2022-11-14 21:38:07 +0000797
798func TestJavaLibraryKotlinSrcs(t *testing.T) {
799 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000800 Description: "java_library with kotlin srcs",
Alix8062f4d2022-11-14 21:38:07 +0000801 Blueprint: `java_library {
802 name: "java-lib-1",
803 srcs: ["a.java", "b.java", "c.kt"],
804 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400805 sdk_version: "current",
Alix8062f4d2022-11-14 21:38:07 +0000806}
807`,
808 ExpectedBazelTargets: []string{
809 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
810 "srcs": `[
811 "a.java",
812 "b.java",
813 "c.kt",
814 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400815 "sdk_version": `"current"`,
Alix8062f4d2022-11-14 21:38:07 +0000816 }),
Alix266bbf22022-12-15 06:12:46 +0000817 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000818 },
819 })
820}
821
Alixf848bf82023-03-06 19:43:55 +0000822func TestJavaLibraryKotlincflags(t *testing.T) {
823 runJavaLibraryTestCase(t, Bp2buildTestCase{
824 Description: "java_library with kotlincfalgs",
825 Blueprint: `java_library {
826 name: "java-lib-1",
827 srcs: [ "a.kt"],
828 kotlincflags: ["-flag1", "-flag2"],
829 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400830 sdk_version: "current",
Alixf848bf82023-03-06 19:43:55 +0000831}
832`,
833 ExpectedBazelTargets: []string{
834 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
835 "srcs": `["a.kt"]`,
836 "kotlincflags": `[
837 "-flag1",
838 "-flag2",
839 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400840 "sdk_version": `"current"`,
Alixf848bf82023-03-06 19:43:55 +0000841 }),
842 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
843 },
844 })
845}
846
Alix8062f4d2022-11-14 21:38:07 +0000847func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
848 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000849 Description: "java_library with kotlin common_srcs",
Alix8062f4d2022-11-14 21:38:07 +0000850 Blueprint: `java_library {
851 name: "java-lib-1",
852 srcs: ["a.java", "b.java"],
853 common_srcs: ["c.kt"],
854 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400855 sdk_version: "current",
Alix8062f4d2022-11-14 21:38:07 +0000856}
857`,
858 ExpectedBazelTargets: []string{
859 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
860 "srcs": `[
861 "a.java",
862 "b.java",
863 ]`,
864 "common_srcs": `["c.kt"]`,
Liz Kammer02914402023-08-07 13:38:18 -0400865 "sdk_version": `"current"`,
Alix8062f4d2022-11-14 21:38:07 +0000866 }),
Alix266bbf22022-12-15 06:12:46 +0000867 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000868 },
869 })
870}
Alix495cc8a2023-01-12 18:20:32 +0000871
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400872func TestJavaLibraryArchVariantDeps(t *testing.T) {
Alix495cc8a2023-01-12 18:20:32 +0000873 runJavaLibraryTestCase(t, Bp2buildTestCase{
874 Description: "java_library with arch variant libs",
875 Blueprint: `java_library {
876 name: "java-lib-1",
877 srcs: ["a.java"],
878 libs: ["java-lib-2"],
Liz Kammer02914402023-08-07 13:38:18 -0400879 sdk_version: "current",
Alix495cc8a2023-01-12 18:20:32 +0000880 target: {
881 android: {
882 libs: ["java-lib-3"],
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400883 static_libs: ["java-lib-4"],
Alix495cc8a2023-01-12 18:20:32 +0000884 },
885 },
886 bazel_module: { bp2build_available: true },
887}
888
Liz Kammer02914402023-08-07 13:38:18 -0400889 java_library{
890 name: "java-lib-2",
891 bazel_module: { bp2build_available: false },
Alix495cc8a2023-01-12 18:20:32 +0000892}
893
Liz Kammer02914402023-08-07 13:38:18 -0400894 java_library{
895 name: "java-lib-3",
896 bazel_module: { bp2build_available: false },
Alix495cc8a2023-01-12 18:20:32 +0000897}
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400898
Liz Kammer02914402023-08-07 13:38:18 -0400899 java_library{
900 name: "java-lib-4",
901 bazel_module: { bp2build_available: false },
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400902}
Alix495cc8a2023-01-12 18:20:32 +0000903`,
904 ExpectedBazelTargets: []string{
905 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
906 "srcs": `["a.java"]`,
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400907 "exports": `select({
908 "//build/bazel/platforms/os:android": [":java-lib-4"],
909 "//conditions:default": [],
910 })`,
Alix495cc8a2023-01-12 18:20:32 +0000911 "deps": `[":java-lib-2-neverlink"] + select({
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400912 "//build/bazel/platforms/os:android": [
913 ":java-lib-3-neverlink",
914 ":java-lib-4",
915 ],
Alix495cc8a2023-01-12 18:20:32 +0000916 "//conditions:default": [],
917 })`,
Liz Kammer02914402023-08-07 13:38:18 -0400918 "sdk_version": `"current"`,
Alix495cc8a2023-01-12 18:20:32 +0000919 }),
920 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Alix495cc8a2023-01-12 18:20:32 +0000921 },
922 })
923}
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500924
925func TestJavaLibraryArchVariantSrcsWithExcludes(t *testing.T) {
926 runJavaLibraryTestCase(t, Bp2buildTestCase{
927 Description: "java_library with arch variant libs",
928 Blueprint: `java_library {
929 name: "java-lib-1",
930 srcs: ["a.java", "b.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400931 sdk_version: "current",
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500932 target: {
933 android: {
934 exclude_srcs: ["a.java"],
935 },
936 },
937 bazel_module: { bp2build_available: true },
938}
939`,
940 ExpectedBazelTargets: []string{
941 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
942 "srcs": `["b.java"] + select({
943 "//build/bazel/platforms/os:android": [],
944 "//conditions:default": ["a.java"],
945 })`,
Liz Kammer02914402023-08-07 13:38:18 -0400946 "sdk_version": `"current"`,
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500947 }),
948 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
949 },
950 })
951}
Alixb29a3cd2023-05-09 20:37:49 +0000952
953func TestJavaLibraryJavaResourcesSingleFilegroup(t *testing.T) {
954 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
955 Filesystem: map[string]string{
956 "res/a.res": "",
957 "res/b.res": "",
958 "res/dir1/b.res": "",
959 },
960 Description: "java_library",
961 Blueprint: `java_library {
962 name: "java-lib-1",
963 srcs: ["a.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400964 sdk_version: "current",
Alixb29a3cd2023-05-09 20:37:49 +0000965 java_resources: [":filegroup1"],
966 bazel_module: { bp2build_available: true },
967}
968
969filegroup {
970 name: "filegroup1",
971 path: "foo",
972 srcs: ["foo/a", "foo/b"],
973}
974
975`,
976 ExpectedBazelTargets: []string{
977 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
978 "srcs": `["a.java"]`,
979 "resources": `[":filegroup1"]`,
980 "resource_strip_prefix": `"foo"`,
Liz Kammer02914402023-08-07 13:38:18 -0400981 "sdk_version": `"current"`,
Alixb29a3cd2023-05-09 20:37:49 +0000982 }),
983 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
984 MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
985 "srcs": `[
986 "foo/a",
987 "foo/b",
988 ]`}),
989 },
990 }, func(ctx android.RegistrationContext) {
991 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
992 })
993}
Alix289e9c62023-08-16 15:06:31 +0000994
995func TestJavaLibraryJavaResourcesMultipleFilegroup(t *testing.T) {
996 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
997 Filesystem: map[string]string{
998 "a.res": "",
999 },
1000 Description: "with java_resources that has multiple filegroups",
1001 Blueprint: `java_library {
1002 name: "java-lib-1",
1003 srcs: ["a.java"],
1004 java_resources: ["a.res", ":filegroup1", ":filegroup2"],
Liz Kammer02914402023-08-07 13:38:18 -04001005 sdk_version: "current",
Alix289e9c62023-08-16 15:06:31 +00001006 bazel_module: { bp2build_available: true },
1007}
1008
1009filegroup {
1010 name: "filegroup1",
1011 path: "foo",
1012 srcs: ["foo/a"],
1013}
1014
1015filegroup {
1016 name: "filegroup2",
1017 path: "bar",
1018 srcs: ["bar/a"],
1019}
1020`,
1021 ExpectedBazelTargets: []string{
1022 MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup1", AttrNameToString{
1023 "resource_strip_prefix": `"foo"`,
1024 "resources": `[":filegroup1"]`,
1025 }),
1026 MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup2", AttrNameToString{
1027 "resource_strip_prefix": `"bar"`,
1028 "resources": `[":filegroup2"]`,
1029 }),
1030 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
1031 "srcs": `["a.java"]`,
1032 "resources": `["a.res"]`,
1033 "resource_strip_prefix": `"."`,
1034 "additional_resources": `[
1035 "java-lib-1_filegroup_resources_filegroup1",
1036 "java-lib-1_filegroup_resources_filegroup2",
1037 ]`,
Liz Kammer02914402023-08-07 13:38:18 -04001038 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +00001039 }),
1040 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
1041 MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
1042 "srcs": `["foo/a"]`}),
1043 MakeBazelTargetNoRestrictions("filegroup", "filegroup2", AttrNameToString{
1044 "srcs": `["bar/a"]`}),
1045 },
1046 }, func(ctx android.RegistrationContext) {
1047 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
1048 })
1049}
Liz Kammer65942c82023-09-07 15:59:42 -04001050
1051func TestJavaSdkVersionCorePlatformDoesNotConvert(t *testing.T) {
1052 runJavaLibraryTestCase(t, Bp2buildTestCase{
1053 Blueprint: `java_library {
1054 name: "java-lib-1",
1055 sdk_version: "core_platform",
1056 bazel_module: { bp2build_available: true },
1057}`,
1058 ExpectedBazelTargets: []string{},
1059 })
1060}