blob: 2b3552141c17979fca717ba0a64f3ba9c1af4e99 [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"
19 "android/soong/java"
20
21 "testing"
22)
23
Sam Delmerico3177a6e2022-06-21 19:28:33 +000024func runAndroidAppTestCase(t *testing.T, tc Bp2buildTestCase) {
Romain Jobredeaux1282c422021-10-29 10:52:59 -040025 t.Helper()
Sam Delmerico3177a6e2022-06-21 19:28:33 +000026 RunBp2BuildTestCase(t, registerAndroidAppModuleTypes, tc)
Romain Jobredeaux1282c422021-10-29 10:52:59 -040027}
28
29func registerAndroidAppModuleTypes(ctx android.RegistrationContext) {
Jingwen Chen6817bbb2022-10-14 09:56:07 +000030 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
Romain Jobredeaux1282c422021-10-29 10:52:59 -040031}
32
33func TestMinimalAndroidApp(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000034 runAndroidAppTestCase(t, Bp2buildTestCase{
35 Description: "Android app - simple example",
36 ModuleTypeUnderTest: "android_app",
37 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
38 Filesystem: map[string]string{
Romain Jobredeaux1282c422021-10-29 10:52:59 -040039 "app.java": "",
40 "res/res.png": "",
41 "AndroidManifest.xml": "",
42 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +000043 Blueprint: `
Romain Jobredeaux1282c422021-10-29 10:52:59 -040044android_app {
45 name: "TestApp",
46 srcs: ["app.java"],
47 sdk_version: "current",
48}
49`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000050 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +000051 MakeBazelTarget("android_binary", "TestApp", AttrNameToString{
Romain Jobredeaux1282c422021-10-29 10:52:59 -040052 "srcs": `["app.java"]`,
53 "manifest": `"AndroidManifest.xml"`,
54 "resource_files": `["res/res.png"]`,
55 }),
56 }})
57}
58
59func TestAndroidAppAllSupportedFields(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000060 runAndroidAppTestCase(t, Bp2buildTestCase{
61 Description: "Android app - all supported fields",
62 ModuleTypeUnderTest: "android_app",
63 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
64 Filesystem: map[string]string{
Romain Jobredeaux1282c422021-10-29 10:52:59 -040065 "app.java": "",
66 "resa/res.png": "",
67 "resb/res.png": "",
68 "manifest/AndroidManifest.xml": "",
69 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +000070 Blueprint: simpleModuleDoNotConvertBp2build("android_app", "static_lib_dep") + `
Romain Jobredeaux1282c422021-10-29 10:52:59 -040071android_app {
72 name: "TestApp",
73 srcs: ["app.java"],
74 sdk_version: "current",
75 package_name: "com.google",
76 resource_dirs: ["resa", "resb"],
77 manifest: "manifest/AndroidManifest.xml",
Vinh Tran3ac6daf2022-04-22 19:09:58 -040078 static_libs: ["static_lib_dep"],
79 java_version: "7",
Jingwen Chen6817bbb2022-10-14 09:56:07 +000080 certificate: "foocert",
Romain Jobredeaux1282c422021-10-29 10:52:59 -040081}
82`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000083 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +000084 MakeBazelTarget("android_binary", "TestApp", AttrNameToString{
Romain Jobredeaux1282c422021-10-29 10:52:59 -040085 "srcs": `["app.java"]`,
86 "manifest": `"manifest/AndroidManifest.xml"`,
87 "resource_files": `[
88 "resa/res.png",
89 "resb/res.png",
90 ]`,
Jingwen Chen6817bbb2022-10-14 09:56:07 +000091 "custom_package": `"com.google"`,
92 "deps": `[":static_lib_dep"]`,
93 "javacopts": `["-source 1.7 -target 1.7"]`,
94 "certificate_name": `"foocert"`,
Romain Jobredeaux1282c422021-10-29 10:52:59 -040095 }),
96 }})
97}
Sam Delmericoe91d0302022-02-23 15:28:33 +000098
99func TestAndroidAppArchVariantSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000100 runAndroidAppTestCase(t, Bp2buildTestCase{
101 Description: "Android app - arch variant srcs",
102 ModuleTypeUnderTest: "android_app",
103 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
104 Filesystem: map[string]string{
Sam Delmericoe91d0302022-02-23 15:28:33 +0000105 "arm.java": "",
106 "x86.java": "",
107 "res/res.png": "",
108 "AndroidManifest.xml": "",
109 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000110 Blueprint: `
Sam Delmericoe91d0302022-02-23 15:28:33 +0000111android_app {
112 name: "TestApp",
113 sdk_version: "current",
114 arch: {
115 arm: {
116 srcs: ["arm.java"],
117 },
118 x86: {
119 srcs: ["x86.java"],
120 }
121 }
122}
123`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000124 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000125 MakeBazelTarget("android_binary", "TestApp", AttrNameToString{
Sam Delmericoe91d0302022-02-23 15:28:33 +0000126 "srcs": `select({
127 "//build/bazel/platforms/arch:arm": ["arm.java"],
128 "//build/bazel/platforms/arch:x86": ["x86.java"],
129 "//conditions:default": [],
130 })`,
131 "manifest": `"AndroidManifest.xml"`,
132 "resource_files": `["res/res.png"]`,
Sam Delmericoe91d0302022-02-23 15:28:33 +0000133 }),
134 }})
135}
Jingwen Chen6817bbb2022-10-14 09:56:07 +0000136
137func TestAndroidAppCertIsModule(t *testing.T) {
138 runAndroidAppTestCase(t, Bp2buildTestCase{
139 Description: "Android app - cert is module",
140 ModuleTypeUnderTest: "android_app",
141 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
142 Filesystem: map[string]string{},
143 Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + `
144android_app {
145 name: "TestApp",
146 certificate: ":foocert",
147}
148`,
149 ExpectedBazelTargets: []string{
150 MakeBazelTarget("android_binary", "TestApp", AttrNameToString{
151 "certificate": `":foocert"`,
152 "manifest": `"AndroidManifest.xml"`,
153 "resource_files": `[]`,
154 }),
155 }})
156}
157
158func TestAndroidAppCertIsSrcFile(t *testing.T) {
159 runAndroidAppTestCase(t, Bp2buildTestCase{
160 Description: "Android app - cert is src file",
161 ModuleTypeUnderTest: "android_app",
162 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
163 Filesystem: map[string]string{
164 "foocert": "",
165 },
166 Blueprint: `
167android_app {
168 name: "TestApp",
169 certificate: "foocert",
170}
171`,
172 ExpectedBazelTargets: []string{
173 MakeBazelTarget("android_binary", "TestApp", AttrNameToString{
174 "certificate": `"foocert"`,
175 "manifest": `"AndroidManifest.xml"`,
176 "resource_files": `[]`,
177 }),
178 }})
179}
180
181func TestAndroidAppCertIsNotSrcOrModule(t *testing.T) {
182 runAndroidAppTestCase(t, Bp2buildTestCase{
183 Description: "Android app - cert is not src or module",
184 ModuleTypeUnderTest: "android_app",
185 ModuleTypeUnderTestFactory: java.AndroidAppFactory,
186 Filesystem: map[string]string{
187 // deliberate empty
188 },
189 Blueprint: `
190android_app {
191 name: "TestApp",
192 certificate: "foocert",
193}
194`,
195 ExpectedBazelTargets: []string{
196 MakeBazelTarget("android_binary", "TestApp", AttrNameToString{
197 "certificate_name": `"foocert"`,
198 "manifest": `"AndroidManifest.xml"`,
199 "resource_files": `[]`,
200 }),
201 }})
202}