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