• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// 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
24func runAndroidAppTestCase(t *testing.T, tc bp2buildTestCase) {
25	t.Helper()
26	runBp2BuildTestCase(t, registerAndroidAppModuleTypes, tc)
27}
28
29func registerAndroidAppModuleTypes(ctx android.RegistrationContext) {
30}
31
32func TestMinimalAndroidApp(t *testing.T) {
33	runAndroidAppTestCase(t, bp2buildTestCase{
34		description:                "Android app - simple example",
35		moduleTypeUnderTest:        "android_app",
36		moduleTypeUnderTestFactory: java.AndroidAppFactory,
37		filesystem: map[string]string{
38			"app.java":            "",
39			"res/res.png":         "",
40			"AndroidManifest.xml": "",
41		},
42		blueprint: `
43android_app {
44        name: "TestApp",
45        srcs: ["app.java"],
46        sdk_version: "current",
47}
48`,
49		expectedBazelTargets: []string{
50			makeBazelTarget("android_binary", "TestApp", attrNameToString{
51				"srcs":           `["app.java"]`,
52				"manifest":       `"AndroidManifest.xml"`,
53				"resource_files": `["res/res.png"]`,
54			}),
55		}})
56}
57
58func TestAndroidAppAllSupportedFields(t *testing.T) {
59	runAndroidAppTestCase(t, bp2buildTestCase{
60		description:                "Android app - all supported fields",
61		moduleTypeUnderTest:        "android_app",
62		moduleTypeUnderTestFactory: java.AndroidAppFactory,
63		filesystem: map[string]string{
64			"app.java":                     "",
65			"resa/res.png":                 "",
66			"resb/res.png":                 "",
67			"manifest/AndroidManifest.xml": "",
68		},
69		blueprint: simpleModuleDoNotConvertBp2build("android_app", "static_lib_dep") + `
70android_app {
71        name: "TestApp",
72        srcs: ["app.java"],
73        sdk_version: "current",
74        package_name: "com.google",
75        resource_dirs: ["resa", "resb"],
76        manifest: "manifest/AndroidManifest.xml",
77        static_libs: ["static_lib_dep"]
78}
79`,
80		expectedBazelTargets: []string{
81			makeBazelTarget("android_binary", "TestApp", attrNameToString{
82				"srcs":     `["app.java"]`,
83				"manifest": `"manifest/AndroidManifest.xml"`,
84				"resource_files": `[
85        "resa/res.png",
86        "resb/res.png",
87    ]`,
88				"custom_package": `"com.google"`,
89				"deps":           `[":static_lib_dep"]`,
90			}),
91		}})
92}
93
94func TestAndroidAppArchVariantSrcs(t *testing.T) {
95	runAndroidAppTestCase(t, bp2buildTestCase{
96		description:                "Android app - arch variant srcs",
97		moduleTypeUnderTest:        "android_app",
98		moduleTypeUnderTestFactory: java.AndroidAppFactory,
99		filesystem: map[string]string{
100			"arm.java":            "",
101			"x86.java":            "",
102			"res/res.png":         "",
103			"AndroidManifest.xml": "",
104		},
105		blueprint: `
106android_app {
107        name: "TestApp",
108        sdk_version: "current",
109        arch: {
110			arm: {
111				srcs: ["arm.java"],
112			},
113			x86: {
114				srcs: ["x86.java"],
115			}
116		}
117}
118`,
119		expectedBazelTargets: []string{
120			makeBazelTarget("android_binary", "TestApp", attrNameToString{
121				"srcs": `select({
122        "//build/bazel/platforms/arch:arm": ["arm.java"],
123        "//build/bazel/platforms/arch:x86": ["x86.java"],
124        "//conditions:default": [],
125    })`,
126				"manifest":       `"AndroidManifest.xml"`,
127				"resource_files": `["res/res.png"]`,
128			}),
129		}})
130}
131