blob: 40356a19670edac33ac2175ecd14bc01ca892c2a [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
24func TestConvertAndroidLibrary(t *testing.T) {
25 t.Helper()
26 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
27 Description: "Android Library - simple example",
28 ModuleTypeUnderTest: "android_library",
29 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
30 Filesystem: map[string]string{
31 "lib.java": "",
32 "arm.java": "",
33 "x86.java": "",
34 "res/res.png": "",
35 "manifest/AndroidManifest.xml": "",
36 },
Chris Parsonscd209032023-09-19 01:12:48 +000037 StubbedBuildDefinitions: []string{"static_lib_dep"},
38 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050039android_library {
Liz Kammer02914402023-08-07 13:38:18 -040040 name: "TestLib",
41 srcs: ["lib.java"],
42 arch: {
43 arm: {
44 srcs: ["arm.java"],
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050045 },
Liz Kammer02914402023-08-07 13:38:18 -040046 x86: {
47 srcs: ["x86.java"],
48 }
49 },
50 manifest: "manifest/AndroidManifest.xml",
51 static_libs: ["static_lib_dep"],
52 sdk_version: "current",
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050053}
54`,
55 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +000056 MakeBazelTarget(
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050057 "android_library",
58 "TestLib",
59 AttrNameToString{
60 "srcs": `["lib.java"] + select({
61 "//build/bazel/platforms/arch:arm": ["arm.java"],
62 "//build/bazel/platforms/arch:x86": ["x86.java"],
63 "//conditions:default": [],
64 })`,
65 "manifest": `"manifest/AndroidManifest.xml"`,
66 "resource_files": `["res/res.png"]`,
67 "deps": `[":static_lib_dep"]`,
68 "exports": `[":static_lib_dep"]`,
Liz Kammer02914402023-08-07 13:38:18 -040069 "sdk_version": `"current"`, // use as default
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050070 }),
Liz Kammer02914402023-08-07 13:38:18 -040071 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050072 }})
73}
74
75func TestConvertAndroidLibraryWithNoSources(t *testing.T) {
76 t.Helper()
77 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
78 Description: "Android Library - modules with deps must have sources",
79 ModuleTypeUnderTest: "android_library",
80 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
81 Filesystem: map[string]string{
82 "res/res.png": "",
83 "AndroidManifest.xml": "",
84 },
Chris Parsonscd209032023-09-19 01:12:48 +000085 Blueprint: simpleModule("android_library", "lib_dep") + `
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050086android_library {
Liz Kammer02914402023-08-07 13:38:18 -040087 name: "TestLib",
88 srcs: [],
89 manifest: "AndroidManifest.xml",
90 libs: ["lib_dep"],
91 sdk_version: "current",
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050092}
93`,
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -050094 ExpectedBazelTargets: []string{},
95 })
96}
97
98func TestConvertAndroidLibraryImport(t *testing.T) {
99 t.Helper()
100 RunBp2BuildTestCase(
101 t,
102 func(ctx android.RegistrationContext) {
103 ctx.RegisterModuleType("android_library", java.AndroidLibraryFactory)
104 },
105 Bp2buildTestCase{
106 Description: "Android Library Import",
107 ModuleTypeUnderTest: "android_library_import",
108 ModuleTypeUnderTestFactory: java.AARImportFactory,
109 Filesystem: map[string]string{
110 "import.aar": "",
Chris Parsonscd209032023-09-19 01:12:48 +0000111 "dep.aar": "",
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500112 },
Chris Parsons0c4de1f2023-09-21 20:36:35 +0000113 StubbedBuildDefinitions: []string{"static_lib_dep", "static_import_dep", "static_import_dep-neverlink"},
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500114 // Bazel's aar_import can only export *_import targets, so we expect
115 // only "static_import_dep" in exports, but both "static_lib_dep" and
116 // "static_import_dep" in deps
Chris Parsonscd209032023-09-19 01:12:48 +0000117 Blueprint: simpleModule("android_library", "static_lib_dep") + `
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500118android_library_import {
119 name: "TestImport",
120 aars: ["import.aar"],
121 static_libs: ["static_lib_dep", "static_import_dep"],
Liz Kammer02914402023-08-07 13:38:18 -0400122 sdk_version: "current",
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500123}
Chris Parsonscd209032023-09-19 01:12:48 +0000124
125// TODO: b/301007952 - This dep is needed because android_library_import must have aars set.
126android_library_import {
127 name: "static_import_dep",
Chris Parsons0c4de1f2023-09-21 20:36:35 +0000128 aars: ["import.aar"],
Chris Parsonscd209032023-09-19 01:12:48 +0000129}
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500130`,
131 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000132 MakeBazelTarget(
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500133 "aar_import",
134 "TestImport",
135 AttrNameToString{
136 "aar": `"import.aar"`,
137 "deps": `[
138 ":static_lib_dep",
139 ":static_import_dep",
140 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400141 "exports": `[":static_import_dep"]`,
142 "sdk_version": `"current"`, // use as default
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500143 },
144 ),
Alix14101de2023-01-06 03:42:07 +0000145 MakeNeverlinkDuplicateTarget("android_library", "TestImport"),
Romain Jobredeauxc9b2bba2022-02-15 09:35:07 -0500146 },
147 },
148 )
149}
Alix36795a72023-01-20 16:10:52 +0000150
151func TestConvertAndroidLibraryKotlin(t *testing.T) {
152 t.Helper()
153 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
154 Description: "Android Library with .kt srcs and common_srcs attribute",
155 ModuleTypeUnderTest: "android_library",
156 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
157 Filesystem: map[string]string{
158 "AndroidManifest.xml": "",
159 },
160 Blueprint: `
161android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400162 name: "TestLib",
163 srcs: ["a.java", "b.kt"],
164 common_srcs: ["c.kt"],
165 sdk_version: "current",
Alix36795a72023-01-20 16:10:52 +0000166}
167`,
168 ExpectedBazelTargets: []string{
169 MakeBazelTarget(
170 "android_library",
171 "TestLib",
172 AttrNameToString{
173 "srcs": `[
174 "a.java",
175 "b.kt",
176 ]`,
177 "common_srcs": `["c.kt"]`,
178 "manifest": `"AndroidManifest.xml"`,
179 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400180 "sdk_version": `"current"`, // use as default
Alix36795a72023-01-20 16:10:52 +0000181 }),
182 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
183 }})
184}
Alixf848bf82023-03-06 19:43:55 +0000185
186func TestConvertAndroidLibraryKotlinCflags(t *testing.T) {
187 t.Helper()
188 RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
189 Description: "Android Library with .kt srcs and kotlincflags ",
190 ModuleTypeUnderTest: "android_library",
191 ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
192 Filesystem: map[string]string{
193 "AndroidManifest.xml": "",
194 },
195 Blueprint: `
196android_library {
Liz Kammer02914402023-08-07 13:38:18 -0400197 name: "TestLib",
198 srcs: ["a.java", "b.kt"],
199 kotlincflags: ["-flag1", "-flag2"],
200 sdk_version: "current",
Alixf848bf82023-03-06 19:43:55 +0000201}
202`,
203 ExpectedBazelTargets: []string{
204 MakeBazelTarget(
205 "android_library",
206 "TestLib",
207 AttrNameToString{
208 "srcs": `[
209 "a.java",
210 "b.kt",
211 ]`,
212 "kotlincflags": `[
213 "-flag1",
214 "-flag2",
215 ]`,
216 "manifest": `"AndroidManifest.xml"`,
217 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400218 "sdk_version": `"current"`, // use as default
Alixf848bf82023-03-06 19:43:55 +0000219 }),
220 MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
221 }})
222}