xref: /aosp_15_r20/build/soong/sdk/bootclasspath_fragment_sdk_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright (C) 2021 The Android Open Source Project
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage sdk
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"fmt"
19*333d2b36SAndroid Build Coastguard Worker	"path/filepath"
20*333d2b36SAndroid Build Coastguard Worker	"strings"
21*333d2b36SAndroid Build Coastguard Worker	"testing"
22*333d2b36SAndroid Build Coastguard Worker
23*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
24*333d2b36SAndroid Build Coastguard Worker	"android/soong/java"
25*333d2b36SAndroid Build Coastguard Worker)
26*333d2b36SAndroid Build Coastguard Worker
27*333d2b36SAndroid Build Coastguard Worker// fixtureAddPlatformBootclasspathForBootclasspathFragment adds a platform_bootclasspath module that
28*333d2b36SAndroid Build Coastguard Worker// references the bootclasspath fragment.
29*333d2b36SAndroid Build Coastguard Workerfunc fixtureAddPlatformBootclasspathForBootclasspathFragment(apex, fragment string) android.FixturePreparer {
30*333d2b36SAndroid Build Coastguard Worker	return fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(apex, fragment, "")
31*333d2b36SAndroid Build Coastguard Worker}
32*333d2b36SAndroid Build Coastguard Worker
33*333d2b36SAndroid Build Coastguard Worker// fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra is the same as above, but also adds extra fragments.
34*333d2b36SAndroid Build Coastguard Workerfunc fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(apex, fragment, extraFragments string) android.FixturePreparer {
35*333d2b36SAndroid Build Coastguard Worker	return android.GroupFixturePreparers(
36*333d2b36SAndroid Build Coastguard Worker		// Add a platform_bootclasspath module.
37*333d2b36SAndroid Build Coastguard Worker		android.FixtureAddTextFile("frameworks/base/boot/Android.bp", fmt.Sprintf(`
38*333d2b36SAndroid Build Coastguard Worker			platform_bootclasspath {
39*333d2b36SAndroid Build Coastguard Worker				name: "platform-bootclasspath",
40*333d2b36SAndroid Build Coastguard Worker				fragments: [
41*333d2b36SAndroid Build Coastguard Worker					{
42*333d2b36SAndroid Build Coastguard Worker						apex: "%s",
43*333d2b36SAndroid Build Coastguard Worker						module: "%s",
44*333d2b36SAndroid Build Coastguard Worker					},
45*333d2b36SAndroid Build Coastguard Worker					%s
46*333d2b36SAndroid Build Coastguard Worker				],
47*333d2b36SAndroid Build Coastguard Worker			}
48*333d2b36SAndroid Build Coastguard Worker		`, apex, fragment, extraFragments)),
49*333d2b36SAndroid Build Coastguard Worker		android.FixtureAddFile("frameworks/base/boot/boot-profile.txt", nil),
50*333d2b36SAndroid Build Coastguard Worker		android.FixtureAddFile("frameworks/base/boot/boot-image-profile.txt", nil),
51*333d2b36SAndroid Build Coastguard Worker		android.FixtureAddFile("art/build/boot/boot-image-profile.txt", nil),
52*333d2b36SAndroid Build Coastguard Worker		android.FixtureAddFile("build/soong/scripts/check_boot_jars/package_allowed_list.txt", nil),
53*333d2b36SAndroid Build Coastguard Worker	)
54*333d2b36SAndroid Build Coastguard Worker}
55*333d2b36SAndroid Build Coastguard Worker
56*333d2b36SAndroid Build Coastguard Worker// fixtureAddPrebuiltApexForBootclasspathFragment adds a prebuilt_apex that exports the fragment.
57*333d2b36SAndroid Build Coastguard Workerfunc fixtureAddPrebuiltApexForBootclasspathFragment(apex, fragment string) android.FixturePreparer {
58*333d2b36SAndroid Build Coastguard Worker	apexFile := fmt.Sprintf("%s.apex", apex)
59*333d2b36SAndroid Build Coastguard Worker	dir := "prebuilts/apex"
60*333d2b36SAndroid Build Coastguard Worker	return android.GroupFixturePreparers(
61*333d2b36SAndroid Build Coastguard Worker		// A preparer to add a prebuilt apex to the test fixture.
62*333d2b36SAndroid Build Coastguard Worker		android.FixtureAddTextFile(filepath.Join(dir, "Android.bp"), fmt.Sprintf(`
63*333d2b36SAndroid Build Coastguard Worker			prebuilt_apex {
64*333d2b36SAndroid Build Coastguard Worker				name: "%s",
65*333d2b36SAndroid Build Coastguard Worker				src: "%s",
66*333d2b36SAndroid Build Coastguard Worker				exported_bootclasspath_fragments: [
67*333d2b36SAndroid Build Coastguard Worker					"%s",
68*333d2b36SAndroid Build Coastguard Worker				],
69*333d2b36SAndroid Build Coastguard Worker			}
70*333d2b36SAndroid Build Coastguard Worker		`, apex, apexFile, fragment)),
71*333d2b36SAndroid Build Coastguard Worker		android.FixtureAddFile(filepath.Join(dir, apexFile), nil),
72*333d2b36SAndroid Build Coastguard Worker	)
73*333d2b36SAndroid Build Coastguard Worker}
74*333d2b36SAndroid Build Coastguard Worker
75*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithBootclasspathFragment_ImageName(t *testing.T) {
76*333d2b36SAndroid Build Coastguard Worker	result := android.GroupFixturePreparers(
77*333d2b36SAndroid Build Coastguard Worker		prepareForSdkTestWithJava,
78*333d2b36SAndroid Build Coastguard Worker		java.PrepareForTestWithDexpreopt,
79*333d2b36SAndroid Build Coastguard Worker		prepareForSdkTestWithApex,
80*333d2b36SAndroid Build Coastguard Worker
81*333d2b36SAndroid Build Coastguard Worker		// Some additional files needed for the art apex.
82*333d2b36SAndroid Build Coastguard Worker		android.FixtureMergeMockFs(android.MockFS{
83*333d2b36SAndroid Build Coastguard Worker			"com.android.art.avbpubkey":                          nil,
84*333d2b36SAndroid Build Coastguard Worker			"com.android.art.pem":                                nil,
85*333d2b36SAndroid Build Coastguard Worker			"system/sepolicy/apex/com.android.art-file_contexts": nil,
86*333d2b36SAndroid Build Coastguard Worker		}),
87*333d2b36SAndroid Build Coastguard Worker
88*333d2b36SAndroid Build Coastguard Worker		// Add a platform_bootclasspath that depends on the fragment.
89*333d2b36SAndroid Build Coastguard Worker		fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(
90*333d2b36SAndroid Build Coastguard Worker			"com.android.art", "art-bootclasspath-fragment", java.ApexBootJarFragmentsForPlatformBootclasspath),
91*333d2b36SAndroid Build Coastguard Worker
92*333d2b36SAndroid Build Coastguard Worker		java.PrepareForBootImageConfigTest,
93*333d2b36SAndroid Build Coastguard Worker		java.PrepareApexBootJarConfigsAndModules,
94*333d2b36SAndroid Build Coastguard Worker		android.FixtureWithRootAndroidBp(`
95*333d2b36SAndroid Build Coastguard Worker			sdk {
96*333d2b36SAndroid Build Coastguard Worker				name: "mysdk",
97*333d2b36SAndroid Build Coastguard Worker				bootclasspath_fragments: ["art-bootclasspath-fragment"],
98*333d2b36SAndroid Build Coastguard Worker			}
99*333d2b36SAndroid Build Coastguard Worker
100*333d2b36SAndroid Build Coastguard Worker			apex {
101*333d2b36SAndroid Build Coastguard Worker				name: "com.android.art",
102*333d2b36SAndroid Build Coastguard Worker				key: "com.android.art.key",
103*333d2b36SAndroid Build Coastguard Worker				bootclasspath_fragments: [
104*333d2b36SAndroid Build Coastguard Worker					"art-bootclasspath-fragment",
105*333d2b36SAndroid Build Coastguard Worker				],
106*333d2b36SAndroid Build Coastguard Worker				updatable: false,
107*333d2b36SAndroid Build Coastguard Worker			}
108*333d2b36SAndroid Build Coastguard Worker
109*333d2b36SAndroid Build Coastguard Worker			bootclasspath_fragment {
110*333d2b36SAndroid Build Coastguard Worker				name: "art-bootclasspath-fragment",
111*333d2b36SAndroid Build Coastguard Worker				image_name: "art",
112*333d2b36SAndroid Build Coastguard Worker				contents: ["core1", "core2"],
113*333d2b36SAndroid Build Coastguard Worker				apex_available: ["com.android.art"],
114*333d2b36SAndroid Build Coastguard Worker				hidden_api: {
115*333d2b36SAndroid Build Coastguard Worker					split_packages: ["*"],
116*333d2b36SAndroid Build Coastguard Worker				},
117*333d2b36SAndroid Build Coastguard Worker			}
118*333d2b36SAndroid Build Coastguard Worker
119*333d2b36SAndroid Build Coastguard Worker			apex_key {
120*333d2b36SAndroid Build Coastguard Worker				name: "com.android.art.key",
121*333d2b36SAndroid Build Coastguard Worker				public_key: "com.android.art.avbpubkey",
122*333d2b36SAndroid Build Coastguard Worker				private_key: "com.android.art.pem",
123*333d2b36SAndroid Build Coastguard Worker			}
124*333d2b36SAndroid Build Coastguard Worker
125*333d2b36SAndroid Build Coastguard Worker			java_library {
126*333d2b36SAndroid Build Coastguard Worker				name: "core1",
127*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
128*333d2b36SAndroid Build Coastguard Worker				system_modules: "none",
129*333d2b36SAndroid Build Coastguard Worker				sdk_version: "none",
130*333d2b36SAndroid Build Coastguard Worker				compile_dex: true,
131*333d2b36SAndroid Build Coastguard Worker				apex_available: ["com.android.art"],
132*333d2b36SAndroid Build Coastguard Worker			}
133*333d2b36SAndroid Build Coastguard Worker
134*333d2b36SAndroid Build Coastguard Worker			java_library {
135*333d2b36SAndroid Build Coastguard Worker				name: "core2",
136*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
137*333d2b36SAndroid Build Coastguard Worker				system_modules: "none",
138*333d2b36SAndroid Build Coastguard Worker				sdk_version: "none",
139*333d2b36SAndroid Build Coastguard Worker				compile_dex: true,
140*333d2b36SAndroid Build Coastguard Worker				apex_available: ["com.android.art"],
141*333d2b36SAndroid Build Coastguard Worker			}
142*333d2b36SAndroid Build Coastguard Worker`),
143*333d2b36SAndroid Build Coastguard Worker	).RunTest(t)
144*333d2b36SAndroid Build Coastguard Worker
145*333d2b36SAndroid Build Coastguard Worker	// A preparer to update the test fixture used when processing an unpackage snapshot.
146*333d2b36SAndroid Build Coastguard Worker	preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("com.android.art", "art-bootclasspath-fragment")
147*333d2b36SAndroid Build Coastguard Worker
148*333d2b36SAndroid Build Coastguard Worker	// Check that source on its own configures the bootImageConfig correctly.
149*333d2b36SAndroid Build Coastguard Worker	java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
150*333d2b36SAndroid Build Coastguard Worker	java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
151*333d2b36SAndroid Build Coastguard Worker
152*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
153*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
154*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
155*333d2b36SAndroid Build Coastguard Worker
156*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
157*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
158*333d2b36SAndroid Build Coastguard Worker    contents: [],
159*333d2b36SAndroid Build Coastguard Worker}
160*333d2b36SAndroid Build Coastguard Worker
161*333d2b36SAndroid Build Coastguard Workerprebuilt_bootclasspath_fragment {
162*333d2b36SAndroid Build Coastguard Worker    name: "art-bootclasspath-fragment",
163*333d2b36SAndroid Build Coastguard Worker    prefer: false,
164*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
165*333d2b36SAndroid Build Coastguard Worker    apex_available: ["com.android.art"],
166*333d2b36SAndroid Build Coastguard Worker    image_name: "art",
167*333d2b36SAndroid Build Coastguard Worker    contents: [
168*333d2b36SAndroid Build Coastguard Worker        "core1",
169*333d2b36SAndroid Build Coastguard Worker        "core2",
170*333d2b36SAndroid Build Coastguard Worker    ],
171*333d2b36SAndroid Build Coastguard Worker    hidden_api: {
172*333d2b36SAndroid Build Coastguard Worker        annotation_flags: "hiddenapi/annotation-flags.csv",
173*333d2b36SAndroid Build Coastguard Worker        metadata: "hiddenapi/metadata.csv",
174*333d2b36SAndroid Build Coastguard Worker        index: "hiddenapi/index.csv",
175*333d2b36SAndroid Build Coastguard Worker        signature_patterns: "hiddenapi/signature-patterns.csv",
176*333d2b36SAndroid Build Coastguard Worker        filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
177*333d2b36SAndroid Build Coastguard Worker        filtered_flags: "hiddenapi/filtered-flags.csv",
178*333d2b36SAndroid Build Coastguard Worker    },
179*333d2b36SAndroid Build Coastguard Worker}
180*333d2b36SAndroid Build Coastguard Worker
181*333d2b36SAndroid Build Coastguard Workerjava_import {
182*333d2b36SAndroid Build Coastguard Worker    name: "core1",
183*333d2b36SAndroid Build Coastguard Worker    prefer: false,
184*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
185*333d2b36SAndroid Build Coastguard Worker    apex_available: ["com.android.art"],
186*333d2b36SAndroid Build Coastguard Worker    jars: ["java_boot_libs/snapshot/jars/are/invalid/core1.jar"],
187*333d2b36SAndroid Build Coastguard Worker}
188*333d2b36SAndroid Build Coastguard Worker
189*333d2b36SAndroid Build Coastguard Workerjava_import {
190*333d2b36SAndroid Build Coastguard Worker    name: "core2",
191*333d2b36SAndroid Build Coastguard Worker    prefer: false,
192*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
193*333d2b36SAndroid Build Coastguard Worker    apex_available: ["com.android.art"],
194*333d2b36SAndroid Build Coastguard Worker    jars: ["java_boot_libs/snapshot/jars/are/invalid/core2.jar"],
195*333d2b36SAndroid Build Coastguard Worker}
196*333d2b36SAndroid Build Coastguard Worker
197*333d2b36SAndroid Build Coastguard Worker`),
198*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
199*333d2b36SAndroid Build Coastguard Worker.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
200*333d2b36SAndroid Build Coastguard Worker.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
201*333d2b36SAndroid Build Coastguard Worker.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
202*333d2b36SAndroid Build Coastguard Worker.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
203*333d2b36SAndroid Build Coastguard Worker.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
204*333d2b36SAndroid Build Coastguard Worker.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
205*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core1.jar
206*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core2.jar
207*333d2b36SAndroid Build Coastguard Worker		`),
208*333d2b36SAndroid Build Coastguard Worker		snapshotTestPreparer(checkSnapshotWithoutSource, android.GroupFixturePreparers(
209*333d2b36SAndroid Build Coastguard Worker			preparerForSnapshot,
210*333d2b36SAndroid Build Coastguard Worker			// Flag ART prebuilts
211*333d2b36SAndroid Build Coastguard Worker			android.FixtureMergeMockFs(android.MockFS{
212*333d2b36SAndroid Build Coastguard Worker				"apex_contributions/Android.bp": []byte(`
213*333d2b36SAndroid Build Coastguard Worker				apex_contributions {
214*333d2b36SAndroid Build Coastguard Worker					name: "prebuilt_art_contributions",
215*333d2b36SAndroid Build Coastguard Worker					contents: ["prebuilt_com.android.art"],
216*333d2b36SAndroid Build Coastguard Worker					api_domain: "com.android.art",
217*333d2b36SAndroid Build Coastguard Worker				}
218*333d2b36SAndroid Build Coastguard Worker			`)}),
219*333d2b36SAndroid Build Coastguard Worker			android.PrepareForTestWithBuildFlag("RELEASE_APEX_CONTRIBUTIONS_ART", "prebuilt_art_contributions"),
220*333d2b36SAndroid Build Coastguard Worker		)),
221*333d2b36SAndroid Build Coastguard Worker
222*333d2b36SAndroid Build Coastguard Worker		// Check the behavior of the snapshot without the source.
223*333d2b36SAndroid Build Coastguard Worker		snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
224*333d2b36SAndroid Build Coastguard Worker			// Make sure that the boot jars package check rule includes the dex jars retrieved from the prebuilt apex.
225*333d2b36SAndroid Build Coastguard Worker			checkBootJarsPackageCheckRule(t, result,
226*333d2b36SAndroid Build Coastguard Worker				append(
227*333d2b36SAndroid Build Coastguard Worker					[]string{
228*333d2b36SAndroid Build Coastguard Worker						"out/soong/.intermediates/prebuilts/apex/com.android.art/android_common_com.android.art/deapexer/javalib/core1.jar",
229*333d2b36SAndroid Build Coastguard Worker						"out/soong/.intermediates/prebuilts/apex/com.android.art/android_common_com.android.art/deapexer/javalib/core2.jar",
230*333d2b36SAndroid Build Coastguard Worker						"out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar",
231*333d2b36SAndroid Build Coastguard Worker					},
232*333d2b36SAndroid Build Coastguard Worker					java.ApexBootJarDexJarPaths...,
233*333d2b36SAndroid Build Coastguard Worker				)...,
234*333d2b36SAndroid Build Coastguard Worker			)
235*333d2b36SAndroid Build Coastguard Worker			java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
236*333d2b36SAndroid Build Coastguard Worker			java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
237*333d2b36SAndroid Build Coastguard Worker		}),
238*333d2b36SAndroid Build Coastguard Worker
239*333d2b36SAndroid Build Coastguard Worker		snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
240*333d2b36SAndroid Build Coastguard Worker
241*333d2b36SAndroid Build Coastguard Worker		// Check the behavior of the snapshot when the source is preferred.
242*333d2b36SAndroid Build Coastguard Worker		snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
243*333d2b36SAndroid Build Coastguard Worker			java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
244*333d2b36SAndroid Build Coastguard Worker			java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
245*333d2b36SAndroid Build Coastguard Worker		}),
246*333d2b36SAndroid Build Coastguard Worker
247*333d2b36SAndroid Build Coastguard Worker		snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
248*333d2b36SAndroid Build Coastguard Worker
249*333d2b36SAndroid Build Coastguard Worker		// Check the behavior of the snapshot when it is preferred.
250*333d2b36SAndroid Build Coastguard Worker		snapshotTestChecker(checkSnapshotPreferredWithSource, func(t *testing.T, result *android.TestResult) {
251*333d2b36SAndroid Build Coastguard Worker			java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
252*333d2b36SAndroid Build Coastguard Worker			java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
253*333d2b36SAndroid Build Coastguard Worker		}),
254*333d2b36SAndroid Build Coastguard Worker	)
255*333d2b36SAndroid Build Coastguard Worker
256*333d2b36SAndroid Build Coastguard Worker	// Make sure that the boot jars package check rule includes the dex jars created from the source.
257*333d2b36SAndroid Build Coastguard Worker	checkBootJarsPackageCheckRule(t, result,
258*333d2b36SAndroid Build Coastguard Worker		append(
259*333d2b36SAndroid Build Coastguard Worker			[]string{
260*333d2b36SAndroid Build Coastguard Worker				"out/soong/.intermediates/core1/android_common_apex10000/aligned/core1.jar",
261*333d2b36SAndroid Build Coastguard Worker				"out/soong/.intermediates/core2/android_common_apex10000/aligned/core2.jar",
262*333d2b36SAndroid Build Coastguard Worker				"out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar",
263*333d2b36SAndroid Build Coastguard Worker			},
264*333d2b36SAndroid Build Coastguard Worker			java.ApexBootJarDexJarPaths...,
265*333d2b36SAndroid Build Coastguard Worker		)...,
266*333d2b36SAndroid Build Coastguard Worker	)
267*333d2b36SAndroid Build Coastguard Worker}
268*333d2b36SAndroid Build Coastguard Worker
269*333d2b36SAndroid Build Coastguard Worker// checkBootJarsPackageCheckRule checks that the supplied module is an input to the boot jars
270*333d2b36SAndroid Build Coastguard Worker// package check rule.
271*333d2b36SAndroid Build Coastguard Workerfunc checkBootJarsPackageCheckRule(t *testing.T, result *android.TestResult, expectedModules ...string) {
272*333d2b36SAndroid Build Coastguard Worker	t.Helper()
273*333d2b36SAndroid Build Coastguard Worker	platformBcp := result.ModuleForTests("platform-bootclasspath", "android_common")
274*333d2b36SAndroid Build Coastguard Worker	bootJarsCheckRule := platformBcp.Rule("boot_jars_package_check")
275*333d2b36SAndroid Build Coastguard Worker	command := bootJarsCheckRule.RuleParams.Command
276*333d2b36SAndroid Build Coastguard Worker	expectedCommandArgs := " build/soong/scripts/check_boot_jars/package_allowed_list.txt " + strings.Join(expectedModules, " ") + " &&"
277*333d2b36SAndroid Build Coastguard Worker	android.AssertStringDoesContain(t, "boot jars package check", command, expectedCommandArgs)
278*333d2b36SAndroid Build Coastguard Worker}
279*333d2b36SAndroid Build Coastguard Worker
280*333d2b36SAndroid Build Coastguard Workerfunc testSnapshotWithBootClasspathFragment_Contents(t *testing.T, sdk string, copyRules string) {
281*333d2b36SAndroid Build Coastguard Worker	result := android.GroupFixturePreparers(
282*333d2b36SAndroid Build Coastguard Worker		prepareForSdkTestWithJava,
283*333d2b36SAndroid Build Coastguard Worker		java.PrepareForTestWithJavaDefaultModules,
284*333d2b36SAndroid Build Coastguard Worker		java.PrepareForTestWithJavaSdkLibraryFiles,
285*333d2b36SAndroid Build Coastguard Worker		java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary", "mycoreplatform"),
286*333d2b36SAndroid Build Coastguard Worker		java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:myothersdklibrary"),
287*333d2b36SAndroid Build Coastguard Worker		prepareForSdkTestWithApex,
288*333d2b36SAndroid Build Coastguard Worker
289*333d2b36SAndroid Build Coastguard Worker		// Add a platform_bootclasspath that depends on the fragment.
290*333d2b36SAndroid Build Coastguard Worker		fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
291*333d2b36SAndroid Build Coastguard Worker
292*333d2b36SAndroid Build Coastguard Worker		android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
293*333d2b36SAndroid Build Coastguard Worker		// Make sure that we have atleast one platform library so that we can check the monolithic hiddenapi
294*333d2b36SAndroid Build Coastguard Worker		// file creation.
295*333d2b36SAndroid Build Coastguard Worker		java.FixtureConfigureBootJars("platform:foo"),
296*333d2b36SAndroid Build Coastguard Worker		android.FixtureModifyMockFS(func(fs android.MockFS) {
297*333d2b36SAndroid Build Coastguard Worker			fs["platform/Android.bp"] = []byte(`
298*333d2b36SAndroid Build Coastguard Worker		java_library {
299*333d2b36SAndroid Build Coastguard Worker			name: "foo",
300*333d2b36SAndroid Build Coastguard Worker			srcs: ["Test.java"],
301*333d2b36SAndroid Build Coastguard Worker			compile_dex: true,
302*333d2b36SAndroid Build Coastguard Worker		}
303*333d2b36SAndroid Build Coastguard Worker		`)
304*333d2b36SAndroid Build Coastguard Worker			fs["platform/Test.java"] = nil
305*333d2b36SAndroid Build Coastguard Worker		}),
306*333d2b36SAndroid Build Coastguard Worker
307*333d2b36SAndroid Build Coastguard Worker		android.FixtureWithRootAndroidBp(sdk+`
308*333d2b36SAndroid Build Coastguard Worker			apex {
309*333d2b36SAndroid Build Coastguard Worker				name: "myapex",
310*333d2b36SAndroid Build Coastguard Worker				key: "myapex.key",
311*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "2",
312*333d2b36SAndroid Build Coastguard Worker				bootclasspath_fragments: ["mybootclasspathfragment"],
313*333d2b36SAndroid Build Coastguard Worker			}
314*333d2b36SAndroid Build Coastguard Worker
315*333d2b36SAndroid Build Coastguard Worker			bootclasspath_fragment {
316*333d2b36SAndroid Build Coastguard Worker				name: "mybootclasspathfragment",
317*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
318*333d2b36SAndroid Build Coastguard Worker				contents: [
319*333d2b36SAndroid Build Coastguard Worker					// This should be automatically added to the sdk_snapshot as a java_boot_libs module.
320*333d2b36SAndroid Build Coastguard Worker					"mybootlib",
321*333d2b36SAndroid Build Coastguard Worker					// This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
322*333d2b36SAndroid Build Coastguard Worker					"myothersdklibrary",
323*333d2b36SAndroid Build Coastguard Worker				],
324*333d2b36SAndroid Build Coastguard Worker				api: {
325*333d2b36SAndroid Build Coastguard Worker					stub_libs: ["mysdklibrary"],
326*333d2b36SAndroid Build Coastguard Worker				},
327*333d2b36SAndroid Build Coastguard Worker				core_platform_api: {
328*333d2b36SAndroid Build Coastguard Worker					// This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
329*333d2b36SAndroid Build Coastguard Worker					stub_libs: ["mycoreplatform"],
330*333d2b36SAndroid Build Coastguard Worker				},
331*333d2b36SAndroid Build Coastguard Worker				hidden_api: {
332*333d2b36SAndroid Build Coastguard Worker					split_packages: ["*"],
333*333d2b36SAndroid Build Coastguard Worker				},
334*333d2b36SAndroid Build Coastguard Worker			}
335*333d2b36SAndroid Build Coastguard Worker
336*333d2b36SAndroid Build Coastguard Worker			java_library {
337*333d2b36SAndroid Build Coastguard Worker				name: "mybootlib",
338*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
339*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
340*333d2b36SAndroid Build Coastguard Worker				system_modules: "none",
341*333d2b36SAndroid Build Coastguard Worker				sdk_version: "none",
342*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "2",
343*333d2b36SAndroid Build Coastguard Worker				compile_dex: true,
344*333d2b36SAndroid Build Coastguard Worker				permitted_packages: ["mybootlib"],
345*333d2b36SAndroid Build Coastguard Worker			}
346*333d2b36SAndroid Build Coastguard Worker
347*333d2b36SAndroid Build Coastguard Worker			java_sdk_library {
348*333d2b36SAndroid Build Coastguard Worker				name: "mysdklibrary",
349*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
350*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
351*333d2b36SAndroid Build Coastguard Worker				shared_library: false,
352*333d2b36SAndroid Build Coastguard Worker				public: {enabled: true},
353*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "2",
354*333d2b36SAndroid Build Coastguard Worker				sdk_version: "current",
355*333d2b36SAndroid Build Coastguard Worker			}
356*333d2b36SAndroid Build Coastguard Worker
357*333d2b36SAndroid Build Coastguard Worker			java_sdk_library {
358*333d2b36SAndroid Build Coastguard Worker				name: "myothersdklibrary",
359*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
360*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
361*333d2b36SAndroid Build Coastguard Worker				compile_dex: true,
362*333d2b36SAndroid Build Coastguard Worker				public: {enabled: true},
363*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "2",
364*333d2b36SAndroid Build Coastguard Worker				permitted_packages: ["myothersdklibrary"],
365*333d2b36SAndroid Build Coastguard Worker				sdk_version: "current",
366*333d2b36SAndroid Build Coastguard Worker			}
367*333d2b36SAndroid Build Coastguard Worker
368*333d2b36SAndroid Build Coastguard Worker			java_sdk_library {
369*333d2b36SAndroid Build Coastguard Worker				name: "mycoreplatform",
370*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
371*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
372*333d2b36SAndroid Build Coastguard Worker				compile_dex: true,
373*333d2b36SAndroid Build Coastguard Worker				public: {enabled: true},
374*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "2",
375*333d2b36SAndroid Build Coastguard Worker				sdk_version: "current",
376*333d2b36SAndroid Build Coastguard Worker			}
377*333d2b36SAndroid Build Coastguard Worker		`),
378*333d2b36SAndroid Build Coastguard Worker	).RunTest(t)
379*333d2b36SAndroid Build Coastguard Worker
380*333d2b36SAndroid Build Coastguard Worker	// A preparer to update the test fixture used when processing an unpackage snapshot.
381*333d2b36SAndroid Build Coastguard Worker	preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
382*333d2b36SAndroid Build Coastguard Worker
383*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
384*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
385*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
386*333d2b36SAndroid Build Coastguard Worker
387*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
388*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
389*333d2b36SAndroid Build Coastguard Worker    contents: [
390*333d2b36SAndroid Build Coastguard Worker        "prebuilt_myothersdklibrary",
391*333d2b36SAndroid Build Coastguard Worker        "prebuilt_mysdklibrary",
392*333d2b36SAndroid Build Coastguard Worker        "prebuilt_mycoreplatform",
393*333d2b36SAndroid Build Coastguard Worker    ],
394*333d2b36SAndroid Build Coastguard Worker}
395*333d2b36SAndroid Build Coastguard Worker
396*333d2b36SAndroid Build Coastguard Workerprebuilt_bootclasspath_fragment {
397*333d2b36SAndroid Build Coastguard Worker    name: "mybootclasspathfragment",
398*333d2b36SAndroid Build Coastguard Worker    prefer: false,
399*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
400*333d2b36SAndroid Build Coastguard Worker    apex_available: ["myapex"],
401*333d2b36SAndroid Build Coastguard Worker    contents: [
402*333d2b36SAndroid Build Coastguard Worker        "mybootlib",
403*333d2b36SAndroid Build Coastguard Worker        "myothersdklibrary",
404*333d2b36SAndroid Build Coastguard Worker    ],
405*333d2b36SAndroid Build Coastguard Worker    api: {
406*333d2b36SAndroid Build Coastguard Worker        stub_libs: ["mysdklibrary"],
407*333d2b36SAndroid Build Coastguard Worker    },
408*333d2b36SAndroid Build Coastguard Worker    core_platform_api: {
409*333d2b36SAndroid Build Coastguard Worker        stub_libs: ["mycoreplatform"],
410*333d2b36SAndroid Build Coastguard Worker    },
411*333d2b36SAndroid Build Coastguard Worker    hidden_api: {
412*333d2b36SAndroid Build Coastguard Worker        annotation_flags: "hiddenapi/annotation-flags.csv",
413*333d2b36SAndroid Build Coastguard Worker        metadata: "hiddenapi/metadata.csv",
414*333d2b36SAndroid Build Coastguard Worker        index: "hiddenapi/index.csv",
415*333d2b36SAndroid Build Coastguard Worker        signature_patterns: "hiddenapi/signature-patterns.csv",
416*333d2b36SAndroid Build Coastguard Worker        filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
417*333d2b36SAndroid Build Coastguard Worker        filtered_flags: "hiddenapi/filtered-flags.csv",
418*333d2b36SAndroid Build Coastguard Worker    },
419*333d2b36SAndroid Build Coastguard Worker}
420*333d2b36SAndroid Build Coastguard Worker
421*333d2b36SAndroid Build Coastguard Workerjava_import {
422*333d2b36SAndroid Build Coastguard Worker    name: "mybootlib",
423*333d2b36SAndroid Build Coastguard Worker    prefer: false,
424*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
425*333d2b36SAndroid Build Coastguard Worker    apex_available: ["myapex"],
426*333d2b36SAndroid Build Coastguard Worker    jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
427*333d2b36SAndroid Build Coastguard Worker    min_sdk_version: "2",
428*333d2b36SAndroid Build Coastguard Worker    permitted_packages: ["mybootlib"],
429*333d2b36SAndroid Build Coastguard Worker}
430*333d2b36SAndroid Build Coastguard Worker
431*333d2b36SAndroid Build Coastguard Workerjava_sdk_library_import {
432*333d2b36SAndroid Build Coastguard Worker    name: "myothersdklibrary",
433*333d2b36SAndroid Build Coastguard Worker    prefer: false,
434*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
435*333d2b36SAndroid Build Coastguard Worker    apex_available: ["myapex"],
436*333d2b36SAndroid Build Coastguard Worker    shared_library: true,
437*333d2b36SAndroid Build Coastguard Worker    compile_dex: true,
438*333d2b36SAndroid Build Coastguard Worker    permitted_packages: ["myothersdklibrary"],
439*333d2b36SAndroid Build Coastguard Worker    public: {
440*333d2b36SAndroid Build Coastguard Worker        jars: ["sdk_library/public/myothersdklibrary-stubs.jar"],
441*333d2b36SAndroid Build Coastguard Worker        stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"],
442*333d2b36SAndroid Build Coastguard Worker        current_api: "sdk_library/public/myothersdklibrary.txt",
443*333d2b36SAndroid Build Coastguard Worker        removed_api: "sdk_library/public/myothersdklibrary-removed.txt",
444*333d2b36SAndroid Build Coastguard Worker        sdk_version: "current",
445*333d2b36SAndroid Build Coastguard Worker    },
446*333d2b36SAndroid Build Coastguard Worker}
447*333d2b36SAndroid Build Coastguard Worker
448*333d2b36SAndroid Build Coastguard Workerjava_sdk_library_import {
449*333d2b36SAndroid Build Coastguard Worker    name: "mysdklibrary",
450*333d2b36SAndroid Build Coastguard Worker    prefer: false,
451*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
452*333d2b36SAndroid Build Coastguard Worker    apex_available: ["myapex"],
453*333d2b36SAndroid Build Coastguard Worker    shared_library: false,
454*333d2b36SAndroid Build Coastguard Worker    public: {
455*333d2b36SAndroid Build Coastguard Worker        jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
456*333d2b36SAndroid Build Coastguard Worker        stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
457*333d2b36SAndroid Build Coastguard Worker        current_api: "sdk_library/public/mysdklibrary.txt",
458*333d2b36SAndroid Build Coastguard Worker        removed_api: "sdk_library/public/mysdklibrary-removed.txt",
459*333d2b36SAndroid Build Coastguard Worker        sdk_version: "current",
460*333d2b36SAndroid Build Coastguard Worker    },
461*333d2b36SAndroid Build Coastguard Worker}
462*333d2b36SAndroid Build Coastguard Worker
463*333d2b36SAndroid Build Coastguard Workerjava_sdk_library_import {
464*333d2b36SAndroid Build Coastguard Worker    name: "mycoreplatform",
465*333d2b36SAndroid Build Coastguard Worker    prefer: false,
466*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
467*333d2b36SAndroid Build Coastguard Worker    apex_available: ["myapex"],
468*333d2b36SAndroid Build Coastguard Worker    shared_library: true,
469*333d2b36SAndroid Build Coastguard Worker    compile_dex: true,
470*333d2b36SAndroid Build Coastguard Worker    public: {
471*333d2b36SAndroid Build Coastguard Worker        jars: ["sdk_library/public/mycoreplatform-stubs.jar"],
472*333d2b36SAndroid Build Coastguard Worker        stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"],
473*333d2b36SAndroid Build Coastguard Worker        current_api: "sdk_library/public/mycoreplatform.txt",
474*333d2b36SAndroid Build Coastguard Worker        removed_api: "sdk_library/public/mycoreplatform-removed.txt",
475*333d2b36SAndroid Build Coastguard Worker        sdk_version: "current",
476*333d2b36SAndroid Build Coastguard Worker    },
477*333d2b36SAndroid Build Coastguard Worker}
478*333d2b36SAndroid Build Coastguard Worker		`),
479*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(copyRules),
480*333d2b36SAndroid Build Coastguard Worker		snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
481*333d2b36SAndroid Build Coastguard Worker		snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
482*333d2b36SAndroid Build Coastguard Worker			module := result.ModuleForTests("platform-bootclasspath", "android_common")
483*333d2b36SAndroid Build Coastguard Worker			var rule android.TestingBuildParams
484*333d2b36SAndroid Build Coastguard Worker			rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv")
485*333d2b36SAndroid Build Coastguard Worker			java.CheckHiddenAPIRuleInputs(t, "monolithic flags", `
486*333d2b36SAndroid Build Coastguard Worker				out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/annotation-flags-from-classes.csv
487*333d2b36SAndroid Build Coastguard Worker        out/soong/hiddenapi/hiddenapi-stub-flags.txt
488*333d2b36SAndroid Build Coastguard Worker        snapshot/hiddenapi/annotation-flags.csv
489*333d2b36SAndroid Build Coastguard Worker			`, rule)
490*333d2b36SAndroid Build Coastguard Worker
491*333d2b36SAndroid Build Coastguard Worker			rule = module.Output("out/soong/hiddenapi/hiddenapi-unsupported.csv")
492*333d2b36SAndroid Build Coastguard Worker			java.CheckHiddenAPIRuleInputs(t, "monolithic metadata", `
493*333d2b36SAndroid Build Coastguard Worker				out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/metadata-from-classes.csv
494*333d2b36SAndroid Build Coastguard Worker        snapshot/hiddenapi/metadata.csv
495*333d2b36SAndroid Build Coastguard Worker			`, rule)
496*333d2b36SAndroid Build Coastguard Worker
497*333d2b36SAndroid Build Coastguard Worker			rule = module.Output("out/soong/hiddenapi/hiddenapi-index.csv")
498*333d2b36SAndroid Build Coastguard Worker			java.CheckHiddenAPIRuleInputs(t, "monolithic index", `
499*333d2b36SAndroid Build Coastguard Worker				out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
500*333d2b36SAndroid Build Coastguard Worker        snapshot/hiddenapi/index.csv
501*333d2b36SAndroid Build Coastguard Worker			`, rule)
502*333d2b36SAndroid Build Coastguard Worker
503*333d2b36SAndroid Build Coastguard Worker			rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
504*333d2b36SAndroid Build Coastguard Worker			android.AssertStringDoesContain(t, "verify-overlaps", rule.RuleParams.Command, " snapshot/hiddenapi/filtered-flags.csv:snapshot/hiddenapi/signature-patterns.csv ")
505*333d2b36SAndroid Build Coastguard Worker		}),
506*333d2b36SAndroid Build Coastguard Worker		snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
507*333d2b36SAndroid Build Coastguard Worker		snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
508*333d2b36SAndroid Build Coastguard Worker			module := result.ModuleForTests("platform-bootclasspath", "android_common")
509*333d2b36SAndroid Build Coastguard Worker			rule := module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
510*333d2b36SAndroid Build Coastguard Worker			android.AssertStringDoesContain(t, "verify-overlaps", rule.RuleParams.Command, " out/soong/.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv:out/soong/.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv ")
511*333d2b36SAndroid Build Coastguard Worker		}),
512*333d2b36SAndroid Build Coastguard Worker		snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
513*333d2b36SAndroid Build Coastguard Worker	)
514*333d2b36SAndroid Build Coastguard Worker}
515*333d2b36SAndroid Build Coastguard Worker
516*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
517*333d2b36SAndroid Build Coastguard Worker	t.Run("added-directly", func(t *testing.T) {
518*333d2b36SAndroid Build Coastguard Worker		testSnapshotWithBootClasspathFragment_Contents(t, `
519*333d2b36SAndroid Build Coastguard Worker			sdk {
520*333d2b36SAndroid Build Coastguard Worker				name: "mysdk",
521*333d2b36SAndroid Build Coastguard Worker				bootclasspath_fragments: ["mybootclasspathfragment"],
522*333d2b36SAndroid Build Coastguard Worker				java_sdk_libs: [
523*333d2b36SAndroid Build Coastguard Worker					// This is not strictly needed as it should be automatically added to the sdk_snapshot as
524*333d2b36SAndroid Build Coastguard Worker					// a java_sdk_libs module because it is used in the mybootclasspathfragment's
525*333d2b36SAndroid Build Coastguard Worker					// api.stub_libs property. However, it is specified here to ensure that duplicates are
526*333d2b36SAndroid Build Coastguard Worker					// correctly deduped.
527*333d2b36SAndroid Build Coastguard Worker					"mysdklibrary",
528*333d2b36SAndroid Build Coastguard Worker				],
529*333d2b36SAndroid Build Coastguard Worker			}
530*333d2b36SAndroid Build Coastguard Worker		`, `
531*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
532*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
533*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
534*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
535*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
536*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
537*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
538*333d2b36SAndroid Build Coastguard Worker.intermediates/myothersdklibrary.stubs.exportable/android_common/combined/myothersdklibrary.stubs.exportable.jar -> sdk_library/public/myothersdklibrary-stubs.jar
539*333d2b36SAndroid Build Coastguard Worker.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
540*333d2b36SAndroid Build Coastguard Worker.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
541*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
542*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
543*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
544*333d2b36SAndroid Build Coastguard Worker.intermediates/mycoreplatform.stubs.exportable/android_common/combined/mycoreplatform.stubs.exportable.jar -> sdk_library/public/mycoreplatform-stubs.jar
545*333d2b36SAndroid Build Coastguard Worker.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
546*333d2b36SAndroid Build Coastguard Worker.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_removed.txt -> sdk_library/public/mycoreplatform-removed.txt
547*333d2b36SAndroid Build Coastguard Worker`)
548*333d2b36SAndroid Build Coastguard Worker	})
549*333d2b36SAndroid Build Coastguard Worker
550*333d2b36SAndroid Build Coastguard Worker	copyBootclasspathFragmentFromApexVariantRules := `
551*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
552*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
553*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
554*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
555*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
556*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
557*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
558*333d2b36SAndroid Build Coastguard Worker.intermediates/myothersdklibrary.stubs.exportable/android_common/combined/myothersdklibrary.stubs.exportable.jar -> sdk_library/public/myothersdklibrary-stubs.jar
559*333d2b36SAndroid Build Coastguard Worker.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
560*333d2b36SAndroid Build Coastguard Worker.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
561*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
562*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
563*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
564*333d2b36SAndroid Build Coastguard Worker.intermediates/mycoreplatform.stubs.exportable/android_common/combined/mycoreplatform.stubs.exportable.jar -> sdk_library/public/mycoreplatform-stubs.jar
565*333d2b36SAndroid Build Coastguard Worker.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
566*333d2b36SAndroid Build Coastguard Worker.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_removed.txt -> sdk_library/public/mycoreplatform-removed.txt
567*333d2b36SAndroid Build Coastguard Worker`
568*333d2b36SAndroid Build Coastguard Worker	t.Run("added-via-apex", func(t *testing.T) {
569*333d2b36SAndroid Build Coastguard Worker		testSnapshotWithBootClasspathFragment_Contents(t, `
570*333d2b36SAndroid Build Coastguard Worker			sdk {
571*333d2b36SAndroid Build Coastguard Worker				name: "mysdk",
572*333d2b36SAndroid Build Coastguard Worker				apexes: ["myapex"],
573*333d2b36SAndroid Build Coastguard Worker			}
574*333d2b36SAndroid Build Coastguard Worker		`, copyBootclasspathFragmentFromApexVariantRules)
575*333d2b36SAndroid Build Coastguard Worker	})
576*333d2b36SAndroid Build Coastguard Worker
577*333d2b36SAndroid Build Coastguard Worker	t.Run("added-directly-and-indirectly", func(t *testing.T) {
578*333d2b36SAndroid Build Coastguard Worker		testSnapshotWithBootClasspathFragment_Contents(t, `
579*333d2b36SAndroid Build Coastguard Worker			sdk {
580*333d2b36SAndroid Build Coastguard Worker				name: "mysdk",
581*333d2b36SAndroid Build Coastguard Worker				apexes: ["myapex"],
582*333d2b36SAndroid Build Coastguard Worker				// This is not strictly needed as it should be automatically added to the sdk_snapshot as
583*333d2b36SAndroid Build Coastguard Worker				// a bootclasspath_fragments module because it is used in the myapex's
584*333d2b36SAndroid Build Coastguard Worker				// bootclasspath_fragments property. However, it is specified here to ensure that duplicates
585*333d2b36SAndroid Build Coastguard Worker				// are correctly deduped.
586*333d2b36SAndroid Build Coastguard Worker				bootclasspath_fragments: ["mybootclasspathfragment"],
587*333d2b36SAndroid Build Coastguard Worker				java_sdk_libs: [
588*333d2b36SAndroid Build Coastguard Worker					// This is not strictly needed as it should be automatically added to the sdk_snapshot as
589*333d2b36SAndroid Build Coastguard Worker					// a java_sdk_libs module because it is used in the mybootclasspathfragment's
590*333d2b36SAndroid Build Coastguard Worker					// api.stub_libs property. However, it is specified here to ensure that duplicates are
591*333d2b36SAndroid Build Coastguard Worker					// correctly deduped.
592*333d2b36SAndroid Build Coastguard Worker					"mysdklibrary",
593*333d2b36SAndroid Build Coastguard Worker				],
594*333d2b36SAndroid Build Coastguard Worker			}
595*333d2b36SAndroid Build Coastguard Worker		`, copyBootclasspathFragmentFromApexVariantRules)
596*333d2b36SAndroid Build Coastguard Worker	})
597*333d2b36SAndroid Build Coastguard Worker}
598*333d2b36SAndroid Build Coastguard Worker
599*333d2b36SAndroid Build Coastguard Worker// TestSnapshotWithBootClasspathFragment_Fragments makes sure that the fragments property of a
600*333d2b36SAndroid Build Coastguard Worker// bootclasspath_fragment is correctly output to the sdk snapshot.
601*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) {
602*333d2b36SAndroid Build Coastguard Worker	result := android.GroupFixturePreparers(
603*333d2b36SAndroid Build Coastguard Worker		prepareForSdkTestWithJava,
604*333d2b36SAndroid Build Coastguard Worker		java.PrepareForTestWithJavaDefaultModules,
605*333d2b36SAndroid Build Coastguard Worker		java.PrepareForTestWithJavaSdkLibraryFiles,
606*333d2b36SAndroid Build Coastguard Worker		java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary"),
607*333d2b36SAndroid Build Coastguard Worker		java.FixtureConfigureApexBootJars("someapex:mysdklibrary", "myotherapex:myotherlib"),
608*333d2b36SAndroid Build Coastguard Worker		prepareForSdkTestWithApex,
609*333d2b36SAndroid Build Coastguard Worker
610*333d2b36SAndroid Build Coastguard Worker		// Some additional files needed for the myotherapex.
611*333d2b36SAndroid Build Coastguard Worker		android.FixtureMergeMockFs(android.MockFS{
612*333d2b36SAndroid Build Coastguard Worker			"system/sepolicy/apex/myotherapex-file_contexts": nil,
613*333d2b36SAndroid Build Coastguard Worker			"myotherapex/apex_manifest.json":                 nil,
614*333d2b36SAndroid Build Coastguard Worker			"myotherapex/Test.java":                          nil,
615*333d2b36SAndroid Build Coastguard Worker		}),
616*333d2b36SAndroid Build Coastguard Worker
617*333d2b36SAndroid Build Coastguard Worker		android.FixtureAddTextFile("myotherapex/Android.bp", `
618*333d2b36SAndroid Build Coastguard Worker			apex {
619*333d2b36SAndroid Build Coastguard Worker				name: "myotherapex",
620*333d2b36SAndroid Build Coastguard Worker				key: "myapex.key",
621*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "2",
622*333d2b36SAndroid Build Coastguard Worker				bootclasspath_fragments: ["myotherbootclasspathfragment"],
623*333d2b36SAndroid Build Coastguard Worker			}
624*333d2b36SAndroid Build Coastguard Worker
625*333d2b36SAndroid Build Coastguard Worker			bootclasspath_fragment {
626*333d2b36SAndroid Build Coastguard Worker				name: "myotherbootclasspathfragment",
627*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myotherapex"],
628*333d2b36SAndroid Build Coastguard Worker				contents: [
629*333d2b36SAndroid Build Coastguard Worker					"myotherlib",
630*333d2b36SAndroid Build Coastguard Worker				],
631*333d2b36SAndroid Build Coastguard Worker				hidden_api: {
632*333d2b36SAndroid Build Coastguard Worker					split_packages: ["*"],
633*333d2b36SAndroid Build Coastguard Worker				},
634*333d2b36SAndroid Build Coastguard Worker			}
635*333d2b36SAndroid Build Coastguard Worker
636*333d2b36SAndroid Build Coastguard Worker			java_library {
637*333d2b36SAndroid Build Coastguard Worker				name: "myotherlib",
638*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myotherapex"],
639*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
640*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "2",
641*333d2b36SAndroid Build Coastguard Worker				permitted_packages: ["myothersdklibrary"],
642*333d2b36SAndroid Build Coastguard Worker				compile_dex: true,
643*333d2b36SAndroid Build Coastguard Worker				sdk_version: "current",
644*333d2b36SAndroid Build Coastguard Worker			}
645*333d2b36SAndroid Build Coastguard Worker		`),
646*333d2b36SAndroid Build Coastguard Worker
647*333d2b36SAndroid Build Coastguard Worker		android.FixtureWithRootAndroidBp(`
648*333d2b36SAndroid Build Coastguard Worker			sdk {
649*333d2b36SAndroid Build Coastguard Worker				name: "mysdk",
650*333d2b36SAndroid Build Coastguard Worker				bootclasspath_fragments: ["mybootclasspathfragment"],
651*333d2b36SAndroid Build Coastguard Worker			}
652*333d2b36SAndroid Build Coastguard Worker
653*333d2b36SAndroid Build Coastguard Worker			bootclasspath_fragment {
654*333d2b36SAndroid Build Coastguard Worker				name: "mybootclasspathfragment",
655*333d2b36SAndroid Build Coastguard Worker				contents: [
656*333d2b36SAndroid Build Coastguard Worker					"mysdklibrary",
657*333d2b36SAndroid Build Coastguard Worker				],
658*333d2b36SAndroid Build Coastguard Worker				fragments: [
659*333d2b36SAndroid Build Coastguard Worker					{
660*333d2b36SAndroid Build Coastguard Worker						apex: "myotherapex",
661*333d2b36SAndroid Build Coastguard Worker						module: "myotherbootclasspathfragment"
662*333d2b36SAndroid Build Coastguard Worker					},
663*333d2b36SAndroid Build Coastguard Worker				],
664*333d2b36SAndroid Build Coastguard Worker				hidden_api: {
665*333d2b36SAndroid Build Coastguard Worker					split_packages: ["*"],
666*333d2b36SAndroid Build Coastguard Worker				},
667*333d2b36SAndroid Build Coastguard Worker			}
668*333d2b36SAndroid Build Coastguard Worker
669*333d2b36SAndroid Build Coastguard Worker			java_sdk_library {
670*333d2b36SAndroid Build Coastguard Worker				name: "mysdklibrary",
671*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
672*333d2b36SAndroid Build Coastguard Worker				shared_library: false,
673*333d2b36SAndroid Build Coastguard Worker				public: {enabled: true},
674*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "2",
675*333d2b36SAndroid Build Coastguard Worker				sdk_version: "current",
676*333d2b36SAndroid Build Coastguard Worker			}
677*333d2b36SAndroid Build Coastguard Worker		`),
678*333d2b36SAndroid Build Coastguard Worker	).RunTest(t)
679*333d2b36SAndroid Build Coastguard Worker
680*333d2b36SAndroid Build Coastguard Worker	// A preparer to update the test fixture used when processing an unpackage snapshot.
681*333d2b36SAndroid Build Coastguard Worker	preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
682*333d2b36SAndroid Build Coastguard Worker
683*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
684*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
685*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
686*333d2b36SAndroid Build Coastguard Worker
687*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
688*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
689*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mysdklibrary"],
690*333d2b36SAndroid Build Coastguard Worker}
691*333d2b36SAndroid Build Coastguard Worker
692*333d2b36SAndroid Build Coastguard Workerprebuilt_bootclasspath_fragment {
693*333d2b36SAndroid Build Coastguard Worker    name: "mybootclasspathfragment",
694*333d2b36SAndroid Build Coastguard Worker    prefer: false,
695*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
696*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
697*333d2b36SAndroid Build Coastguard Worker    contents: ["mysdklibrary"],
698*333d2b36SAndroid Build Coastguard Worker    fragments: [
699*333d2b36SAndroid Build Coastguard Worker        {
700*333d2b36SAndroid Build Coastguard Worker            apex: "myotherapex",
701*333d2b36SAndroid Build Coastguard Worker            module: "myotherbootclasspathfragment",
702*333d2b36SAndroid Build Coastguard Worker        },
703*333d2b36SAndroid Build Coastguard Worker    ],
704*333d2b36SAndroid Build Coastguard Worker    hidden_api: {
705*333d2b36SAndroid Build Coastguard Worker        annotation_flags: "hiddenapi/annotation-flags.csv",
706*333d2b36SAndroid Build Coastguard Worker        metadata: "hiddenapi/metadata.csv",
707*333d2b36SAndroid Build Coastguard Worker        index: "hiddenapi/index.csv",
708*333d2b36SAndroid Build Coastguard Worker        signature_patterns: "hiddenapi/signature-patterns.csv",
709*333d2b36SAndroid Build Coastguard Worker        filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
710*333d2b36SAndroid Build Coastguard Worker        filtered_flags: "hiddenapi/filtered-flags.csv",
711*333d2b36SAndroid Build Coastguard Worker    },
712*333d2b36SAndroid Build Coastguard Worker}
713*333d2b36SAndroid Build Coastguard Worker
714*333d2b36SAndroid Build Coastguard Workerjava_sdk_library_import {
715*333d2b36SAndroid Build Coastguard Worker    name: "mysdklibrary",
716*333d2b36SAndroid Build Coastguard Worker    prefer: false,
717*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
718*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
719*333d2b36SAndroid Build Coastguard Worker    shared_library: false,
720*333d2b36SAndroid Build Coastguard Worker    public: {
721*333d2b36SAndroid Build Coastguard Worker        jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
722*333d2b36SAndroid Build Coastguard Worker        stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
723*333d2b36SAndroid Build Coastguard Worker        current_api: "sdk_library/public/mysdklibrary.txt",
724*333d2b36SAndroid Build Coastguard Worker        removed_api: "sdk_library/public/mysdklibrary-removed.txt",
725*333d2b36SAndroid Build Coastguard Worker        sdk_version: "current",
726*333d2b36SAndroid Build Coastguard Worker    },
727*333d2b36SAndroid Build Coastguard Worker}
728*333d2b36SAndroid Build Coastguard Worker		`),
729*333d2b36SAndroid Build Coastguard Worker		snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
730*333d2b36SAndroid Build Coastguard Worker		snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
731*333d2b36SAndroid Build Coastguard Worker		snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
732*333d2b36SAndroid Build Coastguard Worker	)
733*333d2b36SAndroid Build Coastguard Worker}
734*333d2b36SAndroid Build Coastguard Worker
735*333d2b36SAndroid Build Coastguard Worker// Test that bootclasspath_fragment works with sdk.
736*333d2b36SAndroid Build Coastguard Workerfunc TestBasicSdkWithBootclasspathFragment(t *testing.T) {
737*333d2b36SAndroid Build Coastguard Worker	android.GroupFixturePreparers(
738*333d2b36SAndroid Build Coastguard Worker		prepareForSdkTestWithApex,
739*333d2b36SAndroid Build Coastguard Worker		prepareForSdkTestWithJava,
740*333d2b36SAndroid Build Coastguard Worker		android.FixtureMergeMockFs(android.MockFS{
741*333d2b36SAndroid Build Coastguard Worker			"java/mybootlib.jar":                nil,
742*333d2b36SAndroid Build Coastguard Worker			"hiddenapi/annotation-flags.csv":    nil,
743*333d2b36SAndroid Build Coastguard Worker			"hiddenapi/index.csv":               nil,
744*333d2b36SAndroid Build Coastguard Worker			"hiddenapi/metadata.csv":            nil,
745*333d2b36SAndroid Build Coastguard Worker			"hiddenapi/signature-patterns.csv":  nil,
746*333d2b36SAndroid Build Coastguard Worker			"hiddenapi/filtered-stub-flags.csv": nil,
747*333d2b36SAndroid Build Coastguard Worker			"hiddenapi/filtered-flags.csv":      nil,
748*333d2b36SAndroid Build Coastguard Worker		}),
749*333d2b36SAndroid Build Coastguard Worker		android.FixtureWithRootAndroidBp(`
750*333d2b36SAndroid Build Coastguard Worker		sdk {
751*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
752*333d2b36SAndroid Build Coastguard Worker			bootclasspath_fragments: ["mybootclasspathfragment"],
753*333d2b36SAndroid Build Coastguard Worker		}
754*333d2b36SAndroid Build Coastguard Worker
755*333d2b36SAndroid Build Coastguard Worker		bootclasspath_fragment {
756*333d2b36SAndroid Build Coastguard Worker			name: "mybootclasspathfragment",
757*333d2b36SAndroid Build Coastguard Worker			image_name: "art",
758*333d2b36SAndroid Build Coastguard Worker			contents: ["mybootlib"],
759*333d2b36SAndroid Build Coastguard Worker			apex_available: ["myapex"],
760*333d2b36SAndroid Build Coastguard Worker			hidden_api: {
761*333d2b36SAndroid Build Coastguard Worker				split_packages: ["*"],
762*333d2b36SAndroid Build Coastguard Worker			},
763*333d2b36SAndroid Build Coastguard Worker		}
764*333d2b36SAndroid Build Coastguard Worker
765*333d2b36SAndroid Build Coastguard Worker		java_library {
766*333d2b36SAndroid Build Coastguard Worker			name: "mybootlib",
767*333d2b36SAndroid Build Coastguard Worker			apex_available: ["myapex"],
768*333d2b36SAndroid Build Coastguard Worker			srcs: ["Test.java"],
769*333d2b36SAndroid Build Coastguard Worker			system_modules: "none",
770*333d2b36SAndroid Build Coastguard Worker			sdk_version: "none",
771*333d2b36SAndroid Build Coastguard Worker			min_sdk_version: "1",
772*333d2b36SAndroid Build Coastguard Worker			compile_dex: true,
773*333d2b36SAndroid Build Coastguard Worker		}
774*333d2b36SAndroid Build Coastguard Worker
775*333d2b36SAndroid Build Coastguard Worker		prebuilt_bootclasspath_fragment {
776*333d2b36SAndroid Build Coastguard Worker			name: "mybootclasspathfragment",
777*333d2b36SAndroid Build Coastguard Worker			prefer: false,
778*333d2b36SAndroid Build Coastguard Worker			visibility: ["//visibility:public"],
779*333d2b36SAndroid Build Coastguard Worker			apex_available: [
780*333d2b36SAndroid Build Coastguard Worker				"myapex",
781*333d2b36SAndroid Build Coastguard Worker			],
782*333d2b36SAndroid Build Coastguard Worker			image_name: "art",
783*333d2b36SAndroid Build Coastguard Worker			contents: ["mybootlib"],
784*333d2b36SAndroid Build Coastguard Worker			hidden_api: {
785*333d2b36SAndroid Build Coastguard Worker				annotation_flags: "hiddenapi/annotation-flags.csv",
786*333d2b36SAndroid Build Coastguard Worker				metadata: "hiddenapi/metadata.csv",
787*333d2b36SAndroid Build Coastguard Worker				index: "hiddenapi/index.csv",
788*333d2b36SAndroid Build Coastguard Worker				signature_patterns: "hiddenapi/signature-patterns.csv",
789*333d2b36SAndroid Build Coastguard Worker				filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
790*333d2b36SAndroid Build Coastguard Worker				filtered_flags: "hiddenapi/filtered-flags.csv",
791*333d2b36SAndroid Build Coastguard Worker			},
792*333d2b36SAndroid Build Coastguard Worker		}
793*333d2b36SAndroid Build Coastguard Worker
794*333d2b36SAndroid Build Coastguard Worker		java_import {
795*333d2b36SAndroid Build Coastguard Worker			name: "mybootlib",
796*333d2b36SAndroid Build Coastguard Worker			visibility: ["//visibility:public"],
797*333d2b36SAndroid Build Coastguard Worker			apex_available: ["com.android.art"],
798*333d2b36SAndroid Build Coastguard Worker			jars: ["java/mybootlib.jar"],
799*333d2b36SAndroid Build Coastguard Worker		}
800*333d2b36SAndroid Build Coastguard Worker	`),
801*333d2b36SAndroid Build Coastguard Worker	).RunTest(t)
802*333d2b36SAndroid Build Coastguard Worker}
803*333d2b36SAndroid Build Coastguard Worker
804*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
805*333d2b36SAndroid Build Coastguard Worker	result := android.GroupFixturePreparers(
806*333d2b36SAndroid Build Coastguard Worker		prepareForSdkTestWithJava,
807*333d2b36SAndroid Build Coastguard Worker		java.PrepareForTestWithJavaDefaultModules,
808*333d2b36SAndroid Build Coastguard Worker		java.PrepareForTestWithJavaSdkLibraryFiles,
809*333d2b36SAndroid Build Coastguard Worker		java.FixtureWithLastReleaseApis("mysdklibrary", "mynewlibrary"),
810*333d2b36SAndroid Build Coastguard Worker		java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:mynewlibrary"),
811*333d2b36SAndroid Build Coastguard Worker		prepareForSdkTestWithApex,
812*333d2b36SAndroid Build Coastguard Worker
813*333d2b36SAndroid Build Coastguard Worker		// Add a platform_bootclasspath that depends on the fragment.
814*333d2b36SAndroid Build Coastguard Worker		fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
815*333d2b36SAndroid Build Coastguard Worker
816*333d2b36SAndroid Build Coastguard Worker		android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
817*333d2b36SAndroid Build Coastguard Worker
818*333d2b36SAndroid Build Coastguard Worker		android.MockFS{
819*333d2b36SAndroid Build Coastguard Worker			"my-blocked.txt":                   nil,
820*333d2b36SAndroid Build Coastguard Worker			"my-max-target-o-low-priority.txt": nil,
821*333d2b36SAndroid Build Coastguard Worker			"my-max-target-p.txt":              nil,
822*333d2b36SAndroid Build Coastguard Worker			"my-max-target-q.txt":              nil,
823*333d2b36SAndroid Build Coastguard Worker			"my-max-target-r-low-priority.txt": nil,
824*333d2b36SAndroid Build Coastguard Worker			"my-removed.txt":                   nil,
825*333d2b36SAndroid Build Coastguard Worker			"my-unsupported-packages.txt":      nil,
826*333d2b36SAndroid Build Coastguard Worker			"my-unsupported.txt":               nil,
827*333d2b36SAndroid Build Coastguard Worker			"my-new-max-target-q.txt":          nil,
828*333d2b36SAndroid Build Coastguard Worker		}.AddToFixture(),
829*333d2b36SAndroid Build Coastguard Worker		android.FixtureWithRootAndroidBp(`
830*333d2b36SAndroid Build Coastguard Worker			sdk {
831*333d2b36SAndroid Build Coastguard Worker				name: "mysdk",
832*333d2b36SAndroid Build Coastguard Worker				bootclasspath_fragments: ["mybootclasspathfragment"],
833*333d2b36SAndroid Build Coastguard Worker			}
834*333d2b36SAndroid Build Coastguard Worker
835*333d2b36SAndroid Build Coastguard Worker			apex {
836*333d2b36SAndroid Build Coastguard Worker				name: "myapex",
837*333d2b36SAndroid Build Coastguard Worker				key: "myapex.key",
838*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "1",
839*333d2b36SAndroid Build Coastguard Worker				bootclasspath_fragments: ["mybootclasspathfragment"],
840*333d2b36SAndroid Build Coastguard Worker			}
841*333d2b36SAndroid Build Coastguard Worker
842*333d2b36SAndroid Build Coastguard Worker			bootclasspath_fragment {
843*333d2b36SAndroid Build Coastguard Worker				name: "mybootclasspathfragment",
844*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
845*333d2b36SAndroid Build Coastguard Worker				contents: ["mybootlib", "mynewlibrary"],
846*333d2b36SAndroid Build Coastguard Worker				api: {
847*333d2b36SAndroid Build Coastguard Worker					stub_libs: ["mysdklibrary"],
848*333d2b36SAndroid Build Coastguard Worker				},
849*333d2b36SAndroid Build Coastguard Worker				hidden_api: {
850*333d2b36SAndroid Build Coastguard Worker					unsupported: [
851*333d2b36SAndroid Build Coastguard Worker							"my-unsupported.txt",
852*333d2b36SAndroid Build Coastguard Worker					],
853*333d2b36SAndroid Build Coastguard Worker					removed: [
854*333d2b36SAndroid Build Coastguard Worker							"my-removed.txt",
855*333d2b36SAndroid Build Coastguard Worker					],
856*333d2b36SAndroid Build Coastguard Worker					max_target_r_low_priority: [
857*333d2b36SAndroid Build Coastguard Worker							"my-max-target-r-low-priority.txt",
858*333d2b36SAndroid Build Coastguard Worker					],
859*333d2b36SAndroid Build Coastguard Worker					max_target_q: [
860*333d2b36SAndroid Build Coastguard Worker							"my-max-target-q.txt",
861*333d2b36SAndroid Build Coastguard Worker					],
862*333d2b36SAndroid Build Coastguard Worker					max_target_p: [
863*333d2b36SAndroid Build Coastguard Worker							"my-max-target-p.txt",
864*333d2b36SAndroid Build Coastguard Worker					],
865*333d2b36SAndroid Build Coastguard Worker					max_target_o_low_priority: [
866*333d2b36SAndroid Build Coastguard Worker							"my-max-target-o-low-priority.txt",
867*333d2b36SAndroid Build Coastguard Worker					],
868*333d2b36SAndroid Build Coastguard Worker					blocked: [
869*333d2b36SAndroid Build Coastguard Worker							"my-blocked.txt",
870*333d2b36SAndroid Build Coastguard Worker					],
871*333d2b36SAndroid Build Coastguard Worker					unsupported_packages: [
872*333d2b36SAndroid Build Coastguard Worker							"my-unsupported-packages.txt",
873*333d2b36SAndroid Build Coastguard Worker					],
874*333d2b36SAndroid Build Coastguard Worker					split_packages: ["sdklibrary"],
875*333d2b36SAndroid Build Coastguard Worker					package_prefixes: ["sdklibrary.all.mine"],
876*333d2b36SAndroid Build Coastguard Worker					single_packages: ["sdklibrary.mine"],
877*333d2b36SAndroid Build Coastguard Worker				},
878*333d2b36SAndroid Build Coastguard Worker			}
879*333d2b36SAndroid Build Coastguard Worker
880*333d2b36SAndroid Build Coastguard Worker			java_library {
881*333d2b36SAndroid Build Coastguard Worker				name: "mybootlib",
882*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
883*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
884*333d2b36SAndroid Build Coastguard Worker				system_modules: "none",
885*333d2b36SAndroid Build Coastguard Worker				sdk_version: "none",
886*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "1",
887*333d2b36SAndroid Build Coastguard Worker				compile_dex: true,
888*333d2b36SAndroid Build Coastguard Worker				permitted_packages: ["mybootlib"],
889*333d2b36SAndroid Build Coastguard Worker			}
890*333d2b36SAndroid Build Coastguard Worker
891*333d2b36SAndroid Build Coastguard Worker			java_sdk_library {
892*333d2b36SAndroid Build Coastguard Worker				name: "mysdklibrary",
893*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
894*333d2b36SAndroid Build Coastguard Worker				compile_dex: true,
895*333d2b36SAndroid Build Coastguard Worker				public: {enabled: true},
896*333d2b36SAndroid Build Coastguard Worker				permitted_packages: ["mysdklibrary"],
897*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "current",
898*333d2b36SAndroid Build Coastguard Worker				sdk_version: "current",
899*333d2b36SAndroid Build Coastguard Worker			}
900*333d2b36SAndroid Build Coastguard Worker
901*333d2b36SAndroid Build Coastguard Worker			java_sdk_library {
902*333d2b36SAndroid Build Coastguard Worker				name: "mynewlibrary",
903*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
904*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
905*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "10",
906*333d2b36SAndroid Build Coastguard Worker				compile_dex: true,
907*333d2b36SAndroid Build Coastguard Worker				public: {enabled: true},
908*333d2b36SAndroid Build Coastguard Worker				permitted_packages: ["mysdklibrary"],
909*333d2b36SAndroid Build Coastguard Worker				hidden_api: {
910*333d2b36SAndroid Build Coastguard Worker					max_target_q: [
911*333d2b36SAndroid Build Coastguard Worker							"my-new-max-target-q.txt",
912*333d2b36SAndroid Build Coastguard Worker					],
913*333d2b36SAndroid Build Coastguard Worker					split_packages: ["sdklibrary", "newlibrary"],
914*333d2b36SAndroid Build Coastguard Worker					package_prefixes: ["newlibrary.all.mine"],
915*333d2b36SAndroid Build Coastguard Worker					single_packages: ["newlibrary.mine"],
916*333d2b36SAndroid Build Coastguard Worker				},
917*333d2b36SAndroid Build Coastguard Worker				sdk_version: "current",
918*333d2b36SAndroid Build Coastguard Worker			}
919*333d2b36SAndroid Build Coastguard Worker		`),
920*333d2b36SAndroid Build Coastguard Worker	).RunTest(t)
921*333d2b36SAndroid Build Coastguard Worker
922*333d2b36SAndroid Build Coastguard Worker	// A preparer to update the test fixture used when processing an unpackage snapshot.
923*333d2b36SAndroid Build Coastguard Worker	preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
924*333d2b36SAndroid Build Coastguard Worker
925*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
926*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
927*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
928*333d2b36SAndroid Build Coastguard Worker
929*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
930*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
931*333d2b36SAndroid Build Coastguard Worker    contents: [
932*333d2b36SAndroid Build Coastguard Worker        "prebuilt_mynewlibrary",
933*333d2b36SAndroid Build Coastguard Worker        "prebuilt_mysdklibrary",
934*333d2b36SAndroid Build Coastguard Worker    ],
935*333d2b36SAndroid Build Coastguard Worker}
936*333d2b36SAndroid Build Coastguard Worker
937*333d2b36SAndroid Build Coastguard Workerprebuilt_bootclasspath_fragment {
938*333d2b36SAndroid Build Coastguard Worker    name: "mybootclasspathfragment",
939*333d2b36SAndroid Build Coastguard Worker    prefer: false,
940*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
941*333d2b36SAndroid Build Coastguard Worker    apex_available: ["myapex"],
942*333d2b36SAndroid Build Coastguard Worker    contents: [
943*333d2b36SAndroid Build Coastguard Worker        "mybootlib",
944*333d2b36SAndroid Build Coastguard Worker        "mynewlibrary",
945*333d2b36SAndroid Build Coastguard Worker    ],
946*333d2b36SAndroid Build Coastguard Worker    api: {
947*333d2b36SAndroid Build Coastguard Worker        stub_libs: ["mysdklibrary"],
948*333d2b36SAndroid Build Coastguard Worker    },
949*333d2b36SAndroid Build Coastguard Worker    hidden_api: {
950*333d2b36SAndroid Build Coastguard Worker        unsupported: ["hiddenapi/my-unsupported.txt"],
951*333d2b36SAndroid Build Coastguard Worker        removed: ["hiddenapi/my-removed.txt"],
952*333d2b36SAndroid Build Coastguard Worker        max_target_r_low_priority: ["hiddenapi/my-max-target-r-low-priority.txt"],
953*333d2b36SAndroid Build Coastguard Worker        max_target_q: [
954*333d2b36SAndroid Build Coastguard Worker            "hiddenapi/my-max-target-q.txt",
955*333d2b36SAndroid Build Coastguard Worker            "hiddenapi/my-new-max-target-q.txt",
956*333d2b36SAndroid Build Coastguard Worker        ],
957*333d2b36SAndroid Build Coastguard Worker        max_target_p: ["hiddenapi/my-max-target-p.txt"],
958*333d2b36SAndroid Build Coastguard Worker        max_target_o_low_priority: ["hiddenapi/my-max-target-o-low-priority.txt"],
959*333d2b36SAndroid Build Coastguard Worker        blocked: ["hiddenapi/my-blocked.txt"],
960*333d2b36SAndroid Build Coastguard Worker        unsupported_packages: ["hiddenapi/my-unsupported-packages.txt"],
961*333d2b36SAndroid Build Coastguard Worker        annotation_flags: "hiddenapi/annotation-flags.csv",
962*333d2b36SAndroid Build Coastguard Worker        metadata: "hiddenapi/metadata.csv",
963*333d2b36SAndroid Build Coastguard Worker        index: "hiddenapi/index.csv",
964*333d2b36SAndroid Build Coastguard Worker        signature_patterns: "hiddenapi/signature-patterns.csv",
965*333d2b36SAndroid Build Coastguard Worker        filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
966*333d2b36SAndroid Build Coastguard Worker        filtered_flags: "hiddenapi/filtered-flags.csv",
967*333d2b36SAndroid Build Coastguard Worker    },
968*333d2b36SAndroid Build Coastguard Worker}
969*333d2b36SAndroid Build Coastguard Worker
970*333d2b36SAndroid Build Coastguard Workerjava_import {
971*333d2b36SAndroid Build Coastguard Worker    name: "mybootlib",
972*333d2b36SAndroid Build Coastguard Worker    prefer: false,
973*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
974*333d2b36SAndroid Build Coastguard Worker    apex_available: ["myapex"],
975*333d2b36SAndroid Build Coastguard Worker    jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
976*333d2b36SAndroid Build Coastguard Worker    min_sdk_version: "1",
977*333d2b36SAndroid Build Coastguard Worker    permitted_packages: ["mybootlib"],
978*333d2b36SAndroid Build Coastguard Worker}
979*333d2b36SAndroid Build Coastguard Worker
980*333d2b36SAndroid Build Coastguard Workerjava_sdk_library_import {
981*333d2b36SAndroid Build Coastguard Worker    name: "mynewlibrary",
982*333d2b36SAndroid Build Coastguard Worker    prefer: false,
983*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
984*333d2b36SAndroid Build Coastguard Worker    apex_available: ["myapex"],
985*333d2b36SAndroid Build Coastguard Worker    shared_library: true,
986*333d2b36SAndroid Build Coastguard Worker    compile_dex: true,
987*333d2b36SAndroid Build Coastguard Worker    permitted_packages: ["mysdklibrary"],
988*333d2b36SAndroid Build Coastguard Worker    public: {
989*333d2b36SAndroid Build Coastguard Worker        jars: ["sdk_library/public/mynewlibrary-stubs.jar"],
990*333d2b36SAndroid Build Coastguard Worker        stub_srcs: ["sdk_library/public/mynewlibrary_stub_sources"],
991*333d2b36SAndroid Build Coastguard Worker        current_api: "sdk_library/public/mynewlibrary.txt",
992*333d2b36SAndroid Build Coastguard Worker        removed_api: "sdk_library/public/mynewlibrary-removed.txt",
993*333d2b36SAndroid Build Coastguard Worker        sdk_version: "current",
994*333d2b36SAndroid Build Coastguard Worker    },
995*333d2b36SAndroid Build Coastguard Worker}
996*333d2b36SAndroid Build Coastguard Worker
997*333d2b36SAndroid Build Coastguard Workerjava_sdk_library_import {
998*333d2b36SAndroid Build Coastguard Worker    name: "mysdklibrary",
999*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1000*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1001*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
1002*333d2b36SAndroid Build Coastguard Worker    shared_library: true,
1003*333d2b36SAndroid Build Coastguard Worker    compile_dex: true,
1004*333d2b36SAndroid Build Coastguard Worker    permitted_packages: ["mysdklibrary"],
1005*333d2b36SAndroid Build Coastguard Worker    public: {
1006*333d2b36SAndroid Build Coastguard Worker        jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1007*333d2b36SAndroid Build Coastguard Worker        stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1008*333d2b36SAndroid Build Coastguard Worker        current_api: "sdk_library/public/mysdklibrary.txt",
1009*333d2b36SAndroid Build Coastguard Worker        removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1010*333d2b36SAndroid Build Coastguard Worker        sdk_version: "current",
1011*333d2b36SAndroid Build Coastguard Worker    },
1012*333d2b36SAndroid Build Coastguard Worker}
1013*333d2b36SAndroid Build Coastguard Worker`),
1014*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
1015*333d2b36SAndroid Build Coastguard Workermy-unsupported.txt -> hiddenapi/my-unsupported.txt
1016*333d2b36SAndroid Build Coastguard Workermy-removed.txt -> hiddenapi/my-removed.txt
1017*333d2b36SAndroid Build Coastguard Workermy-max-target-r-low-priority.txt -> hiddenapi/my-max-target-r-low-priority.txt
1018*333d2b36SAndroid Build Coastguard Workermy-max-target-q.txt -> hiddenapi/my-max-target-q.txt
1019*333d2b36SAndroid Build Coastguard Workermy-new-max-target-q.txt -> hiddenapi/my-new-max-target-q.txt
1020*333d2b36SAndroid Build Coastguard Workermy-max-target-p.txt -> hiddenapi/my-max-target-p.txt
1021*333d2b36SAndroid Build Coastguard Workermy-max-target-o-low-priority.txt -> hiddenapi/my-max-target-o-low-priority.txt
1022*333d2b36SAndroid Build Coastguard Workermy-blocked.txt -> hiddenapi/my-blocked.txt
1023*333d2b36SAndroid Build Coastguard Workermy-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
1024*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1025*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
1026*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
1027*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
1028*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
1029*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
1030*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
1031*333d2b36SAndroid Build Coastguard Worker.intermediates/mynewlibrary.stubs.exportable/android_common/combined/mynewlibrary.stubs.exportable.jar -> sdk_library/public/mynewlibrary-stubs.jar
1032*333d2b36SAndroid Build Coastguard Worker.intermediates/mynewlibrary.stubs.source/android_common/exportable/mynewlibrary.stubs.source_api.txt -> sdk_library/public/mynewlibrary.txt
1033*333d2b36SAndroid Build Coastguard Worker.intermediates/mynewlibrary.stubs.source/android_common/exportable/mynewlibrary.stubs.source_removed.txt -> sdk_library/public/mynewlibrary-removed.txt
1034*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1035*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1036*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
1037*333d2b36SAndroid Build Coastguard Worker`),
1038*333d2b36SAndroid Build Coastguard Worker		snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
1039*333d2b36SAndroid Build Coastguard Worker		snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
1040*333d2b36SAndroid Build Coastguard Worker		snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
1041*333d2b36SAndroid Build Coastguard Worker	)
1042*333d2b36SAndroid Build Coastguard Worker}
1043*333d2b36SAndroid Build Coastguard Worker
1044*333d2b36SAndroid Build Coastguard Workerfunc testSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T, targetBuildRelease string,
1045*333d2b36SAndroid Build Coastguard Worker	expectedSdkSnapshot string,
1046*333d2b36SAndroid Build Coastguard Worker	expectedCopyRules string,
1047*333d2b36SAndroid Build Coastguard Worker	expectedStubFlagsInputs []string,
1048*333d2b36SAndroid Build Coastguard Worker	suffix string) {
1049*333d2b36SAndroid Build Coastguard Worker
1050*333d2b36SAndroid Build Coastguard Worker	result := android.GroupFixturePreparers(
1051*333d2b36SAndroid Build Coastguard Worker		prepareForSdkTestWithJava,
1052*333d2b36SAndroid Build Coastguard Worker		java.PrepareForTestWithJavaDefaultModules,
1053*333d2b36SAndroid Build Coastguard Worker		java.PrepareForTestWithJavaSdkLibraryFiles,
1054*333d2b36SAndroid Build Coastguard Worker		java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
1055*333d2b36SAndroid Build Coastguard Worker		java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
1056*333d2b36SAndroid Build Coastguard Worker		prepareForSdkTestWithApex,
1057*333d2b36SAndroid Build Coastguard Worker
1058*333d2b36SAndroid Build Coastguard Worker		// Add a platform_bootclasspath that depends on the fragment.
1059*333d2b36SAndroid Build Coastguard Worker		fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
1060*333d2b36SAndroid Build Coastguard Worker
1061*333d2b36SAndroid Build Coastguard Worker		android.FixtureMergeEnv(map[string]string{
1062*333d2b36SAndroid Build Coastguard Worker			"SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": targetBuildRelease,
1063*333d2b36SAndroid Build Coastguard Worker		}),
1064*333d2b36SAndroid Build Coastguard Worker		android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
1065*333d2b36SAndroid Build Coastguard Worker			variables.Platform_version_active_codenames = []string{"VanillaIceCream"}
1066*333d2b36SAndroid Build Coastguard Worker		}),
1067*333d2b36SAndroid Build Coastguard Worker
1068*333d2b36SAndroid Build Coastguard Worker		android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
1069*333d2b36SAndroid Build Coastguard Worker
1070*333d2b36SAndroid Build Coastguard Worker		android.FixtureWithRootAndroidBp(`
1071*333d2b36SAndroid Build Coastguard Worker			sdk {
1072*333d2b36SAndroid Build Coastguard Worker				name: "mysdk",
1073*333d2b36SAndroid Build Coastguard Worker				apexes: ["myapex"],
1074*333d2b36SAndroid Build Coastguard Worker			}
1075*333d2b36SAndroid Build Coastguard Worker
1076*333d2b36SAndroid Build Coastguard Worker			apex {
1077*333d2b36SAndroid Build Coastguard Worker				name: "myapex",
1078*333d2b36SAndroid Build Coastguard Worker				key: "myapex.key",
1079*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "S",
1080*333d2b36SAndroid Build Coastguard Worker				bootclasspath_fragments: ["mybootclasspathfragment"],
1081*333d2b36SAndroid Build Coastguard Worker			}
1082*333d2b36SAndroid Build Coastguard Worker
1083*333d2b36SAndroid Build Coastguard Worker			bootclasspath_fragment {
1084*333d2b36SAndroid Build Coastguard Worker				name: "mybootclasspathfragment",
1085*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
1086*333d2b36SAndroid Build Coastguard Worker				contents: [
1087*333d2b36SAndroid Build Coastguard Worker					"mysdklibrary",
1088*333d2b36SAndroid Build Coastguard Worker					"mynewsdklibrary",
1089*333d2b36SAndroid Build Coastguard Worker				],
1090*333d2b36SAndroid Build Coastguard Worker
1091*333d2b36SAndroid Build Coastguard Worker				hidden_api: {
1092*333d2b36SAndroid Build Coastguard Worker					split_packages: [],
1093*333d2b36SAndroid Build Coastguard Worker				},
1094*333d2b36SAndroid Build Coastguard Worker			}
1095*333d2b36SAndroid Build Coastguard Worker
1096*333d2b36SAndroid Build Coastguard Worker			java_sdk_library {
1097*333d2b36SAndroid Build Coastguard Worker				name: "mysdklibrary",
1098*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
1099*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
1100*333d2b36SAndroid Build Coastguard Worker				shared_library: false,
1101*333d2b36SAndroid Build Coastguard Worker				public: {enabled: true},
1102*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "S",
1103*333d2b36SAndroid Build Coastguard Worker				sdk_version: "current",
1104*333d2b36SAndroid Build Coastguard Worker			}
1105*333d2b36SAndroid Build Coastguard Worker
1106*333d2b36SAndroid Build Coastguard Worker			java_sdk_library {
1107*333d2b36SAndroid Build Coastguard Worker				name: "mynewsdklibrary",
1108*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
1109*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
1110*333d2b36SAndroid Build Coastguard Worker				compile_dex: true,
1111*333d2b36SAndroid Build Coastguard Worker				public: {enabled: true},
1112*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "Tiramisu",
1113*333d2b36SAndroid Build Coastguard Worker				permitted_packages: ["mynewsdklibrary"],
1114*333d2b36SAndroid Build Coastguard Worker				sdk_version: "current",
1115*333d2b36SAndroid Build Coastguard Worker			}
1116*333d2b36SAndroid Build Coastguard Worker		`),
1117*333d2b36SAndroid Build Coastguard Worker	).RunTest(t)
1118*333d2b36SAndroid Build Coastguard Worker
1119*333d2b36SAndroid Build Coastguard Worker	bcpf := result.ModuleForTests("mybootclasspathfragment", "android_common")
1120*333d2b36SAndroid Build Coastguard Worker	rule := bcpf.Output("out/soong/.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi" + suffix + "/stub-flags.csv")
1121*333d2b36SAndroid Build Coastguard Worker	android.AssertPathsRelativeToTopEquals(t, "stub flags inputs", android.SortedUniqueStrings(expectedStubFlagsInputs), android.SortedUniquePaths(rule.Implicits))
1122*333d2b36SAndroid Build Coastguard Worker
1123*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
1124*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(expectedSdkSnapshot),
1125*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(expectedCopyRules),
1126*333d2b36SAndroid Build Coastguard Worker	)
1127*333d2b36SAndroid Build Coastguard Worker}
1128*333d2b36SAndroid Build Coastguard Worker
1129*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T) {
1130*333d2b36SAndroid Build Coastguard Worker	t.Run("target S build", func(t *testing.T) {
1131*333d2b36SAndroid Build Coastguard Worker		expectedSnapshot := `
1132*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
1133*333d2b36SAndroid Build Coastguard Worker
1134*333d2b36SAndroid Build Coastguard Workerprebuilt_bootclasspath_fragment {
1135*333d2b36SAndroid Build Coastguard Worker    name: "mybootclasspathfragment",
1136*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1137*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1138*333d2b36SAndroid Build Coastguard Worker    apex_available: ["myapex"],
1139*333d2b36SAndroid Build Coastguard Worker    contents: ["mysdklibrary"],
1140*333d2b36SAndroid Build Coastguard Worker    hidden_api: {
1141*333d2b36SAndroid Build Coastguard Worker        annotation_flags: "hiddenapi/annotation-flags.csv",
1142*333d2b36SAndroid Build Coastguard Worker        metadata: "hiddenapi/metadata.csv",
1143*333d2b36SAndroid Build Coastguard Worker        index: "hiddenapi/index.csv",
1144*333d2b36SAndroid Build Coastguard Worker        stub_flags: "hiddenapi/stub-flags.csv",
1145*333d2b36SAndroid Build Coastguard Worker        all_flags: "hiddenapi/all-flags.csv",
1146*333d2b36SAndroid Build Coastguard Worker    },
1147*333d2b36SAndroid Build Coastguard Worker}
1148*333d2b36SAndroid Build Coastguard Worker
1149*333d2b36SAndroid Build Coastguard Workerjava_sdk_library_import {
1150*333d2b36SAndroid Build Coastguard Worker    name: "mysdklibrary",
1151*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1152*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1153*333d2b36SAndroid Build Coastguard Worker    apex_available: ["myapex"],
1154*333d2b36SAndroid Build Coastguard Worker    shared_library: false,
1155*333d2b36SAndroid Build Coastguard Worker    public: {
1156*333d2b36SAndroid Build Coastguard Worker        jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1157*333d2b36SAndroid Build Coastguard Worker        stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1158*333d2b36SAndroid Build Coastguard Worker        current_api: "sdk_library/public/mysdklibrary.txt",
1159*333d2b36SAndroid Build Coastguard Worker        removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1160*333d2b36SAndroid Build Coastguard Worker        sdk_version: "current",
1161*333d2b36SAndroid Build Coastguard Worker    },
1162*333d2b36SAndroid Build Coastguard Worker}
1163*333d2b36SAndroid Build Coastguard Worker`
1164*333d2b36SAndroid Build Coastguard Worker		expectedCopyRules := `
1165*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1166*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/metadata.csv -> hiddenapi/metadata.csv
1167*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/index.csv -> hiddenapi/index.csv
1168*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/stub-flags.csv -> hiddenapi/stub-flags.csv
1169*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/all-flags.csv -> hiddenapi/all-flags.csv
1170*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1171*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1172*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
1173*333d2b36SAndroid Build Coastguard Worker`
1174*333d2b36SAndroid Build Coastguard Worker
1175*333d2b36SAndroid Build Coastguard Worker		// On S the stub flags should only be generated from mysdklibrary as mynewsdklibrary is not part
1176*333d2b36SAndroid Build Coastguard Worker		// of the snapshot.
1177*333d2b36SAndroid Build Coastguard Worker		expectedStubFlagsInputs := []string{
1178*333d2b36SAndroid Build Coastguard Worker			"out/soong/.intermediates/mysdklibrary.stubs.exportable/android_common/dex/mysdklibrary.stubs.exportable.jar",
1179*333d2b36SAndroid Build Coastguard Worker			"out/soong/.intermediates/mysdklibrary.impl/android_common/aligned/mysdklibrary.jar",
1180*333d2b36SAndroid Build Coastguard Worker		}
1181*333d2b36SAndroid Build Coastguard Worker
1182*333d2b36SAndroid Build Coastguard Worker		testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "S",
1183*333d2b36SAndroid Build Coastguard Worker			expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "-for-sdk-snapshot")
1184*333d2b36SAndroid Build Coastguard Worker	})
1185*333d2b36SAndroid Build Coastguard Worker
1186*333d2b36SAndroid Build Coastguard Worker	t.Run("target-Tiramisu-build", func(t *testing.T) {
1187*333d2b36SAndroid Build Coastguard Worker		expectedSnapshot := `
1188*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
1189*333d2b36SAndroid Build Coastguard Worker
1190*333d2b36SAndroid Build Coastguard Workerprebuilt_bootclasspath_fragment {
1191*333d2b36SAndroid Build Coastguard Worker    name: "mybootclasspathfragment",
1192*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1193*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1194*333d2b36SAndroid Build Coastguard Worker    apex_available: ["myapex"],
1195*333d2b36SAndroid Build Coastguard Worker    contents: [
1196*333d2b36SAndroid Build Coastguard Worker        "mysdklibrary",
1197*333d2b36SAndroid Build Coastguard Worker        "mynewsdklibrary",
1198*333d2b36SAndroid Build Coastguard Worker    ],
1199*333d2b36SAndroid Build Coastguard Worker    hidden_api: {
1200*333d2b36SAndroid Build Coastguard Worker        annotation_flags: "hiddenapi/annotation-flags.csv",
1201*333d2b36SAndroid Build Coastguard Worker        metadata: "hiddenapi/metadata.csv",
1202*333d2b36SAndroid Build Coastguard Worker        index: "hiddenapi/index.csv",
1203*333d2b36SAndroid Build Coastguard Worker        signature_patterns: "hiddenapi/signature-patterns.csv",
1204*333d2b36SAndroid Build Coastguard Worker        filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
1205*333d2b36SAndroid Build Coastguard Worker        filtered_flags: "hiddenapi/filtered-flags.csv",
1206*333d2b36SAndroid Build Coastguard Worker    },
1207*333d2b36SAndroid Build Coastguard Worker}
1208*333d2b36SAndroid Build Coastguard Worker
1209*333d2b36SAndroid Build Coastguard Workerjava_sdk_library_import {
1210*333d2b36SAndroid Build Coastguard Worker    name: "mysdklibrary",
1211*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1212*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1213*333d2b36SAndroid Build Coastguard Worker    apex_available: ["myapex"],
1214*333d2b36SAndroid Build Coastguard Worker    shared_library: false,
1215*333d2b36SAndroid Build Coastguard Worker    public: {
1216*333d2b36SAndroid Build Coastguard Worker        jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1217*333d2b36SAndroid Build Coastguard Worker        stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1218*333d2b36SAndroid Build Coastguard Worker        current_api: "sdk_library/public/mysdklibrary.txt",
1219*333d2b36SAndroid Build Coastguard Worker        removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1220*333d2b36SAndroid Build Coastguard Worker        sdk_version: "current",
1221*333d2b36SAndroid Build Coastguard Worker    },
1222*333d2b36SAndroid Build Coastguard Worker}
1223*333d2b36SAndroid Build Coastguard Worker
1224*333d2b36SAndroid Build Coastguard Workerjava_sdk_library_import {
1225*333d2b36SAndroid Build Coastguard Worker    name: "mynewsdklibrary",
1226*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1227*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1228*333d2b36SAndroid Build Coastguard Worker    apex_available: ["myapex"],
1229*333d2b36SAndroid Build Coastguard Worker    shared_library: true,
1230*333d2b36SAndroid Build Coastguard Worker    compile_dex: true,
1231*333d2b36SAndroid Build Coastguard Worker    permitted_packages: ["mynewsdklibrary"],
1232*333d2b36SAndroid Build Coastguard Worker    public: {
1233*333d2b36SAndroid Build Coastguard Worker        jars: ["sdk_library/public/mynewsdklibrary-stubs.jar"],
1234*333d2b36SAndroid Build Coastguard Worker        stub_srcs: ["sdk_library/public/mynewsdklibrary_stub_sources"],
1235*333d2b36SAndroid Build Coastguard Worker        current_api: "sdk_library/public/mynewsdklibrary.txt",
1236*333d2b36SAndroid Build Coastguard Worker        removed_api: "sdk_library/public/mynewsdklibrary-removed.txt",
1237*333d2b36SAndroid Build Coastguard Worker        sdk_version: "current",
1238*333d2b36SAndroid Build Coastguard Worker    },
1239*333d2b36SAndroid Build Coastguard Worker}
1240*333d2b36SAndroid Build Coastguard Worker`
1241*333d2b36SAndroid Build Coastguard Worker		expectedCopyRules := `
1242*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1243*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
1244*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
1245*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
1246*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
1247*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
1248*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1249*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1250*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
1251*333d2b36SAndroid Build Coastguard Worker.intermediates/mynewsdklibrary.stubs.exportable/android_common/combined/mynewsdklibrary.stubs.exportable.jar -> sdk_library/public/mynewsdklibrary-stubs.jar
1252*333d2b36SAndroid Build Coastguard Worker.intermediates/mynewsdklibrary.stubs.source/android_common/exportable/mynewsdklibrary.stubs.source_api.txt -> sdk_library/public/mynewsdklibrary.txt
1253*333d2b36SAndroid Build Coastguard Worker.intermediates/mynewsdklibrary.stubs.source/android_common/exportable/mynewsdklibrary.stubs.source_removed.txt -> sdk_library/public/mynewsdklibrary-removed.txt
1254*333d2b36SAndroid Build Coastguard Worker`
1255*333d2b36SAndroid Build Coastguard Worker
1256*333d2b36SAndroid Build Coastguard Worker		// On tiramisu the stub flags should be generated from both mynewsdklibrary and mysdklibrary as
1257*333d2b36SAndroid Build Coastguard Worker		// they are both part of the snapshot.
1258*333d2b36SAndroid Build Coastguard Worker		expectedStubFlagsInputs := []string{
1259*333d2b36SAndroid Build Coastguard Worker			"out/soong/.intermediates/mynewsdklibrary.stubs.exportable/android_common/dex/mynewsdklibrary.stubs.exportable.jar",
1260*333d2b36SAndroid Build Coastguard Worker			"out/soong/.intermediates/mynewsdklibrary.impl/android_common/aligned/mynewsdklibrary.jar",
1261*333d2b36SAndroid Build Coastguard Worker			"out/soong/.intermediates/mysdklibrary.stubs.exportable/android_common/dex/mysdklibrary.stubs.exportable.jar",
1262*333d2b36SAndroid Build Coastguard Worker			"out/soong/.intermediates/mysdklibrary.impl/android_common/aligned/mysdklibrary.jar",
1263*333d2b36SAndroid Build Coastguard Worker		}
1264*333d2b36SAndroid Build Coastguard Worker
1265*333d2b36SAndroid Build Coastguard Worker		testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "Tiramisu",
1266*333d2b36SAndroid Build Coastguard Worker			expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "")
1267*333d2b36SAndroid Build Coastguard Worker	})
1268*333d2b36SAndroid Build Coastguard Worker}
1269*333d2b36SAndroid Build Coastguard Worker
1270*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithEmptyBootClasspathFragment(t *testing.T) {
1271*333d2b36SAndroid Build Coastguard Worker	result := android.GroupFixturePreparers(
1272*333d2b36SAndroid Build Coastguard Worker		prepareForSdkTestWithJava,
1273*333d2b36SAndroid Build Coastguard Worker		java.PrepareForTestWithJavaDefaultModules,
1274*333d2b36SAndroid Build Coastguard Worker		java.PrepareForTestWithJavaSdkLibraryFiles,
1275*333d2b36SAndroid Build Coastguard Worker		java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
1276*333d2b36SAndroid Build Coastguard Worker		java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
1277*333d2b36SAndroid Build Coastguard Worker		prepareForSdkTestWithApex,
1278*333d2b36SAndroid Build Coastguard Worker		// Add a platform_bootclasspath that depends on the fragment.
1279*333d2b36SAndroid Build Coastguard Worker		fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
1280*333d2b36SAndroid Build Coastguard Worker		android.FixtureMergeEnv(map[string]string{
1281*333d2b36SAndroid Build Coastguard Worker			"SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
1282*333d2b36SAndroid Build Coastguard Worker		}),
1283*333d2b36SAndroid Build Coastguard Worker		android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
1284*333d2b36SAndroid Build Coastguard Worker			variables.Platform_version_active_codenames = []string{"VanillaIceCream"}
1285*333d2b36SAndroid Build Coastguard Worker		}),
1286*333d2b36SAndroid Build Coastguard Worker		android.FixtureWithRootAndroidBp(`
1287*333d2b36SAndroid Build Coastguard Worker			sdk {
1288*333d2b36SAndroid Build Coastguard Worker				name: "mysdk",
1289*333d2b36SAndroid Build Coastguard Worker				apexes: ["myapex"],
1290*333d2b36SAndroid Build Coastguard Worker			}
1291*333d2b36SAndroid Build Coastguard Worker			apex {
1292*333d2b36SAndroid Build Coastguard Worker				name: "myapex",
1293*333d2b36SAndroid Build Coastguard Worker				key: "myapex.key",
1294*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "S",
1295*333d2b36SAndroid Build Coastguard Worker				bootclasspath_fragments: ["mybootclasspathfragment"],
1296*333d2b36SAndroid Build Coastguard Worker			}
1297*333d2b36SAndroid Build Coastguard Worker			bootclasspath_fragment {
1298*333d2b36SAndroid Build Coastguard Worker				name: "mybootclasspathfragment",
1299*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
1300*333d2b36SAndroid Build Coastguard Worker				contents: ["mysdklibrary", "mynewsdklibrary"],
1301*333d2b36SAndroid Build Coastguard Worker				hidden_api: {
1302*333d2b36SAndroid Build Coastguard Worker					split_packages: [],
1303*333d2b36SAndroid Build Coastguard Worker				},
1304*333d2b36SAndroid Build Coastguard Worker			}
1305*333d2b36SAndroid Build Coastguard Worker			java_sdk_library {
1306*333d2b36SAndroid Build Coastguard Worker				name: "mysdklibrary",
1307*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
1308*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
1309*333d2b36SAndroid Build Coastguard Worker				shared_library: false,
1310*333d2b36SAndroid Build Coastguard Worker				public: {enabled: true},
1311*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "Tiramisu",
1312*333d2b36SAndroid Build Coastguard Worker				sdk_version: "current",
1313*333d2b36SAndroid Build Coastguard Worker			}
1314*333d2b36SAndroid Build Coastguard Worker			java_sdk_library {
1315*333d2b36SAndroid Build Coastguard Worker				name: "mynewsdklibrary",
1316*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
1317*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
1318*333d2b36SAndroid Build Coastguard Worker				compile_dex: true,
1319*333d2b36SAndroid Build Coastguard Worker				public: {enabled: true},
1320*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "Tiramisu",
1321*333d2b36SAndroid Build Coastguard Worker				permitted_packages: ["mynewsdklibrary"],
1322*333d2b36SAndroid Build Coastguard Worker				sdk_version: "current",
1323*333d2b36SAndroid Build Coastguard Worker			}
1324*333d2b36SAndroid Build Coastguard Worker		`),
1325*333d2b36SAndroid Build Coastguard Worker	).RunTest(t)
1326*333d2b36SAndroid Build Coastguard Worker
1327*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(`// This is auto-generated. DO NOT EDIT.`))
1328*333d2b36SAndroid Build Coastguard Worker}
1329