xref: /aosp_15_r20/build/soong/java/android_manifest_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1// Copyright 2023 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 java
16
17import (
18	"testing"
19
20	"android/soong/android"
21)
22
23func TestManifestMerger(t *testing.T) {
24	bp := `
25		android_app {
26			name: "app",
27			sdk_version: "current",
28			srcs: ["app/app.java"],
29			resource_dirs: ["app/res"],
30			manifest: "app/AndroidManifest.xml",
31			additional_manifests: ["app/AndroidManifest2.xml"],
32			static_libs: ["direct", "direct_import"],
33		}
34
35		android_library {
36			name: "direct",
37			sdk_version: "current",
38			srcs: ["direct/direct.java"],
39			resource_dirs: ["direct/res"],
40			manifest: "direct/AndroidManifest.xml",
41			additional_manifests: ["direct/AndroidManifest2.xml"],
42			static_libs: ["transitive", "transitive_import"],
43		}
44
45		android_library {
46			name: "transitive",
47			sdk_version: "current",
48			srcs: ["transitive/transitive.java"],
49			resource_dirs: ["transitive/res"],
50			manifest: "transitive/AndroidManifest.xml",
51			additional_manifests: ["transitive/AndroidManifest2.xml"],
52		}
53
54		android_library_import {
55			name: "direct_import",
56			sdk_version: "current",
57			aars: ["direct_import.aar"],
58			static_libs: ["direct_import_dep"],
59		}
60
61		android_library_import {
62			name: "direct_import_dep",
63			sdk_version: "current",
64			aars: ["direct_import_dep.aar"],
65		}
66
67		android_library_import {
68			name: "transitive_import",
69			sdk_version: "current",
70			aars: ["transitive_import.aar"],
71			static_libs: ["transitive_import_dep"],
72		}
73
74		android_library_import {
75			name: "transitive_import_dep",
76			sdk_version: "current",
77			aars: ["transitive_import_dep.aar"],
78		}
79	`
80
81	result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, bp)
82
83	manifestMergerRule := result.ModuleForTests("app", "android_common").Rule("manifestMerger")
84	android.AssertPathRelativeToTopEquals(t, "main manifest",
85		"out/soong/.intermediates/app/android_common/manifest_fixer/AndroidManifest.xml",
86		manifestMergerRule.Input)
87	android.AssertPathsRelativeToTopEquals(t, "lib manifests",
88		[]string{
89			"app/AndroidManifest2.xml",
90			"out/soong/.intermediates/direct/android_common/manifest_fixer/AndroidManifest.xml",
91			"direct/AndroidManifest2.xml",
92			"out/soong/.intermediates/transitive/android_common/manifest_fixer/AndroidManifest.xml",
93			"transitive/AndroidManifest2.xml",
94			"out/soong/.intermediates/transitive_import/android_common/aar/AndroidManifest.xml",
95			"out/soong/.intermediates/transitive_import_dep/android_common/aar/AndroidManifest.xml",
96			"out/soong/.intermediates/direct_import/android_common/aar/AndroidManifest.xml",
97			"out/soong/.intermediates/direct_import_dep/android_common/aar/AndroidManifest.xml",
98		},
99		manifestMergerRule.Implicits)
100}
101
102func TestManifestValuesApplicationIdSetsPackageName(t *testing.T) {
103	bp := `
104		android_test {
105			name: "test",
106			sdk_version: "current",
107			srcs: ["app/app.java"],
108			manifest: "test/AndroidManifest.xml",
109			additional_manifests: ["test/AndroidManifest2.xml"],
110			static_libs: ["direct"],
111      test_suites: ["device-tests"],
112      manifest_values:  {
113        applicationId: "new_package_name"
114      },
115		}
116
117		android_library {
118			name: "direct",
119			sdk_version: "current",
120			srcs: ["direct/direct.java"],
121			resource_dirs: ["direct/res"],
122			manifest: "direct/AndroidManifest.xml",
123			additional_manifests: ["direct/AndroidManifest2.xml"],
124		}
125
126	`
127
128	result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, bp)
129
130	manifestMergerRule := result.ModuleForTests("test", "android_common").Rule("manifestMerger")
131	android.AssertStringMatches(t,
132		"manifest merger args",
133		manifestMergerRule.Args["args"],
134		"--property PACKAGE=new_package_name")
135}
136