blob: 7d8ab635ae472f0af5d16634d7775ff702888c33 [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/cc"
22 "android/soong/java"
23)
24
Sam Delmerico3177a6e2022-06-21 19:28:33 +000025func runJavaBinaryHostTestCase(t *testing.T, tc Bp2buildTestCase) {
Wei Libafb6d62021-12-10 03:14:59 -080026 t.Helper()
Sam Delmerico3177a6e2022-06-21 19:28:33 +000027 (&tc).ModuleTypeUnderTest = "java_binary_host"
28 (&tc).ModuleTypeUnderTestFactory = java.BinaryHostFactory
Chris Parsonscd209032023-09-19 01:12:48 +000029 tc.StubbedBuildDefinitions = append(tc.StubbedBuildDefinitions, "//other:jni-lib-1")
Sam Delmerico3177a6e2022-06-21 19:28:33 +000030 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
Wei Libafb6d62021-12-10 03:14:59 -080031 ctx.RegisterModuleType("cc_library_host_shared", cc.LibraryHostSharedFactory)
Sam Delmericoc0161432022-02-25 21:34:51 +000032 ctx.RegisterModuleType("java_library", java.LibraryFactory)
Alixb4e09a02022-09-27 15:36:01 +000033 ctx.RegisterModuleType("java_import_host", java.ImportFactory)
Wei Libafb6d62021-12-10 03:14:59 -080034 }, tc)
35}
36
Lukacs T. Berkibc5f7312022-10-31 09:01:34 +000037var testFs = map[string]string{
Wei Libafb6d62021-12-10 03:14:59 -080038 "test.mf": "Main-Class: com.android.test.MainClass",
39 "other/Android.bp": `cc_library_host_shared {
40 name: "jni-lib-1",
41 stl: "none",
42}`,
43}
44
45func TestJavaBinaryHost(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000046 runJavaBinaryHostTestCase(t, Bp2buildTestCase{
47 Description: "java_binary_host with srcs, exclude_srcs, jni_libs, javacflags, and manifest.",
Lukacs T. Berkibc5f7312022-10-31 09:01:34 +000048 Filesystem: testFs,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000049 Blueprint: `java_binary_host {
Wei Libafb6d62021-12-10 03:14:59 -080050 name: "java-binary-host-1",
51 srcs: ["a.java", "b.java"],
52 exclude_srcs: ["b.java"],
53 manifest: "test.mf",
54 jni_libs: ["jni-lib-1"],
Sam Delmerico4e272292022-01-06 20:03:51 +000055 javacflags: ["-Xdoclint:all/protected"],
Wei Libafb6d62021-12-10 03:14:59 -080056 bazel_module: { bp2build_available: true },
Vinh Tran3ac6daf2022-04-22 19:09:58 -040057 java_version: "8",
Wei Libafb6d62021-12-10 03:14:59 -080058}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000059 ExpectedBazelTargets: []string{
Romain Jobredeauxf5f60732023-03-16 11:00:36 -040060 MakeBazelTarget("java_library", "java-binary-host-1_lib", AttrNameToString{
Romain Jobredeaux2eef2e12023-02-24 12:07:08 -050061 "srcs": `["a.java"]`,
62 "deps": `["//other:jni-lib-1"]`,
63 "java_version": `"8"`,
64 "javacopts": `["-Xdoclint:all/protected"]`,
Sam Delmerico75539d62022-01-31 14:37:29 +000065 "target_compatible_with": `select({
66 "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
67 "//conditions:default": [],
Romain Jobredeaux2eef2e12023-02-24 12:07:08 -050068 })`,
69 }),
Romain Jobredeauxf5f60732023-03-16 11:00:36 -040070 MakeBazelTarget("java_binary", "java-binary-host-1", AttrNameToString{
Romain Jobredeaux2eef2e12023-02-24 12:07:08 -050071 "main_class": `"com.android.test.MainClass"`,
Spandan Das5dba0ec2023-06-01 02:48:09 +000072 "jvm_flags": `["-Djava.library.path=$${RUNPATH}other/jni-lib-1"]`,
Romain Jobredeauxf5f60732023-03-16 11:00:36 -040073 "target_compatible_with": `select({
74 "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
75 "//conditions:default": [],
Romain Jobredeaux2eef2e12023-02-24 12:07:08 -050076 })`,
77 "runtime_deps": `[":java-binary-host-1_lib"]`,
78 }),
Wei Libafb6d62021-12-10 03:14:59 -080079 },
80 })
81}
Sam Delmericoc0161432022-02-25 21:34:51 +000082
83func TestJavaBinaryHostRuntimeDeps(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000084 runJavaBinaryHostTestCase(t, Bp2buildTestCase{
Chris Parsonscd209032023-09-19 01:12:48 +000085 Description: "java_binary_host with srcs, exclude_srcs, jni_libs, javacflags, and manifest.",
86 Filesystem: testFs,
87 StubbedBuildDefinitions: []string{"java-dep-1"},
Sam Delmerico3177a6e2022-06-21 19:28:33 +000088 Blueprint: `java_binary_host {
Sam Delmericoc0161432022-02-25 21:34:51 +000089 name: "java-binary-host-1",
90 static_libs: ["java-dep-1"],
91 manifest: "test.mf",
92 bazel_module: { bp2build_available: true },
93}
94
95java_library {
96 name: "java-dep-1",
97 srcs: ["a.java"],
Sam Delmericoc0161432022-02-25 21:34:51 +000098}
99`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000100 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000101 MakeBazelTarget("java_binary", "java-binary-host-1", AttrNameToString{
Sam Delmericoc0161432022-02-25 21:34:51 +0000102 "main_class": `"com.android.test.MainClass"`,
103 "runtime_deps": `[":java-dep-1"]`,
104 "target_compatible_with": `select({
105 "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
106 "//conditions:default": [],
107 })`,
108 }),
109 },
110 })
111}
Alixb4e09a02022-09-27 15:36:01 +0000112
113func TestJavaBinaryHostLibs(t *testing.T) {
114 runJavaBinaryHostTestCase(t, Bp2buildTestCase{
Chris Parsonscd209032023-09-19 01:12:48 +0000115 Description: "java_binary_host with srcs, libs.",
116 Filesystem: testFs,
117 StubbedBuildDefinitions: []string{"prebuilt_java-lib-dep-1"},
Alixb4e09a02022-09-27 15:36:01 +0000118 Blueprint: `java_binary_host {
119 name: "java-binary-host-libs",
120 libs: ["java-lib-dep-1"],
121 manifest: "test.mf",
122 srcs: ["a.java"],
123}
124
125java_import_host{
126 name: "java-lib-dep-1",
127 jars: ["foo.jar"],
Alixb4e09a02022-09-27 15:36:01 +0000128}
129`,
130 ExpectedBazelTargets: []string{
Romain Jobredeauxf5f60732023-03-16 11:00:36 -0400131 MakeBazelTarget("java_library", "java-binary-host-libs_lib", AttrNameToString{
132 "srcs": `["a.java"]`,
133 "deps": `[":java-lib-dep-1-neverlink"]`,
Alixb4e09a02022-09-27 15:36:01 +0000134 "target_compatible_with": `select({
135 "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
136 "//conditions:default": [],
137 })`,
138 }),
Romain Jobredeauxf5f60732023-03-16 11:00:36 -0400139 MakeBazelTarget("java_binary", "java-binary-host-libs", AttrNameToString{
140 "main_class": `"com.android.test.MainClass"`,
141 "target_compatible_with": `select({
142 "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
143 "//conditions:default": [],
144 })`,
145 "runtime_deps": `[":java-binary-host-libs_lib"]`,
146 }),
Alixb4e09a02022-09-27 15:36:01 +0000147 },
148 })
149}
Alix7c8eaeb2022-11-16 15:44:55 +0000150
151func TestJavaBinaryHostKotlinSrcs(t *testing.T) {
152 runJavaBinaryHostTestCase(t, Bp2buildTestCase{
153 Description: "java_binary_host with srcs, libs.",
154 Filesystem: testFs,
155 Blueprint: `java_binary_host {
156 name: "java-binary-host",
157 manifest: "test.mf",
158 srcs: ["a.java", "b.kt"],
159}
160`,
161 ExpectedBazelTargets: []string{
Romain Jobredeauxf5f60732023-03-16 11:00:36 -0400162 MakeBazelTarget("kt_jvm_library", "java-binary-host_lib", AttrNameToString{
Alix7c8eaeb2022-11-16 15:44:55 +0000163 "srcs": `[
164 "a.java",
165 "b.kt",
166 ]`,
167 "target_compatible_with": `select({
168 "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
169 "//conditions:default": [],
170 })`,
171 }),
172 MakeBazelTarget("java_binary", "java-binary-host", AttrNameToString{
173 "main_class": `"com.android.test.MainClass"`,
Romain Jobredeauxf5f60732023-03-16 11:00:36 -0400174 "runtime_deps": `[":java-binary-host_lib"]`,
Alix7c8eaeb2022-11-16 15:44:55 +0000175 "target_compatible_with": `select({
176 "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
177 "//conditions:default": [],
178 })`,
179 }),
180 },
181 })
182}
183
184func TestJavaBinaryHostKotlinCommonSrcs(t *testing.T) {
185 runJavaBinaryHostTestCase(t, Bp2buildTestCase{
186 Description: "java_binary_host with common_srcs",
187 Filesystem: testFs,
188 Blueprint: `java_binary_host {
189 name: "java-binary-host",
190 manifest: "test.mf",
191 srcs: ["a.java"],
192 common_srcs: ["b.kt"],
193}
194`,
195 ExpectedBazelTargets: []string{
Romain Jobredeauxf5f60732023-03-16 11:00:36 -0400196 MakeBazelTarget("kt_jvm_library", "java-binary-host_lib", AttrNameToString{
Alix7c8eaeb2022-11-16 15:44:55 +0000197 "srcs": `["a.java"]`,
198 "common_srcs": `["b.kt"]`,
199 "target_compatible_with": `select({
200 "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
201 "//conditions:default": [],
202 })`,
203 }),
204 MakeBazelTarget("java_binary", "java-binary-host", AttrNameToString{
205 "main_class": `"com.android.test.MainClass"`,
Romain Jobredeauxf5f60732023-03-16 11:00:36 -0400206 "runtime_deps": `[":java-binary-host_lib"]`,
Alix7c8eaeb2022-11-16 15:44:55 +0000207 "target_compatible_with": `select({
208 "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
209 "//conditions:default": [],
210 })`,
211 }),
212 },
213 })
214}
215
216func TestJavaBinaryHostKotlinWithResourceDir(t *testing.T) {
217 runJavaBinaryHostTestCase(t, Bp2buildTestCase{
218 Description: "java_binary_host with srcs, libs, resource dir .",
219 Filesystem: map[string]string{
220 "test.mf": "Main-Class: com.android.test.MainClass",
221 "res/a.res": "",
222 "res/dir1/b.res": "",
223 },
224 Blueprint: `java_binary_host {
225 name: "java-binary-host",
226 manifest: "test.mf",
227 srcs: ["a.java", "b.kt"],
228 java_resource_dirs: ["res"],
229}
230`,
231 ExpectedBazelTargets: []string{
Romain Jobredeauxf5f60732023-03-16 11:00:36 -0400232 MakeBazelTarget("kt_jvm_library", "java-binary-host_lib", AttrNameToString{
Alix7c8eaeb2022-11-16 15:44:55 +0000233 "srcs": `[
234 "a.java",
235 "b.kt",
236 ]`,
Alix5afd9fa2023-03-03 19:22:15 +0000237 "resources": `[
238 "res/a.res",
239 "res/dir1/b.res",
240 ]`,
241 "resource_strip_prefix": `"res"`,
Alix7c8eaeb2022-11-16 15:44:55 +0000242 "target_compatible_with": `select({
243 "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
244 "//conditions:default": [],
245 })`,
246 }),
247 MakeBazelTarget("java_binary", "java-binary-host", AttrNameToString{
248 "main_class": `"com.android.test.MainClass"`,
Romain Jobredeauxf5f60732023-03-16 11:00:36 -0400249 "runtime_deps": `[":java-binary-host_lib"]`,
Alix7c8eaeb2022-11-16 15:44:55 +0000250 "target_compatible_with": `select({
251 "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
252 "//conditions:default": [],
253 })`,
254 }),
255 },
256 })
257}
258
259func TestJavaBinaryHostKotlinWithResources(t *testing.T) {
260 runJavaBinaryHostTestCase(t, Bp2buildTestCase{
261 Description: "java_binary_host with srcs, libs, resources.",
262 Filesystem: map[string]string{
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400263 "adir/test.mf": "Main-Class: com.android.test.MainClass",
264 "adir/res/a.res": "",
265 "adir/res/b.res": "",
266 "adir/Android.bp": `java_binary_host {
Alix7c8eaeb2022-11-16 15:44:55 +0000267 name: "java-binary-host",
268 manifest: "test.mf",
269 srcs: ["a.java", "b.kt"],
270 java_resources: ["res/a.res", "res/b.res"],
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400271 bazel_module: { bp2build_available: true },
Alix7c8eaeb2022-11-16 15:44:55 +0000272}
273`,
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400274 },
275 Dir: "adir",
276 Blueprint: "",
Alix7c8eaeb2022-11-16 15:44:55 +0000277 ExpectedBazelTargets: []string{
Romain Jobredeauxf5f60732023-03-16 11:00:36 -0400278 MakeBazelTarget("kt_jvm_library", "java-binary-host_lib", AttrNameToString{
Alix7c8eaeb2022-11-16 15:44:55 +0000279 "srcs": `[
280 "a.java",
281 "b.kt",
282 ]`,
283 "resources": `[
284 "res/a.res",
285 "res/b.res",
286 ]`,
Romain Jobredeauxd5fe1332023-05-04 14:54:45 -0400287 "resource_strip_prefix": `"adir"`,
Alix7c8eaeb2022-11-16 15:44:55 +0000288 "target_compatible_with": `select({
289 "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
290 "//conditions:default": [],
291 })`,
292 }),
293 MakeBazelTarget("java_binary", "java-binary-host", AttrNameToString{
294 "main_class": `"com.android.test.MainClass"`,
Romain Jobredeauxf5f60732023-03-16 11:00:36 -0400295 "runtime_deps": `[":java-binary-host_lib"]`,
Alix7c8eaeb2022-11-16 15:44:55 +0000296 "target_compatible_with": `select({
297 "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
298 "//conditions:default": [],
299 })`,
300 }),
301 },
302 })
303}
Alixf848bf82023-03-06 19:43:55 +0000304
305func TestJavaBinaryHostKotlinCflags(t *testing.T) {
306 runJavaBinaryHostTestCase(t, Bp2buildTestCase{
307 Description: "java_binary_host with kotlincflags",
308 Filesystem: testFs,
309 Blueprint: `java_binary_host {
310 name: "java-binary-host",
311 manifest: "test.mf",
312 srcs: ["a.kt"],
313 kotlincflags: ["-flag1", "-flag2"],
314}
315`,
316 ExpectedBazelTargets: []string{
Romain Jobredeauxf5f60732023-03-16 11:00:36 -0400317 MakeBazelTarget("kt_jvm_library", "java-binary-host_lib", AttrNameToString{
Alixf848bf82023-03-06 19:43:55 +0000318 "srcs": `["a.kt"]`,
319 "kotlincflags": `[
320 "-flag1",
321 "-flag2",
322 ]`,
323 "target_compatible_with": `select({
324 "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
325 "//conditions:default": [],
326 })`,
327 }),
328 MakeBazelTarget("java_binary", "java-binary-host", AttrNameToString{
329 "main_class": `"com.android.test.MainClass"`,
Romain Jobredeauxf5f60732023-03-16 11:00:36 -0400330 "runtime_deps": `[":java-binary-host_lib"]`,
Alixf848bf82023-03-06 19:43:55 +0000331 "target_compatible_with": `select({
332 "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
333 "//conditions:default": [],
334 })`,
335 }),
336 },
337 })
338}