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