1*d57664e9SAndroid Build Coastguard Worker// Copyright (C) 2024 The Android Open Source Project 2*d57664e9SAndroid Build Coastguard Worker// 3*d57664e9SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*d57664e9SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*d57664e9SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*d57664e9SAndroid Build Coastguard Worker// 7*d57664e9SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*d57664e9SAndroid Build Coastguard Worker// 9*d57664e9SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*d57664e9SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*d57664e9SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*d57664e9SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*d57664e9SAndroid Build Coastguard Worker// limitations under the License. 14*d57664e9SAndroid Build Coastguard Worker 15*d57664e9SAndroid Build Coastguard Workerpackage api 16*d57664e9SAndroid Build Coastguard Worker 17*d57664e9SAndroid Build Coastguard Workerimport ( 18*d57664e9SAndroid Build Coastguard Worker "android/soong/android" 19*d57664e9SAndroid Build Coastguard Worker "android/soong/java" 20*d57664e9SAndroid Build Coastguard Worker "fmt" 21*d57664e9SAndroid Build Coastguard Worker "testing" 22*d57664e9SAndroid Build Coastguard Worker 23*d57664e9SAndroid Build Coastguard Worker "github.com/google/blueprint/proptools" 24*d57664e9SAndroid Build Coastguard Worker) 25*d57664e9SAndroid Build Coastguard Worker 26*d57664e9SAndroid Build Coastguard Workervar prepareForTestWithCombinedApis = android.GroupFixturePreparers( 27*d57664e9SAndroid Build Coastguard Worker android.FixtureRegisterWithContext(registerBuildComponents), 28*d57664e9SAndroid Build Coastguard Worker java.PrepareForTestWithJavaBuildComponents, 29*d57664e9SAndroid Build Coastguard Worker android.FixtureAddTextFile("a/Android.bp", gatherRequiredDepsForTest()), 30*d57664e9SAndroid Build Coastguard Worker java.PrepareForTestWithJavaSdkLibraryFiles, 31*d57664e9SAndroid Build Coastguard Worker android.FixtureMergeMockFs(android.MockFS{ 32*d57664e9SAndroid Build Coastguard Worker "a/api/current.txt": nil, 33*d57664e9SAndroid Build Coastguard Worker "a/api/removed.txt": nil, 34*d57664e9SAndroid Build Coastguard Worker "a/api/system-current.txt": nil, 35*d57664e9SAndroid Build Coastguard Worker "a/api/system-removed.txt": nil, 36*d57664e9SAndroid Build Coastguard Worker "a/api/test-current.txt": nil, 37*d57664e9SAndroid Build Coastguard Worker "a/api/test-removed.txt": nil, 38*d57664e9SAndroid Build Coastguard Worker "a/api/module-lib-current.txt": nil, 39*d57664e9SAndroid Build Coastguard Worker "a/api/module-lib-removed.txt": nil, 40*d57664e9SAndroid Build Coastguard Worker }), 41*d57664e9SAndroid Build Coastguard Worker android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { 42*d57664e9SAndroid Build Coastguard Worker variables.Allow_missing_dependencies = proptools.BoolPtr(true) 43*d57664e9SAndroid Build Coastguard Worker }), 44*d57664e9SAndroid Build Coastguard Worker) 45*d57664e9SAndroid Build Coastguard Worker 46*d57664e9SAndroid Build Coastguard Workerfunc gatherRequiredDepsForTest() string { 47*d57664e9SAndroid Build Coastguard Worker var bp string 48*d57664e9SAndroid Build Coastguard Worker 49*d57664e9SAndroid Build Coastguard Worker extraLibraryModules := []string{ 50*d57664e9SAndroid Build Coastguard Worker "stable.core.platform.api.stubs", 51*d57664e9SAndroid Build Coastguard Worker "core-lambda-stubs", 52*d57664e9SAndroid Build Coastguard Worker "core.current.stubs", 53*d57664e9SAndroid Build Coastguard Worker "ext", 54*d57664e9SAndroid Build Coastguard Worker "framework", 55*d57664e9SAndroid Build Coastguard Worker "android_stubs_current", 56*d57664e9SAndroid Build Coastguard Worker "android_system_stubs_current", 57*d57664e9SAndroid Build Coastguard Worker "android_test_stubs_current", 58*d57664e9SAndroid Build Coastguard Worker "android_test_frameworks_core_stubs_current", 59*d57664e9SAndroid Build Coastguard Worker "android_module_lib_stubs_current", 60*d57664e9SAndroid Build Coastguard Worker "android_system_server_stubs_current", 61*d57664e9SAndroid Build Coastguard Worker "android_stubs_current.from-text", 62*d57664e9SAndroid Build Coastguard Worker "android_system_stubs_current.from-text", 63*d57664e9SAndroid Build Coastguard Worker "android_test_stubs_current.from-text", 64*d57664e9SAndroid Build Coastguard Worker "android_test_frameworks_core_stubs_current.from-text", 65*d57664e9SAndroid Build Coastguard Worker "android_module_lib_stubs_current.from-text", 66*d57664e9SAndroid Build Coastguard Worker "android_system_server_stubs_current.from-text", 67*d57664e9SAndroid Build Coastguard Worker "android_stubs_current.from-source", 68*d57664e9SAndroid Build Coastguard Worker "android_system_stubs_current.from-source", 69*d57664e9SAndroid Build Coastguard Worker "android_test_stubs_current.from-source", 70*d57664e9SAndroid Build Coastguard Worker "android_test_frameworks_core_stubs_current.from-source", 71*d57664e9SAndroid Build Coastguard Worker "android_module_lib_stubs_current.from-source", 72*d57664e9SAndroid Build Coastguard Worker "android_system_server_stubs_current.from-source", 73*d57664e9SAndroid Build Coastguard Worker "android_stubs_current_exportable.from-source", 74*d57664e9SAndroid Build Coastguard Worker "android_system_stubs_current_exportable.from-source", 75*d57664e9SAndroid Build Coastguard Worker "android_test_stubs_current_exportable.from-source", 76*d57664e9SAndroid Build Coastguard Worker "android_module_lib_stubs_current_exportable.from-source", 77*d57664e9SAndroid Build Coastguard Worker "android_system_server_stubs_current_exportable.from-source", 78*d57664e9SAndroid Build Coastguard Worker "stub-annotations", 79*d57664e9SAndroid Build Coastguard Worker } 80*d57664e9SAndroid Build Coastguard Worker 81*d57664e9SAndroid Build Coastguard Worker extraSdkLibraryModules := non_updatable_modules 82*d57664e9SAndroid Build Coastguard Worker 83*d57664e9SAndroid Build Coastguard Worker extraSystemModules := []string{ 84*d57664e9SAndroid Build Coastguard Worker "core-public-stubs-system-modules", 85*d57664e9SAndroid Build Coastguard Worker "core-module-lib-stubs-system-modules", 86*d57664e9SAndroid Build Coastguard Worker "stable-core-platform-api-stubs-system-modules", 87*d57664e9SAndroid Build Coastguard Worker } 88*d57664e9SAndroid Build Coastguard Worker 89*d57664e9SAndroid Build Coastguard Worker extraFilegroupModules := []string{ 90*d57664e9SAndroid Build Coastguard Worker "non-updatable-current.txt", 91*d57664e9SAndroid Build Coastguard Worker "non-updatable-removed.txt", 92*d57664e9SAndroid Build Coastguard Worker "non-updatable-system-current.txt", 93*d57664e9SAndroid Build Coastguard Worker "non-updatable-system-removed.txt", 94*d57664e9SAndroid Build Coastguard Worker "non-updatable-test-current.txt", 95*d57664e9SAndroid Build Coastguard Worker "non-updatable-test-removed.txt", 96*d57664e9SAndroid Build Coastguard Worker "non-updatable-module-lib-current.txt", 97*d57664e9SAndroid Build Coastguard Worker "non-updatable-module-lib-removed.txt", 98*d57664e9SAndroid Build Coastguard Worker "non-updatable-system-server-current.txt", 99*d57664e9SAndroid Build Coastguard Worker "non-updatable-system-server-removed.txt", 100*d57664e9SAndroid Build Coastguard Worker "non-updatable-exportable-current.txt", 101*d57664e9SAndroid Build Coastguard Worker "non-updatable-exportable-removed.txt", 102*d57664e9SAndroid Build Coastguard Worker "non-updatable-exportable-system-current.txt", 103*d57664e9SAndroid Build Coastguard Worker "non-updatable-exportable-system-removed.txt", 104*d57664e9SAndroid Build Coastguard Worker "non-updatable-exportable-test-current.txt", 105*d57664e9SAndroid Build Coastguard Worker "non-updatable-exportable-test-removed.txt", 106*d57664e9SAndroid Build Coastguard Worker "non-updatable-exportable-module-lib-current.txt", 107*d57664e9SAndroid Build Coastguard Worker "non-updatable-exportable-module-lib-removed.txt", 108*d57664e9SAndroid Build Coastguard Worker "non-updatable-exportable-system-server-current.txt", 109*d57664e9SAndroid Build Coastguard Worker "non-updatable-exportable-system-server-removed.txt", 110*d57664e9SAndroid Build Coastguard Worker } 111*d57664e9SAndroid Build Coastguard Worker 112*d57664e9SAndroid Build Coastguard Worker for _, extra := range extraLibraryModules { 113*d57664e9SAndroid Build Coastguard Worker bp += fmt.Sprintf(` 114*d57664e9SAndroid Build Coastguard Worker java_library { 115*d57664e9SAndroid Build Coastguard Worker name: "%s", 116*d57664e9SAndroid Build Coastguard Worker srcs: ["a.java"], 117*d57664e9SAndroid Build Coastguard Worker sdk_version: "none", 118*d57664e9SAndroid Build Coastguard Worker system_modules: "stable-core-platform-api-stubs-system-modules", 119*d57664e9SAndroid Build Coastguard Worker compile_dex: true, 120*d57664e9SAndroid Build Coastguard Worker } 121*d57664e9SAndroid Build Coastguard Worker `, extra) 122*d57664e9SAndroid Build Coastguard Worker } 123*d57664e9SAndroid Build Coastguard Worker 124*d57664e9SAndroid Build Coastguard Worker for _, extra := range extraSdkLibraryModules { 125*d57664e9SAndroid Build Coastguard Worker bp += fmt.Sprintf(` 126*d57664e9SAndroid Build Coastguard Worker java_sdk_library { 127*d57664e9SAndroid Build Coastguard Worker name: "%s", 128*d57664e9SAndroid Build Coastguard Worker srcs: ["a.java"], 129*d57664e9SAndroid Build Coastguard Worker public: { 130*d57664e9SAndroid Build Coastguard Worker enabled: true, 131*d57664e9SAndroid Build Coastguard Worker }, 132*d57664e9SAndroid Build Coastguard Worker system: { 133*d57664e9SAndroid Build Coastguard Worker enabled: true, 134*d57664e9SAndroid Build Coastguard Worker }, 135*d57664e9SAndroid Build Coastguard Worker test: { 136*d57664e9SAndroid Build Coastguard Worker enabled: true, 137*d57664e9SAndroid Build Coastguard Worker }, 138*d57664e9SAndroid Build Coastguard Worker module_lib: { 139*d57664e9SAndroid Build Coastguard Worker enabled: true, 140*d57664e9SAndroid Build Coastguard Worker }, 141*d57664e9SAndroid Build Coastguard Worker api_packages: [ 142*d57664e9SAndroid Build Coastguard Worker "foo", 143*d57664e9SAndroid Build Coastguard Worker ], 144*d57664e9SAndroid Build Coastguard Worker sdk_version: "core_current", 145*d57664e9SAndroid Build Coastguard Worker compile_dex: true, 146*d57664e9SAndroid Build Coastguard Worker annotations_enabled: true, 147*d57664e9SAndroid Build Coastguard Worker } 148*d57664e9SAndroid Build Coastguard Worker `, extra) 149*d57664e9SAndroid Build Coastguard Worker } 150*d57664e9SAndroid Build Coastguard Worker 151*d57664e9SAndroid Build Coastguard Worker for _, extra := range extraFilegroupModules { 152*d57664e9SAndroid Build Coastguard Worker bp += fmt.Sprintf(` 153*d57664e9SAndroid Build Coastguard Worker filegroup { 154*d57664e9SAndroid Build Coastguard Worker name: "%[1]s", 155*d57664e9SAndroid Build Coastguard Worker } 156*d57664e9SAndroid Build Coastguard Worker `, extra) 157*d57664e9SAndroid Build Coastguard Worker } 158*d57664e9SAndroid Build Coastguard Worker 159*d57664e9SAndroid Build Coastguard Worker for _, extra := range extraSystemModules { 160*d57664e9SAndroid Build Coastguard Worker bp += fmt.Sprintf(` 161*d57664e9SAndroid Build Coastguard Worker java_system_modules { 162*d57664e9SAndroid Build Coastguard Worker name: "%[1]s", 163*d57664e9SAndroid Build Coastguard Worker libs: ["%[1]s-lib"], 164*d57664e9SAndroid Build Coastguard Worker } 165*d57664e9SAndroid Build Coastguard Worker java_library { 166*d57664e9SAndroid Build Coastguard Worker name: "%[1]s-lib", 167*d57664e9SAndroid Build Coastguard Worker sdk_version: "none", 168*d57664e9SAndroid Build Coastguard Worker system_modules: "none", 169*d57664e9SAndroid Build Coastguard Worker } 170*d57664e9SAndroid Build Coastguard Worker `, extra) 171*d57664e9SAndroid Build Coastguard Worker } 172*d57664e9SAndroid Build Coastguard Worker 173*d57664e9SAndroid Build Coastguard Worker bp += fmt.Sprintf(` 174*d57664e9SAndroid Build Coastguard Worker java_defaults { 175*d57664e9SAndroid Build Coastguard Worker name: "android.jar_defaults", 176*d57664e9SAndroid Build Coastguard Worker } 177*d57664e9SAndroid Build Coastguard Worker `) 178*d57664e9SAndroid Build Coastguard Worker 179*d57664e9SAndroid Build Coastguard Worker return bp 180*d57664e9SAndroid Build Coastguard Worker} 181*d57664e9SAndroid Build Coastguard Worker 182*d57664e9SAndroid Build Coastguard Workerfunc TestCombinedApisDefaults(t *testing.T) { 183*d57664e9SAndroid Build Coastguard Worker 184*d57664e9SAndroid Build Coastguard Worker testNonUpdatableModules := append(non_updatable_modules, "framework-foo", "framework-bar") 185*d57664e9SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 186*d57664e9SAndroid Build Coastguard Worker prepareForTestWithCombinedApis, 187*d57664e9SAndroid Build Coastguard Worker java.FixtureWithLastReleaseApis(testNonUpdatableModules...), 188*d57664e9SAndroid Build Coastguard Worker android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { 189*d57664e9SAndroid Build Coastguard Worker variables.VendorVars = map[string]map[string]string{ 190*d57664e9SAndroid Build Coastguard Worker "boolean_var": { 191*d57664e9SAndroid Build Coastguard Worker "for_testing": "true", 192*d57664e9SAndroid Build Coastguard Worker }, 193*d57664e9SAndroid Build Coastguard Worker } 194*d57664e9SAndroid Build Coastguard Worker }), 195*d57664e9SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 196*d57664e9SAndroid Build Coastguard Worker java_sdk_library { 197*d57664e9SAndroid Build Coastguard Worker name: "framework-foo", 198*d57664e9SAndroid Build Coastguard Worker srcs: ["a.java"], 199*d57664e9SAndroid Build Coastguard Worker public: { 200*d57664e9SAndroid Build Coastguard Worker enabled: true, 201*d57664e9SAndroid Build Coastguard Worker }, 202*d57664e9SAndroid Build Coastguard Worker system: { 203*d57664e9SAndroid Build Coastguard Worker enabled: true, 204*d57664e9SAndroid Build Coastguard Worker }, 205*d57664e9SAndroid Build Coastguard Worker test: { 206*d57664e9SAndroid Build Coastguard Worker enabled: true, 207*d57664e9SAndroid Build Coastguard Worker }, 208*d57664e9SAndroid Build Coastguard Worker module_lib: { 209*d57664e9SAndroid Build Coastguard Worker enabled: true, 210*d57664e9SAndroid Build Coastguard Worker }, 211*d57664e9SAndroid Build Coastguard Worker api_packages: [ 212*d57664e9SAndroid Build Coastguard Worker "foo", 213*d57664e9SAndroid Build Coastguard Worker ], 214*d57664e9SAndroid Build Coastguard Worker sdk_version: "core_current", 215*d57664e9SAndroid Build Coastguard Worker annotations_enabled: true, 216*d57664e9SAndroid Build Coastguard Worker } 217*d57664e9SAndroid Build Coastguard Worker java_sdk_library { 218*d57664e9SAndroid Build Coastguard Worker name: "framework-bar", 219*d57664e9SAndroid Build Coastguard Worker srcs: ["a.java"], 220*d57664e9SAndroid Build Coastguard Worker public: { 221*d57664e9SAndroid Build Coastguard Worker enabled: true, 222*d57664e9SAndroid Build Coastguard Worker }, 223*d57664e9SAndroid Build Coastguard Worker system: { 224*d57664e9SAndroid Build Coastguard Worker enabled: true, 225*d57664e9SAndroid Build Coastguard Worker }, 226*d57664e9SAndroid Build Coastguard Worker test: { 227*d57664e9SAndroid Build Coastguard Worker enabled: true, 228*d57664e9SAndroid Build Coastguard Worker }, 229*d57664e9SAndroid Build Coastguard Worker module_lib: { 230*d57664e9SAndroid Build Coastguard Worker enabled: true, 231*d57664e9SAndroid Build Coastguard Worker }, 232*d57664e9SAndroid Build Coastguard Worker api_packages: [ 233*d57664e9SAndroid Build Coastguard Worker "foo", 234*d57664e9SAndroid Build Coastguard Worker ], 235*d57664e9SAndroid Build Coastguard Worker sdk_version: "core_current", 236*d57664e9SAndroid Build Coastguard Worker annotations_enabled: true, 237*d57664e9SAndroid Build Coastguard Worker } 238*d57664e9SAndroid Build Coastguard Worker 239*d57664e9SAndroid Build Coastguard Worker combined_apis { 240*d57664e9SAndroid Build Coastguard Worker name: "foo", 241*d57664e9SAndroid Build Coastguard Worker bootclasspath: [ 242*d57664e9SAndroid Build Coastguard Worker "framework-bar", 243*d57664e9SAndroid Build Coastguard Worker ] + select(boolean_var_for_testing(), { 244*d57664e9SAndroid Build Coastguard Worker true: [ 245*d57664e9SAndroid Build Coastguard Worker "framework-foo", 246*d57664e9SAndroid Build Coastguard Worker ], 247*d57664e9SAndroid Build Coastguard Worker default: [], 248*d57664e9SAndroid Build Coastguard Worker }), 249*d57664e9SAndroid Build Coastguard Worker } 250*d57664e9SAndroid Build Coastguard Worker `) 251*d57664e9SAndroid Build Coastguard Worker 252*d57664e9SAndroid Build Coastguard Worker subModuleDependsOnSelectAppendedModule := java.CheckModuleHasDependency(t, 253*d57664e9SAndroid Build Coastguard Worker result.TestContext, "foo-current.txt", "android_common", "framework-foo") 254*d57664e9SAndroid Build Coastguard Worker android.AssertBoolEquals(t, "Submodule expected to depend on the select-appended module", 255*d57664e9SAndroid Build Coastguard Worker true, subModuleDependsOnSelectAppendedModule) 256*d57664e9SAndroid Build Coastguard Worker} 257