blob: 057b370d3b2814796eac7f8d104ece979f0d04cf [file] [log] [blame]
Jiyong Parkd1063c12019-07-17 20:08:41 +09001// Copyright 2019 Google Inc. All rights reserved.
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 sdk
16
17import (
Martin Stjernholm3ff2e662020-07-15 14:38:15 +010018 "log"
19 "os"
Colin Cross0c66bc62021-07-20 09:47:41 -070020 "runtime"
Jiyong Parkd1063c12019-07-17 20:08:41 +090021 "testing"
Paul Duffinb07fa512020-03-10 22:17:04 +000022
Colin Cross0c66bc62021-07-20 09:47:41 -070023 "android/soong/android"
Paul Duffin39abf8f2021-09-24 14:58:27 +010024 "android/soong/java"
Colin Cross0c66bc62021-07-20 09:47:41 -070025
Paul Duffinb07fa512020-03-10 22:17:04 +000026 "github.com/google/blueprint/proptools"
Jiyong Parkd1063c12019-07-17 20:08:41 +090027)
28
Paul Duffin82d90432019-11-30 09:24:33 +000029// Needed in an _test.go file in this package to ensure tests run correctly, particularly in IDE.
30func TestMain(m *testing.M) {
Colin Cross0c66bc62021-07-20 09:47:41 -070031 if runtime.GOOS != "linux" {
Martin Stjernholm3ff2e662020-07-15 14:38:15 +010032 // b/145598135 - Generating host snapshots for anything other than linux is not supported.
Colin Cross0c66bc62021-07-20 09:47:41 -070033 log.Printf("Skipping as sdk snapshot generation is only supported on linux not %s", runtime.GOOS)
Martin Stjernholm3ff2e662020-07-15 14:38:15 +010034 os.Exit(0)
35 }
36
Paul Duffinabbf63d2021-03-18 01:47:31 +000037 os.Exit(m.Run())
Jiyong Parkd1063c12019-07-17 20:08:41 +090038}
39
Paul Duffin593b3c92019-12-05 14:31:48 +000040// Ensure that prebuilt modules have the same effective visibility as the source
41// modules.
42func TestSnapshotVisibility(t *testing.T) {
43 packageBp := `
44 package {
45 default_visibility: ["//other/foo"],
46 }
47
48 sdk {
49 name: "mysdk",
50 visibility: [
51 "//other/foo",
52 // This short form will be replaced with //package:__subpackages__ in the
53 // generated sdk_snapshot.
54 ":__subpackages__",
55 ],
Paul Duffin157f40f2020-09-29 16:01:08 +010056 prebuilt_visibility: [
57 "//prebuilts/mysdk",
58 ],
Paul Duffin593b3c92019-12-05 14:31:48 +000059 java_header_libs: [
60 "myjavalib",
61 "mypublicjavalib",
62 "mydefaultedjavalib",
Martin Stjernholm64aeaad2020-05-13 22:11:40 +010063 "myprivatejavalib",
Paul Duffin593b3c92019-12-05 14:31:48 +000064 ],
65 }
66
67 java_library {
68 name: "myjavalib",
69 // Uses package default visibility
70 srcs: ["Test.java"],
71 system_modules: "none",
72 sdk_version: "none",
73 }
74
Paul Duffin44885e22020-02-19 16:10:09 +000075 java_defaults {
76 name: "java-defaults",
Jooyung Han5e9013b2020-03-10 06:23:13 +090077 visibility: ["//other/bar"],
Paul Duffin44885e22020-02-19 16:10:09 +000078 }
79
Paul Duffin593b3c92019-12-05 14:31:48 +000080 java_library {
81 name: "mypublicjavalib",
Paul Duffin44885e22020-02-19 16:10:09 +000082 defaults: ["java-defaults"],
Paul Duffin593b3c92019-12-05 14:31:48 +000083 visibility: ["//visibility:public"],
84 srcs: ["Test.java"],
85 system_modules: "none",
86 sdk_version: "none",
87 }
88
89 java_defaults {
90 name: "myjavadefaults",
91 visibility: ["//other/bar"],
92 }
93
94 java_library {
95 name: "mydefaultedjavalib",
96 defaults: ["myjavadefaults"],
97 srcs: ["Test.java"],
98 system_modules: "none",
99 sdk_version: "none",
100 }
Martin Stjernholm64aeaad2020-05-13 22:11:40 +0100101
102 java_library {
103 name: "myprivatejavalib",
104 srcs: ["Test.java"],
105 visibility: ["//visibility:private"],
106 system_modules: "none",
107 sdk_version: "none",
108 }
Paul Duffin593b3c92019-12-05 14:31:48 +0000109 `
110
111 result := testSdkWithFs(t, ``,
112 map[string][]byte{
113 "package/Test.java": nil,
114 "package/Android.bp": []byte(packageBp),
115 })
116
Paul Duffin36474d32021-03-12 12:19:43 +0000117 CheckSnapshot(t, result, "mysdk", "package",
Paul Duffin593b3c92019-12-05 14:31:48 +0000118 checkAndroidBpContents(`
119// This is auto-generated. DO NOT EDIT.
120
Spandan Dasa5e26d32024-03-06 14:04:36 +0000121apex_contributions_defaults {
122 name: "mysdk.contributions",
123 contents: [
124 "prebuilt_myjavalib",
125 "prebuilt_mypublicjavalib",
126 "prebuilt_mydefaultedjavalib",
127 "prebuilt_myprivatejavalib",
128 ],
129}
130
Paul Duffin593b3c92019-12-05 14:31:48 +0000131java_import {
Paul Duffin593b3c92019-12-05 14:31:48 +0000132 name: "myjavalib",
133 prefer: false,
Martin Stjernholm0641d182020-05-13 02:20:06 +0100134 visibility: [
135 "//other/foo",
136 "//package",
Paul Duffin157f40f2020-09-29 16:01:08 +0100137 "//prebuilts/mysdk",
Martin Stjernholm0641d182020-05-13 02:20:06 +0100138 ],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000139 apex_available: ["//apex_available:platform"],
Paul Duffin593b3c92019-12-05 14:31:48 +0000140 jars: ["java/myjavalib.jar"],
141}
142
143java_import {
Paul Duffin593b3c92019-12-05 14:31:48 +0000144 name: "mypublicjavalib",
145 prefer: false,
146 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000147 apex_available: ["//apex_available:platform"],
Paul Duffin593b3c92019-12-05 14:31:48 +0000148 jars: ["java/mypublicjavalib.jar"],
149}
150
151java_import {
Paul Duffin593b3c92019-12-05 14:31:48 +0000152 name: "mydefaultedjavalib",
153 prefer: false,
Martin Stjernholm0641d182020-05-13 02:20:06 +0100154 visibility: [
155 "//other/bar",
156 "//package",
Paul Duffin157f40f2020-09-29 16:01:08 +0100157 "//prebuilts/mysdk",
Martin Stjernholm0641d182020-05-13 02:20:06 +0100158 ],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000159 apex_available: ["//apex_available:platform"],
Paul Duffin593b3c92019-12-05 14:31:48 +0000160 jars: ["java/mydefaultedjavalib.jar"],
161}
162
Martin Stjernholm64aeaad2020-05-13 22:11:40 +0100163java_import {
Martin Stjernholm64aeaad2020-05-13 22:11:40 +0100164 name: "myprivatejavalib",
165 prefer: false,
Paul Duffin157f40f2020-09-29 16:01:08 +0100166 visibility: [
167 "//package",
168 "//prebuilts/mysdk",
169 ],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000170 apex_available: ["//apex_available:platform"],
Martin Stjernholm64aeaad2020-05-13 22:11:40 +0100171 jars: ["java/myprivatejavalib.jar"],
172}
Paul Duffin593b3c92019-12-05 14:31:48 +0000173`))
174}
Nicolas Geoffray1228e9c2020-02-27 13:45:35 +0000175
Paul Duffin157f40f2020-09-29 16:01:08 +0100176func TestPrebuiltVisibilityProperty_IsValidated(t *testing.T) {
177 testSdkError(t, `prebuilt_visibility: cannot mix "//visibility:private" with any other visibility rules`, `
178 sdk {
179 name: "mysdk",
180 prebuilt_visibility: [
181 "//foo",
182 "//visibility:private",
183 ],
184 }
185`)
186}
187
188func TestPrebuiltVisibilityProperty_AddPrivate(t *testing.T) {
189 testSdkError(t, `prebuilt_visibility: "//visibility:private" does not widen the visibility`, `
190 sdk {
191 name: "mysdk",
192 prebuilt_visibility: [
193 "//visibility:private",
194 ],
195 java_header_libs: [
196 "myjavalib",
197 ],
198 }
199
200 java_library {
201 name: "myjavalib",
202 // Uses package default visibility
203 srcs: ["Test.java"],
204 system_modules: "none",
205 sdk_version: "none",
206 }
207`)
208}
209
Paul Duffin8edc99c2021-03-09 23:02:20 +0000210func TestSdkInstall(t *testing.T) {
Nicolas Geoffray1228e9c2020-02-27 13:45:35 +0000211 sdk := `
212 sdk {
213 name: "mysdk",
214 }
215 `
Paul Duffin8edc99c2021-03-09 23:02:20 +0000216 result := testSdkWithFs(t, sdk, nil)
Nicolas Geoffray1228e9c2020-02-27 13:45:35 +0000217
Paul Duffin36474d32021-03-12 12:19:43 +0000218 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinc6ba1822022-05-06 09:38:02 +0000219 checkAllOtherCopyRules(`
220.intermediates/mysdk/common_os/mysdk-current.info -> mysdk-current.info
221.intermediates/mysdk/common_os/mysdk-current.zip -> mysdk-current.zip
222`))
Nicolas Geoffray1228e9c2020-02-27 13:45:35 +0000223}
Paul Duffinb07fa512020-03-10 22:17:04 +0000224
225type EmbeddedPropertiesStruct struct {
Paul Duffin864e1b42020-05-06 10:23:19 +0100226 S_Embedded_Common string `android:"arch_variant"`
227 S_Embedded_Different string `android:"arch_variant"`
Paul Duffinb07fa512020-03-10 22:17:04 +0000228}
229
230type testPropertiesStruct struct {
Paul Duffin02e25c82022-09-22 15:30:58 +0100231 name string
232 private string
233 Public_Ignore string `sdk:"ignore"`
Paul Duffinbfdca962022-09-22 16:21:54 +0100234 Public_Keep string `sdk:"keep"`
Paul Duffin02e25c82022-09-22 15:30:58 +0100235 S_Common string
236 S_Different string `android:"arch_variant"`
237 A_Common []string
238 A_Different []string `android:"arch_variant"`
239 F_Common *bool
240 F_Different *bool `android:"arch_variant"`
Paul Duffinb07fa512020-03-10 22:17:04 +0000241 EmbeddedPropertiesStruct
242}
243
Paul Duffinf34f6d82020-04-30 15:48:31 +0100244func (p *testPropertiesStruct) optimizableProperties() interface{} {
245 return p
246}
247
Paul Duffin4b8b7932020-05-06 12:35:38 +0100248func (p *testPropertiesStruct) String() string {
249 return p.name
250}
251
252var _ propertiesContainer = (*testPropertiesStruct)(nil)
253
Paul Duffinb07fa512020-03-10 22:17:04 +0000254func TestCommonValueOptimization(t *testing.T) {
Paul Duffin4b8b7932020-05-06 12:35:38 +0100255 common := &testPropertiesStruct{name: "common"}
Paul Duffinf34f6d82020-04-30 15:48:31 +0100256 structs := []propertiesContainer{
Paul Duffinb07fa512020-03-10 22:17:04 +0000257 &testPropertiesStruct{
Paul Duffin02e25c82022-09-22 15:30:58 +0100258 name: "struct-0",
259 private: "common",
260 Public_Ignore: "common",
Paul Duffinbfdca962022-09-22 16:21:54 +0100261 Public_Keep: "keep",
Paul Duffin02e25c82022-09-22 15:30:58 +0100262 S_Common: "common",
263 S_Different: "upper",
264 A_Common: []string{"first", "second"},
265 A_Different: []string{"alpha", "beta"},
266 F_Common: proptools.BoolPtr(false),
267 F_Different: proptools.BoolPtr(false),
Paul Duffinb07fa512020-03-10 22:17:04 +0000268 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
269 S_Embedded_Common: "embedded_common",
270 S_Embedded_Different: "embedded_upper",
271 },
272 },
273 &testPropertiesStruct{
Paul Duffin02e25c82022-09-22 15:30:58 +0100274 name: "struct-1",
275 private: "common",
276 Public_Ignore: "common",
Paul Duffinbfdca962022-09-22 16:21:54 +0100277 Public_Keep: "keep",
Paul Duffin02e25c82022-09-22 15:30:58 +0100278 S_Common: "common",
279 S_Different: "lower",
280 A_Common: []string{"first", "second"},
281 A_Different: []string{"alpha", "delta"},
282 F_Common: proptools.BoolPtr(false),
283 F_Different: proptools.BoolPtr(true),
Paul Duffinb07fa512020-03-10 22:17:04 +0000284 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
285 S_Embedded_Common: "embedded_common",
286 S_Embedded_Different: "embedded_lower",
287 },
288 },
289 }
290
291 extractor := newCommonValueExtractor(common)
Paul Duffinb07fa512020-03-10 22:17:04 +0000292
Paul Duffinc459f892020-04-30 18:08:29 +0100293 err := extractor.extractCommonProperties(common, structs)
Paul Duffin36474d32021-03-12 12:19:43 +0000294 android.AssertDeepEquals(t, "unexpected error", nil, err)
Paul Duffinc459f892020-04-30 18:08:29 +0100295
Paul Duffin36474d32021-03-12 12:19:43 +0000296 android.AssertDeepEquals(t, "common properties not correct",
Paul Duffinb07fa512020-03-10 22:17:04 +0000297 &testPropertiesStruct{
Paul Duffin02e25c82022-09-22 15:30:58 +0100298 name: "common",
299 private: "",
300 Public_Ignore: "",
Paul Duffinbfdca962022-09-22 16:21:54 +0100301 Public_Keep: "keep",
Paul Duffin02e25c82022-09-22 15:30:58 +0100302 S_Common: "common",
303 S_Different: "",
304 A_Common: []string{"first", "second"},
305 A_Different: []string(nil),
306 F_Common: proptools.BoolPtr(false),
307 F_Different: nil,
Paul Duffinb07fa512020-03-10 22:17:04 +0000308 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
309 S_Embedded_Common: "embedded_common",
310 S_Embedded_Different: "",
311 },
Paul Duffin1d6c0df2020-05-06 12:50:19 +0100312 },
313 common)
Paul Duffinb07fa512020-03-10 22:17:04 +0000314
Paul Duffin36474d32021-03-12 12:19:43 +0000315 android.AssertDeepEquals(t, "updated properties[0] not correct",
Paul Duffinb07fa512020-03-10 22:17:04 +0000316 &testPropertiesStruct{
Paul Duffin02e25c82022-09-22 15:30:58 +0100317 name: "struct-0",
318 private: "common",
319 Public_Ignore: "common",
Paul Duffinbfdca962022-09-22 16:21:54 +0100320 Public_Keep: "keep",
Paul Duffin02e25c82022-09-22 15:30:58 +0100321 S_Common: "",
322 S_Different: "upper",
323 A_Common: nil,
324 A_Different: []string{"alpha", "beta"},
325 F_Common: nil,
326 F_Different: proptools.BoolPtr(false),
Paul Duffinb07fa512020-03-10 22:17:04 +0000327 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
328 S_Embedded_Common: "",
329 S_Embedded_Different: "embedded_upper",
330 },
Paul Duffin1d6c0df2020-05-06 12:50:19 +0100331 },
332 structs[0])
Paul Duffinb07fa512020-03-10 22:17:04 +0000333
Paul Duffin36474d32021-03-12 12:19:43 +0000334 android.AssertDeepEquals(t, "updated properties[1] not correct",
Paul Duffinb07fa512020-03-10 22:17:04 +0000335 &testPropertiesStruct{
Paul Duffin02e25c82022-09-22 15:30:58 +0100336 name: "struct-1",
337 private: "common",
338 Public_Ignore: "common",
Paul Duffinbfdca962022-09-22 16:21:54 +0100339 Public_Keep: "keep",
Paul Duffin02e25c82022-09-22 15:30:58 +0100340 S_Common: "",
341 S_Different: "lower",
342 A_Common: nil,
343 A_Different: []string{"alpha", "delta"},
344 F_Common: nil,
345 F_Different: proptools.BoolPtr(true),
Paul Duffinb07fa512020-03-10 22:17:04 +0000346 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
347 S_Embedded_Common: "",
348 S_Embedded_Different: "embedded_lower",
349 },
Paul Duffin1d6c0df2020-05-06 12:50:19 +0100350 },
351 structs[1])
Paul Duffinb07fa512020-03-10 22:17:04 +0000352}
Paul Duffin864e1b42020-05-06 10:23:19 +0100353
354func TestCommonValueOptimization_InvalidArchSpecificVariants(t *testing.T) {
355 common := &testPropertiesStruct{name: "common"}
356 structs := []propertiesContainer{
357 &testPropertiesStruct{
358 name: "struct-0",
359 S_Common: "should-be-but-is-not-common0",
360 },
361 &testPropertiesStruct{
362 name: "struct-1",
363 S_Common: "should-be-but-is-not-common1",
364 },
365 }
366
367 extractor := newCommonValueExtractor(common)
368
Paul Duffin864e1b42020-05-06 10:23:19 +0100369 err := extractor.extractCommonProperties(common, structs)
Paul Duffin36474d32021-03-12 12:19:43 +0000370 android.AssertErrorMessageEquals(t, "unexpected error", `field "S_Common" is not tagged as "arch_variant" but has arch specific properties:
Paul Duffin864e1b42020-05-06 10:23:19 +0100371 "struct-0" has value "should-be-but-is-not-common0"
372 "struct-1" has value "should-be-but-is-not-common1"`, err)
373}
Paul Duffin62035b52021-05-05 21:35:49 +0100374
375// Ensure that sdk snapshot related environment variables work correctly.
376func TestSnapshot_EnvConfiguration(t *testing.T) {
377 bp := `
378 sdk {
379 name: "mysdk",
380 java_header_libs: ["myjavalib"],
381 }
382
383 java_library {
384 name: "myjavalib",
385 srcs: ["Test.java"],
386 system_modules: "none",
387 sdk_version: "none",
388 compile_dex: true,
389 host_supported: true,
390 }
391 `
392 preparer := android.GroupFixturePreparers(
393 prepareForSdkTestWithJava,
394 android.FixtureWithRootAndroidBp(bp),
395 )
396
397 checkZipFile := func(t *testing.T, result *android.TestResult, expected string) {
398 zipRule := result.ModuleForTests("mysdk", "common_os").Rule("SnapshotZipFiles")
399 android.AssertStringEquals(t, "snapshot zip file", expected, zipRule.Output.String())
400 }
401
402 t.Run("no env variables", func(t *testing.T) {
403 result := preparer.RunTest(t)
404
405 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-current.zip")
406
407 CheckSnapshot(t, result, "mysdk", "",
408 checkAndroidBpContents(`
409// This is auto-generated. DO NOT EDIT.
410
Spandan Dasa5e26d32024-03-06 14:04:36 +0000411apex_contributions_defaults {
412 name: "mysdk.contributions",
413 contents: ["prebuilt_myjavalib"],
414}
415
Paul Duffin62035b52021-05-05 21:35:49 +0100416java_import {
Paul Duffin62035b52021-05-05 21:35:49 +0100417 name: "myjavalib",
418 prefer: false,
419 visibility: ["//visibility:public"],
420 apex_available: ["//apex_available:platform"],
421 jars: ["java/myjavalib.jar"],
422}
Paul Duffin62035b52021-05-05 21:35:49 +0100423 `),
424 )
425 })
Paul Duffin64fb5262021-05-05 21:36:04 +0100426
Paul Duffin39abf8f2021-09-24 14:58:27 +0100427 t.Run("SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE=S", func(t *testing.T) {
428 result := android.GroupFixturePreparers(
429 prepareForSdkTestWithJava,
430 java.PrepareForTestWithJavaDefaultModules,
431 java.PrepareForTestWithJavaSdkLibraryFiles,
432 java.FixtureWithLastReleaseApis("mysdklibrary"),
433 android.FixtureWithRootAndroidBp(`
434 sdk {
435 name: "mysdk",
436 bootclasspath_fragments: ["mybootclasspathfragment"],
437 }
438
439 bootclasspath_fragment {
440 name: "mybootclasspathfragment",
441 apex_available: ["myapex"],
442 contents: ["mysdklibrary"],
Paul Duffin9fd56472022-03-31 15:42:30 +0100443 hidden_api: {
444 split_packages: ["*"],
445 },
Paul Duffin39abf8f2021-09-24 14:58:27 +0100446 }
447
448 java_sdk_library {
449 name: "mysdklibrary",
450 srcs: ["Test.java"],
451 compile_dex: true,
Paul Duffin1938dba2022-07-26 23:53:00 +0000452 sdk_version: "S",
Paul Duffin39abf8f2021-09-24 14:58:27 +0100453 public: {enabled: true},
454 permitted_packages: ["mysdklibrary"],
455 }
456 `),
457 android.FixtureMergeEnv(map[string]string{
458 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
459 }),
Colin Crossa66b4632024-08-08 15:50:47 -0700460 android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
Paul Duffin39abf8f2021-09-24 14:58:27 +0100461 ).RunTest(t)
462
463 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000464 checkAndroidBpContents(`
Paul Duffin39abf8f2021-09-24 14:58:27 +0100465// This is auto-generated. DO NOT EDIT.
466
Spandan Dasa5e26d32024-03-06 14:04:36 +0000467apex_contributions_defaults {
468 name: "mysdk.contributions",
469 contents: ["prebuilt_mysdklibrary"],
470}
471
Paul Duffin39abf8f2021-09-24 14:58:27 +0100472prebuilt_bootclasspath_fragment {
473 name: "mybootclasspathfragment",
474 prefer: false,
475 visibility: ["//visibility:public"],
476 apex_available: ["myapex"],
477 contents: ["mysdklibrary"],
478 hidden_api: {
479 annotation_flags: "hiddenapi/annotation-flags.csv",
480 metadata: "hiddenapi/metadata.csv",
481 index: "hiddenapi/index.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100482 stub_flags: "hiddenapi/stub-flags.csv",
483 all_flags: "hiddenapi/all-flags.csv",
Paul Duffin39abf8f2021-09-24 14:58:27 +0100484 },
485}
486
487java_sdk_library_import {
488 name: "mysdklibrary",
489 prefer: false,
490 visibility: ["//visibility:public"],
491 apex_available: ["//apex_available:platform"],
492 shared_library: true,
493 compile_dex: true,
494 permitted_packages: ["mysdklibrary"],
495 public: {
496 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
497 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
498 current_api: "sdk_library/public/mysdklibrary.txt",
499 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
500 sdk_version: "current",
501 },
502}
503`),
504
505 checkAllCopyRules(`
506.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
507.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
508.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin191be3a2021-08-10 16:14:16 +0100509.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/stub-flags.csv -> hiddenapi/stub-flags.csv
510.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/all-flags.csv -> hiddenapi/all-flags.csv
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000511.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
512.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
513.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
Paul Duffin39abf8f2021-09-24 14:58:27 +0100514`),
515 )
516 })
517
Jihoon Kang98aa8fa2024-06-07 11:06:57 +0000518 t.Run("test replacing exportable module", func(t *testing.T) {
519 result := android.GroupFixturePreparers(
520 prepareForSdkTestWithJava,
521 java.PrepareForTestWithJavaDefaultModules,
522 java.PrepareForTestWithJavaSdkLibraryFiles,
523 java.FixtureWithLastReleaseApis("mysdklibrary", "anothersdklibrary"),
524 android.FixtureWithRootAndroidBp(`
525 sdk {
526 name: "mysdk",
527 bootclasspath_fragments: ["mybootclasspathfragment"],
528 }
529
530 bootclasspath_fragment {
531 name: "mybootclasspathfragment",
532 apex_available: ["myapex"],
533 contents: ["mysdklibrary"],
534 hidden_api: {
535 split_packages: ["*"],
536 },
537 core_platform_api: {
538 stub_libs: [
539 "anothersdklibrary.stubs.exportable",
540 ],
541 },
542 api: {
543 stub_libs: [
544 "anothersdklibrary",
545 ],
546 },
547 }
548
549 java_sdk_library {
550 name: "mysdklibrary",
551 srcs: ["Test.java"],
552 compile_dex: true,
553 min_sdk_version: "S",
554 public: {enabled: true},
555 permitted_packages: ["mysdklibrary"],
556 }
557
558 java_sdk_library {
559 name: "anothersdklibrary",
560 srcs: ["Test.java"],
561 compile_dex: true,
562 min_sdk_version: "S",
563 public: {enabled: true},
564 system: {enabled: true},
565 module_lib: {enabled: true},
566 }
567 `),
568 android.FixtureMergeEnv(map[string]string{
569 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
570 }),
571 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
Jihoon Kang98aa8fa2024-06-07 11:06:57 +0000572 variables.Platform_version_active_codenames = []string{"UpsideDownCake", "Tiramisu", "S-V2"}
573 }),
Colin Crossa66b4632024-08-08 15:50:47 -0700574 android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
Jihoon Kang98aa8fa2024-06-07 11:06:57 +0000575 ).RunTest(t)
576
577 CheckSnapshot(t, result, "mysdk", "",
578 checkAndroidBpContents(`
579// This is auto-generated. DO NOT EDIT.
580
581prebuilt_bootclasspath_fragment {
582 name: "mybootclasspathfragment",
583 prefer: false,
584 visibility: ["//visibility:public"],
585 apex_available: ["myapex"],
586 contents: ["mysdklibrary"],
587 api: {
588 stub_libs: ["anothersdklibrary"],
589 },
590 core_platform_api: {
591 stub_libs: ["anothersdklibrary.stubs"],
592 },
593 hidden_api: {
594 annotation_flags: "hiddenapi/annotation-flags.csv",
595 metadata: "hiddenapi/metadata.csv",
596 index: "hiddenapi/index.csv",
597 stub_flags: "hiddenapi/stub-flags.csv",
598 all_flags: "hiddenapi/all-flags.csv",
599 },
600}
601
602java_sdk_library_import {
603 name: "mysdklibrary",
604 prefer: false,
605 visibility: ["//visibility:public"],
606 apex_available: ["//apex_available:platform"],
607 shared_library: true,
608 compile_dex: true,
609 permitted_packages: ["mysdklibrary"],
610 public: {
611 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
612 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
613 current_api: "sdk_library/public/mysdklibrary.txt",
614 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
615 sdk_version: "current",
616 },
617}
618
619java_sdk_library_import {
620 name: "anothersdklibrary",
621 prefer: false,
622 visibility: ["//visibility:public"],
623 apex_available: ["//apex_available:platform"],
624 shared_library: true,
625 compile_dex: true,
626 public: {
627 jars: ["sdk_library/public/anothersdklibrary-stubs.jar"],
628 stub_srcs: ["sdk_library/public/anothersdklibrary_stub_sources"],
629 current_api: "sdk_library/public/anothersdklibrary.txt",
630 removed_api: "sdk_library/public/anothersdklibrary-removed.txt",
631 sdk_version: "current",
632 },
633 system: {
634 jars: ["sdk_library/system/anothersdklibrary-stubs.jar"],
635 stub_srcs: ["sdk_library/system/anothersdklibrary_stub_sources"],
636 current_api: "sdk_library/system/anothersdklibrary.txt",
637 removed_api: "sdk_library/system/anothersdklibrary-removed.txt",
638 sdk_version: "system_current",
639 },
640 module_lib: {
641 jars: ["sdk_library/module-lib/anothersdklibrary-stubs.jar"],
642 stub_srcs: ["sdk_library/module-lib/anothersdklibrary_stub_sources"],
643 current_api: "sdk_library/module-lib/anothersdklibrary.txt",
644 removed_api: "sdk_library/module-lib/anothersdklibrary-removed.txt",
645 sdk_version: "module_current",
646 },
647}
648`),
649 )
650 })
651
Paul Duffin62035b52021-05-05 21:35:49 +0100652}