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