xref: /aosp_15_r20/frameworks/base/api/api_test.go (revision d57664e9bc4670b3ecf6748a746a57c557b6bc9e)
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