blob: 0a39dca866aa1c901b9cf64e2c853c15a6e5546c [file] [log] [blame]
Colin Cross02bccdf2023-07-14 11:19:08 -07001// 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 (
Colin Cross02bccdf2023-07-14 11:19:08 -070018 "testing"
Alix96ea88452023-08-31 15:48:23 +000019
20 "android/soong/android"
Colin Cross02bccdf2023-07-14 11:19:08 -070021)
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 := android.GroupFixturePreparers(
82 PrepareForTestWithJavaDefaultModules,
83 PrepareForTestWithOverlayBuildComponents,
84 ).RunTestWithBp(t, bp)
85
86 manifestMergerRule := result.ModuleForTests("app", "android_common").Rule("manifestMerger")
87 android.AssertPathRelativeToTopEquals(t, "main manifest",
88 "out/soong/.intermediates/app/android_common/manifest_fixer/AndroidManifest.xml",
89 manifestMergerRule.Input)
90 android.AssertPathsRelativeToTopEquals(t, "lib manifests",
91 []string{
92 "app/AndroidManifest2.xml",
93 "out/soong/.intermediates/direct/android_common/manifest_fixer/AndroidManifest.xml",
94 "direct/AndroidManifest2.xml",
95 "out/soong/.intermediates/transitive/android_common/manifest_fixer/AndroidManifest.xml",
96 "transitive/AndroidManifest2.xml",
97 "out/soong/.intermediates/transitive_import/android_common/aar/AndroidManifest.xml",
98 "out/soong/.intermediates/direct_import/android_common/aar/AndroidManifest.xml",
99 // TODO(b/288358614): Soong has historically not merged manifests from dependencies of
100 // android_library_import modules.
101
102 },
103 manifestMergerRule.Implicits)
104}
Alix96ea88452023-08-31 15:48:23 +0000105
106func TestManifestValuesApplicationIdSetsPackageName(t *testing.T) {
107 bp := `
108 android_test {
109 name: "test",
110 sdk_version: "current",
111 srcs: ["app/app.java"],
112 manifest: "test/AndroidManifest.xml",
113 additional_manifests: ["test/AndroidManifest2.xml"],
114 static_libs: ["direct"],
115 test_suites: ["device-tests"],
116 manifest_values: {
117 applicationId: "new_package_name"
118 },
119 }
120
121 android_library {
122 name: "direct",
123 sdk_version: "current",
124 srcs: ["direct/direct.java"],
125 resource_dirs: ["direct/res"],
126 manifest: "direct/AndroidManifest.xml",
127 additional_manifests: ["direct/AndroidManifest2.xml"],
128 }
129
130 `
131
132 result := android.GroupFixturePreparers(
133 PrepareForTestWithJavaDefaultModules,
134 PrepareForTestWithOverlayBuildComponents,
135 ).RunTestWithBp(t, bp)
136
137 manifestMergerRule := result.ModuleForTests("test", "android_common").Rule("manifestMerger")
138 android.AssertStringMatches(t,
139 "manifest merger args",
140 manifestMergerRule.Args["args"],
141 "--property PACKAGE=new_package_name")
142}