blob: b12d77896d5b79f4c874e7b2f0ecaf7397deed5d [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 (
18 "android/soong/android"
19 "testing"
20)
21
22func TestManifestMerger(t *testing.T) {
23 bp := `
24 android_app {
25 name: "app",
26 sdk_version: "current",
27 srcs: ["app/app.java"],
28 resource_dirs: ["app/res"],
29 manifest: "app/AndroidManifest.xml",
30 additional_manifests: ["app/AndroidManifest2.xml"],
31 static_libs: ["direct", "direct_import"],
32 }
33
34 android_library {
35 name: "direct",
36 sdk_version: "current",
37 srcs: ["direct/direct.java"],
38 resource_dirs: ["direct/res"],
39 manifest: "direct/AndroidManifest.xml",
40 additional_manifests: ["direct/AndroidManifest2.xml"],
41 static_libs: ["transitive", "transitive_import"],
42 }
43
44 android_library {
45 name: "transitive",
46 sdk_version: "current",
47 srcs: ["transitive/transitive.java"],
48 resource_dirs: ["transitive/res"],
49 manifest: "transitive/AndroidManifest.xml",
50 additional_manifests: ["transitive/AndroidManifest2.xml"],
51 }
52
53 android_library_import {
54 name: "direct_import",
55 sdk_version: "current",
56 aars: ["direct_import.aar"],
57 static_libs: ["direct_import_dep"],
58 }
59
60 android_library_import {
61 name: "direct_import_dep",
62 sdk_version: "current",
63 aars: ["direct_import_dep.aar"],
64 }
65
66 android_library_import {
67 name: "transitive_import",
68 sdk_version: "current",
69 aars: ["transitive_import.aar"],
70 static_libs: ["transitive_import_dep"],
71 }
72
73 android_library_import {
74 name: "transitive_import_dep",
75 sdk_version: "current",
76 aars: ["transitive_import_dep.aar"],
77 }
78 `
79
80 result := android.GroupFixturePreparers(
81 PrepareForTestWithJavaDefaultModules,
82 PrepareForTestWithOverlayBuildComponents,
83 ).RunTestWithBp(t, bp)
84
85 manifestMergerRule := result.ModuleForTests("app", "android_common").Rule("manifestMerger")
86 android.AssertPathRelativeToTopEquals(t, "main manifest",
87 "out/soong/.intermediates/app/android_common/manifest_fixer/AndroidManifest.xml",
88 manifestMergerRule.Input)
89 android.AssertPathsRelativeToTopEquals(t, "lib manifests",
90 []string{
91 "app/AndroidManifest2.xml",
92 "out/soong/.intermediates/direct/android_common/manifest_fixer/AndroidManifest.xml",
93 "direct/AndroidManifest2.xml",
94 "out/soong/.intermediates/transitive/android_common/manifest_fixer/AndroidManifest.xml",
95 "transitive/AndroidManifest2.xml",
96 "out/soong/.intermediates/transitive_import/android_common/aar/AndroidManifest.xml",
97 "out/soong/.intermediates/direct_import/android_common/aar/AndroidManifest.xml",
98 // TODO(b/288358614): Soong has historically not merged manifests from dependencies of
99 // android_library_import modules.
100
101 },
102 manifestMergerRule.Implicits)
103}