blob: 57c38db9776d1277e40b1b59ee3326793db300b9 [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`,
Zi Wang10664792023-09-27 12:29:34 -0700105 ExpectedBazelTargets: []string{
106 MakeBazelTarget(
107 "android_library",
108 "TestLib",
109 AttrNameToString{
110 "manifest": `"AndroidManifest.xml"`,
111 "resource_files": `["res/res.png"]`,
112 "sdk_version": `"current"`, // use as default
113 },
114 ),
115 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
116 },
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500117 })
118}
119
120func TestConvertAndroidLibraryImport(t *testing.T) {
Romain Jobredeauxafc5d272023-09-21 11:07:30 -0400121 runAndroidLibraryImportTestWithRegistrationCtxFunc(t,
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500122 func(ctx android.RegistrationContext) {
123 ctx.RegisterModuleType("android_library", java.AndroidLibraryFactory)
124 },
125 Bp2buildTestCase{
Romain Jobredeauxafc5d272023-09-21 11:07:30 -0400126 Description: "Android Library Import",
Chris Parsons0c4de1f2023-09-21 20:36:35 +0000127 StubbedBuildDefinitions: []string{"static_lib_dep", "static_import_dep", "static_import_dep-neverlink"},
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500128 // Bazel's aar_import can only export *_import targets, so we expect
129 // only "static_import_dep" in exports, but both "static_lib_dep" and
130 // "static_import_dep" in deps
Chris Parsonscd209032023-09-19 01:12:48 +0000131 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500132android_library_import {
133 name: "TestImport",
134 aars: ["import.aar"],
135 static_libs: ["static_lib_dep", "static_import_dep"],
Liz Kammer02914402023-08-07 13:38:18 -0400136 sdk_version: "current",
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500137}
Chris Parsonscd209032023-09-19 01:12:48 +0000138
Chris Parsonscd209032023-09-19 01:12:48 +0000139android_library_import {
140 name: "static_import_dep",
Chris Parsons0c4de1f2023-09-21 20:36:35 +0000141 aars: ["import.aar"],
Chris Parsonscd209032023-09-19 01:12:48 +0000142}
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500143`,
144 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000145 MakeBazelTarget(
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500146 "aar_import",
147 "TestImport",
148 AttrNameToString{
149 "aar": `"import.aar"`,
150 "deps": `[
151 ":static_lib_dep",
152 ":static_import_dep",
153 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400154 "exports": `[":static_import_dep"]`,
155 "sdk_version": `"current"`, // use as default
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500156 },
157 ),
Alix14101de2023-01-06 03:42:07 +0000158 MakeNeverlinkDuplicateTarget("android_library", "TestImport"),
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500159 },
160 },
161 )
162}
Alix36795a72023-01-20 16:10:52 +0000163
164func TestConvertAndroidLibraryKotlin(t *testing.T) {
165 t.Helper()
166 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
167 Description: "Android Library with .kt srcs and common_srcs attribute",
168 ModuleTypeUnderTest: "android_library",
169 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
170 Filesystem: map[string]string{
171 "AndroidManifest.xml": "",
172 },
173 Blueprint: `
174android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400175 name: "TestLib",
176 srcs: ["a.java", "b.kt"],
177 common_srcs: ["c.kt"],
178 sdk_version: "current",
Alix36795a72023-01-20 16:10:52 +0000179}
180`,
181 ExpectedBazelTargets: []string{
182 MakeBazelTarget(
183 "android_library",
184 "TestLib",
185 AttrNameToString{
186 "srcs": `[
187 "a.java",
188 "b.kt",
189 ]`,
190 "common_srcs": `["c.kt"]`,
191 "manifest": `"AndroidManifest.xml"`,
192 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400193 "sdk_version": `"current"`, // use as default
Alix36795a72023-01-20 16:10:52 +0000194 }),
195 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
196 }})
197}
Alixf848bf82023-03-06 19:43:55 +0000198
199func TestConvertAndroidLibraryKotlinCflags(t *testing.T) {
200 t.Helper()
201 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
202 Description: "Android Library with .kt srcs and kotlincflags ",
203 ModuleTypeUnderTest: "android_library",
204 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
205 Filesystem: map[string]string{
206 "AndroidManifest.xml": "",
207 },
208 Blueprint: `
209android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400210 name: "TestLib",
211 srcs: ["a.java", "b.kt"],
212 kotlincflags: ["-flag1", "-flag2"],
213 sdk_version: "current",
Alixf848bf82023-03-06 19:43:55 +0000214}
215`,
216 ExpectedBazelTargets: []string{
217 MakeBazelTarget(
218 "android_library",
219 "TestLib",
220 AttrNameToString{
221 "srcs": `[
222 "a.java",
223 "b.kt",
224 ]`,
225 "kotlincflags": `[
226 "-flag1",
227 "-flag2",
228 ]`,
229 "manifest": `"AndroidManifest.xml"`,
230 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400231 "sdk_version": `"current"`, // use as default
Alixf848bf82023-03-06 19:43:55 +0000232 }),
233 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
234 }})
235}
Romain Jobredeauxafc5d272023-09-21 11:07:30 -0400236
237func TestAarImportFailsToConvertNoAars(t *testing.T) {
238 runAndroidLibraryImportTest(t,
239 Bp2buildTestCase{
240 Description: "Android Library Import with no aars does not convert.",
241 Blueprint: `
242android_library_import {
243 name: "no_aar_import",
244}
245`,
246 ExpectedBazelTargets: []string{},
247 })
248}