blob: 166f053978f20acad583cea28676aee5e2059c7c [file] [log] [blame]
// 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 := []string{
"framework-virtualization",
"framework-location",
}
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) {
result := android.GroupFixturePreparers(
prepareForTestWithCombinedApis,
java.FixtureWithLastReleaseApis(
"framework-location", "framework-virtualization", "framework-foo", "framework-bar"),
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)
}