| // Copyright (C) 2024 The Android Open Source Project | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| package api | |
| import ( | |
| "android/soong/android" | |
| "android/soong/java" | |
| "fmt" | |
| "testing" | |
| "github.com/google/blueprint/proptools" | |
| ) | |
| var prepareForTestWithCombinedApis = android.GroupFixturePreparers( | |
| android.FixtureRegisterWithContext(registerBuildComponents), | |
| java.PrepareForTestWithJavaBuildComponents, | |
| android.FixtureAddTextFile("a/Android.bp", gatherRequiredDepsForTest()), | |
| java.PrepareForTestWithJavaSdkLibraryFiles, | |
| android.FixtureMergeMockFs(android.MockFS{ | |
| "a/api/current.txt": nil, | |
| "a/api/removed.txt": nil, | |
| "a/api/system-current.txt": nil, | |
| "a/api/system-removed.txt": nil, | |
| "a/api/test-current.txt": nil, | |
| "a/api/test-removed.txt": nil, | |
| "a/api/module-lib-current.txt": nil, | |
| "a/api/module-lib-removed.txt": nil, | |
| }), | |
| android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { | |
| variables.Allow_missing_dependencies = proptools.BoolPtr(true) | |
| }), | |
| ) | |
| func gatherRequiredDepsForTest() string { | |
| var bp string | |
| extraLibraryModules := []string{ | |
| "stable.core.platform.api.stubs", | |
| "core-lambda-stubs", | |
| "core.current.stubs", | |
| "ext", | |
| "framework", | |
| "android_stubs_current", | |
| "android_system_stubs_current", | |
| "android_test_stubs_current", | |
| "android_test_frameworks_core_stubs_current", | |
| "android_module_lib_stubs_current", | |
| "android_system_server_stubs_current", | |
| "android_stubs_current.from-text", | |
| "android_system_stubs_current.from-text", | |
| "android_test_stubs_current.from-text", | |
| "android_test_frameworks_core_stubs_current.from-text", | |
| "android_module_lib_stubs_current.from-text", | |
| "android_system_server_stubs_current.from-text", | |
| "android_stubs_current.from-source", | |
| "android_system_stubs_current.from-source", | |
| "android_test_stubs_current.from-source", | |
| "android_test_frameworks_core_stubs_current.from-source", | |
| "android_module_lib_stubs_current.from-source", | |
| "android_system_server_stubs_current.from-source", | |
| "android_stubs_current_exportable.from-source", | |
| "android_system_stubs_current_exportable.from-source", | |
| "android_test_stubs_current_exportable.from-source", | |
| "android_module_lib_stubs_current_exportable.from-source", | |
| "android_system_server_stubs_current_exportable.from-source", | |
| "stub-annotations", | |
| } | |
| extraSdkLibraryModules := non_updatable_modules | |
| extraSystemModules := []string{ | |
| "core-public-stubs-system-modules", | |
| "core-module-lib-stubs-system-modules", | |
| "stable-core-platform-api-stubs-system-modules", | |
| } | |
| extraFilegroupModules := []string{ | |
| "non-updatable-current.txt", | |
| "non-updatable-removed.txt", | |
| "non-updatable-system-current.txt", | |
| "non-updatable-system-removed.txt", | |
| "non-updatable-test-current.txt", | |
| "non-updatable-test-removed.txt", | |
| "non-updatable-module-lib-current.txt", | |
| "non-updatable-module-lib-removed.txt", | |
| "non-updatable-system-server-current.txt", | |
| "non-updatable-system-server-removed.txt", | |
| "non-updatable-exportable-current.txt", | |
| "non-updatable-exportable-removed.txt", | |
| "non-updatable-exportable-system-current.txt", | |
| "non-updatable-exportable-system-removed.txt", | |
| "non-updatable-exportable-test-current.txt", | |
| "non-updatable-exportable-test-removed.txt", | |
| "non-updatable-exportable-module-lib-current.txt", | |
| "non-updatable-exportable-module-lib-removed.txt", | |
| "non-updatable-exportable-system-server-current.txt", | |
| "non-updatable-exportable-system-server-removed.txt", | |
| } | |
| for _, extra := range extraLibraryModules { | |
| bp += fmt.Sprintf(` | |
| java_library { | |
| name: "%s", | |
| srcs: ["a.java"], | |
| sdk_version: "none", | |
| system_modules: "stable-core-platform-api-stubs-system-modules", | |
| compile_dex: true, | |
| } | |
| `, extra) | |
| } | |
| for _, extra := range extraSdkLibraryModules { | |
| bp += fmt.Sprintf(` | |
| java_sdk_library { | |
| name: "%s", | |
| srcs: ["a.java"], | |
| public: { | |
| enabled: true, | |
| }, | |
| system: { | |
| enabled: true, | |
| }, | |
| test: { | |
| enabled: true, | |
| }, | |
| module_lib: { | |
| enabled: true, | |
| }, | |
| api_packages: [ | |
| "foo", | |
| ], | |
| sdk_version: "core_current", | |
| compile_dex: true, | |
| annotations_enabled: true, | |
| } | |
| `, extra) | |
| } | |
| for _, extra := range extraFilegroupModules { | |
| bp += fmt.Sprintf(` | |
| filegroup { | |
| name: "%[1]s", | |
| } | |
| `, extra) | |
| } | |
| for _, extra := range extraSystemModules { | |
| bp += fmt.Sprintf(` | |
| java_system_modules { | |
| name: "%[1]s", | |
| libs: ["%[1]s-lib"], | |
| } | |
| java_library { | |
| name: "%[1]s-lib", | |
| sdk_version: "none", | |
| system_modules: "none", | |
| } | |
| `, extra) | |
| } | |
| bp += fmt.Sprintf(` | |
| java_defaults { | |
| name: "android.jar_defaults", | |
| } | |
| `) | |
| return bp | |
| } | |
| func TestCombinedApisDefaults(t *testing.T) { | |
| testNonUpdatableModules := append(non_updatable_modules, "framework-foo", "framework-bar") | |
| result := android.GroupFixturePreparers( | |
| prepareForTestWithCombinedApis, | |
| java.FixtureWithLastReleaseApis(testNonUpdatableModules...), | |
| android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { | |
| variables.VendorVars = map[string]map[string]string{ | |
| "boolean_var": { | |
| "for_testing": "true", | |
| }, | |
| } | |
| }), | |
| ).RunTestWithBp(t, ` | |
| java_sdk_library { | |
| name: "framework-foo", | |
| srcs: ["a.java"], | |
| public: { | |
| enabled: true, | |
| }, | |
| system: { | |
| enabled: true, | |
| }, | |
| test: { | |
| enabled: true, | |
| }, | |
| module_lib: { | |
| enabled: true, | |
| }, | |
| api_packages: [ | |
| "foo", | |
| ], | |
| sdk_version: "core_current", | |
| annotations_enabled: true, | |
| } | |
| java_sdk_library { | |
| name: "framework-bar", | |
| srcs: ["a.java"], | |
| public: { | |
| enabled: true, | |
| }, | |
| system: { | |
| enabled: true, | |
| }, | |
| test: { | |
| enabled: true, | |
| }, | |
| module_lib: { | |
| enabled: true, | |
| }, | |
| api_packages: [ | |
| "foo", | |
| ], | |
| sdk_version: "core_current", | |
| annotations_enabled: true, | |
| } | |
| combined_apis { | |
| name: "foo", | |
| bootclasspath: [ | |
| "framework-bar", | |
| ] + select(boolean_var_for_testing(), { | |
| true: [ | |
| "framework-foo", | |
| ], | |
| default: [], | |
| }), | |
| } | |
| `) | |
| subModuleDependsOnSelectAppendedModule := java.CheckModuleHasDependency(t, | |
| result.TestContext, "foo-current.txt", "android_common", "framework-foo") | |
| android.AssertBoolEquals(t, "Submodule expected to depend on the select-appended module", | |
| true, subModuleDependsOnSelectAppendedModule) | |
| } |