blob: 33d1a040d98c67d84d89e90415394e4f661d328e [file] [log] [blame]
Romain Jobredeaux1282c422021-10-29 10:52:59 -04001// 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 "android/soong/android"
Romain Jobredeaux947dfa72023-06-12 15:40:35 -040019 "android/soong/cc"
Romain Jobredeaux1282c422021-10-29 10:52:59 -040020 "android/soong/java"
21
22 "testing"
23)
24
Sam Delmerico3177a6e2022-06-21 19:28:33 +000025func runAndroidAppTestCase(t *testing.T, tc Bp2buildTestCase) {
Romain Jobredeaux1282c422021-10-29 10:52:59 -040026 t.Helper()
Sam Delmerico3177a6e2022-06-21 19:28:33 +000027 RunBp2BuildTestCase(t, registerAndroidAppModuleTypes, tc)
Romain Jobredeaux1282c422021-10-29 10:52:59 -040028}
29
30func registerAndroidAppModuleTypes(ctx android.RegistrationContext) {
Jingwen Chen6817bbb2022-10-14 09:56:07 +000031 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
Alix6c087cf2023-01-05 21:12:31 +000032 ctx.RegisterModuleType("java_library", java.LibraryFactory)
Romain Jobredeaux947dfa72023-06-12 15:40:35 -040033 ctx.RegisterModuleType("cc_library_shared", cc.LibrarySharedFactory)
Romain Jobredeaux1282c422021-10-29 10:52:59 -040034}
35
36func TestMinimalAndroidApp(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000037 runAndroidAppTestCase(t, Bp2buildTestCase{
38 Description: "Android app - simple example",
39 ModuleTypeUnderTest: "android_app",
40 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
41 Filesystem: map[string]string{
Romain Jobredeaux1282c422021-10-29 10:52:59 -040042 "app.java": "",
43 "res/res.png": "",
44 "AndroidManifest.xml": "",
Romain Jobredeaux7a71e072023-08-16 17:39:12 -040045 "assets/asset.png": "",
Romain Jobredeaux1282c422021-10-29 10:52:59 -040046 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +000047 Blueprint: `
Romain Jobredeaux1282c422021-10-29 10:52:59 -040048android_app {
Liz Kammer02914402023-08-07 13:38:18 -040049 name: "TestApp",
50 srcs: ["app.java"],
51 sdk_version: "current",
Romain Jobredeaux9973ace2023-08-30 00:27:09 -040052 optimize: {
53 shrink: true,
54 optimize: true,
55 obfuscate: true,
56 },
Romain Jobredeaux1282c422021-10-29 10:52:59 -040057}
58`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000059 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +000060 MakeBazelTarget("android_binary", "TestApp", AttrNameToString{
Romain Jobredeaux1282c422021-10-29 10:52:59 -040061 "srcs": `["app.java"]`,
62 "manifest": `"AndroidManifest.xml"`,
63 "resource_files": `["res/res.png"]`,
Romain Jobredeaux2eef2e12023-02-24 12:07:08 -050064 "sdk_version": `"current"`,
Romain Jobredeaux7a71e072023-08-16 17:39:12 -040065 "assets": `["assets/asset.png"]`,
66 "assets_dir": `"assets"`,
Romain Jobredeaux1282c422021-10-29 10:52:59 -040067 }),
68 }})
69}
70
71func TestAndroidAppAllSupportedFields(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000072 runAndroidAppTestCase(t, Bp2buildTestCase{
73 Description: "Android app - all supported fields",
74 ModuleTypeUnderTest: "android_app",
75 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
76 Filesystem: map[string]string{
Romain Jobredeaux1282c422021-10-29 10:52:59 -040077 "app.java": "",
78 "resa/res.png": "",
79 "resb/res.png": "",
80 "manifest/AndroidManifest.xml": "",
Romain Jobredeaux7a71e072023-08-16 17:39:12 -040081 "assets_/asset.png": "",
Romain Jobredeaux1282c422021-10-29 10:52:59 -040082 },
Romain Jobredeaux947dfa72023-06-12 15:40:35 -040083 StubbedBuildDefinitions: []string{"static_lib_dep", "jni_lib"},
84 Blueprint: simpleModule("android_app", "static_lib_dep") +
85 simpleModule("cc_library_shared", "jni_lib") + `
Romain Jobredeaux1282c422021-10-29 10:52:59 -040086android_app {
Romain Jobredeaux9973ace2023-08-30 00:27:09 -040087 name: "TestApp",
88 srcs: ["app.java"],
89 sdk_version: "current",
90 package_name: "com.google",
91 resource_dirs: ["resa", "resb"],
92 manifest: "manifest/AndroidManifest.xml",
93 static_libs: ["static_lib_dep"],
94 java_version: "7",
95 certificate: "foocert",
96 required: ["static_lib_dep"],
97 asset_dirs: ["assets_"],
98 optimize: {
99 enabled: true,
100 optimize: false,
101 proguard_flags_files: ["proguard.flags"],
102 shrink: false,
103 obfuscate: false,
104 ignore_warnings: true,
105 },
Romain Jobredeaux947dfa72023-06-12 15:40:35 -0400106 jni_libs: ["jni_lib"],
Romain Jobredeaux1282c422021-10-29 10:52:59 -0400107}
108`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000109 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000110 MakeBazelTarget("android_binary", "TestApp", AttrNameToString{
Romain Jobredeaux1282c422021-10-29 10:52:59 -0400111 "srcs": `["app.java"]`,
112 "manifest": `"manifest/AndroidManifest.xml"`,
113 "resource_files": `[
114 "resa/res.png",
115 "resb/res.png",
116 ]`,
Romain Jobredeaux947dfa72023-06-12 15:40:35 -0400117 "assets": `["assets_/asset.png"]`,
118 "assets_dir": `"assets_"`,
119 "custom_package": `"com.google"`,
120 "deps": `[
121 ":static_lib_dep",
122 ":jni_lib",
123 ]`,
Romain Jobredeaux2eef2e12023-02-24 12:07:08 -0500124 "java_version": `"7"`,
125 "sdk_version": `"current"`,
Jingwen Chen6817bbb2022-10-14 09:56:07 +0000126 "certificate_name": `"foocert"`,
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400127 "proguard_specs": `[
128 "proguard.flags",
129 ":TestApp_proguard_flags",
130 ]`,
131 }),
132 MakeBazelTarget("genrule", "TestApp_proguard_flags", AttrNameToString{
133 "outs": `["TestApp_proguard.flags"]`,
134 "cmd": `"echo -ignorewarning -dontshrink -dontoptimize -dontobfuscate > $(OUTS)"`,
Romain Jobredeaux1282c422021-10-29 10:52:59 -0400135 }),
136 }})
137}
Sam Delmericoe91d0302022-02-23 15:28:33 +0000138
139func TestAndroidAppArchVariantSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000140 runAndroidAppTestCase(t, Bp2buildTestCase{
141 Description: "Android app - arch variant srcs",
142 ModuleTypeUnderTest: "android_app",
143 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
144 Filesystem: map[string]string{
Sam Delmericoe91d0302022-02-23 15:28:33 +0000145 "arm.java": "",
146 "x86.java": "",
147 "res/res.png": "",
148 "AndroidManifest.xml": "",
149 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000150 Blueprint: `
Sam Delmericoe91d0302022-02-23 15:28:33 +0000151android_app {
Liz Kammer02914402023-08-07 13:38:18 -0400152 name: "TestApp",
153 sdk_version: "current",
154 arch: {
155 arm: {
156 srcs: ["arm.java"],
157 },
158 x86: {
159 srcs: ["x86.java"],
Sam Delmericoe91d0302022-02-23 15:28:33 +0000160 }
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400161 },
162 optimize: {
163 enabled: false,
164 },
Sam Delmericoe91d0302022-02-23 15:28:33 +0000165}
166`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000167 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000168 MakeBazelTarget("android_binary", "TestApp", AttrNameToString{
Sam Delmericoe91d0302022-02-23 15:28:33 +0000169 "srcs": `select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000170 "//build/bazel_common_rules/platforms/arch:arm": ["arm.java"],
171 "//build/bazel_common_rules/platforms/arch:x86": ["x86.java"],
Sam Delmericoe91d0302022-02-23 15:28:33 +0000172 "//conditions:default": [],
173 })`,
174 "manifest": `"AndroidManifest.xml"`,
175 "resource_files": `["res/res.png"]`,
Romain Jobredeaux2eef2e12023-02-24 12:07:08 -0500176 "sdk_version": `"current"`,
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400177 "optimize": `False`,
Sam Delmericoe91d0302022-02-23 15:28:33 +0000178 }),
179 }})
180}
Jingwen Chen6817bbb2022-10-14 09:56:07 +0000181
182func TestAndroidAppCertIsModule(t *testing.T) {
183 runAndroidAppTestCase(t, Bp2buildTestCase{
184 Description: "Android app - cert is module",
185 ModuleTypeUnderTest: "android_app",
186 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
187 Filesystem: map[string]string{},
Chris Parsonscd209032023-09-19 01:12:48 +0000188 StubbedBuildDefinitions: []string{"foocert"},
189 Blueprint: simpleModule("filegroup", "foocert") + `
Jingwen Chen6817bbb2022-10-14 09:56:07 +0000190android_app {
Liz Kammer02914402023-08-07 13:38:18 -0400191 name: "TestApp",
192 certificate: ":foocert",
193 sdk_version: "current",
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400194 optimize: {
195 enabled: false,
196 },
Jingwen Chen6817bbb2022-10-14 09:56:07 +0000197}
198`,
199 ExpectedBazelTargets: []string{
200 MakeBazelTarget("android_binary", "TestApp", AttrNameToString{
201 "certificate": `":foocert"`,
202 "manifest": `"AndroidManifest.xml"`,
203 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400204 "sdk_version": `"current"`, // use as default
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400205 "optimize": `False`,
Jingwen Chen6817bbb2022-10-14 09:56:07 +0000206 }),
207 }})
208}
209
210func TestAndroidAppCertIsSrcFile(t *testing.T) {
211 runAndroidAppTestCase(t, Bp2buildTestCase{
212 Description: "Android app - cert is src file",
213 ModuleTypeUnderTest: "android_app",
214 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
215 Filesystem: map[string]string{
216 "foocert": "",
217 },
218 Blueprint: `
219android_app {
Liz Kammer02914402023-08-07 13:38:18 -0400220 name: "TestApp",
221 certificate: "foocert",
222 sdk_version: "current",
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400223 optimize: {
224 enabled: false,
225 },
Jingwen Chen6817bbb2022-10-14 09:56:07 +0000226}
227`,
228 ExpectedBazelTargets: []string{
229 MakeBazelTarget("android_binary", "TestApp", AttrNameToString{
230 "certificate": `"foocert"`,
231 "manifest": `"AndroidManifest.xml"`,
232 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400233 "sdk_version": `"current"`, // use as default
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400234 "optimize": `False`,
Jingwen Chen6817bbb2022-10-14 09:56:07 +0000235 }),
236 }})
237}
238
239func TestAndroidAppCertIsNotSrcOrModule(t *testing.T) {
240 runAndroidAppTestCase(t, Bp2buildTestCase{
241 Description: "Android app - cert is not src or module",
242 ModuleTypeUnderTest: "android_app",
243 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
244 Filesystem: map[string]string{
245 // deliberate empty
246 },
247 Blueprint: `
248android_app {
Liz Kammer02914402023-08-07 13:38:18 -0400249 name: "TestApp",
250 certificate: "foocert",
251 sdk_version: "current",
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400252 optimize: {
253 enabled: false,
254 },
Jingwen Chen6817bbb2022-10-14 09:56:07 +0000255}
256`,
257 ExpectedBazelTargets: []string{
258 MakeBazelTarget("android_binary", "TestApp", AttrNameToString{
259 "certificate_name": `"foocert"`,
260 "manifest": `"AndroidManifest.xml"`,
261 "resource_files": `[]`,
Liz Kammer02914402023-08-07 13:38:18 -0400262 "sdk_version": `"current"`, // use as default
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400263 "optimize": `False`,
Jingwen Chen6817bbb2022-10-14 09:56:07 +0000264 }),
265 }})
266}
Alix6c087cf2023-01-05 21:12:31 +0000267
268func TestAndroidAppLibs(t *testing.T) {
269 runAndroidAppTestCase(t, Bp2buildTestCase{
270 Description: "Android app with libs",
271 ModuleTypeUnderTest: "android_app",
272 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
273 Filesystem: map[string]string{},
Chris Parsonscd209032023-09-19 01:12:48 +0000274 StubbedBuildDefinitions: []string{"barLib"},
275 Blueprint: simpleModule("java_library", "barLib") + `
Alix6c087cf2023-01-05 21:12:31 +0000276android_app {
Liz Kammer02914402023-08-07 13:38:18 -0400277 name: "foo",
278 libs: ["barLib"],
279 sdk_version: "current",
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400280 optimize: {
281 enabled: false,
282 },
Alix6c087cf2023-01-05 21:12:31 +0000283}
284`,
285 ExpectedBazelTargets: []string{
Alix6c087cf2023-01-05 21:12:31 +0000286 MakeBazelTarget("android_binary", "foo", AttrNameToString{
287 "manifest": `"AndroidManifest.xml"`,
288 "resource_files": `[]`,
289 "deps": `[":barLib-neverlink"]`,
Liz Kammer02914402023-08-07 13:38:18 -0400290 "sdk_version": `"current"`, // use as default
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400291 "optimize": `False`,
Alix6c087cf2023-01-05 21:12:31 +0000292 }),
293 }})
294}
Alix0856f9e2023-01-20 22:15:30 +0000295
296func TestAndroidAppKotlinSrcs(t *testing.T) {
297 runAndroidAppTestCase(t, Bp2buildTestCase{
298 Description: "Android app with kotlin sources and common_srcs",
299 ModuleTypeUnderTest: "android_app",
300 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
301 Filesystem: map[string]string{
302 "res/res.png": "",
303 },
Chris Parsonscd209032023-09-19 01:12:48 +0000304 StubbedBuildDefinitions: []string{"foocert", "barLib"},
305 Blueprint: simpleModule("filegroup", "foocert") +
306 simpleModule("java_library", "barLib") + `
Alix0856f9e2023-01-20 22:15:30 +0000307android_app {
Liz Kammer02914402023-08-07 13:38:18 -0400308 name: "foo",
309 srcs: ["a.java", "b.kt"],
310 certificate: ":foocert",
311 manifest: "fooManifest.xml",
312 libs: ["barLib"],
313 sdk_version: "current",
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400314 optimize: {
315 enabled: false,
316 },
Alix0856f9e2023-01-20 22:15:30 +0000317}
318`,
319 ExpectedBazelTargets: []string{
Alix0856f9e2023-01-20 22:15:30 +0000320 MakeBazelTarget("android_library", "foo_kt", AttrNameToString{
321 "srcs": `[
322 "a.java",
323 "b.kt",
324 ]`,
325 "manifest": `"fooManifest.xml"`,
326 "resource_files": `["res/res.png"]`,
327 "deps": `[":barLib-neverlink"]`,
Liz Kammer02914402023-08-07 13:38:18 -0400328 "sdk_version": `"current"`, // use as default
Alix0856f9e2023-01-20 22:15:30 +0000329 }),
330 MakeBazelTarget("android_binary", "foo", AttrNameToString{
331 "deps": `[":foo_kt"]`,
332 "certificate": `":foocert"`,
333 "manifest": `"fooManifest.xml"`,
Liz Kammer02914402023-08-07 13:38:18 -0400334 "sdk_version": `"current"`, // use as default
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400335 "optimize": `False`,
Alix0856f9e2023-01-20 22:15:30 +0000336 }),
337 }})
338}
339
340func TestAndroidAppCommonSrcs(t *testing.T) {
341 runAndroidAppTestCase(t, Bp2buildTestCase{
342 Description: "Android app with common_srcs",
343 ModuleTypeUnderTest: "android_app",
344 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
345 Filesystem: map[string]string{
346 "res/res.png": "",
347 },
Chris Parsonscd209032023-09-19 01:12:48 +0000348 StubbedBuildDefinitions: []string{"barLib"},
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400349 Blueprint: `
Alix0856f9e2023-01-20 22:15:30 +0000350android_app {
Liz Kammer02914402023-08-07 13:38:18 -0400351 name: "foo",
352 srcs: ["a.java"],
353 common_srcs: ["b.kt"],
Liz Kammer02914402023-08-07 13:38:18 -0400354 manifest: "fooManifest.xml",
355 libs: ["barLib"],
356 sdk_version: "current",
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400357 optimize: {
358 enabled: false,
359 },
Alix0856f9e2023-01-20 22:15:30 +0000360}
361java_library{
Liz Kammer02914402023-08-07 13:38:18 -0400362 name: "barLib",
Alix0856f9e2023-01-20 22:15:30 +0000363}
364`,
365 ExpectedBazelTargets: []string{
Alix0856f9e2023-01-20 22:15:30 +0000366 MakeBazelTarget("android_library", "foo_kt", AttrNameToString{
367 "srcs": `["a.java"]`,
368 "common_srcs": `["b.kt"]`,
369 "manifest": `"fooManifest.xml"`,
370 "resource_files": `["res/res.png"]`,
371 "deps": `[":barLib-neverlink"]`,
Liz Kammer02914402023-08-07 13:38:18 -0400372 "sdk_version": `"current"`, // use as default
Alix0856f9e2023-01-20 22:15:30 +0000373 }),
374 MakeBazelTarget("android_binary", "foo", AttrNameToString{
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400375 "deps": `[":foo_kt"]`,
376 "manifest": `"fooManifest.xml"`,
377 "sdk_version": `"current"`, // use as default
378 "optimize": `False`,
Alix0856f9e2023-01-20 22:15:30 +0000379 }),
380 }})
381}
Alixf848bf82023-03-06 19:43:55 +0000382
383func TestAndroidAppKotlinCflags(t *testing.T) {
384 runAndroidAppTestCase(t, Bp2buildTestCase{
385 Description: "Android app with kotlincflags",
386 ModuleTypeUnderTest: "android_app",
387 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
388 Filesystem: map[string]string{
389 "res/res.png": "",
390 },
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400391 Blueprint: `
Alixf848bf82023-03-06 19:43:55 +0000392android_app {
Liz Kammer02914402023-08-07 13:38:18 -0400393 name: "foo",
394 srcs: ["a.java", "b.kt"],
Liz Kammer02914402023-08-07 13:38:18 -0400395 manifest: "fooManifest.xml",
396 kotlincflags: ["-flag1", "-flag2"],
397 sdk_version: "current",
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400398 optimize: {
399 enabled: false,
400 },
Alixf848bf82023-03-06 19:43:55 +0000401}
402`,
403 ExpectedBazelTargets: []string{
404 MakeBazelTarget("android_library", "foo_kt", AttrNameToString{
405 "srcs": `[
406 "a.java",
407 "b.kt",
408 ]`,
409 "manifest": `"fooManifest.xml"`,
410 "resource_files": `["res/res.png"]`,
411 "kotlincflags": `[
412 "-flag1",
413 "-flag2",
414 ]`,
Liz Kammer02914402023-08-07 13:38:18 -0400415 "sdk_version": `"current"`, // use as default
Alixf848bf82023-03-06 19:43:55 +0000416 }),
417 MakeBazelTarget("android_binary", "foo", AttrNameToString{
418 "deps": `[":foo_kt"]`,
Alixf848bf82023-03-06 19:43:55 +0000419 "manifest": `"fooManifest.xml"`,
Liz Kammer02914402023-08-07 13:38:18 -0400420 "sdk_version": `"current"`,
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400421 "optimize": `False`,
Alixf848bf82023-03-06 19:43:55 +0000422 }),
423 }})
424}
Alixe5085eb2023-01-31 19:38:41 +0000425
Romain Jobredeaux496660d2023-07-10 11:50:00 -0400426func TestAndroidAppManifestSdkVersionsProvided(t *testing.T) {
Alixe5085eb2023-01-31 19:38:41 +0000427 runAndroidAppTestCase(t, Bp2buildTestCase{
428 Description: "Android app with value for min_sdk_version",
429 ModuleTypeUnderTest: "android_app",
430 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
431 Filesystem: map[string]string{},
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400432 Blueprint: `
Alixe5085eb2023-01-31 19:38:41 +0000433android_app {
Liz Kammer02914402023-08-07 13:38:18 -0400434 name: "foo",
435 sdk_version: "current",
436 min_sdk_version: "24",
Liz Kammer02914402023-08-07 13:38:18 -0400437 target_sdk_version: "29",
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400438 optimize: {
439 enabled: false,
440 },
Alixe5085eb2023-01-31 19:38:41 +0000441}
442`,
443 ExpectedBazelTargets: []string{
444 MakeBazelTarget("android_binary", "foo", AttrNameToString{
445 "manifest": `"AndroidManifest.xml"`,
446 "resource_files": `[]`,
447 "manifest_values": `{
448 "minSdkVersion": "24",
Romain Jobredeaux496660d2023-07-10 11:50:00 -0400449 "targetSdkVersion": "29",
Alixe5085eb2023-01-31 19:38:41 +0000450 }`,
Romain Jobredeaux2eef2e12023-02-24 12:07:08 -0500451 "sdk_version": `"current"`,
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400452 "optimize": `False`,
Alixe5085eb2023-01-31 19:38:41 +0000453 }),
454 }})
455}
456
Romain Jobredeaux496660d2023-07-10 11:50:00 -0400457func TestAndroidAppMinAndTargetSdkDefaultToSdkVersion(t *testing.T) {
Alixe5085eb2023-01-31 19:38:41 +0000458 runAndroidAppTestCase(t, Bp2buildTestCase{
459 Description: "Android app with value for sdk_version",
460 ModuleTypeUnderTest: "android_app",
461 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
462 Filesystem: map[string]string{},
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400463 Blueprint: `
Alixe5085eb2023-01-31 19:38:41 +0000464android_app {
Liz Kammer02914402023-08-07 13:38:18 -0400465 name: "foo",
466 sdk_version: "30",
Romain Jobredeaux9973ace2023-08-30 00:27:09 -0400467 optimize: {
468 enabled: false,
469 },
Alixe5085eb2023-01-31 19:38:41 +0000470}
471`,
472 ExpectedBazelTargets: []string{
473 MakeBazelTarget("android_binary", "foo", AttrNameToString{
474 "manifest": `"AndroidManifest.xml"`,
475 "resource_files": `[]`,
Romain Jobredeaux3132f842023-09-15 10:06:16 -0400476 "sdk_version": `"30"`,
477 "optimize": `False`,
Alixe5085eb2023-01-31 19:38:41 +0000478 }),
479 }})
480}
Romain Jobredeaux9c06ef32023-08-21 18:05:29 -0400481
482func TestFrameworkResConversion(t *testing.T) {
483 runAndroidAppTestCase(t, Bp2buildTestCase{
484 Description: "Framework Res custom conversion",
485 ModuleTypeUnderTest: "android_app",
486 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
487 Filesystem: map[string]string{
488 "res/values/attrs.xml": "",
489 "resource_zip.zip": "",
490 },
491 Blueprint: `
492android_app {
493 name: "framework-res",
494 resource_zips: [
495 "resource_zip.zip",
496 ],
497 certificate: "platform",
498}
499
500filegroup {
501 name: "framework-res-package-jar",
502 srcs: [":framework-res{.export-package.apk}"],
503}
504`,
505 ExpectedBazelTargets: []string{
506 MakeBazelTarget("framework_resources", "framework-res", AttrNameToString{
507 "certificate_name": `"platform"`,
508 "manifest": `"AndroidManifest.xml"`,
509 "resource_files": `["res/values/attrs.xml"]`,
510 "resource_zips": `["resource_zip.zip"]`,
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000511 "target_compatible_with": `["//build/bazel_common_rules/platforms/os:android"]`,
Romain Jobredeaux9c06ef32023-08-21 18:05:29 -0400512 }),
513 MakeBazelTargetNoRestrictions("filegroup", "framework-res-package-jar", AttrNameToString{
514 "srcs": `[":framework-res.export-package.apk"]`,
515 }),
516 }})
517
518}