blob: 475c2d6660ed8644965c85e842cd136d7dec1772 [file] [log] [blame]
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -05001// Copyright 2022 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 (
Chris Parsonscd209032023-09-19 01:12:48 +000018 "testing"
19
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050020 "android/soong/android"
21 "android/soong/java"
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050022)
23
Romain Jobredeauxafc5d272023-09-21 11:07:30 -040024func runAndroidLibraryImportTestWithRegistrationCtxFunc(t *testing.T, registrationCtxFunc func(ctx android.RegistrationContext), tc Bp2buildTestCase) {
25 t.Helper()
26 (&tc).ModuleTypeUnderTest = "android_library_import"
27 (&tc).ModuleTypeUnderTestFactory = java.AARImportFactory
28 RunBp2BuildTestCase(t, registrationCtxFunc, tc)
29}
30
31func runAndroidLibraryImportTest(t *testing.T, tc Bp2buildTestCase) {
32 runAndroidLibraryImportTestWithRegistrationCtxFunc(t, func(ctx android.RegistrationContext) {}, tc)
33}
34
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050035func TestConvertAndroidLibrary(t *testing.T) {
36 t.Helper()
37 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
38 Description: "Android Library - simple example",
39 ModuleTypeUnderTest: "android_library",
40 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
41 Filesystem: map[string]string{
42 "lib.java": "",
43 "arm.java": "",
44 "x86.java": "",
45 "res/res.png": "",
46 "manifest/AndroidManifest.xml": "",
47 },
Chris Parsonscd209032023-09-19 01:12:48 +000048 StubbedBuildDefinitions: []string{"static_lib_dep"},
49 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050050android_library {
Liz Kammer02914402023-08-07 13:38:18 -040051 name: "TestLib",
52 srcs: ["lib.java"],
53 arch: {
54 arm: {
55 srcs: ["arm.java"],
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050056 },
Liz Kammer02914402023-08-07 13:38:18 -040057 x86: {
58 srcs: ["x86.java"],
59 }
60 },
61 manifest: "manifest/AndroidManifest.xml",
62 static_libs: ["static_lib_dep"],
63 sdk_version: "current",
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050064}
65`,
66 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +000067 MakeBazelTarget(
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050068 "android_library",
69 "TestLib",
70 AttrNameToString{
71 "srcs": `["lib.java"] + select({
72 "//build/bazel/platforms/arch:arm": ["arm.java"],
73 "//build/bazel/platforms/arch:x86": ["x86.java"],
74 "//conditions:default": [],
75 })`,
76 "manifest": `"manifest/AndroidManifest.xml"`,
77 "resource_files": `["res/res.png"]`,
78 "deps": `[":static_lib_dep"]`,
79 "exports": `[":static_lib_dep"]`,
Liz Kammer02914402023-08-07 13:38:18 -040080 "sdk_version": `"current"`, // use as default
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050081 }),
Liz Kammer02914402023-08-07 13:38:18 -040082 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050083 }})
84}
85
86func TestConvertAndroidLibraryWithNoSources(t *testing.T) {
87 t.Helper()
88 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
Zi Wang10664792023-09-27 12:29:34 -070089 Description: "Android Library - modules will deps when there are no sources",
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050090 ModuleTypeUnderTest: "android_library",
91 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
92 Filesystem: map[string]string{
93 "res/res.png": "",
94 "AndroidManifest.xml": "",
95 },
Chris Parsonscd209032023-09-19 01:12:48 +000096 Blueprint: simpleModule("android_library", "lib_dep") + `
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050097android_library {
Liz Kammer02914402023-08-07 13:38:18 -040098 name: "TestLib",
99 srcs: [],
100 manifest: "AndroidManifest.xml",
101 libs: ["lib_dep"],
102 sdk_version: "current",
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500103}
104`,
Chris Parsonsd0783372023-10-05 15:47:07 +0000105 StubbedBuildDefinitions: []string{"lib_dep"},
Zi Wang10664792023-09-27 12:29:34 -0700106 ExpectedBazelTargets: []string{
107 MakeBazelTarget(
108 "android_library",
109 "TestLib",
110 AttrNameToString{
111 "manifest": `"AndroidManifest.xml"`,
112 "resource_files": `["res/res.png"]`,
113 "sdk_version": `"current"`, // use as default
114 },
115 ),
116 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
117 },
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500118 })
119}
120
121func TestConvertAndroidLibraryImport(t *testing.T) {
Romain Jobredeauxafc5d272023-09-21 11:07:30 -0400122 runAndroidLibraryImportTestWithRegistrationCtxFunc(t,
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500123 func(ctx android.RegistrationContext) {
124 ctx.RegisterModuleType("android_library", java.AndroidLibraryFactory)
125 },
126 Bp2buildTestCase{
Romain Jobredeauxafc5d272023-09-21 11:07:30 -0400127 Description: "Android Library Import",
Chris Parsons0c4de1f2023-09-21 20:36:35 +0000128 StubbedBuildDefinitions: []string{"static_lib_dep", "static_import_dep", "static_import_dep-neverlink"},
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500129 // Bazel's aar_import can only export *_import targets, so we expect
130 // only "static_import_dep" in exports, but both "static_lib_dep" and
131 // "static_import_dep" in deps
Chris Parsonscd209032023-09-19 01:12:48 +0000132 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500133android_library_import {
134 name: "TestImport",
135 aars: ["import.aar"],
136 static_libs: ["static_lib_dep", "static_import_dep"],
Liz Kammer02914402023-08-07 13:38:18 -0400137 sdk_version: "current",
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500138}
Chris Parsonscd209032023-09-19 01:12:48 +0000139
Chris Parsonscd209032023-09-19 01:12:48 +0000140android_library_import {
141 name: "static_import_dep",
Chris Parsons0c4de1f2023-09-21 20:36:35 +0000142 aars: ["import.aar"],
Chris Parsonscd209032023-09-19 01:12:48 +0000143}
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500144`,
145 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000146 MakeBazelTarget(
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500147 "aar_import",
148 "TestImport",
149 AttrNameToString{
150 "aar": `"import.aar"`,
151 "deps": `[
152 ":static_lib_dep",
153 ":static_import_dep",
154 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400155 "exports": `[":static_import_dep"]`,
156 "sdk_version": `"current"`, // use as default
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500157 },
158 ),
Alix14101de2023-01-06 03:42:07 +0000159 MakeNeverlinkDuplicateTarget("android_library", "TestImport"),
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500160 },
161 },
162 )
163}
Alix36795a72023-01-20 16:10:52 +0000164
165func TestConvertAndroidLibraryKotlin(t *testing.T) {
166 t.Helper()
167 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
168 Description: "Android Library with .kt srcs and common_srcs attribute",
169 ModuleTypeUnderTest: "android_library",
170 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
171 Filesystem: map[string]string{
172 "AndroidManifest.xml": "",
173 },
174 Blueprint: `
175android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400176 name: "TestLib",
177 srcs: ["a.java", "b.kt"],
178 common_srcs: ["c.kt"],
179 sdk_version: "current",
Alix36795a72023-01-20 16:10:52 +0000180}
181`,
182 ExpectedBazelTargets: []string{
183 MakeBazelTarget(
184 "android_library",
185 "TestLib",
186 AttrNameToString{
187 "srcs": `[
188 "a.java",
189 "b.kt",
190 ]`,
191 "common_srcs": `["c.kt"]`,
192 "manifest": `"AndroidManifest.xml"`,
193 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400194 "sdk_version": `"current"`, // use as default
Alix36795a72023-01-20 16:10:52 +0000195 }),
196 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
197 }})
198}
Alixf848bf82023-03-06 19:43:55 +0000199
200func TestConvertAndroidLibraryKotlinCflags(t *testing.T) {
201 t.Helper()
202 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
203 Description: "Android Library with .kt srcs and kotlincflags ",
204 ModuleTypeUnderTest: "android_library",
205 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
206 Filesystem: map[string]string{
207 "AndroidManifest.xml": "",
208 },
209 Blueprint: `
210android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400211 name: "TestLib",
212 srcs: ["a.java", "b.kt"],
213 kotlincflags: ["-flag1", "-flag2"],
214 sdk_version: "current",
Alixf848bf82023-03-06 19:43:55 +0000215}
216`,
217 ExpectedBazelTargets: []string{
218 MakeBazelTarget(
219 "android_library",
220 "TestLib",
221 AttrNameToString{
222 "srcs": `[
223 "a.java",
224 "b.kt",
225 ]`,
226 "kotlincflags": `[
227 "-flag1",
228 "-flag2",
229 ]`,
230 "manifest": `"AndroidManifest.xml"`,
231 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400232 "sdk_version": `"current"`, // use as default
Alixf848bf82023-03-06 19:43:55 +0000233 }),
234 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
235 }})
236}
Romain Jobredeauxafc5d272023-09-21 11:07:30 -0400237
238func TestAarImportFailsToConvertNoAars(t *testing.T) {
239 runAndroidLibraryImportTest(t,
240 Bp2buildTestCase{
241 Description: "Android Library Import with no aars does not convert.",
242 Blueprint: `
243android_library_import {
244 name: "no_aar_import",
245}
246`,
247 ExpectedBazelTargets: []string{},
248 })
249}