blob: 93ad172ae060b2dffdd34fa9a47bbf15d3748f22 [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),
Jiakai Zhang49b1eb62021-11-26 18:09:27 +000043 android.FixtureAddFile("frameworks/base/config/boot-image-profile.txt", nil),
Paul Duffinc8ead412021-06-07 19:28:15 +010044 android.FixtureAddFile("build/soong/scripts/check_boot_jars/package_allowed_list.txt", nil),
Paul Duffin7c475152021-06-09 16:17:58 +010045 )
46}
47
48// fixtureAddPrebuiltApexForBootclasspathFragment adds a prebuilt_apex that exports the fragment.
49func fixtureAddPrebuiltApexForBootclasspathFragment(apex, fragment string) android.FixturePreparer {
50 apexFile := fmt.Sprintf("%s.apex", apex)
51 dir := "prebuilts/apex"
52 return android.GroupFixturePreparers(
53 // A preparer to add a prebuilt apex to the test fixture.
54 android.FixtureAddTextFile(filepath.Join(dir, "Android.bp"), fmt.Sprintf(`
55 prebuilt_apex {
56 name: "%s",
57 src: "%s",
58 exported_bootclasspath_fragments: [
59 "%s",
60 ],
61 }
62 `, apex, apexFile, fragment)),
63 android.FixtureAddFile(filepath.Join(dir, apexFile), nil),
64 )
65}
66
Paul Duffina57835e2021-04-19 13:23:06 +010067func TestSnapshotWithBootclasspathFragment_ImageName(t *testing.T) {
68 result := android.GroupFixturePreparers(
69 prepareForSdkTestWithJava,
Paul Duffin023dba02021-04-22 01:45:29 +010070 java.PrepareForTestWithJavaDefaultModules,
Paul Duffina57835e2021-04-19 13:23:06 +010071 prepareForSdkTestWithApex,
72
73 // Some additional files needed for the art apex.
74 android.FixtureMergeMockFs(android.MockFS{
75 "com.android.art.avbpubkey": nil,
76 "com.android.art.pem": nil,
77 "system/sepolicy/apex/com.android.art-file_contexts": nil,
78 }),
Paul Duffin023dba02021-04-22 01:45:29 +010079
Paul Duffin7c475152021-06-09 16:17:58 +010080 // Add a platform_bootclasspath that depends on the fragment.
81 fixtureAddPlatformBootclasspathForBootclasspathFragment("com.android.art", "mybootclasspathfragment"),
Paul Duffin023dba02021-04-22 01:45:29 +010082
Paul Duffina57835e2021-04-19 13:23:06 +010083 java.FixtureConfigureBootJars("com.android.art:mybootlib"),
84 android.FixtureWithRootAndroidBp(`
85 sdk {
86 name: "mysdk",
87 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffina57835e2021-04-19 13:23:06 +010088 }
89
90 apex {
91 name: "com.android.art",
92 key: "com.android.art.key",
93 bootclasspath_fragments: [
94 "mybootclasspathfragment",
95 ],
96 updatable: false,
97 }
98
99 bootclasspath_fragment {
100 name: "mybootclasspathfragment",
101 image_name: "art",
Paul Duffinf23bc472021-04-27 12:42:20 +0100102 contents: ["mybootlib"],
Paul Duffina57835e2021-04-19 13:23:06 +0100103 apex_available: ["com.android.art"],
Paul Duffin9fd56472022-03-31 15:42:30 +0100104 hidden_api: {
105 split_packages: ["*"],
106 },
Paul Duffina57835e2021-04-19 13:23:06 +0100107 }
108
109 apex_key {
110 name: "com.android.art.key",
111 public_key: "com.android.art.avbpubkey",
112 private_key: "com.android.art.pem",
113 }
114
115 java_library {
116 name: "mybootlib",
117 srcs: ["Test.java"],
118 system_modules: "none",
119 sdk_version: "none",
120 compile_dex: true,
121 apex_available: ["com.android.art"],
122 }
123 `),
124 ).RunTest(t)
125
Paul Duffin7c475152021-06-09 16:17:58 +0100126 // A preparer to update the test fixture used when processing an unpackage snapshot.
127 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("com.android.art", "mybootclasspathfragment")
Paul Duffin023dba02021-04-22 01:45:29 +0100128
Paul Duffina57835e2021-04-19 13:23:06 +0100129 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000130 checkAndroidBpContents(`
Paul Duffina57835e2021-04-19 13:23:06 +0100131// This is auto-generated. DO NOT EDIT.
132
133prebuilt_bootclasspath_fragment {
134 name: "mybootclasspathfragment",
135 prefer: false,
136 visibility: ["//visibility:public"],
137 apex_available: ["com.android.art"],
138 image_name: "art",
Paul Duffin2dc665b2021-04-23 16:58:51 +0100139 contents: ["mybootlib"],
Paul Duffinda286f42021-06-29 11:59:23 +0100140 hidden_api: {
Paul Duffinda286f42021-06-29 11:59:23 +0100141 annotation_flags: "hiddenapi/annotation-flags.csv",
142 metadata: "hiddenapi/metadata.csv",
143 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100144 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100145 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
146 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffinda286f42021-06-29 11:59:23 +0100147 },
Paul Duffina57835e2021-04-19 13:23:06 +0100148}
149
150java_import {
151 name: "mybootlib",
152 prefer: false,
153 visibility: ["//visibility:public"],
154 apex_available: ["com.android.art"],
Paul Duffin5c211452021-07-15 12:42:44 +0100155 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffina57835e2021-04-19 13:23:06 +0100156}
157`),
Paul Duffina57835e2021-04-19 13:23:06 +0100158 checkAllCopyRules(`
Paul Duffinda286f42021-06-29 11:59:23 +0100159.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
160.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
161.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin8d007e92021-07-22 12:00:49 +0100162.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
Paul Duffin280bae62021-07-20 18:03:53 +0100163.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
164.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin5c211452021-07-15 12:42:44 +0100165.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Paul Duffinda286f42021-06-29 11:59:23 +0100166 `),
Paul Duffin7c475152021-06-09 16:17:58 +0100167 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffinc8ead412021-06-07 19:28:15 +0100168
169 // Check the behavior of the snapshot without the source.
170 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
171 // Make sure that the boot jars package check rule includes the dex jar retrieved from the prebuilt apex.
172 checkBootJarsPackageCheckRule(t, result, "out/soong/.intermediates/prebuilts/apex/com.android.art.deapexer/android_common/deapexer/javalib/mybootlib.jar")
173 }),
174
Paul Duffin7c475152021-06-09 16:17:58 +0100175 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
176 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffina57835e2021-04-19 13:23:06 +0100177 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100178
179 // Make sure that the boot jars package check rule includes the dex jar created from the source.
180 checkBootJarsPackageCheckRule(t, result, "out/soong/.intermediates/mybootlib/android_common_apex10000/aligned/mybootlib.jar")
181}
182
183// checkBootJarsPackageCheckRule checks that the supplied module is an input to the boot jars
184// package check rule.
185func checkBootJarsPackageCheckRule(t *testing.T, result *android.TestResult, expectedModule string) {
186 platformBcp := result.ModuleForTests("platform-bootclasspath", "android_common")
187 bootJarsCheckRule := platformBcp.Rule("boot_jars_package_check")
188 command := bootJarsCheckRule.RuleParams.Command
189 expectedCommandArgs := " out/soong/host/linux-x86/bin/dexdump build/soong/scripts/check_boot_jars/package_allowed_list.txt " + expectedModule + " &&"
190 android.AssertStringDoesContain(t, "boot jars package check", command, expectedCommandArgs)
Paul Duffina57835e2021-04-19 13:23:06 +0100191}
192
193func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
Paul Duffin4a1d4512021-03-18 10:12:26 +0000194 result := android.GroupFixturePreparers(
195 prepareForSdkTestWithJava,
Paul Duffin895c7142021-04-25 13:40:15 +0100196 java.PrepareForTestWithJavaDefaultModules,
197 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100198 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary", "mycoreplatform"),
satayevd604b212021-07-21 14:23:52 +0100199 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:myothersdklibrary"),
Paul Duffin7c475152021-06-09 16:17:58 +0100200 prepareForSdkTestWithApex,
201
202 // Add a platform_bootclasspath that depends on the fragment.
203 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
204
Paul Duffin4a1d4512021-03-18 10:12:26 +0000205 android.FixtureWithRootAndroidBp(`
206 sdk {
207 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100208 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100209 java_sdk_libs: [
210 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
211 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
212 // api.stub_libs property. However, it is specified here to ensure that duplicates are
213 // correctly deduped.
214 "mysdklibrary",
215 ],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000216 }
Paul Duffinf7f65da2021-03-10 15:00:46 +0000217
Paul Duffin7c475152021-06-09 16:17:58 +0100218 apex {
219 name: "myapex",
220 key: "myapex.key",
221 min_sdk_version: "2",
222 bootclasspath_fragments: ["mybootclasspathfragment"],
223 }
224
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100225 bootclasspath_fragment {
226 name: "mybootclasspathfragment",
Paul Duffin7c475152021-06-09 16:17:58 +0100227 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100228 contents: [
229 // This should be automatically added to the sdk_snapshot as a java_boot_libs module.
230 "mybootlib",
231 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
232 "myothersdklibrary",
233 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100234 api: {
235 stub_libs: ["mysdklibrary"],
236 },
237 core_platform_api: {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100238 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
Paul Duffin895c7142021-04-25 13:40:15 +0100239 stub_libs: ["mycoreplatform"],
240 },
Paul Duffin9fd56472022-03-31 15:42:30 +0100241 hidden_api: {
242 split_packages: ["*"],
243 },
Paul Duffina57835e2021-04-19 13:23:06 +0100244 }
245
246 java_library {
247 name: "mybootlib",
Paul Duffin7c475152021-06-09 16:17:58 +0100248 apex_available: ["myapex"],
Paul Duffina57835e2021-04-19 13:23:06 +0100249 srcs: ["Test.java"],
250 system_modules: "none",
251 sdk_version: "none",
Paul Duffin7c475152021-06-09 16:17:58 +0100252 min_sdk_version: "2",
Paul Duffina57835e2021-04-19 13:23:06 +0100253 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100254 permitted_packages: ["mybootlib"],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000255 }
Paul Duffin895c7142021-04-25 13:40:15 +0100256
257 java_sdk_library {
258 name: "mysdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100259 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100260 srcs: ["Test.java"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100261 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100262 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100263 min_sdk_version: "2",
Paul Duffin895c7142021-04-25 13:40:15 +0100264 }
265
266 java_sdk_library {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100267 name: "myothersdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100268 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100269 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100270 compile_dex: true,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100271 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100272 min_sdk_version: "2",
273 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100274 }
275
276 java_sdk_library {
Paul Duffin895c7142021-04-25 13:40:15 +0100277 name: "mycoreplatform",
Paul Duffin7c475152021-06-09 16:17:58 +0100278 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100279 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100280 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100281 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100282 min_sdk_version: "2",
Paul Duffin895c7142021-04-25 13:40:15 +0100283 }
Paul Duffin4a1d4512021-03-18 10:12:26 +0000284 `),
285 ).RunTest(t)
Paul Duffinf7f65da2021-03-10 15:00:46 +0000286
Paul Duffin7c475152021-06-09 16:17:58 +0100287 // A preparer to update the test fixture used when processing an unpackage snapshot.
288 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
289
Paul Duffin36474d32021-03-12 12:19:43 +0000290 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000291 checkAndroidBpContents(`
Paul Duffinf7f65da2021-03-10 15:00:46 +0000292// This is auto-generated. DO NOT EDIT.
293
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100294prebuilt_bootclasspath_fragment {
295 name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000296 prefer: false,
297 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100298 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100299 contents: [
300 "mybootlib",
301 "myothersdklibrary",
302 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100303 api: {
304 stub_libs: ["mysdklibrary"],
305 },
306 core_platform_api: {
307 stub_libs: ["mycoreplatform"],
308 },
Paul Duffin2fef1362021-04-15 13:32:00 +0100309 hidden_api: {
Paul Duffin2fef1362021-04-15 13:32:00 +0100310 annotation_flags: "hiddenapi/annotation-flags.csv",
311 metadata: "hiddenapi/metadata.csv",
312 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100313 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100314 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
315 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin2fef1362021-04-15 13:32:00 +0100316 },
Paul Duffina57835e2021-04-19 13:23:06 +0100317}
318
319java_import {
320 name: "mybootlib",
321 prefer: false,
322 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100323 apex_available: ["myapex"],
Paul Duffin5c211452021-07-15 12:42:44 +0100324 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffin869de142021-07-15 14:14:41 +0100325 permitted_packages: ["mybootlib"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000326}
Paul Duffin895c7142021-04-25 13:40:15 +0100327
328java_sdk_library_import {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100329 name: "myothersdklibrary",
330 prefer: false,
331 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100332 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100333 shared_library: true,
334 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100335 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100336 public: {
337 jars: ["sdk_library/public/myothersdklibrary-stubs.jar"],
338 stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"],
339 current_api: "sdk_library/public/myothersdklibrary.txt",
340 removed_api: "sdk_library/public/myothersdklibrary-removed.txt",
341 sdk_version: "current",
342 },
343}
344
345java_sdk_library_import {
Paul Duffin895c7142021-04-25 13:40:15 +0100346 name: "mysdklibrary",
347 prefer: false,
348 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100349 apex_available: ["myapex"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100350 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100351 public: {
352 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
353 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
354 current_api: "sdk_library/public/mysdklibrary.txt",
355 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
356 sdk_version: "current",
357 },
358}
359
360java_sdk_library_import {
361 name: "mycoreplatform",
362 prefer: false,
363 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100364 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100365 shared_library: true,
366 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100367 public: {
368 jars: ["sdk_library/public/mycoreplatform-stubs.jar"],
369 stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"],
370 current_api: "sdk_library/public/mycoreplatform.txt",
371 removed_api: "sdk_library/public/mycoreplatform-removed.txt",
372 sdk_version: "current",
373 },
374}
Paul Duffina10bd3c2021-05-12 13:46:54 +0100375 `),
Paul Duffina57835e2021-04-19 13:23:06 +0100376 checkAllCopyRules(`
Paul Duffin2fef1362021-04-15 13:32:00 +0100377.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
378.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
379.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin8d007e92021-07-22 12:00:49 +0100380.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
Paul Duffin280bae62021-07-20 18:03:53 +0100381.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
382.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin5c211452021-07-15 12:42:44 +0100383.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Paul Duffina10bd3c2021-05-12 13:46:54 +0100384.intermediates/myothersdklibrary.stubs/android_common/javac/myothersdklibrary.stubs.jar -> sdk_library/public/myothersdklibrary-stubs.jar
385.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
386.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 +0100387.intermediates/mysdklibrary.stubs/android_common/javac/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
388.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
389.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
390.intermediates/mycoreplatform.stubs/android_common/javac/mycoreplatform.stubs.jar -> sdk_library/public/mycoreplatform-stubs.jar
391.intermediates/mycoreplatform.stubs.source/android_common/metalava/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
392.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 +0100393`),
394 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffind061d402021-06-07 21:36:01 +0100395 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
396 module := result.ModuleForTests("platform-bootclasspath", "android_common")
397 var rule android.TestingBuildParams
398 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv")
399 java.CheckHiddenAPIRuleInputs(t, "monolithic flags", `
400 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/annotation-flags-from-classes.csv
401 out/soong/hiddenapi/hiddenapi-stub-flags.txt
402 snapshot/hiddenapi/annotation-flags.csv
403 `, rule)
404
405 rule = module.Output("out/soong/hiddenapi/hiddenapi-unsupported.csv")
406 java.CheckHiddenAPIRuleInputs(t, "monolithic metadata", `
407 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/metadata-from-classes.csv
408 snapshot/hiddenapi/metadata.csv
409 `, rule)
410
411 rule = module.Output("out/soong/hiddenapi/hiddenapi-index.csv")
412 java.CheckHiddenAPIRuleInputs(t, "monolithic index", `
413 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
414 snapshot/hiddenapi/index.csv
415 `, rule)
Paul Duffin630b11e2021-07-15 13:35:26 +0100416
Paul Duffin8d007e92021-07-22 12:00:49 +0100417 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100418 android.AssertStringDoesContain(t, "verify-overlaps", rule.RuleParams.Command, " snapshot/hiddenapi/filtered-flags.csv:snapshot/hiddenapi/signature-patterns.csv ")
Paul Duffind061d402021-06-07 21:36:01 +0100419 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100420 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8d007e92021-07-22 12:00:49 +0100421 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
422 module := result.ModuleForTests("platform-bootclasspath", "android_common")
423 rule := module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100424 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 ")
Paul Duffin8d007e92021-07-22 12:00:49 +0100425 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100426 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
427 )
Paul Duffinf7f65da2021-03-10 15:00:46 +0000428}
Paul Duffin04b4a192021-03-18 11:05:31 +0000429
Paul Duffin51227d82021-05-18 12:54:27 +0100430// TestSnapshotWithBootClasspathFragment_Fragments makes sure that the fragments property of a
431// bootclasspath_fragment is correctly output to the sdk snapshot.
432func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) {
433 result := android.GroupFixturePreparers(
434 prepareForSdkTestWithJava,
435 java.PrepareForTestWithJavaDefaultModules,
436 java.PrepareForTestWithJavaSdkLibraryFiles,
437 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary"),
satayevabcd5972021-08-06 17:49:46 +0100438 java.FixtureConfigureApexBootJars("someapex:mysdklibrary", "myotherapex:myotherlib"),
Paul Duffin51227d82021-05-18 12:54:27 +0100439 prepareForSdkTestWithApex,
440
441 // Some additional files needed for the myotherapex.
442 android.FixtureMergeMockFs(android.MockFS{
443 "system/sepolicy/apex/myotherapex-file_contexts": nil,
444 "myotherapex/apex_manifest.json": nil,
445 "myotherapex/Test.java": nil,
446 }),
447
448 android.FixtureAddTextFile("myotherapex/Android.bp", `
449 apex {
450 name: "myotherapex",
451 key: "myapex.key",
452 min_sdk_version: "2",
453 bootclasspath_fragments: ["myotherbootclasspathfragment"],
454 }
455
456 bootclasspath_fragment {
457 name: "myotherbootclasspathfragment",
458 apex_available: ["myotherapex"],
459 contents: [
460 "myotherlib",
461 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100462 hidden_api: {
463 split_packages: ["*"],
464 },
Paul Duffin51227d82021-05-18 12:54:27 +0100465 }
466
467 java_library {
468 name: "myotherlib",
469 apex_available: ["myotherapex"],
470 srcs: ["Test.java"],
471 min_sdk_version: "2",
472 permitted_packages: ["myothersdklibrary"],
473 compile_dex: true,
474 }
475 `),
476
477 android.FixtureWithRootAndroidBp(`
478 sdk {
479 name: "mysdk",
480 bootclasspath_fragments: ["mybootclasspathfragment"],
481 }
482
483 bootclasspath_fragment {
484 name: "mybootclasspathfragment",
485 contents: [
486 "mysdklibrary",
487 ],
488 fragments: [
489 {
490 apex: "myotherapex",
491 module: "myotherbootclasspathfragment"
492 },
493 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100494 hidden_api: {
495 split_packages: ["*"],
496 },
Paul Duffin51227d82021-05-18 12:54:27 +0100497 }
498
499 java_sdk_library {
500 name: "mysdklibrary",
501 srcs: ["Test.java"],
502 shared_library: false,
503 public: {enabled: true},
504 min_sdk_version: "2",
505 }
506 `),
507 ).RunTest(t)
508
509 // A preparer to update the test fixture used when processing an unpackage snapshot.
510 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
511
512 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000513 checkAndroidBpContents(`
Paul Duffin51227d82021-05-18 12:54:27 +0100514// This is auto-generated. DO NOT EDIT.
515
516prebuilt_bootclasspath_fragment {
517 name: "mybootclasspathfragment",
518 prefer: false,
519 visibility: ["//visibility:public"],
520 apex_available: ["//apex_available:platform"],
521 contents: ["mysdklibrary"],
522 fragments: [
523 {
524 apex: "myotherapex",
525 module: "myotherbootclasspathfragment",
526 },
527 ],
528 hidden_api: {
Paul Duffin51227d82021-05-18 12:54:27 +0100529 annotation_flags: "hiddenapi/annotation-flags.csv",
530 metadata: "hiddenapi/metadata.csv",
531 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100532 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100533 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
534 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin51227d82021-05-18 12:54:27 +0100535 },
536}
537
538java_sdk_library_import {
539 name: "mysdklibrary",
540 prefer: false,
541 visibility: ["//visibility:public"],
542 apex_available: ["//apex_available:platform"],
543 shared_library: false,
544 public: {
545 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
546 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
547 current_api: "sdk_library/public/mysdklibrary.txt",
548 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
549 sdk_version: "current",
550 },
551}
552 `),
553 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
554 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
555 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
556 )
557}
558
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100559// Test that bootclasspath_fragment works with sdk.
560func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
Paul Duffin04b4a192021-03-18 11:05:31 +0000561 android.GroupFixturePreparers(
562 prepareForSdkTestWithApex,
563 prepareForSdkTestWithJava,
Paul Duffin8018e502021-05-21 19:28:09 +0100564 android.FixtureAddFile("java/mybootlib.jar", nil),
Paul Duffin04b4a192021-03-18 11:05:31 +0000565 android.FixtureWithRootAndroidBp(`
566 sdk {
567 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100568 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000569 }
570
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100571 bootclasspath_fragment {
572 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000573 image_name: "art",
Paul Duffin8018e502021-05-21 19:28:09 +0100574 contents: ["mybootlib"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000575 apex_available: ["myapex"],
Paul Duffin9fd56472022-03-31 15:42:30 +0100576 hidden_api: {
577 split_packages: ["*"],
578 },
Paul Duffin04b4a192021-03-18 11:05:31 +0000579 }
580
Paul Duffin8018e502021-05-21 19:28:09 +0100581 java_library {
582 name: "mybootlib",
583 apex_available: ["myapex"],
584 srcs: ["Test.java"],
585 system_modules: "none",
586 sdk_version: "none",
587 min_sdk_version: "1",
588 compile_dex: true,
589 }
590
Paul Duffin04b4a192021-03-18 11:05:31 +0000591 sdk_snapshot {
592 name: "mysdk@1",
Paul Duffin8018e502021-05-21 19:28:09 +0100593 bootclasspath_fragments: ["mysdk_mybootclasspathfragment@1"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000594 }
595
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100596 prebuilt_bootclasspath_fragment {
Paul Duffin8018e502021-05-21 19:28:09 +0100597 name: "mysdk_mybootclasspathfragment@1",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100598 sdk_member_name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000599 prefer: false,
600 visibility: ["//visibility:public"],
601 apex_available: [
602 "myapex",
603 ],
604 image_name: "art",
Paul Duffin8018e502021-05-21 19:28:09 +0100605 contents: ["mysdk_mybootlib@1"],
606 }
607
608 java_import {
609 name: "mysdk_mybootlib@1",
610 sdk_member_name: "mybootlib",
611 visibility: ["//visibility:public"],
612 apex_available: ["com.android.art"],
613 jars: ["java/mybootlib.jar"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000614 }
615 `),
616 ).RunTest(t)
617}
Paul Duffin7c955552021-04-19 13:23:53 +0100618
619func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
620 result := android.GroupFixturePreparers(
621 prepareForSdkTestWithJava,
Paul Duffin475daaf2021-05-13 00:57:55 +0100622 java.PrepareForTestWithJavaDefaultModules,
623 java.PrepareForTestWithJavaSdkLibraryFiles,
624 java.FixtureWithLastReleaseApis("mysdklibrary"),
satayevd604b212021-07-21 14:23:52 +0100625 java.FixtureConfigureApexBootJars("myapex:mybootlib"),
Paul Duffin475daaf2021-05-13 00:57:55 +0100626 prepareForSdkTestWithApex,
Paul Duffin7c475152021-06-09 16:17:58 +0100627
628 // Add a platform_bootclasspath that depends on the fragment.
629 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
630
Paul Duffin7c955552021-04-19 13:23:53 +0100631 android.MockFS{
632 "my-blocked.txt": nil,
633 "my-max-target-o-low-priority.txt": nil,
634 "my-max-target-p.txt": nil,
635 "my-max-target-q.txt": nil,
636 "my-max-target-r-low-priority.txt": nil,
637 "my-removed.txt": nil,
638 "my-unsupported-packages.txt": nil,
639 "my-unsupported.txt": nil,
640 }.AddToFixture(),
641 android.FixtureWithRootAndroidBp(`
642 sdk {
643 name: "mysdk",
644 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin7c955552021-04-19 13:23:53 +0100645 }
646
Paul Duffin475daaf2021-05-13 00:57:55 +0100647 apex {
648 name: "myapex",
649 key: "myapex.key",
650 min_sdk_version: "1",
651 bootclasspath_fragments: ["mybootclasspathfragment"],
652 }
653
Paul Duffin7c955552021-04-19 13:23:53 +0100654 bootclasspath_fragment {
655 name: "mybootclasspathfragment",
Paul Duffin475daaf2021-05-13 00:57:55 +0100656 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100657 contents: ["mybootlib"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100658 api: {
659 stub_libs: ["mysdklibrary"],
660 },
Paul Duffin7c955552021-04-19 13:23:53 +0100661 hidden_api: {
662 unsupported: [
663 "my-unsupported.txt",
664 ],
665 removed: [
666 "my-removed.txt",
667 ],
668 max_target_r_low_priority: [
669 "my-max-target-r-low-priority.txt",
670 ],
671 max_target_q: [
672 "my-max-target-q.txt",
673 ],
674 max_target_p: [
675 "my-max-target-p.txt",
676 ],
677 max_target_o_low_priority: [
678 "my-max-target-o-low-priority.txt",
679 ],
680 blocked: [
681 "my-blocked.txt",
682 ],
683 unsupported_packages: [
684 "my-unsupported-packages.txt",
685 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100686 split_packages: ["*"],
Paul Duffin7c955552021-04-19 13:23:53 +0100687 },
688 }
689
690 java_library {
691 name: "mybootlib",
Paul Duffin475daaf2021-05-13 00:57:55 +0100692 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100693 srcs: ["Test.java"],
694 system_modules: "none",
695 sdk_version: "none",
Paul Duffin475daaf2021-05-13 00:57:55 +0100696 min_sdk_version: "1",
Paul Duffin7c955552021-04-19 13:23:53 +0100697 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100698 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100699 }
Paul Duffin475daaf2021-05-13 00:57:55 +0100700
701 java_sdk_library {
702 name: "mysdklibrary",
703 srcs: ["Test.java"],
704 compile_dex: true,
705 public: {enabled: true},
Paul Duffin869de142021-07-15 14:14:41 +0100706 permitted_packages: ["mysdklibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100707 }
Paul Duffin7c955552021-04-19 13:23:53 +0100708 `),
709 ).RunTest(t)
710
Paul Duffin7c475152021-06-09 16:17:58 +0100711 // A preparer to update the test fixture used when processing an unpackage snapshot.
712 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
713
Paul Duffin7c955552021-04-19 13:23:53 +0100714 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000715 checkAndroidBpContents(`
Paul Duffin7c955552021-04-19 13:23:53 +0100716// This is auto-generated. DO NOT EDIT.
717
718prebuilt_bootclasspath_fragment {
719 name: "mybootclasspathfragment",
720 prefer: false,
721 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100722 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100723 contents: ["mybootlib"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100724 api: {
725 stub_libs: ["mysdklibrary"],
726 },
Paul Duffin7c955552021-04-19 13:23:53 +0100727 hidden_api: {
728 unsupported: ["hiddenapi/my-unsupported.txt"],
729 removed: ["hiddenapi/my-removed.txt"],
730 max_target_r_low_priority: ["hiddenapi/my-max-target-r-low-priority.txt"],
731 max_target_q: ["hiddenapi/my-max-target-q.txt"],
732 max_target_p: ["hiddenapi/my-max-target-p.txt"],
733 max_target_o_low_priority: ["hiddenapi/my-max-target-o-low-priority.txt"],
734 blocked: ["hiddenapi/my-blocked.txt"],
735 unsupported_packages: ["hiddenapi/my-unsupported-packages.txt"],
Paul Duffin2fef1362021-04-15 13:32:00 +0100736 annotation_flags: "hiddenapi/annotation-flags.csv",
737 metadata: "hiddenapi/metadata.csv",
738 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100739 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100740 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
741 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin7c955552021-04-19 13:23:53 +0100742 },
743}
744
745java_import {
746 name: "mybootlib",
747 prefer: false,
748 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100749 apex_available: ["myapex"],
Paul Duffin5c211452021-07-15 12:42:44 +0100750 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffin869de142021-07-15 14:14:41 +0100751 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100752}
Paul Duffin475daaf2021-05-13 00:57:55 +0100753
754java_sdk_library_import {
755 name: "mysdklibrary",
756 prefer: false,
757 visibility: ["//visibility:public"],
758 apex_available: ["//apex_available:platform"],
759 shared_library: true,
760 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100761 permitted_packages: ["mysdklibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100762 public: {
763 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
764 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
765 current_api: "sdk_library/public/mysdklibrary.txt",
766 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
767 sdk_version: "current",
768 },
769}
Paul Duffin7c955552021-04-19 13:23:53 +0100770`),
771 checkAllCopyRules(`
772my-unsupported.txt -> hiddenapi/my-unsupported.txt
773my-removed.txt -> hiddenapi/my-removed.txt
774my-max-target-r-low-priority.txt -> hiddenapi/my-max-target-r-low-priority.txt
775my-max-target-q.txt -> hiddenapi/my-max-target-q.txt
776my-max-target-p.txt -> hiddenapi/my-max-target-p.txt
777my-max-target-o-low-priority.txt -> hiddenapi/my-max-target-o-low-priority.txt
778my-blocked.txt -> hiddenapi/my-blocked.txt
779my-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
Paul Duffin2fef1362021-04-15 13:32:00 +0100780.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
781.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
782.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin8d007e92021-07-22 12:00:49 +0100783.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
Paul Duffin280bae62021-07-20 18:03:53 +0100784.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
785.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin5c211452021-07-15 12:42:44 +0100786.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Paul Duffin475daaf2021-05-13 00:57:55 +0100787.intermediates/mysdklibrary.stubs/android_common/javac/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
788.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
789.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 +0100790`),
Paul Duffin7c475152021-06-09 16:17:58 +0100791 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
792 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
793 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin7c955552021-04-19 13:23:53 +0100794 )
795}