blob: 1d2ab4218db6358b642c08050f51b28894d59ae6 [file] [log] [blame]
Paul Duffinf7f65da2021-03-10 15:00:46 +00001// Copyright (C) 2021 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package sdk
16
Paul Duffin4a1d4512021-03-18 10:12:26 +000017import (
Paul Duffin7c475152021-06-09 16:17:58 +010018 "fmt"
19 "path/filepath"
Paul Duffin4a1d4512021-03-18 10:12:26 +000020 "testing"
21
22 "android/soong/android"
Paul Duffina57835e2021-04-19 13:23:06 +010023 "android/soong/java"
Paul Duffin4a1d4512021-03-18 10:12:26 +000024)
Paul Duffinf7f65da2021-03-10 15:00:46 +000025
Paul Duffin7c475152021-06-09 16:17:58 +010026// fixtureAddPlatformBootclasspathForBootclasspathFragment adds a platform_bootclasspath module that
27// references the bootclasspath fragment.
28func fixtureAddPlatformBootclasspathForBootclasspathFragment(apex, fragment string) android.FixturePreparer {
29 return android.GroupFixturePreparers(
30 // Add a platform_bootclasspath module.
31 android.FixtureAddTextFile("frameworks/base/boot/Android.bp", fmt.Sprintf(`
32 platform_bootclasspath {
33 name: "platform-bootclasspath",
34 fragments: [
35 {
36 apex: "%s",
37 module: "%s",
38 },
39 ],
40 }
41 `, apex, fragment)),
42 android.FixtureAddFile("frameworks/base/config/boot-profile.txt", nil),
Paul Duffinc8ead412021-06-07 19:28:15 +010043 android.FixtureAddFile("build/soong/scripts/check_boot_jars/package_allowed_list.txt", nil),
Paul Duffin7c475152021-06-09 16:17:58 +010044 )
45}
46
47// fixtureAddPrebuiltApexForBootclasspathFragment adds a prebuilt_apex that exports the fragment.
48func fixtureAddPrebuiltApexForBootclasspathFragment(apex, fragment string) android.FixturePreparer {
49 apexFile := fmt.Sprintf("%s.apex", apex)
50 dir := "prebuilts/apex"
51 return android.GroupFixturePreparers(
52 // A preparer to add a prebuilt apex to the test fixture.
53 android.FixtureAddTextFile(filepath.Join(dir, "Android.bp"), fmt.Sprintf(`
54 prebuilt_apex {
55 name: "%s",
56 src: "%s",
57 exported_bootclasspath_fragments: [
58 "%s",
59 ],
60 }
61 `, apex, apexFile, fragment)),
62 android.FixtureAddFile(filepath.Join(dir, apexFile), nil),
63 )
64}
65
Paul Duffina57835e2021-04-19 13:23:06 +010066func TestSnapshotWithBootclasspathFragment_ImageName(t *testing.T) {
67 result := android.GroupFixturePreparers(
68 prepareForSdkTestWithJava,
Paul Duffin023dba02021-04-22 01:45:29 +010069 java.PrepareForTestWithJavaDefaultModules,
Paul Duffina57835e2021-04-19 13:23:06 +010070 prepareForSdkTestWithApex,
71
72 // Some additional files needed for the art apex.
73 android.FixtureMergeMockFs(android.MockFS{
74 "com.android.art.avbpubkey": nil,
75 "com.android.art.pem": nil,
76 "system/sepolicy/apex/com.android.art-file_contexts": nil,
77 }),
Paul Duffin023dba02021-04-22 01:45:29 +010078
Paul Duffin7c475152021-06-09 16:17:58 +010079 // Add a platform_bootclasspath that depends on the fragment.
80 fixtureAddPlatformBootclasspathForBootclasspathFragment("com.android.art", "mybootclasspathfragment"),
Paul Duffin023dba02021-04-22 01:45:29 +010081
Paul Duffina57835e2021-04-19 13:23:06 +010082 java.FixtureConfigureBootJars("com.android.art:mybootlib"),
83 android.FixtureWithRootAndroidBp(`
84 sdk {
85 name: "mysdk",
86 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffina57835e2021-04-19 13:23:06 +010087 }
88
89 apex {
90 name: "com.android.art",
91 key: "com.android.art.key",
92 bootclasspath_fragments: [
93 "mybootclasspathfragment",
94 ],
95 updatable: false,
96 }
97
98 bootclasspath_fragment {
99 name: "mybootclasspathfragment",
100 image_name: "art",
Paul Duffinf23bc472021-04-27 12:42:20 +0100101 contents: ["mybootlib"],
Paul Duffina57835e2021-04-19 13:23:06 +0100102 apex_available: ["com.android.art"],
103 }
104
105 apex_key {
106 name: "com.android.art.key",
107 public_key: "com.android.art.avbpubkey",
108 private_key: "com.android.art.pem",
109 }
110
111 java_library {
112 name: "mybootlib",
113 srcs: ["Test.java"],
114 system_modules: "none",
115 sdk_version: "none",
116 compile_dex: true,
117 apex_available: ["com.android.art"],
118 }
119 `),
120 ).RunTest(t)
121
Paul Duffin7c475152021-06-09 16:17:58 +0100122 // A preparer to update the test fixture used when processing an unpackage snapshot.
123 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("com.android.art", "mybootclasspathfragment")
Paul Duffin023dba02021-04-22 01:45:29 +0100124
Paul Duffina57835e2021-04-19 13:23:06 +0100125 CheckSnapshot(t, result, "mysdk", "",
126 checkUnversionedAndroidBpContents(`
127// This is auto-generated. DO NOT EDIT.
128
129prebuilt_bootclasspath_fragment {
130 name: "mybootclasspathfragment",
131 prefer: false,
132 visibility: ["//visibility:public"],
133 apex_available: ["com.android.art"],
134 image_name: "art",
Paul Duffin2dc665b2021-04-23 16:58:51 +0100135 contents: ["mybootlib"],
Paul Duffina57835e2021-04-19 13:23:06 +0100136}
137
138java_import {
139 name: "mybootlib",
140 prefer: false,
141 visibility: ["//visibility:public"],
142 apex_available: ["com.android.art"],
143 jars: ["java/mybootlib.jar"],
144}
145`),
146 checkVersionedAndroidBpContents(`
147// This is auto-generated. DO NOT EDIT.
148
149prebuilt_bootclasspath_fragment {
150 name: "mysdk_mybootclasspathfragment@current",
151 sdk_member_name: "mybootclasspathfragment",
152 visibility: ["//visibility:public"],
153 apex_available: ["com.android.art"],
154 image_name: "art",
Paul Duffin2dc665b2021-04-23 16:58:51 +0100155 contents: ["mysdk_mybootlib@current"],
Paul Duffina57835e2021-04-19 13:23:06 +0100156}
157
158java_import {
159 name: "mysdk_mybootlib@current",
160 sdk_member_name: "mybootlib",
161 visibility: ["//visibility:public"],
162 apex_available: ["com.android.art"],
163 jars: ["java/mybootlib.jar"],
164}
165
166sdk_snapshot {
167 name: "mysdk@current",
168 visibility: ["//visibility:public"],
169 bootclasspath_fragments: ["mysdk_mybootclasspathfragment@current"],
170 java_boot_libs: ["mysdk_mybootlib@current"],
171}
172`),
173 checkAllCopyRules(`
174.intermediates/mybootlib/android_common/javac/mybootlib.jar -> java/mybootlib.jar
175`),
Paul Duffin7c475152021-06-09 16:17:58 +0100176 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffinc8ead412021-06-07 19:28:15 +0100177
178 // Check the behavior of the snapshot without the source.
179 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
180 // Make sure that the boot jars package check rule includes the dex jar retrieved from the prebuilt apex.
181 checkBootJarsPackageCheckRule(t, result, "out/soong/.intermediates/prebuilts/apex/com.android.art.deapexer/android_common/deapexer/javalib/mybootlib.jar")
182 }),
183
Paul Duffin7c475152021-06-09 16:17:58 +0100184 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
185 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffina57835e2021-04-19 13:23:06 +0100186 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100187
188 // Make sure that the boot jars package check rule includes the dex jar created from the source.
189 checkBootJarsPackageCheckRule(t, result, "out/soong/.intermediates/mybootlib/android_common_apex10000/aligned/mybootlib.jar")
190}
191
192// checkBootJarsPackageCheckRule checks that the supplied module is an input to the boot jars
193// package check rule.
194func checkBootJarsPackageCheckRule(t *testing.T, result *android.TestResult, expectedModule string) {
195 platformBcp := result.ModuleForTests("platform-bootclasspath", "android_common")
196 bootJarsCheckRule := platformBcp.Rule("boot_jars_package_check")
197 command := bootJarsCheckRule.RuleParams.Command
198 expectedCommandArgs := " out/soong/host/linux-x86/bin/dexdump build/soong/scripts/check_boot_jars/package_allowed_list.txt " + expectedModule + " &&"
199 android.AssertStringDoesContain(t, "boot jars package check", command, expectedCommandArgs)
Paul Duffina57835e2021-04-19 13:23:06 +0100200}
201
202func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
Paul Duffin4a1d4512021-03-18 10:12:26 +0000203 result := android.GroupFixturePreparers(
204 prepareForSdkTestWithJava,
Paul Duffin895c7142021-04-25 13:40:15 +0100205 java.PrepareForTestWithJavaDefaultModules,
206 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100207 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary", "mycoreplatform"),
Paul Duffin7c475152021-06-09 16:17:58 +0100208 java.FixtureConfigureUpdatableBootJars("myapex:mybootlib", "myapex:myothersdklibrary"),
209 prepareForSdkTestWithApex,
210
211 // Add a platform_bootclasspath that depends on the fragment.
212 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
213
Paul Duffin4a1d4512021-03-18 10:12:26 +0000214 android.FixtureWithRootAndroidBp(`
215 sdk {
216 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100217 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100218 java_sdk_libs: [
219 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
220 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
221 // api.stub_libs property. However, it is specified here to ensure that duplicates are
222 // correctly deduped.
223 "mysdklibrary",
224 ],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000225 }
Paul Duffinf7f65da2021-03-10 15:00:46 +0000226
Paul Duffin7c475152021-06-09 16:17:58 +0100227 apex {
228 name: "myapex",
229 key: "myapex.key",
230 min_sdk_version: "2",
231 bootclasspath_fragments: ["mybootclasspathfragment"],
232 }
233
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100234 bootclasspath_fragment {
235 name: "mybootclasspathfragment",
Paul Duffin7c475152021-06-09 16:17:58 +0100236 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100237 contents: [
238 // This should be automatically added to the sdk_snapshot as a java_boot_libs module.
239 "mybootlib",
240 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
241 "myothersdklibrary",
242 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100243 api: {
244 stub_libs: ["mysdklibrary"],
245 },
246 core_platform_api: {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100247 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
Paul Duffin895c7142021-04-25 13:40:15 +0100248 stub_libs: ["mycoreplatform"],
249 },
Paul Duffina57835e2021-04-19 13:23:06 +0100250 }
251
252 java_library {
253 name: "mybootlib",
Paul Duffin7c475152021-06-09 16:17:58 +0100254 apex_available: ["myapex"],
Paul Duffina57835e2021-04-19 13:23:06 +0100255 srcs: ["Test.java"],
256 system_modules: "none",
257 sdk_version: "none",
Paul Duffin7c475152021-06-09 16:17:58 +0100258 min_sdk_version: "2",
Paul Duffina57835e2021-04-19 13:23:06 +0100259 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100260 permitted_packages: ["mybootlib"],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000261 }
Paul Duffin895c7142021-04-25 13:40:15 +0100262
263 java_sdk_library {
264 name: "mysdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100265 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100266 srcs: ["Test.java"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100267 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100268 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100269 min_sdk_version: "2",
Paul Duffin895c7142021-04-25 13:40:15 +0100270 }
271
272 java_sdk_library {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100273 name: "myothersdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100274 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100275 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100276 compile_dex: true,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100277 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100278 min_sdk_version: "2",
279 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100280 }
281
282 java_sdk_library {
Paul Duffin895c7142021-04-25 13:40:15 +0100283 name: "mycoreplatform",
Paul Duffin7c475152021-06-09 16:17:58 +0100284 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100285 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100286 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100287 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100288 min_sdk_version: "2",
Paul Duffin895c7142021-04-25 13:40:15 +0100289 }
Paul Duffin4a1d4512021-03-18 10:12:26 +0000290 `),
291 ).RunTest(t)
Paul Duffinf7f65da2021-03-10 15:00:46 +0000292
Paul Duffin7c475152021-06-09 16:17:58 +0100293 // A preparer to update the test fixture used when processing an unpackage snapshot.
294 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
295
Paul Duffin36474d32021-03-12 12:19:43 +0000296 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000297 checkUnversionedAndroidBpContents(`
298// This is auto-generated. DO NOT EDIT.
299
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100300prebuilt_bootclasspath_fragment {
301 name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000302 prefer: false,
303 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100304 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100305 contents: [
306 "mybootlib",
307 "myothersdklibrary",
308 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100309 api: {
310 stub_libs: ["mysdklibrary"],
311 },
312 core_platform_api: {
313 stub_libs: ["mycoreplatform"],
314 },
Paul Duffin2fef1362021-04-15 13:32:00 +0100315 hidden_api: {
316 stub_flags: "hiddenapi/stub-flags.csv",
317 annotation_flags: "hiddenapi/annotation-flags.csv",
318 metadata: "hiddenapi/metadata.csv",
319 index: "hiddenapi/index.csv",
320 all_flags: "hiddenapi/all-flags.csv",
321 },
Paul Duffina57835e2021-04-19 13:23:06 +0100322}
323
324java_import {
325 name: "mybootlib",
326 prefer: false,
327 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100328 apex_available: ["myapex"],
Paul Duffina57835e2021-04-19 13:23:06 +0100329 jars: ["java/mybootlib.jar"],
Paul Duffin869de142021-07-15 14:14:41 +0100330 permitted_packages: ["mybootlib"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000331}
Paul Duffin895c7142021-04-25 13:40:15 +0100332
333java_sdk_library_import {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100334 name: "myothersdklibrary",
335 prefer: false,
336 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100337 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100338 shared_library: true,
339 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100340 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100341 public: {
342 jars: ["sdk_library/public/myothersdklibrary-stubs.jar"],
343 stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"],
344 current_api: "sdk_library/public/myothersdklibrary.txt",
345 removed_api: "sdk_library/public/myothersdklibrary-removed.txt",
346 sdk_version: "current",
347 },
348}
349
350java_sdk_library_import {
Paul Duffin895c7142021-04-25 13:40:15 +0100351 name: "mysdklibrary",
352 prefer: false,
353 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100354 apex_available: ["myapex"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100355 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100356 public: {
357 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
358 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
359 current_api: "sdk_library/public/mysdklibrary.txt",
360 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
361 sdk_version: "current",
362 },
363}
364
365java_sdk_library_import {
366 name: "mycoreplatform",
367 prefer: false,
368 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100369 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100370 shared_library: true,
371 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100372 public: {
373 jars: ["sdk_library/public/mycoreplatform-stubs.jar"],
374 stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"],
375 current_api: "sdk_library/public/mycoreplatform.txt",
376 removed_api: "sdk_library/public/mycoreplatform-removed.txt",
377 sdk_version: "current",
378 },
379}
Paul Duffina10bd3c2021-05-12 13:46:54 +0100380 `),
Paul Duffinf7f65da2021-03-10 15:00:46 +0000381 checkVersionedAndroidBpContents(`
382// This is auto-generated. DO NOT EDIT.
383
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100384prebuilt_bootclasspath_fragment {
385 name: "mysdk_mybootclasspathfragment@current",
386 sdk_member_name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000387 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100388 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100389 contents: [
390 "mysdk_mybootlib@current",
391 "mysdk_myothersdklibrary@current",
392 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100393 api: {
394 stub_libs: ["mysdk_mysdklibrary@current"],
395 },
396 core_platform_api: {
397 stub_libs: ["mysdk_mycoreplatform@current"],
398 },
Paul Duffin2fef1362021-04-15 13:32:00 +0100399 hidden_api: {
400 stub_flags: "hiddenapi/stub-flags.csv",
401 annotation_flags: "hiddenapi/annotation-flags.csv",
402 metadata: "hiddenapi/metadata.csv",
403 index: "hiddenapi/index.csv",
404 all_flags: "hiddenapi/all-flags.csv",
405 },
Paul Duffina57835e2021-04-19 13:23:06 +0100406}
407
408java_import {
409 name: "mysdk_mybootlib@current",
410 sdk_member_name: "mybootlib",
411 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100412 apex_available: ["myapex"],
Paul Duffina57835e2021-04-19 13:23:06 +0100413 jars: ["java/mybootlib.jar"],
Paul Duffin869de142021-07-15 14:14:41 +0100414 permitted_packages: ["mybootlib"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000415}
416
Paul Duffin895c7142021-04-25 13:40:15 +0100417java_sdk_library_import {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100418 name: "mysdk_myothersdklibrary@current",
419 sdk_member_name: "myothersdklibrary",
420 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100421 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100422 shared_library: true,
423 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100424 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100425 public: {
426 jars: ["sdk_library/public/myothersdklibrary-stubs.jar"],
427 stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"],
428 current_api: "sdk_library/public/myothersdklibrary.txt",
429 removed_api: "sdk_library/public/myothersdklibrary-removed.txt",
430 sdk_version: "current",
431 },
432}
433
434java_sdk_library_import {
Paul Duffin895c7142021-04-25 13:40:15 +0100435 name: "mysdk_mysdklibrary@current",
436 sdk_member_name: "mysdklibrary",
437 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100438 apex_available: ["myapex"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100439 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100440 public: {
441 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
442 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
443 current_api: "sdk_library/public/mysdklibrary.txt",
444 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
445 sdk_version: "current",
446 },
447}
448
449java_sdk_library_import {
450 name: "mysdk_mycoreplatform@current",
451 sdk_member_name: "mycoreplatform",
452 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100453 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100454 shared_library: true,
455 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100456 public: {
457 jars: ["sdk_library/public/mycoreplatform-stubs.jar"],
458 stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"],
459 current_api: "sdk_library/public/mycoreplatform.txt",
460 removed_api: "sdk_library/public/mycoreplatform-removed.txt",
461 sdk_version: "current",
462 },
463}
464
Paul Duffinf7f65da2021-03-10 15:00:46 +0000465sdk_snapshot {
466 name: "mysdk@current",
467 visibility: ["//visibility:public"],
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100468 bootclasspath_fragments: ["mysdk_mybootclasspathfragment@current"],
Paul Duffina57835e2021-04-19 13:23:06 +0100469 java_boot_libs: ["mysdk_mybootlib@current"],
Paul Duffin895c7142021-04-25 13:40:15 +0100470 java_sdk_libs: [
Paul Duffina10bd3c2021-05-12 13:46:54 +0100471 "mysdk_myothersdklibrary@current",
Paul Duffin895c7142021-04-25 13:40:15 +0100472 "mysdk_mysdklibrary@current",
473 "mysdk_mycoreplatform@current",
474 ],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000475}
Paul Duffina10bd3c2021-05-12 13:46:54 +0100476 `),
Paul Duffina57835e2021-04-19 13:23:06 +0100477 checkAllCopyRules(`
Paul Duffin2fef1362021-04-15 13:32:00 +0100478.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/stub-flags.csv -> hiddenapi/stub-flags.csv
479.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
480.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
481.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
482.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/all-flags.csv -> hiddenapi/all-flags.csv
Paul Duffina57835e2021-04-19 13:23:06 +0100483.intermediates/mybootlib/android_common/javac/mybootlib.jar -> java/mybootlib.jar
Paul Duffina10bd3c2021-05-12 13:46:54 +0100484.intermediates/myothersdklibrary.stubs/android_common/javac/myothersdklibrary.stubs.jar -> sdk_library/public/myothersdklibrary-stubs.jar
485.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
486.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
Paul Duffin895c7142021-04-25 13:40:15 +0100487.intermediates/mysdklibrary.stubs/android_common/javac/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
488.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
489.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
490.intermediates/mycoreplatform.stubs/android_common/javac/mycoreplatform.stubs.jar -> sdk_library/public/mycoreplatform-stubs.jar
491.intermediates/mycoreplatform.stubs.source/android_common/metalava/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
492.intermediates/mycoreplatform.stubs.source/android_common/metalava/mycoreplatform.stubs.source_removed.txt -> sdk_library/public/mycoreplatform-removed.txt
Paul Duffin7c475152021-06-09 16:17:58 +0100493`),
494 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffind061d402021-06-07 21:36:01 +0100495 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
496 module := result.ModuleForTests("platform-bootclasspath", "android_common")
497 var rule android.TestingBuildParams
498 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv")
499 java.CheckHiddenAPIRuleInputs(t, "monolithic flags", `
500 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/annotation-flags-from-classes.csv
501 out/soong/hiddenapi/hiddenapi-stub-flags.txt
502 snapshot/hiddenapi/annotation-flags.csv
503 `, rule)
504
505 rule = module.Output("out/soong/hiddenapi/hiddenapi-unsupported.csv")
506 java.CheckHiddenAPIRuleInputs(t, "monolithic metadata", `
507 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/metadata-from-classes.csv
508 snapshot/hiddenapi/metadata.csv
509 `, rule)
510
511 rule = module.Output("out/soong/hiddenapi/hiddenapi-index.csv")
512 java.CheckHiddenAPIRuleInputs(t, "monolithic index", `
513 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
514 snapshot/hiddenapi/index.csv
515 `, rule)
Paul Duffin630b11e2021-07-15 13:35:26 +0100516
517 // Make sure that the permitted packages from the prebuilts end up in the
518 // updatable-bcp-packages.txt file.
519 rule = module.Output("updatable-bcp-packages.txt")
520 expectedContents := `'mybootlib\nmyothersdklibrary\n'`
521 android.AssertStringEquals(t, "updatable-bcp-packages.txt", expectedContents, rule.Args["content"])
Paul Duffind061d402021-06-07 21:36:01 +0100522 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100523 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
524 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
525 )
Paul Duffinf7f65da2021-03-10 15:00:46 +0000526}
Paul Duffin04b4a192021-03-18 11:05:31 +0000527
Paul Duffin51227d82021-05-18 12:54:27 +0100528// TestSnapshotWithBootClasspathFragment_Fragments makes sure that the fragments property of a
529// bootclasspath_fragment is correctly output to the sdk snapshot.
530func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) {
531 result := android.GroupFixturePreparers(
532 prepareForSdkTestWithJava,
533 java.PrepareForTestWithJavaDefaultModules,
534 java.PrepareForTestWithJavaSdkLibraryFiles,
535 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary"),
536 prepareForSdkTestWithApex,
537
538 // Some additional files needed for the myotherapex.
539 android.FixtureMergeMockFs(android.MockFS{
540 "system/sepolicy/apex/myotherapex-file_contexts": nil,
541 "myotherapex/apex_manifest.json": nil,
542 "myotherapex/Test.java": nil,
543 }),
544
545 android.FixtureAddTextFile("myotherapex/Android.bp", `
546 apex {
547 name: "myotherapex",
548 key: "myapex.key",
549 min_sdk_version: "2",
550 bootclasspath_fragments: ["myotherbootclasspathfragment"],
551 }
552
553 bootclasspath_fragment {
554 name: "myotherbootclasspathfragment",
555 apex_available: ["myotherapex"],
556 contents: [
557 "myotherlib",
558 ],
559 }
560
561 java_library {
562 name: "myotherlib",
563 apex_available: ["myotherapex"],
564 srcs: ["Test.java"],
565 min_sdk_version: "2",
566 permitted_packages: ["myothersdklibrary"],
567 compile_dex: true,
568 }
569 `),
570
571 android.FixtureWithRootAndroidBp(`
572 sdk {
573 name: "mysdk",
574 bootclasspath_fragments: ["mybootclasspathfragment"],
575 }
576
577 bootclasspath_fragment {
578 name: "mybootclasspathfragment",
579 contents: [
580 "mysdklibrary",
581 ],
582 fragments: [
583 {
584 apex: "myotherapex",
585 module: "myotherbootclasspathfragment"
586 },
587 ],
588 }
589
590 java_sdk_library {
591 name: "mysdklibrary",
592 srcs: ["Test.java"],
593 shared_library: false,
594 public: {enabled: true},
595 min_sdk_version: "2",
596 }
597 `),
598 ).RunTest(t)
599
600 // A preparer to update the test fixture used when processing an unpackage snapshot.
601 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
602
603 CheckSnapshot(t, result, "mysdk", "",
604 checkUnversionedAndroidBpContents(`
605// This is auto-generated. DO NOT EDIT.
606
607prebuilt_bootclasspath_fragment {
608 name: "mybootclasspathfragment",
609 prefer: false,
610 visibility: ["//visibility:public"],
611 apex_available: ["//apex_available:platform"],
612 contents: ["mysdklibrary"],
613 fragments: [
614 {
615 apex: "myotherapex",
616 module: "myotherbootclasspathfragment",
617 },
618 ],
619 hidden_api: {
620 stub_flags: "hiddenapi/stub-flags.csv",
621 annotation_flags: "hiddenapi/annotation-flags.csv",
622 metadata: "hiddenapi/metadata.csv",
623 index: "hiddenapi/index.csv",
624 all_flags: "hiddenapi/all-flags.csv",
625 },
626}
627
628java_sdk_library_import {
629 name: "mysdklibrary",
630 prefer: false,
631 visibility: ["//visibility:public"],
632 apex_available: ["//apex_available:platform"],
633 shared_library: false,
634 public: {
635 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
636 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
637 current_api: "sdk_library/public/mysdklibrary.txt",
638 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
639 sdk_version: "current",
640 },
641}
642 `),
643 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
644 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
645 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
646 )
647}
648
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100649// Test that bootclasspath_fragment works with sdk.
650func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
Paul Duffin04b4a192021-03-18 11:05:31 +0000651 android.GroupFixturePreparers(
652 prepareForSdkTestWithApex,
653 prepareForSdkTestWithJava,
Paul Duffin8018e502021-05-21 19:28:09 +0100654 android.FixtureAddFile("java/mybootlib.jar", nil),
Paul Duffin04b4a192021-03-18 11:05:31 +0000655 android.FixtureWithRootAndroidBp(`
656 sdk {
657 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100658 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000659 }
660
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100661 bootclasspath_fragment {
662 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000663 image_name: "art",
Paul Duffin8018e502021-05-21 19:28:09 +0100664 contents: ["mybootlib"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000665 apex_available: ["myapex"],
666 }
667
Paul Duffin8018e502021-05-21 19:28:09 +0100668 java_library {
669 name: "mybootlib",
670 apex_available: ["myapex"],
671 srcs: ["Test.java"],
672 system_modules: "none",
673 sdk_version: "none",
674 min_sdk_version: "1",
675 compile_dex: true,
676 }
677
Paul Duffin04b4a192021-03-18 11:05:31 +0000678 sdk_snapshot {
679 name: "mysdk@1",
Paul Duffin8018e502021-05-21 19:28:09 +0100680 bootclasspath_fragments: ["mysdk_mybootclasspathfragment@1"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000681 }
682
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100683 prebuilt_bootclasspath_fragment {
Paul Duffin8018e502021-05-21 19:28:09 +0100684 name: "mysdk_mybootclasspathfragment@1",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100685 sdk_member_name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000686 prefer: false,
687 visibility: ["//visibility:public"],
688 apex_available: [
689 "myapex",
690 ],
691 image_name: "art",
Paul Duffin8018e502021-05-21 19:28:09 +0100692 contents: ["mysdk_mybootlib@1"],
693 }
694
695 java_import {
696 name: "mysdk_mybootlib@1",
697 sdk_member_name: "mybootlib",
698 visibility: ["//visibility:public"],
699 apex_available: ["com.android.art"],
700 jars: ["java/mybootlib.jar"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000701 }
702 `),
703 ).RunTest(t)
704}
Paul Duffin7c955552021-04-19 13:23:53 +0100705
706func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
707 result := android.GroupFixturePreparers(
708 prepareForSdkTestWithJava,
Paul Duffin475daaf2021-05-13 00:57:55 +0100709 java.PrepareForTestWithJavaDefaultModules,
710 java.PrepareForTestWithJavaSdkLibraryFiles,
711 java.FixtureWithLastReleaseApis("mysdklibrary"),
Paul Duffin7c475152021-06-09 16:17:58 +0100712 java.FixtureConfigureUpdatableBootJars("myapex:mybootlib"),
Paul Duffin475daaf2021-05-13 00:57:55 +0100713 prepareForSdkTestWithApex,
Paul Duffin7c475152021-06-09 16:17:58 +0100714
715 // Add a platform_bootclasspath that depends on the fragment.
716 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
717
Paul Duffin7c955552021-04-19 13:23:53 +0100718 android.MockFS{
719 "my-blocked.txt": nil,
720 "my-max-target-o-low-priority.txt": nil,
721 "my-max-target-p.txt": nil,
722 "my-max-target-q.txt": nil,
723 "my-max-target-r-low-priority.txt": nil,
724 "my-removed.txt": nil,
725 "my-unsupported-packages.txt": nil,
726 "my-unsupported.txt": nil,
727 }.AddToFixture(),
728 android.FixtureWithRootAndroidBp(`
729 sdk {
730 name: "mysdk",
731 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin7c955552021-04-19 13:23:53 +0100732 }
733
Paul Duffin475daaf2021-05-13 00:57:55 +0100734 apex {
735 name: "myapex",
736 key: "myapex.key",
737 min_sdk_version: "1",
738 bootclasspath_fragments: ["mybootclasspathfragment"],
739 }
740
Paul Duffin7c955552021-04-19 13:23:53 +0100741 bootclasspath_fragment {
742 name: "mybootclasspathfragment",
Paul Duffin475daaf2021-05-13 00:57:55 +0100743 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100744 contents: ["mybootlib"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100745 api: {
746 stub_libs: ["mysdklibrary"],
747 },
Paul Duffin7c955552021-04-19 13:23:53 +0100748 hidden_api: {
749 unsupported: [
750 "my-unsupported.txt",
751 ],
752 removed: [
753 "my-removed.txt",
754 ],
755 max_target_r_low_priority: [
756 "my-max-target-r-low-priority.txt",
757 ],
758 max_target_q: [
759 "my-max-target-q.txt",
760 ],
761 max_target_p: [
762 "my-max-target-p.txt",
763 ],
764 max_target_o_low_priority: [
765 "my-max-target-o-low-priority.txt",
766 ],
767 blocked: [
768 "my-blocked.txt",
769 ],
770 unsupported_packages: [
771 "my-unsupported-packages.txt",
772 ],
773 },
774 }
775
776 java_library {
777 name: "mybootlib",
Paul Duffin475daaf2021-05-13 00:57:55 +0100778 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100779 srcs: ["Test.java"],
780 system_modules: "none",
781 sdk_version: "none",
Paul Duffin475daaf2021-05-13 00:57:55 +0100782 min_sdk_version: "1",
Paul Duffin7c955552021-04-19 13:23:53 +0100783 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100784 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100785 }
Paul Duffin475daaf2021-05-13 00:57:55 +0100786
787 java_sdk_library {
788 name: "mysdklibrary",
789 srcs: ["Test.java"],
790 compile_dex: true,
791 public: {enabled: true},
Paul Duffin869de142021-07-15 14:14:41 +0100792 permitted_packages: ["mysdklibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100793 }
Paul Duffin7c955552021-04-19 13:23:53 +0100794 `),
795 ).RunTest(t)
796
Paul Duffin7c475152021-06-09 16:17:58 +0100797 // A preparer to update the test fixture used when processing an unpackage snapshot.
798 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
799
Paul Duffin7c955552021-04-19 13:23:53 +0100800 CheckSnapshot(t, result, "mysdk", "",
801 checkUnversionedAndroidBpContents(`
802// This is auto-generated. DO NOT EDIT.
803
804prebuilt_bootclasspath_fragment {
805 name: "mybootclasspathfragment",
806 prefer: false,
807 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100808 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100809 contents: ["mybootlib"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100810 api: {
811 stub_libs: ["mysdklibrary"],
812 },
Paul Duffin7c955552021-04-19 13:23:53 +0100813 hidden_api: {
814 unsupported: ["hiddenapi/my-unsupported.txt"],
815 removed: ["hiddenapi/my-removed.txt"],
816 max_target_r_low_priority: ["hiddenapi/my-max-target-r-low-priority.txt"],
817 max_target_q: ["hiddenapi/my-max-target-q.txt"],
818 max_target_p: ["hiddenapi/my-max-target-p.txt"],
819 max_target_o_low_priority: ["hiddenapi/my-max-target-o-low-priority.txt"],
820 blocked: ["hiddenapi/my-blocked.txt"],
821 unsupported_packages: ["hiddenapi/my-unsupported-packages.txt"],
Paul Duffin2fef1362021-04-15 13:32:00 +0100822 stub_flags: "hiddenapi/stub-flags.csv",
823 annotation_flags: "hiddenapi/annotation-flags.csv",
824 metadata: "hiddenapi/metadata.csv",
825 index: "hiddenapi/index.csv",
826 all_flags: "hiddenapi/all-flags.csv",
Paul Duffin7c955552021-04-19 13:23:53 +0100827 },
828}
829
830java_import {
831 name: "mybootlib",
832 prefer: false,
833 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100834 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100835 jars: ["java/mybootlib.jar"],
Paul Duffin869de142021-07-15 14:14:41 +0100836 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100837}
Paul Duffin475daaf2021-05-13 00:57:55 +0100838
839java_sdk_library_import {
840 name: "mysdklibrary",
841 prefer: false,
842 visibility: ["//visibility:public"],
843 apex_available: ["//apex_available:platform"],
844 shared_library: true,
845 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100846 permitted_packages: ["mysdklibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100847 public: {
848 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
849 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
850 current_api: "sdk_library/public/mysdklibrary.txt",
851 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
852 sdk_version: "current",
853 },
854}
Paul Duffin7c955552021-04-19 13:23:53 +0100855`),
856 checkAllCopyRules(`
857my-unsupported.txt -> hiddenapi/my-unsupported.txt
858my-removed.txt -> hiddenapi/my-removed.txt
859my-max-target-r-low-priority.txt -> hiddenapi/my-max-target-r-low-priority.txt
860my-max-target-q.txt -> hiddenapi/my-max-target-q.txt
861my-max-target-p.txt -> hiddenapi/my-max-target-p.txt
862my-max-target-o-low-priority.txt -> hiddenapi/my-max-target-o-low-priority.txt
863my-blocked.txt -> hiddenapi/my-blocked.txt
864my-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
Paul Duffin2fef1362021-04-15 13:32:00 +0100865.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/stub-flags.csv -> hiddenapi/stub-flags.csv
866.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
867.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
868.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
869.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/all-flags.csv -> hiddenapi/all-flags.csv
Paul Duffin7c955552021-04-19 13:23:53 +0100870.intermediates/mybootlib/android_common/javac/mybootlib.jar -> java/mybootlib.jar
Paul Duffin475daaf2021-05-13 00:57:55 +0100871.intermediates/mysdklibrary.stubs/android_common/javac/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
872.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
873.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
Paul Duffin7c955552021-04-19 13:23:53 +0100874`),
Paul Duffin7c475152021-06-09 16:17:58 +0100875 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
876 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
877 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin7c955552021-04-19 13:23:53 +0100878 )
879}