blob: 7429ae6df2b9337957fa9e644a482563444624a1 [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{
Sam Delmerico79985812022-03-23 20:20:42 +0000444 "res/a.res": "",
Alix289e9c62023-08-16 15:06:31 +0000445 "res1/b.res": "",
Sam Delmerico79985812022-03-23 20:20:42 +0000446 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000447 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400448 name: "java-lib-1",
Sam Delmerico79985812022-03-23 20:20:42 +0000449 java_resource_dirs: ["res", "res1"],
Liz Kammer02914402023-08-07 13:38:18 -0400450 sdk_version: "current",
Sam Delmerico79985812022-03-23 20:20:42 +0000451}`,
Alix289e9c62023-08-16 15:06:31 +0000452 ExpectedBazelTargets: []string{
453 MakeBazelTarget("java_resources", "java-lib-1_resource_dir_res1", AttrNameToString{
454 "resource_strip_prefix": `"res1"`,
455 "resources": `["res1/b.res"]`,
456 }),
457 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
458 "additional_resources": `["java-lib-1_resource_dir_res1"]`,
459 "resources": `["res/a.res"]`,
460 "resource_strip_prefix": `"res"`,
Liz Kammer02914402023-08-07 13:38:18 -0400461 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +0000462 }),
463 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
464 },
465 })
466}
467
468func TestJavaLibraryJavaResourcesAndResourceDirs(t *testing.T) {
469 runJavaLibraryTestCase(t, Bp2buildTestCase{
470 Filesystem: map[string]string{
471 "resdir/a.res": "",
472 },
473 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400474 name: "java-lib-1",
475 java_resources: ["res1", "res2"],
476 java_resource_dirs: ["resdir"],
477 sdk_version: "current",
Alix289e9c62023-08-16 15:06:31 +0000478}`,
479 ExpectedBazelTargets: []string{
480 MakeBazelTarget("java_resources", "java-lib-1_resource_dir_resdir", AttrNameToString{
481 "resource_strip_prefix": `"resdir"`,
482 "resources": `["resdir/a.res"]`,
483 }),
484 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
485 "additional_resources": `["java-lib-1_resource_dir_resdir"]`,
486 "resource_strip_prefix": `"."`,
487 "resources": `[
488 "res1",
489 "res2",
490 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400491 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +0000492 }),
493 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
494 },
Sam Delmerico79985812022-03-23 20:20:42 +0000495 })
496}
Sam Delmerico97bd1272022-08-25 14:45:31 -0400497
498func TestJavaLibraryAidl(t *testing.T) {
499 runJavaLibraryTestCase(t, Bp2buildTestCase{
500 Description: "Java library - aidl creates separate dependency",
501 ModuleTypeUnderTest: "java_library",
502 ModuleTypeUnderTestFactory: java.LibraryFactory,
503 Blueprint: `java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400504 name: "example_lib",
505 srcs: [
506 "a.java",
507 "b.java",
508 "a.aidl",
509 "b.aidl",
510 ],
511 bazel_module: { bp2build_available: true },
512 sdk_version: "current",
Sam Delmerico97bd1272022-08-25 14:45:31 -0400513}`,
514 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000515 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400516 "srcs": `[
517 "a.aidl",
518 "b.aidl",
519 ]`,
520 }),
Alixe06d75b2022-08-31 18:28:19 +0000521 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400522 "deps": `[":example_lib_aidl_library"]`,
523 }),
Alixe06d75b2022-08-31 18:28:19 +0000524 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400525 "deps": `[":example_lib_java_aidl_library"]`,
526 "exports": `[":example_lib_java_aidl_library"]`,
527 "srcs": `[
528 "a.java",
529 "b.java",
530 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400531 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400532 }),
Alix341484b2022-10-31 19:08:18 +0000533 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400534 }})
535}
536
537func TestJavaLibraryAidlSrcsNoFileGroup(t *testing.T) {
538 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
539 Description: "Java library - aidl filegroup is parsed",
540 ModuleTypeUnderTest: "java_library",
541 ModuleTypeUnderTestFactory: java.LibraryFactory,
542 Blueprint: `
543java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400544 name: "example_lib",
545 srcs: [
546 "a.java",
547 "b.aidl",
548 ],
549 sdk_version: "current",
550 bazel_module: { bp2build_available: true },
Sam Delmerico97bd1272022-08-25 14:45:31 -0400551}`,
552 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000553 MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400554 "srcs": `["b.aidl"]`,
555 }),
Alixe06d75b2022-08-31 18:28:19 +0000556 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400557 "deps": `[":example_lib_aidl_library"]`,
558 }),
Alixe06d75b2022-08-31 18:28:19 +0000559 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400560 "deps": `[":example_lib_java_aidl_library"]`,
561 "exports": `[":example_lib_java_aidl_library"]`,
562 "srcs": `["a.java"]`,
563 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400564 }),
Alix341484b2022-10-31 19:08:18 +0000565 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400566 },
567 }, func(ctx android.RegistrationContext) {
568 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
569 })
570}
571
572func TestJavaLibraryAidlFilegroup(t *testing.T) {
573 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
574 Description: "Java library - aidl filegroup is parsed",
575 ModuleTypeUnderTest: "java_library",
576 ModuleTypeUnderTestFactory: java.LibraryFactory,
577 Blueprint: `
578filegroup {
579 name: "random_other_files",
580 srcs: [
581 "a.java",
582 "b.java",
583 ],
584}
585filegroup {
586 name: "aidl_files",
587 srcs: [
588 "a.aidl",
589 "b.aidl",
590 ],
591}
592java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400593 name: "example_lib",
594 srcs: [
595 "a.java",
596 "b.java",
597 ":aidl_files",
598 ":random_other_files",
599 ],
600 sdk_version: "current",
601 bazel_module: { bp2build_available: true },
Sam Delmerico97bd1272022-08-25 14:45:31 -0400602}`,
603 ExpectedBazelTargets: []string{
604 MakeBazelTargetNoRestrictions("aidl_library", "aidl_files", AttrNameToString{
605 "srcs": `[
606 "a.aidl",
607 "b.aidl",
608 ]`,
Liz Kammer2b3f56e2023-03-23 11:51:49 -0400609 "tags": `["apex_available=//apex_available:anyapex"]`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400610 }),
Alixe06d75b2022-08-31 18:28:19 +0000611 MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400612 "deps": `[":aidl_files"]`,
613 }),
Alixe06d75b2022-08-31 18:28:19 +0000614 MakeBazelTarget("java_library", "example_lib", AttrNameToString{
Sam Delmerico97bd1272022-08-25 14:45:31 -0400615 "deps": `[":example_lib_java_aidl_library"]`,
616 "exports": `[":example_lib_java_aidl_library"]`,
617 "srcs": `[
618 "a.java",
619 "b.java",
620 ":random_other_files",
621 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400622 "sdk_version": `"current"`,
Sam Delmerico97bd1272022-08-25 14:45:31 -0400623 }),
Alix341484b2022-10-31 19:08:18 +0000624 MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
Sam Delmerico97bd1272022-08-25 14:45:31 -0400625 MakeBazelTargetNoRestrictions("filegroup", "random_other_files", AttrNameToString{
626 "srcs": `[
627 "a.java",
628 "b.java",
629 ]`,
630 }),
631 },
632 }, func(ctx android.RegistrationContext) {
633 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
634 })
635}
Sam Delmerico7c721372022-08-25 13:51:21 -0400636
637func TestJavaLibraryAidlNonAdjacentAidlFilegroup(t *testing.T) {
638 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
639 Description: "java_library with non adjacent aidl filegroup",
640 ModuleTypeUnderTest: "java_library",
641 ModuleTypeUnderTestFactory: java.LibraryFactory,
642 Filesystem: map[string]string{
643 "path/to/A/Android.bp": `
644filegroup {
Liz Kammer02914402023-08-07 13:38:18 -0400645 name: "A_aidl",
646 srcs: ["aidl/A.aidl"],
647 path: "aidl",
Sam Delmerico7c721372022-08-25 13:51:21 -0400648}`,
649 },
650 Blueprint: `
651java_library {
Liz Kammer02914402023-08-07 13:38:18 -0400652 name: "foo",
653 srcs: [
654 ":A_aidl",
655 ],
656 sdk_version: "current",
Sam Delmerico7c721372022-08-25 13:51:21 -0400657}`,
658 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000659 MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{
Sam Delmerico7c721372022-08-25 13:51:21 -0400660 "deps": `["//path/to/A:A_aidl"]`,
661 }),
Alixe06d75b2022-08-31 18:28:19 +0000662 MakeBazelTarget("java_library", "foo", AttrNameToString{
Liz Kammer02914402023-08-07 13:38:18 -0400663 "exports": `[":foo_java_aidl_library"]`,
664 "sdk_version": `"current"`,
Sam Delmerico7c721372022-08-25 13:51:21 -0400665 }),
Alix341484b2022-10-31 19:08:18 +0000666 MakeNeverlinkDuplicateTarget("java_library", "foo"),
Sam Delmerico7c721372022-08-25 13:51:21 -0400667 },
668 }, func(ctx android.RegistrationContext) {
669 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
670 })
671}
Cole Faustc843b992022-08-02 18:06:50 -0700672
673func TestConvertArmNeonVariant(t *testing.T) {
674 t.Helper()
675 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
676 Description: "Android Library - simple arch feature",
677 ModuleTypeUnderTest: "android_library",
678 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
679 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
680android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400681 name: "TestLib",
682 manifest: "manifest/AndroidManifest.xml",
683 srcs: ["lib.java"],
684 sdk_version: "current",
685 arch: {
686 arm: {
687 neon: {
688 srcs: ["arm_neon.java"],
689 },
690 },
691 },
Cole Faustc843b992022-08-02 18:06:50 -0700692}
693`,
694 ExpectedBazelTargets: []string{
695 MakeBazelTarget(
696 "android_library",
697 "TestLib",
698 AttrNameToString{
699 "srcs": `["lib.java"] + select({
700 "//build/bazel/platforms/arch/variants:arm-neon": ["arm_neon.java"],
701 "//conditions:default": [],
702 })`,
703 "manifest": `"manifest/AndroidManifest.xml"`,
704 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400705 "sdk_version": `"current"`, // use as default
Cole Faustc843b992022-08-02 18:06:50 -0700706 }),
Alix82fb94e2022-10-26 20:40:18 +0000707 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700708 }})
709}
710
711func TestConvertMultipleArchFeatures(t *testing.T) {
712 t.Helper()
713 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
714 Description: "Android Library - multiple arch features",
715 ModuleTypeUnderTest: "android_library",
716 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
717 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
718android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400719 name: "TestLib",
720 manifest: "manifest/AndroidManifest.xml",
721 srcs: ["lib.java"],
722 sdk_version: "current",
723 arch: {
724 x86: {
725 ssse3: {
726 srcs: ["ssse3.java"],
727 },
728 sse4_1: {
729 srcs: ["sse4_1.java"],
730 },
731 },
732 },
Cole Faustc843b992022-08-02 18:06:50 -0700733}
734`,
735 ExpectedBazelTargets: []string{
736 MakeBazelTarget(
737 "android_library",
738 "TestLib",
739 AttrNameToString{
740 "srcs": `["lib.java"] + select({
741 "//build/bazel/platforms/arch/variants:x86-sse4_1": ["sse4_1.java"],
742 "//build/bazel/platforms/arch/variants:x86-sse4_1-ssse3": [
743 "sse4_1.java",
744 "ssse3.java",
745 ],
746 "//build/bazel/platforms/arch/variants:x86-ssse3": ["ssse3.java"],
747 "//conditions:default": [],
748 })`,
749 "manifest": `"manifest/AndroidManifest.xml"`,
750 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400751 "sdk_version": `"current"`,
Cole Faustc843b992022-08-02 18:06:50 -0700752 }),
Alix82fb94e2022-10-26 20:40:18 +0000753 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700754 }})
755}
756
757func TestConvertExcludeSrcsArchFeature(t *testing.T) {
758 t.Helper()
759 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
760 Description: "Android Library - exclude_srcs with arch feature",
761 ModuleTypeUnderTest: "android_library",
762 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
763 Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
764android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400765 name: "TestLib",
766 manifest: "manifest/AndroidManifest.xml",
767 srcs: ["lib.java"],
768 arch: {
769 arm: {
770 srcs: ["arm_non_neon.java"],
771 neon: {
772 exclude_srcs: ["arm_non_neon.java"],
773 },
774 },
775 },
776 sdk_version: "current",
Cole Faustc843b992022-08-02 18:06:50 -0700777}
778`,
779 ExpectedBazelTargets: []string{
780 MakeBazelTarget(
781 "android_library",
782 "TestLib",
783 AttrNameToString{
784 "srcs": `["lib.java"] + select({
785 "//build/bazel/platforms/arch/variants:arm-neon": [],
786 "//build/bazel/platforms/arch:arm": ["arm_non_neon.java"],
787 "//conditions:default": [],
788 })`,
789 "manifest": `"manifest/AndroidManifest.xml"`,
790 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400791 "sdk_version": `"current"`, // use as default
Cole Faustc843b992022-08-02 18:06:50 -0700792 }),
Alix82fb94e2022-10-26 20:40:18 +0000793 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Cole Faustc843b992022-08-02 18:06:50 -0700794 }})
795}
Alix8062f4d2022-11-14 21:38:07 +0000796
797func TestJavaLibraryKotlinSrcs(t *testing.T) {
798 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000799 Description: "java_library with kotlin srcs",
Alix8062f4d2022-11-14 21:38:07 +0000800 Blueprint: `java_library {
801 name: "java-lib-1",
802 srcs: ["a.java", "b.java", "c.kt"],
803 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400804 sdk_version: "current",
Alix8062f4d2022-11-14 21:38:07 +0000805}
806`,
807 ExpectedBazelTargets: []string{
808 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
809 "srcs": `[
810 "a.java",
811 "b.java",
812 "c.kt",
813 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400814 "sdk_version": `"current"`,
Alix8062f4d2022-11-14 21:38:07 +0000815 }),
Alix266bbf22022-12-15 06:12:46 +0000816 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000817 },
818 })
819}
820
Alixf848bf82023-03-06 19:43:55 +0000821func TestJavaLibraryKotlincflags(t *testing.T) {
822 runJavaLibraryTestCase(t, Bp2buildTestCase{
823 Description: "java_library with kotlincfalgs",
824 Blueprint: `java_library {
825 name: "java-lib-1",
826 srcs: [ "a.kt"],
827 kotlincflags: ["-flag1", "-flag2"],
828 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400829 sdk_version: "current",
Alixf848bf82023-03-06 19:43:55 +0000830}
831`,
832 ExpectedBazelTargets: []string{
833 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
834 "srcs": `["a.kt"]`,
835 "kotlincflags": `[
836 "-flag1",
837 "-flag2",
838 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400839 "sdk_version": `"current"`,
Alixf848bf82023-03-06 19:43:55 +0000840 }),
841 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
842 },
843 })
844}
845
Alix8062f4d2022-11-14 21:38:07 +0000846func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
847 runJavaLibraryTestCase(t, Bp2buildTestCase{
Alixf848bf82023-03-06 19:43:55 +0000848 Description: "java_library with kotlin common_srcs",
Alix8062f4d2022-11-14 21:38:07 +0000849 Blueprint: `java_library {
850 name: "java-lib-1",
851 srcs: ["a.java", "b.java"],
852 common_srcs: ["c.kt"],
853 bazel_module: { bp2build_available: true },
Liz Kammer02914402023-08-07 13:38:18 -0400854 sdk_version: "current",
Alix8062f4d2022-11-14 21:38:07 +0000855}
856`,
857 ExpectedBazelTargets: []string{
858 MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
859 "srcs": `[
860 "a.java",
861 "b.java",
862 ]`,
863 "common_srcs": `["c.kt"]`,
Liz Kammer02914402023-08-07 13:38:18 -0400864 "sdk_version": `"current"`,
Alix8062f4d2022-11-14 21:38:07 +0000865 }),
Alix266bbf22022-12-15 06:12:46 +0000866 MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
Alix8062f4d2022-11-14 21:38:07 +0000867 },
868 })
869}
Alix495cc8a2023-01-12 18:20:32 +0000870
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400871func TestJavaLibraryArchVariantDeps(t *testing.T) {
Alix495cc8a2023-01-12 18:20:32 +0000872 runJavaLibraryTestCase(t, Bp2buildTestCase{
873 Description: "java_library with arch variant libs",
874 Blueprint: `java_library {
875 name: "java-lib-1",
876 srcs: ["a.java"],
877 libs: ["java-lib-2"],
Liz Kammer02914402023-08-07 13:38:18 -0400878 sdk_version: "current",
Alix495cc8a2023-01-12 18:20:32 +0000879 target: {
880 android: {
881 libs: ["java-lib-3"],
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400882 static_libs: ["java-lib-4"],
Alix495cc8a2023-01-12 18:20:32 +0000883 },
884 },
885 bazel_module: { bp2build_available: true },
886}
887
Liz Kammer02914402023-08-07 13:38:18 -0400888 java_library{
889 name: "java-lib-2",
890 bazel_module: { bp2build_available: false },
Alix495cc8a2023-01-12 18:20:32 +0000891}
892
Liz Kammer02914402023-08-07 13:38:18 -0400893 java_library{
894 name: "java-lib-3",
895 bazel_module: { bp2build_available: false },
Alix495cc8a2023-01-12 18:20:32 +0000896}
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400897
Liz Kammer02914402023-08-07 13:38:18 -0400898 java_library{
899 name: "java-lib-4",
900 bazel_module: { bp2build_available: false },
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400901}
Alix495cc8a2023-01-12 18:20:32 +0000902`,
903 ExpectedBazelTargets: []string{
904 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
905 "srcs": `["a.java"]`,
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400906 "exports": `select({
907 "//build/bazel/platforms/os:android": [":java-lib-4"],
908 "//conditions:default": [],
909 })`,
Alix495cc8a2023-01-12 18:20:32 +0000910 "deps": `[":java-lib-2-neverlink"] + select({
Romain Jobredeauxeb711b92023-04-03 22:53:34 -0400911 "//build/bazel/platforms/os:android": [
912 ":java-lib-3-neverlink",
913 ":java-lib-4",
914 ],
Alix495cc8a2023-01-12 18:20:32 +0000915 "//conditions:default": [],
916 })`,
Liz Kammer02914402023-08-07 13:38:18 -0400917 "sdk_version": `"current"`,
Alix495cc8a2023-01-12 18:20:32 +0000918 }),
919 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
Alix495cc8a2023-01-12 18:20:32 +0000920 },
921 })
922}
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500923
924func TestJavaLibraryArchVariantSrcsWithExcludes(t *testing.T) {
925 runJavaLibraryTestCase(t, Bp2buildTestCase{
926 Description: "java_library with arch variant libs",
927 Blueprint: `java_library {
928 name: "java-lib-1",
929 srcs: ["a.java", "b.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400930 sdk_version: "current",
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500931 target: {
932 android: {
933 exclude_srcs: ["a.java"],
934 },
935 },
936 bazel_module: { bp2build_available: true },
937}
938`,
939 ExpectedBazelTargets: []string{
940 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
941 "srcs": `["b.java"] + select({
942 "//build/bazel/platforms/os:android": [],
943 "//conditions:default": ["a.java"],
944 })`,
Liz Kammer02914402023-08-07 13:38:18 -0400945 "sdk_version": `"current"`,
Romain Jobredeaux3eaf7472023-03-08 16:34:17 -0500946 }),
947 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
948 },
949 })
950}
Alixb29a3cd2023-05-09 20:37:49 +0000951
952func TestJavaLibraryJavaResourcesSingleFilegroup(t *testing.T) {
953 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
954 Filesystem: map[string]string{
955 "res/a.res": "",
956 "res/b.res": "",
957 "res/dir1/b.res": "",
958 },
959 Description: "java_library",
960 Blueprint: `java_library {
961 name: "java-lib-1",
962 srcs: ["a.java"],
Liz Kammer02914402023-08-07 13:38:18 -0400963 sdk_version: "current",
Alixb29a3cd2023-05-09 20:37:49 +0000964 java_resources: [":filegroup1"],
965 bazel_module: { bp2build_available: true },
966}
967
968filegroup {
969 name: "filegroup1",
970 path: "foo",
971 srcs: ["foo/a", "foo/b"],
972}
973
974`,
975 ExpectedBazelTargets: []string{
976 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
977 "srcs": `["a.java"]`,
978 "resources": `[":filegroup1"]`,
979 "resource_strip_prefix": `"foo"`,
Liz Kammer02914402023-08-07 13:38:18 -0400980 "sdk_version": `"current"`,
Alixb29a3cd2023-05-09 20:37:49 +0000981 }),
982 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
983 MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
984 "srcs": `[
985 "foo/a",
986 "foo/b",
987 ]`}),
988 },
989 }, func(ctx android.RegistrationContext) {
990 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
991 })
992}
Alix289e9c62023-08-16 15:06:31 +0000993
994func TestJavaLibraryJavaResourcesMultipleFilegroup(t *testing.T) {
995 runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
996 Filesystem: map[string]string{
997 "a.res": "",
998 },
999 Description: "with java_resources that has multiple filegroups",
1000 Blueprint: `java_library {
1001 name: "java-lib-1",
1002 srcs: ["a.java"],
1003 java_resources: ["a.res", ":filegroup1", ":filegroup2"],
Liz Kammer02914402023-08-07 13:38:18 -04001004 sdk_version: "current",
Alix289e9c62023-08-16 15:06:31 +00001005 bazel_module: { bp2build_available: true },
1006}
1007
1008filegroup {
1009 name: "filegroup1",
1010 path: "foo",
1011 srcs: ["foo/a"],
1012}
1013
1014filegroup {
1015 name: "filegroup2",
1016 path: "bar",
1017 srcs: ["bar/a"],
1018}
1019`,
1020 ExpectedBazelTargets: []string{
1021 MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup1", AttrNameToString{
1022 "resource_strip_prefix": `"foo"`,
1023 "resources": `[":filegroup1"]`,
1024 }),
1025 MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup2", AttrNameToString{
1026 "resource_strip_prefix": `"bar"`,
1027 "resources": `[":filegroup2"]`,
1028 }),
1029 MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
1030 "srcs": `["a.java"]`,
1031 "resources": `["a.res"]`,
1032 "resource_strip_prefix": `"."`,
1033 "additional_resources": `[
1034 "java-lib-1_filegroup_resources_filegroup1",
1035 "java-lib-1_filegroup_resources_filegroup2",
1036 ]`,
Liz Kammer02914402023-08-07 13:38:18 -04001037 "sdk_version": `"current"`,
Alix289e9c62023-08-16 15:06:31 +00001038 }),
1039 MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
1040 MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
1041 "srcs": `["foo/a"]`}),
1042 MakeBazelTargetNoRestrictions("filegroup", "filegroup2", AttrNameToString{
1043 "srcs": `["bar/a"]`}),
1044 },
1045 }, func(ctx android.RegistrationContext) {
1046 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
1047 })
1048}