blob: ccbeb8d9ad846e4abd7b3a1a26f5ddadc15d47c8 [file] [log] [blame]
Jiyong Parkd1063c12019-07-17 20:08:41 +09001// Copyright 2019 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package sdk
16
17import (
Martin Stjernholm3ff2e662020-07-15 14:38:15 +010018 "log"
19 "os"
Colin Cross0c66bc62021-07-20 09:47:41 -070020 "runtime"
Jiyong Parkd1063c12019-07-17 20:08:41 +090021 "testing"
Paul Duffinb07fa512020-03-10 22:17:04 +000022
Colin Cross0c66bc62021-07-20 09:47:41 -070023 "android/soong/android"
Paul Duffin39abf8f2021-09-24 14:58:27 +010024 "android/soong/java"
Colin Cross0c66bc62021-07-20 09:47:41 -070025
Paul Duffinb07fa512020-03-10 22:17:04 +000026 "github.com/google/blueprint/proptools"
Jiyong Parkd1063c12019-07-17 20:08:41 +090027)
28
Paul Duffin82d90432019-11-30 09:24:33 +000029// Needed in an _test.go file in this package to ensure tests run correctly, particularly in IDE.
30func TestMain(m *testing.M) {
Colin Cross0c66bc62021-07-20 09:47:41 -070031 if runtime.GOOS != "linux" {
Martin Stjernholm3ff2e662020-07-15 14:38:15 +010032 // b/145598135 - Generating host snapshots for anything other than linux is not supported.
Colin Cross0c66bc62021-07-20 09:47:41 -070033 log.Printf("Skipping as sdk snapshot generation is only supported on linux not %s", runtime.GOOS)
Martin Stjernholm3ff2e662020-07-15 14:38:15 +010034 os.Exit(0)
35 }
36
Paul Duffinabbf63d2021-03-18 01:47:31 +000037 os.Exit(m.Run())
Jiyong Parkd1063c12019-07-17 20:08:41 +090038}
39
Paul Duffin593b3c92019-12-05 14:31:48 +000040// Ensure that prebuilt modules have the same effective visibility as the source
41// modules.
42func TestSnapshotVisibility(t *testing.T) {
43 packageBp := `
44 package {
45 default_visibility: ["//other/foo"],
46 }
47
48 sdk {
49 name: "mysdk",
50 visibility: [
51 "//other/foo",
52 // This short form will be replaced with //package:__subpackages__ in the
53 // generated sdk_snapshot.
54 ":__subpackages__",
55 ],
Paul Duffin157f40f2020-09-29 16:01:08 +010056 prebuilt_visibility: [
57 "//prebuilts/mysdk",
58 ],
Paul Duffin593b3c92019-12-05 14:31:48 +000059 java_header_libs: [
60 "myjavalib",
61 "mypublicjavalib",
62 "mydefaultedjavalib",
Martin Stjernholm64aeaad2020-05-13 22:11:40 +010063 "myprivatejavalib",
Paul Duffin593b3c92019-12-05 14:31:48 +000064 ],
65 }
66
67 java_library {
68 name: "myjavalib",
69 // Uses package default visibility
70 srcs: ["Test.java"],
71 system_modules: "none",
72 sdk_version: "none",
73 }
74
Paul Duffin44885e22020-02-19 16:10:09 +000075 java_defaults {
76 name: "java-defaults",
Jooyung Han5e9013b2020-03-10 06:23:13 +090077 visibility: ["//other/bar"],
Paul Duffin44885e22020-02-19 16:10:09 +000078 }
79
Paul Duffin593b3c92019-12-05 14:31:48 +000080 java_library {
81 name: "mypublicjavalib",
Paul Duffin44885e22020-02-19 16:10:09 +000082 defaults: ["java-defaults"],
Paul Duffin593b3c92019-12-05 14:31:48 +000083 visibility: ["//visibility:public"],
84 srcs: ["Test.java"],
85 system_modules: "none",
86 sdk_version: "none",
87 }
88
89 java_defaults {
90 name: "myjavadefaults",
91 visibility: ["//other/bar"],
92 }
93
94 java_library {
95 name: "mydefaultedjavalib",
96 defaults: ["myjavadefaults"],
97 srcs: ["Test.java"],
98 system_modules: "none",
99 sdk_version: "none",
100 }
Martin Stjernholm64aeaad2020-05-13 22:11:40 +0100101
102 java_library {
103 name: "myprivatejavalib",
104 srcs: ["Test.java"],
105 visibility: ["//visibility:private"],
106 system_modules: "none",
107 sdk_version: "none",
108 }
Paul Duffin593b3c92019-12-05 14:31:48 +0000109 `
110
111 result := testSdkWithFs(t, ``,
112 map[string][]byte{
113 "package/Test.java": nil,
114 "package/Android.bp": []byte(packageBp),
115 })
116
Paul Duffin36474d32021-03-12 12:19:43 +0000117 CheckSnapshot(t, result, "mysdk", "package",
Paul Duffin593b3c92019-12-05 14:31:48 +0000118 checkAndroidBpContents(`
119// This is auto-generated. DO NOT EDIT.
120
121java_import {
122 name: "mysdk_myjavalib@current",
123 sdk_member_name: "myjavalib",
Martin Stjernholm0641d182020-05-13 02:20:06 +0100124 visibility: [
125 "//other/foo",
126 "//package",
Paul Duffin157f40f2020-09-29 16:01:08 +0100127 "//prebuilts/mysdk",
Martin Stjernholm0641d182020-05-13 02:20:06 +0100128 ],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000129 apex_available: ["//apex_available:platform"],
Paul Duffin593b3c92019-12-05 14:31:48 +0000130 jars: ["java/myjavalib.jar"],
131}
132
133java_import {
134 name: "myjavalib",
135 prefer: false,
Martin Stjernholm0641d182020-05-13 02:20:06 +0100136 visibility: [
137 "//other/foo",
138 "//package",
Paul Duffin157f40f2020-09-29 16:01:08 +0100139 "//prebuilts/mysdk",
Martin Stjernholm0641d182020-05-13 02:20:06 +0100140 ],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000141 apex_available: ["//apex_available:platform"],
Paul Duffin593b3c92019-12-05 14:31:48 +0000142 jars: ["java/myjavalib.jar"],
143}
144
145java_import {
146 name: "mysdk_mypublicjavalib@current",
147 sdk_member_name: "mypublicjavalib",
148 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000149 apex_available: ["//apex_available:platform"],
Paul Duffin593b3c92019-12-05 14:31:48 +0000150 jars: ["java/mypublicjavalib.jar"],
151}
152
153java_import {
154 name: "mypublicjavalib",
155 prefer: false,
156 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000157 apex_available: ["//apex_available:platform"],
Paul Duffin593b3c92019-12-05 14:31:48 +0000158 jars: ["java/mypublicjavalib.jar"],
159}
160
161java_import {
162 name: "mysdk_mydefaultedjavalib@current",
163 sdk_member_name: "mydefaultedjavalib",
Martin Stjernholm0641d182020-05-13 02:20:06 +0100164 visibility: [
165 "//other/bar",
166 "//package",
Paul Duffin157f40f2020-09-29 16:01:08 +0100167 "//prebuilts/mysdk",
Martin Stjernholm0641d182020-05-13 02:20:06 +0100168 ],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000169 apex_available: ["//apex_available:platform"],
Paul Duffin593b3c92019-12-05 14:31:48 +0000170 jars: ["java/mydefaultedjavalib.jar"],
171}
172
173java_import {
174 name: "mydefaultedjavalib",
175 prefer: false,
Martin Stjernholm0641d182020-05-13 02:20:06 +0100176 visibility: [
177 "//other/bar",
178 "//package",
Paul Duffin157f40f2020-09-29 16:01:08 +0100179 "//prebuilts/mysdk",
Martin Stjernholm0641d182020-05-13 02:20:06 +0100180 ],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000181 apex_available: ["//apex_available:platform"],
Paul Duffin593b3c92019-12-05 14:31:48 +0000182 jars: ["java/mydefaultedjavalib.jar"],
183}
184
Martin Stjernholm64aeaad2020-05-13 22:11:40 +0100185java_import {
186 name: "mysdk_myprivatejavalib@current",
187 sdk_member_name: "myprivatejavalib",
Paul Duffin157f40f2020-09-29 16:01:08 +0100188 visibility: [
189 "//package",
190 "//prebuilts/mysdk",
191 ],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000192 apex_available: ["//apex_available:platform"],
Martin Stjernholm64aeaad2020-05-13 22:11:40 +0100193 jars: ["java/myprivatejavalib.jar"],
194}
195
196java_import {
197 name: "myprivatejavalib",
198 prefer: false,
Paul Duffin157f40f2020-09-29 16:01:08 +0100199 visibility: [
200 "//package",
201 "//prebuilts/mysdk",
202 ],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000203 apex_available: ["//apex_available:platform"],
Martin Stjernholm64aeaad2020-05-13 22:11:40 +0100204 jars: ["java/myprivatejavalib.jar"],
205}
206
Paul Duffin593b3c92019-12-05 14:31:48 +0000207sdk_snapshot {
208 name: "mysdk@current",
209 visibility: [
Martin Stjernholm01407c52020-05-13 01:54:21 +0100210 "//other/foo",
Paul Duffin593b3c92019-12-05 14:31:48 +0000211 "//package:__subpackages__",
212 ],
213 java_header_libs: [
214 "mysdk_myjavalib@current",
215 "mysdk_mypublicjavalib@current",
216 "mysdk_mydefaultedjavalib@current",
Martin Stjernholm64aeaad2020-05-13 22:11:40 +0100217 "mysdk_myprivatejavalib@current",
Paul Duffin593b3c92019-12-05 14:31:48 +0000218 ],
219}
220`))
221}
Nicolas Geoffray1228e9c2020-02-27 13:45:35 +0000222
Paul Duffin157f40f2020-09-29 16:01:08 +0100223func TestPrebuiltVisibilityProperty_IsValidated(t *testing.T) {
224 testSdkError(t, `prebuilt_visibility: cannot mix "//visibility:private" with any other visibility rules`, `
225 sdk {
226 name: "mysdk",
227 prebuilt_visibility: [
228 "//foo",
229 "//visibility:private",
230 ],
231 }
232`)
233}
234
235func TestPrebuiltVisibilityProperty_AddPrivate(t *testing.T) {
236 testSdkError(t, `prebuilt_visibility: "//visibility:private" does not widen the visibility`, `
237 sdk {
238 name: "mysdk",
239 prebuilt_visibility: [
240 "//visibility:private",
241 ],
242 java_header_libs: [
243 "myjavalib",
244 ],
245 }
246
247 java_library {
248 name: "myjavalib",
249 // Uses package default visibility
250 srcs: ["Test.java"],
251 system_modules: "none",
252 sdk_version: "none",
253 }
254`)
255}
256
Paul Duffin8edc99c2021-03-09 23:02:20 +0000257func TestSdkInstall(t *testing.T) {
Nicolas Geoffray1228e9c2020-02-27 13:45:35 +0000258 sdk := `
259 sdk {
260 name: "mysdk",
261 }
262 `
Paul Duffin8edc99c2021-03-09 23:02:20 +0000263 result := testSdkWithFs(t, sdk, nil)
Nicolas Geoffray1228e9c2020-02-27 13:45:35 +0000264
Paul Duffin36474d32021-03-12 12:19:43 +0000265 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinc6ba1822022-05-06 09:38:02 +0000266 checkAllOtherCopyRules(`
267.intermediates/mysdk/common_os/mysdk-current.info -> mysdk-current.info
268.intermediates/mysdk/common_os/mysdk-current.zip -> mysdk-current.zip
269`))
Nicolas Geoffray1228e9c2020-02-27 13:45:35 +0000270}
Paul Duffinb07fa512020-03-10 22:17:04 +0000271
272type EmbeddedPropertiesStruct struct {
Paul Duffin864e1b42020-05-06 10:23:19 +0100273 S_Embedded_Common string `android:"arch_variant"`
274 S_Embedded_Different string `android:"arch_variant"`
Paul Duffinb07fa512020-03-10 22:17:04 +0000275}
276
277type testPropertiesStruct struct {
Paul Duffin4b8b7932020-05-06 12:35:38 +0100278 name string
Paul Duffinb07fa512020-03-10 22:17:04 +0000279 private string
280 Public_Kept string `sdk:"keep"`
281 S_Common string
Paul Duffin864e1b42020-05-06 10:23:19 +0100282 S_Different string `android:"arch_variant"`
Paul Duffinb07fa512020-03-10 22:17:04 +0000283 A_Common []string
Paul Duffin864e1b42020-05-06 10:23:19 +0100284 A_Different []string `android:"arch_variant"`
Paul Duffinb07fa512020-03-10 22:17:04 +0000285 F_Common *bool
Paul Duffin864e1b42020-05-06 10:23:19 +0100286 F_Different *bool `android:"arch_variant"`
Paul Duffinb07fa512020-03-10 22:17:04 +0000287 EmbeddedPropertiesStruct
288}
289
Paul Duffinf34f6d82020-04-30 15:48:31 +0100290func (p *testPropertiesStruct) optimizableProperties() interface{} {
291 return p
292}
293
Paul Duffin4b8b7932020-05-06 12:35:38 +0100294func (p *testPropertiesStruct) String() string {
295 return p.name
296}
297
298var _ propertiesContainer = (*testPropertiesStruct)(nil)
299
Paul Duffinb07fa512020-03-10 22:17:04 +0000300func TestCommonValueOptimization(t *testing.T) {
Paul Duffin4b8b7932020-05-06 12:35:38 +0100301 common := &testPropertiesStruct{name: "common"}
Paul Duffinf34f6d82020-04-30 15:48:31 +0100302 structs := []propertiesContainer{
Paul Duffinb07fa512020-03-10 22:17:04 +0000303 &testPropertiesStruct{
Paul Duffin4b8b7932020-05-06 12:35:38 +0100304 name: "struct-0",
Paul Duffinb07fa512020-03-10 22:17:04 +0000305 private: "common",
306 Public_Kept: "common",
307 S_Common: "common",
308 S_Different: "upper",
309 A_Common: []string{"first", "second"},
310 A_Different: []string{"alpha", "beta"},
311 F_Common: proptools.BoolPtr(false),
312 F_Different: proptools.BoolPtr(false),
313 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
314 S_Embedded_Common: "embedded_common",
315 S_Embedded_Different: "embedded_upper",
316 },
317 },
318 &testPropertiesStruct{
Paul Duffin4b8b7932020-05-06 12:35:38 +0100319 name: "struct-1",
Paul Duffinb07fa512020-03-10 22:17:04 +0000320 private: "common",
321 Public_Kept: "common",
322 S_Common: "common",
323 S_Different: "lower",
324 A_Common: []string{"first", "second"},
325 A_Different: []string{"alpha", "delta"},
326 F_Common: proptools.BoolPtr(false),
327 F_Different: proptools.BoolPtr(true),
328 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
329 S_Embedded_Common: "embedded_common",
330 S_Embedded_Different: "embedded_lower",
331 },
332 },
333 }
334
335 extractor := newCommonValueExtractor(common)
Paul Duffinb07fa512020-03-10 22:17:04 +0000336
Paul Duffinc459f892020-04-30 18:08:29 +0100337 err := extractor.extractCommonProperties(common, structs)
Paul Duffin36474d32021-03-12 12:19:43 +0000338 android.AssertDeepEquals(t, "unexpected error", nil, err)
Paul Duffinc459f892020-04-30 18:08:29 +0100339
Paul Duffin36474d32021-03-12 12:19:43 +0000340 android.AssertDeepEquals(t, "common properties not correct",
Paul Duffinb07fa512020-03-10 22:17:04 +0000341 &testPropertiesStruct{
Paul Duffin4b8b7932020-05-06 12:35:38 +0100342 name: "common",
Paul Duffinb07fa512020-03-10 22:17:04 +0000343 private: "",
344 Public_Kept: "",
345 S_Common: "common",
346 S_Different: "",
347 A_Common: []string{"first", "second"},
348 A_Different: []string(nil),
349 F_Common: proptools.BoolPtr(false),
350 F_Different: nil,
351 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
352 S_Embedded_Common: "embedded_common",
353 S_Embedded_Different: "",
354 },
Paul Duffin1d6c0df2020-05-06 12:50:19 +0100355 },
356 common)
Paul Duffinb07fa512020-03-10 22:17:04 +0000357
Paul Duffin36474d32021-03-12 12:19:43 +0000358 android.AssertDeepEquals(t, "updated properties[0] not correct",
Paul Duffinb07fa512020-03-10 22:17:04 +0000359 &testPropertiesStruct{
Paul Duffin4b8b7932020-05-06 12:35:38 +0100360 name: "struct-0",
Paul Duffinb07fa512020-03-10 22:17:04 +0000361 private: "common",
362 Public_Kept: "common",
363 S_Common: "",
364 S_Different: "upper",
365 A_Common: nil,
366 A_Different: []string{"alpha", "beta"},
367 F_Common: nil,
368 F_Different: proptools.BoolPtr(false),
369 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
370 S_Embedded_Common: "",
371 S_Embedded_Different: "embedded_upper",
372 },
Paul Duffin1d6c0df2020-05-06 12:50:19 +0100373 },
374 structs[0])
Paul Duffinb07fa512020-03-10 22:17:04 +0000375
Paul Duffin36474d32021-03-12 12:19:43 +0000376 android.AssertDeepEquals(t, "updated properties[1] not correct",
Paul Duffinb07fa512020-03-10 22:17:04 +0000377 &testPropertiesStruct{
Paul Duffin4b8b7932020-05-06 12:35:38 +0100378 name: "struct-1",
Paul Duffinb07fa512020-03-10 22:17:04 +0000379 private: "common",
380 Public_Kept: "common",
381 S_Common: "",
382 S_Different: "lower",
383 A_Common: nil,
384 A_Different: []string{"alpha", "delta"},
385 F_Common: nil,
386 F_Different: proptools.BoolPtr(true),
387 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
388 S_Embedded_Common: "",
389 S_Embedded_Different: "embedded_lower",
390 },
Paul Duffin1d6c0df2020-05-06 12:50:19 +0100391 },
392 structs[1])
Paul Duffinb07fa512020-03-10 22:17:04 +0000393}
Paul Duffin864e1b42020-05-06 10:23:19 +0100394
395func TestCommonValueOptimization_InvalidArchSpecificVariants(t *testing.T) {
396 common := &testPropertiesStruct{name: "common"}
397 structs := []propertiesContainer{
398 &testPropertiesStruct{
399 name: "struct-0",
400 S_Common: "should-be-but-is-not-common0",
401 },
402 &testPropertiesStruct{
403 name: "struct-1",
404 S_Common: "should-be-but-is-not-common1",
405 },
406 }
407
408 extractor := newCommonValueExtractor(common)
409
Paul Duffin864e1b42020-05-06 10:23:19 +0100410 err := extractor.extractCommonProperties(common, structs)
Paul Duffin36474d32021-03-12 12:19:43 +0000411 android.AssertErrorMessageEquals(t, "unexpected error", `field "S_Common" is not tagged as "arch_variant" but has arch specific properties:
Paul Duffin864e1b42020-05-06 10:23:19 +0100412 "struct-0" has value "should-be-but-is-not-common0"
413 "struct-1" has value "should-be-but-is-not-common1"`, err)
414}
Paul Duffin62035b52021-05-05 21:35:49 +0100415
416// Ensure that sdk snapshot related environment variables work correctly.
417func TestSnapshot_EnvConfiguration(t *testing.T) {
418 bp := `
419 sdk {
420 name: "mysdk",
421 java_header_libs: ["myjavalib"],
422 }
423
424 java_library {
425 name: "myjavalib",
426 srcs: ["Test.java"],
427 system_modules: "none",
428 sdk_version: "none",
429 compile_dex: true,
430 host_supported: true,
431 }
432 `
433 preparer := android.GroupFixturePreparers(
434 prepareForSdkTestWithJava,
435 android.FixtureWithRootAndroidBp(bp),
436 )
437
438 checkZipFile := func(t *testing.T, result *android.TestResult, expected string) {
439 zipRule := result.ModuleForTests("mysdk", "common_os").Rule("SnapshotZipFiles")
440 android.AssertStringEquals(t, "snapshot zip file", expected, zipRule.Output.String())
441 }
442
443 t.Run("no env variables", func(t *testing.T) {
444 result := preparer.RunTest(t)
445
446 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-current.zip")
447
448 CheckSnapshot(t, result, "mysdk", "",
449 checkAndroidBpContents(`
450// This is auto-generated. DO NOT EDIT.
451
452java_import {
453 name: "mysdk_myjavalib@current",
454 sdk_member_name: "myjavalib",
455 visibility: ["//visibility:public"],
456 apex_available: ["//apex_available:platform"],
457 jars: ["java/myjavalib.jar"],
458}
459
460java_import {
461 name: "myjavalib",
462 prefer: false,
463 visibility: ["//visibility:public"],
464 apex_available: ["//apex_available:platform"],
465 jars: ["java/myjavalib.jar"],
466}
467
468sdk_snapshot {
469 name: "mysdk@current",
470 visibility: ["//visibility:public"],
471 java_header_libs: ["mysdk_myjavalib@current"],
472}
473 `),
474 )
475 })
Paul Duffin64fb5262021-05-05 21:36:04 +0100476
477 t.Run("SOONG_SDK_SNAPSHOT_PREFER=true", func(t *testing.T) {
478 result := android.GroupFixturePreparers(
479 preparer,
480 android.FixtureMergeEnv(map[string]string{
481 "SOONG_SDK_SNAPSHOT_PREFER": "true",
482 }),
483 ).RunTest(t)
484
485 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-current.zip")
486
487 CheckSnapshot(t, result, "mysdk", "",
488 checkAndroidBpContents(`
489// This is auto-generated. DO NOT EDIT.
490
491java_import {
492 name: "mysdk_myjavalib@current",
493 sdk_member_name: "myjavalib",
494 visibility: ["//visibility:public"],
495 apex_available: ["//apex_available:platform"],
496 jars: ["java/myjavalib.jar"],
497}
498
499java_import {
500 name: "myjavalib",
501 prefer: true,
502 visibility: ["//visibility:public"],
503 apex_available: ["//apex_available:platform"],
504 jars: ["java/myjavalib.jar"],
505}
506
507sdk_snapshot {
508 name: "mysdk@current",
509 visibility: ["//visibility:public"],
510 java_header_libs: ["mysdk_myjavalib@current"],
511}
512 `),
513 )
514 })
Paul Duffin43f7bf02021-05-05 22:00:51 +0100515
Paul Duffinfb9a7f92021-07-06 17:18:42 +0100516 t.Run("SOONG_SDK_SNAPSHOT_USE_SOURCE_CONFIG_VAR=module:build_from_source", func(t *testing.T) {
517 result := android.GroupFixturePreparers(
518 preparer,
519 android.FixtureMergeEnv(map[string]string{
520 "SOONG_SDK_SNAPSHOT_USE_SOURCE_CONFIG_VAR": "module:build_from_source",
521 }),
522 ).RunTest(t)
523
524 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-current.zip")
525
526 CheckSnapshot(t, result, "mysdk", "",
527 checkAndroidBpContents(`
528// This is auto-generated. DO NOT EDIT.
529
530java_import {
531 name: "mysdk_myjavalib@current",
532 sdk_member_name: "myjavalib",
533 visibility: ["//visibility:public"],
534 apex_available: ["//apex_available:platform"],
535 jars: ["java/myjavalib.jar"],
536}
537
538java_import {
539 name: "myjavalib",
540 prefer: false,
541 use_source_config_var: {
542 config_namespace: "module",
543 var_name: "build_from_source",
544 },
545 visibility: ["//visibility:public"],
546 apex_available: ["//apex_available:platform"],
547 jars: ["java/myjavalib.jar"],
548}
549
550sdk_snapshot {
551 name: "mysdk@current",
552 visibility: ["//visibility:public"],
553 java_header_libs: ["mysdk_myjavalib@current"],
554}
555 `),
556 )
557 })
558
Paul Duffin43f7bf02021-05-05 22:00:51 +0100559 t.Run("SOONG_SDK_SNAPSHOT_VERSION=unversioned", func(t *testing.T) {
560 result := android.GroupFixturePreparers(
561 preparer,
562 android.FixtureMergeEnv(map[string]string{
563 "SOONG_SDK_SNAPSHOT_VERSION": "unversioned",
564 }),
565 ).RunTest(t)
566
567 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk.zip")
568
569 CheckSnapshot(t, result, "mysdk", "",
570 checkAndroidBpContents(`
571// This is auto-generated. DO NOT EDIT.
572
573java_import {
574 name: "myjavalib",
575 prefer: false,
576 visibility: ["//visibility:public"],
577 apex_available: ["//apex_available:platform"],
578 jars: ["java/myjavalib.jar"],
579}
580 `),
581 )
582 })
583
584 t.Run("SOONG_SDK_SNAPSHOT_VERSION=current", func(t *testing.T) {
585 result := android.GroupFixturePreparers(
586 preparer,
587 android.FixtureMergeEnv(map[string]string{
588 "SOONG_SDK_SNAPSHOT_VERSION": "current",
589 }),
590 ).RunTest(t)
591
592 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-current.zip")
593
594 CheckSnapshot(t, result, "mysdk", "",
595 checkAndroidBpContents(`
596// This is auto-generated. DO NOT EDIT.
597
598java_import {
599 name: "mysdk_myjavalib@current",
600 sdk_member_name: "myjavalib",
601 visibility: ["//visibility:public"],
602 apex_available: ["//apex_available:platform"],
603 jars: ["java/myjavalib.jar"],
604}
605
606java_import {
607 name: "myjavalib",
608 prefer: false,
609 visibility: ["//visibility:public"],
610 apex_available: ["//apex_available:platform"],
611 jars: ["java/myjavalib.jar"],
612}
613
614sdk_snapshot {
615 name: "mysdk@current",
616 visibility: ["//visibility:public"],
617 java_header_libs: ["mysdk_myjavalib@current"],
618}
619 `),
620 )
621 })
622
623 t.Run("SOONG_SDK_SNAPSHOT_VERSION=2", func(t *testing.T) {
624 result := android.GroupFixturePreparers(
625 preparer,
626 android.FixtureMergeEnv(map[string]string{
627 "SOONG_SDK_SNAPSHOT_VERSION": "2",
628 }),
629 ).RunTest(t)
630
631 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-2.zip")
632
633 CheckSnapshot(t, result, "mysdk", "",
634 checkAndroidBpContents(`
635// This is auto-generated. DO NOT EDIT.
636
637java_import {
638 name: "mysdk_myjavalib@2",
639 sdk_member_name: "myjavalib",
640 visibility: ["//visibility:public"],
641 apex_available: ["//apex_available:platform"],
642 jars: ["java/myjavalib.jar"],
643}
644
645sdk_snapshot {
646 name: "mysdk@2",
647 visibility: ["//visibility:public"],
648 java_header_libs: ["mysdk_myjavalib@2"],
649}
650 `),
651 // A versioned snapshot cannot be used on its own so add the source back in.
652 snapshotTestPreparer(checkSnapshotWithoutSource, android.FixtureWithRootAndroidBp(bp)),
653 )
654 })
Paul Duffin39abf8f2021-09-24 14:58:27 +0100655
656 t.Run("SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE=S", func(t *testing.T) {
657 result := android.GroupFixturePreparers(
658 prepareForSdkTestWithJava,
659 java.PrepareForTestWithJavaDefaultModules,
660 java.PrepareForTestWithJavaSdkLibraryFiles,
661 java.FixtureWithLastReleaseApis("mysdklibrary"),
662 android.FixtureWithRootAndroidBp(`
663 sdk {
664 name: "mysdk",
665 bootclasspath_fragments: ["mybootclasspathfragment"],
666 }
667
668 bootclasspath_fragment {
669 name: "mybootclasspathfragment",
670 apex_available: ["myapex"],
671 contents: ["mysdklibrary"],
672 }
673
674 java_sdk_library {
675 name: "mysdklibrary",
676 srcs: ["Test.java"],
677 compile_dex: true,
678 public: {enabled: true},
679 permitted_packages: ["mysdklibrary"],
680 }
681 `),
682 android.FixtureMergeEnv(map[string]string{
683 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
684 }),
685 ).RunTest(t)
686
687 CheckSnapshot(t, result, "mysdk", "",
688 checkUnversionedAndroidBpContents(`
689// This is auto-generated. DO NOT EDIT.
690
691prebuilt_bootclasspath_fragment {
692 name: "mybootclasspathfragment",
693 prefer: false,
694 visibility: ["//visibility:public"],
695 apex_available: ["myapex"],
696 contents: ["mysdklibrary"],
697 hidden_api: {
698 annotation_flags: "hiddenapi/annotation-flags.csv",
699 metadata: "hiddenapi/metadata.csv",
700 index: "hiddenapi/index.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100701 stub_flags: "hiddenapi/stub-flags.csv",
702 all_flags: "hiddenapi/all-flags.csv",
Paul Duffin39abf8f2021-09-24 14:58:27 +0100703 },
704}
705
706java_sdk_library_import {
707 name: "mysdklibrary",
708 prefer: false,
709 visibility: ["//visibility:public"],
710 apex_available: ["//apex_available:platform"],
711 shared_library: true,
712 compile_dex: true,
713 permitted_packages: ["mysdklibrary"],
714 public: {
715 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
716 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
717 current_api: "sdk_library/public/mysdklibrary.txt",
718 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
719 sdk_version: "current",
720 },
721}
722`),
723
724 checkAllCopyRules(`
725.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
726.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
727.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin191be3a2021-08-10 16:14:16 +0100728.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/stub-flags.csv -> hiddenapi/stub-flags.csv
729.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/all-flags.csv -> hiddenapi/all-flags.csv
Paul Duffin39abf8f2021-09-24 14:58:27 +0100730.intermediates/mysdklibrary.stubs/android_common/javac/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
731.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
732.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
733`),
734 )
735 })
736
Paul Duffin62035b52021-05-05 21:35:49 +0100737}