blob: 83294f6abdda27ee4ee78ea13c19c5b30464d972 [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
Jiyong Parka7bc8ad2019-10-15 15:20:07 +090040func TestDepNotInRequiredSdks(t *testing.T) {
41 testSdkError(t, `module "myjavalib".*depends on "otherlib".*that isn't part of the required SDKs:.*`, `
42 sdk {
43 name: "mysdk",
Paul Duffina0dbf432019-12-05 11:25:53 +000044 java_header_libs: ["sdkmember"],
Jiyong Parka7bc8ad2019-10-15 15:20:07 +090045 }
46
47 sdk_snapshot {
48 name: "mysdk@1",
Paul Duffina0dbf432019-12-05 11:25:53 +000049 java_header_libs: ["sdkmember_mysdk_1"],
Jiyong Parka7bc8ad2019-10-15 15:20:07 +090050 }
51
52 java_import {
53 name: "sdkmember",
54 prefer: false,
55 host_supported: true,
56 }
57
58 java_import {
59 name: "sdkmember_mysdk_1",
60 sdk_member_name: "sdkmember",
61 host_supported: true,
62 }
63
64 java_library {
65 name: "myjavalib",
66 srcs: ["Test.java"],
67 libs: [
68 "sdkmember",
69 "otherlib",
70 ],
71 system_modules: "none",
72 sdk_version: "none",
73 compile_dex: true,
74 host_supported: true,
Jooyung Han5e9013b2020-03-10 06:23:13 +090075 apex_available: ["myapex"],
Jiyong Parka7bc8ad2019-10-15 15:20:07 +090076 }
77
78 // this lib is no in mysdk
79 java_library {
80 name: "otherlib",
81 srcs: ["Test.java"],
82 system_modules: "none",
83 sdk_version: "none",
84 compile_dex: true,
85 host_supported: true,
86 }
87
88 apex {
89 name: "myapex",
90 java_libs: ["myjavalib"],
91 uses_sdks: ["mysdk@1"],
92 key: "myapex.key",
93 certificate: ":myapex.cert",
94 }
95 `)
96}
Paul Duffin593b3c92019-12-05 14:31:48 +000097
98// Ensure that prebuilt modules have the same effective visibility as the source
99// modules.
100func TestSnapshotVisibility(t *testing.T) {
101 packageBp := `
102 package {
103 default_visibility: ["//other/foo"],
104 }
105
106 sdk {
107 name: "mysdk",
108 visibility: [
109 "//other/foo",
110 // This short form will be replaced with //package:__subpackages__ in the
111 // generated sdk_snapshot.
112 ":__subpackages__",
113 ],
Paul Duffin157f40f2020-09-29 16:01:08 +0100114 prebuilt_visibility: [
115 "//prebuilts/mysdk",
116 ],
Paul Duffin593b3c92019-12-05 14:31:48 +0000117 java_header_libs: [
118 "myjavalib",
119 "mypublicjavalib",
120 "mydefaultedjavalib",
Martin Stjernholm64aeaad2020-05-13 22:11:40 +0100121 "myprivatejavalib",
Paul Duffin593b3c92019-12-05 14:31:48 +0000122 ],
123 }
124
125 java_library {
126 name: "myjavalib",
127 // Uses package default visibility
128 srcs: ["Test.java"],
129 system_modules: "none",
130 sdk_version: "none",
131 }
132
Paul Duffin44885e22020-02-19 16:10:09 +0000133 java_defaults {
134 name: "java-defaults",
Jooyung Han5e9013b2020-03-10 06:23:13 +0900135 visibility: ["//other/bar"],
Paul Duffin44885e22020-02-19 16:10:09 +0000136 }
137
Paul Duffin593b3c92019-12-05 14:31:48 +0000138 java_library {
139 name: "mypublicjavalib",
Paul Duffin44885e22020-02-19 16:10:09 +0000140 defaults: ["java-defaults"],
Paul Duffin593b3c92019-12-05 14:31:48 +0000141 visibility: ["//visibility:public"],
142 srcs: ["Test.java"],
143 system_modules: "none",
144 sdk_version: "none",
145 }
146
147 java_defaults {
148 name: "myjavadefaults",
149 visibility: ["//other/bar"],
150 }
151
152 java_library {
153 name: "mydefaultedjavalib",
154 defaults: ["myjavadefaults"],
155 srcs: ["Test.java"],
156 system_modules: "none",
157 sdk_version: "none",
158 }
Martin Stjernholm64aeaad2020-05-13 22:11:40 +0100159
160 java_library {
161 name: "myprivatejavalib",
162 srcs: ["Test.java"],
163 visibility: ["//visibility:private"],
164 system_modules: "none",
165 sdk_version: "none",
166 }
Paul Duffin593b3c92019-12-05 14:31:48 +0000167 `
168
169 result := testSdkWithFs(t, ``,
170 map[string][]byte{
171 "package/Test.java": nil,
172 "package/Android.bp": []byte(packageBp),
173 })
174
Paul Duffin36474d32021-03-12 12:19:43 +0000175 CheckSnapshot(t, result, "mysdk", "package",
Paul Duffin593b3c92019-12-05 14:31:48 +0000176 checkAndroidBpContents(`
177// This is auto-generated. DO NOT EDIT.
178
179java_import {
180 name: "mysdk_myjavalib@current",
181 sdk_member_name: "myjavalib",
Martin Stjernholm0641d182020-05-13 02:20:06 +0100182 visibility: [
183 "//other/foo",
184 "//package",
Paul Duffin157f40f2020-09-29 16:01:08 +0100185 "//prebuilts/mysdk",
Martin Stjernholm0641d182020-05-13 02:20:06 +0100186 ],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000187 apex_available: ["//apex_available:platform"],
Paul Duffin593b3c92019-12-05 14:31:48 +0000188 jars: ["java/myjavalib.jar"],
189}
190
191java_import {
192 name: "myjavalib",
193 prefer: false,
Martin Stjernholm0641d182020-05-13 02:20:06 +0100194 visibility: [
195 "//other/foo",
196 "//package",
Paul Duffin157f40f2020-09-29 16:01:08 +0100197 "//prebuilts/mysdk",
Martin Stjernholm0641d182020-05-13 02:20:06 +0100198 ],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000199 apex_available: ["//apex_available:platform"],
Paul Duffin593b3c92019-12-05 14:31:48 +0000200 jars: ["java/myjavalib.jar"],
201}
202
203java_import {
204 name: "mysdk_mypublicjavalib@current",
205 sdk_member_name: "mypublicjavalib",
206 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000207 apex_available: ["//apex_available:platform"],
Paul Duffin593b3c92019-12-05 14:31:48 +0000208 jars: ["java/mypublicjavalib.jar"],
209}
210
211java_import {
212 name: "mypublicjavalib",
213 prefer: false,
214 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000215 apex_available: ["//apex_available:platform"],
Paul Duffin593b3c92019-12-05 14:31:48 +0000216 jars: ["java/mypublicjavalib.jar"],
217}
218
219java_import {
220 name: "mysdk_mydefaultedjavalib@current",
221 sdk_member_name: "mydefaultedjavalib",
Martin Stjernholm0641d182020-05-13 02:20:06 +0100222 visibility: [
223 "//other/bar",
224 "//package",
Paul Duffin157f40f2020-09-29 16:01:08 +0100225 "//prebuilts/mysdk",
Martin Stjernholm0641d182020-05-13 02:20:06 +0100226 ],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000227 apex_available: ["//apex_available:platform"],
Paul Duffin593b3c92019-12-05 14:31:48 +0000228 jars: ["java/mydefaultedjavalib.jar"],
229}
230
231java_import {
232 name: "mydefaultedjavalib",
233 prefer: false,
Martin Stjernholm0641d182020-05-13 02:20:06 +0100234 visibility: [
235 "//other/bar",
236 "//package",
Paul Duffin157f40f2020-09-29 16:01:08 +0100237 "//prebuilts/mysdk",
Martin Stjernholm0641d182020-05-13 02:20:06 +0100238 ],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000239 apex_available: ["//apex_available:platform"],
Paul Duffin593b3c92019-12-05 14:31:48 +0000240 jars: ["java/mydefaultedjavalib.jar"],
241}
242
Martin Stjernholm64aeaad2020-05-13 22:11:40 +0100243java_import {
244 name: "mysdk_myprivatejavalib@current",
245 sdk_member_name: "myprivatejavalib",
Paul Duffin157f40f2020-09-29 16:01:08 +0100246 visibility: [
247 "//package",
248 "//prebuilts/mysdk",
249 ],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000250 apex_available: ["//apex_available:platform"],
Martin Stjernholm64aeaad2020-05-13 22:11:40 +0100251 jars: ["java/myprivatejavalib.jar"],
252}
253
254java_import {
255 name: "myprivatejavalib",
256 prefer: false,
Paul Duffin157f40f2020-09-29 16:01:08 +0100257 visibility: [
258 "//package",
259 "//prebuilts/mysdk",
260 ],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000261 apex_available: ["//apex_available:platform"],
Martin Stjernholm64aeaad2020-05-13 22:11:40 +0100262 jars: ["java/myprivatejavalib.jar"],
263}
264
Paul Duffin593b3c92019-12-05 14:31:48 +0000265sdk_snapshot {
266 name: "mysdk@current",
267 visibility: [
Martin Stjernholm01407c52020-05-13 01:54:21 +0100268 "//other/foo",
Paul Duffin593b3c92019-12-05 14:31:48 +0000269 "//package:__subpackages__",
270 ],
271 java_header_libs: [
272 "mysdk_myjavalib@current",
273 "mysdk_mypublicjavalib@current",
274 "mysdk_mydefaultedjavalib@current",
Martin Stjernholm64aeaad2020-05-13 22:11:40 +0100275 "mysdk_myprivatejavalib@current",
Paul Duffin593b3c92019-12-05 14:31:48 +0000276 ],
277}
278`))
279}
Nicolas Geoffray1228e9c2020-02-27 13:45:35 +0000280
Paul Duffin157f40f2020-09-29 16:01:08 +0100281func TestPrebuiltVisibilityProperty_IsValidated(t *testing.T) {
282 testSdkError(t, `prebuilt_visibility: cannot mix "//visibility:private" with any other visibility rules`, `
283 sdk {
284 name: "mysdk",
285 prebuilt_visibility: [
286 "//foo",
287 "//visibility:private",
288 ],
289 }
290`)
291}
292
293func TestPrebuiltVisibilityProperty_AddPrivate(t *testing.T) {
294 testSdkError(t, `prebuilt_visibility: "//visibility:private" does not widen the visibility`, `
295 sdk {
296 name: "mysdk",
297 prebuilt_visibility: [
298 "//visibility:private",
299 ],
300 java_header_libs: [
301 "myjavalib",
302 ],
303 }
304
305 java_library {
306 name: "myjavalib",
307 // Uses package default visibility
308 srcs: ["Test.java"],
309 system_modules: "none",
310 sdk_version: "none",
311 }
312`)
313}
314
Paul Duffin8edc99c2021-03-09 23:02:20 +0000315func TestSdkInstall(t *testing.T) {
Nicolas Geoffray1228e9c2020-02-27 13:45:35 +0000316 sdk := `
317 sdk {
318 name: "mysdk",
319 }
320 `
Paul Duffin8edc99c2021-03-09 23:02:20 +0000321 result := testSdkWithFs(t, sdk, nil)
Nicolas Geoffray1228e9c2020-02-27 13:45:35 +0000322
Paul Duffin36474d32021-03-12 12:19:43 +0000323 CheckSnapshot(t, result, "mysdk", "",
324 checkAllOtherCopyRules(`.intermediates/mysdk/common_os/mysdk-current.zip -> mysdk-current.zip`))
Nicolas Geoffray1228e9c2020-02-27 13:45:35 +0000325}
Paul Duffinb07fa512020-03-10 22:17:04 +0000326
327type EmbeddedPropertiesStruct struct {
Paul Duffin864e1b42020-05-06 10:23:19 +0100328 S_Embedded_Common string `android:"arch_variant"`
329 S_Embedded_Different string `android:"arch_variant"`
Paul Duffinb07fa512020-03-10 22:17:04 +0000330}
331
332type testPropertiesStruct struct {
Paul Duffin4b8b7932020-05-06 12:35:38 +0100333 name string
Paul Duffinb07fa512020-03-10 22:17:04 +0000334 private string
335 Public_Kept string `sdk:"keep"`
336 S_Common string
Paul Duffin864e1b42020-05-06 10:23:19 +0100337 S_Different string `android:"arch_variant"`
Paul Duffinb07fa512020-03-10 22:17:04 +0000338 A_Common []string
Paul Duffin864e1b42020-05-06 10:23:19 +0100339 A_Different []string `android:"arch_variant"`
Paul Duffinb07fa512020-03-10 22:17:04 +0000340 F_Common *bool
Paul Duffin864e1b42020-05-06 10:23:19 +0100341 F_Different *bool `android:"arch_variant"`
Paul Duffinb07fa512020-03-10 22:17:04 +0000342 EmbeddedPropertiesStruct
343}
344
Paul Duffinf34f6d82020-04-30 15:48:31 +0100345func (p *testPropertiesStruct) optimizableProperties() interface{} {
346 return p
347}
348
Paul Duffin4b8b7932020-05-06 12:35:38 +0100349func (p *testPropertiesStruct) String() string {
350 return p.name
351}
352
353var _ propertiesContainer = (*testPropertiesStruct)(nil)
354
Paul Duffinb07fa512020-03-10 22:17:04 +0000355func TestCommonValueOptimization(t *testing.T) {
Paul Duffin4b8b7932020-05-06 12:35:38 +0100356 common := &testPropertiesStruct{name: "common"}
Paul Duffinf34f6d82020-04-30 15:48:31 +0100357 structs := []propertiesContainer{
Paul Duffinb07fa512020-03-10 22:17:04 +0000358 &testPropertiesStruct{
Paul Duffin4b8b7932020-05-06 12:35:38 +0100359 name: "struct-0",
Paul Duffinb07fa512020-03-10 22:17:04 +0000360 private: "common",
361 Public_Kept: "common",
362 S_Common: "common",
363 S_Different: "upper",
364 A_Common: []string{"first", "second"},
365 A_Different: []string{"alpha", "beta"},
366 F_Common: proptools.BoolPtr(false),
367 F_Different: proptools.BoolPtr(false),
368 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
369 S_Embedded_Common: "embedded_common",
370 S_Embedded_Different: "embedded_upper",
371 },
372 },
373 &testPropertiesStruct{
Paul Duffin4b8b7932020-05-06 12:35:38 +0100374 name: "struct-1",
Paul Duffinb07fa512020-03-10 22:17:04 +0000375 private: "common",
376 Public_Kept: "common",
377 S_Common: "common",
378 S_Different: "lower",
379 A_Common: []string{"first", "second"},
380 A_Different: []string{"alpha", "delta"},
381 F_Common: proptools.BoolPtr(false),
382 F_Different: proptools.BoolPtr(true),
383 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
384 S_Embedded_Common: "embedded_common",
385 S_Embedded_Different: "embedded_lower",
386 },
387 },
388 }
389
390 extractor := newCommonValueExtractor(common)
Paul Duffinb07fa512020-03-10 22:17:04 +0000391
Paul Duffinc459f892020-04-30 18:08:29 +0100392 err := extractor.extractCommonProperties(common, structs)
Paul Duffin36474d32021-03-12 12:19:43 +0000393 android.AssertDeepEquals(t, "unexpected error", nil, err)
Paul Duffinc459f892020-04-30 18:08:29 +0100394
Paul Duffin36474d32021-03-12 12:19:43 +0000395 android.AssertDeepEquals(t, "common properties not correct",
Paul Duffinb07fa512020-03-10 22:17:04 +0000396 &testPropertiesStruct{
Paul Duffin4b8b7932020-05-06 12:35:38 +0100397 name: "common",
Paul Duffinb07fa512020-03-10 22:17:04 +0000398 private: "",
399 Public_Kept: "",
400 S_Common: "common",
401 S_Different: "",
402 A_Common: []string{"first", "second"},
403 A_Different: []string(nil),
404 F_Common: proptools.BoolPtr(false),
405 F_Different: nil,
406 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
407 S_Embedded_Common: "embedded_common",
408 S_Embedded_Different: "",
409 },
Paul Duffin1d6c0df2020-05-06 12:50:19 +0100410 },
411 common)
Paul Duffinb07fa512020-03-10 22:17:04 +0000412
Paul Duffin36474d32021-03-12 12:19:43 +0000413 android.AssertDeepEquals(t, "updated properties[0] not correct",
Paul Duffinb07fa512020-03-10 22:17:04 +0000414 &testPropertiesStruct{
Paul Duffin4b8b7932020-05-06 12:35:38 +0100415 name: "struct-0",
Paul Duffinb07fa512020-03-10 22:17:04 +0000416 private: "common",
417 Public_Kept: "common",
418 S_Common: "",
419 S_Different: "upper",
420 A_Common: nil,
421 A_Different: []string{"alpha", "beta"},
422 F_Common: nil,
423 F_Different: proptools.BoolPtr(false),
424 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
425 S_Embedded_Common: "",
426 S_Embedded_Different: "embedded_upper",
427 },
Paul Duffin1d6c0df2020-05-06 12:50:19 +0100428 },
429 structs[0])
Paul Duffinb07fa512020-03-10 22:17:04 +0000430
Paul Duffin36474d32021-03-12 12:19:43 +0000431 android.AssertDeepEquals(t, "updated properties[1] not correct",
Paul Duffinb07fa512020-03-10 22:17:04 +0000432 &testPropertiesStruct{
Paul Duffin4b8b7932020-05-06 12:35:38 +0100433 name: "struct-1",
Paul Duffinb07fa512020-03-10 22:17:04 +0000434 private: "common",
435 Public_Kept: "common",
436 S_Common: "",
437 S_Different: "lower",
438 A_Common: nil,
439 A_Different: []string{"alpha", "delta"},
440 F_Common: nil,
441 F_Different: proptools.BoolPtr(true),
442 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
443 S_Embedded_Common: "",
444 S_Embedded_Different: "embedded_lower",
445 },
Paul Duffin1d6c0df2020-05-06 12:50:19 +0100446 },
447 structs[1])
Paul Duffinb07fa512020-03-10 22:17:04 +0000448}
Paul Duffin864e1b42020-05-06 10:23:19 +0100449
450func TestCommonValueOptimization_InvalidArchSpecificVariants(t *testing.T) {
451 common := &testPropertiesStruct{name: "common"}
452 structs := []propertiesContainer{
453 &testPropertiesStruct{
454 name: "struct-0",
455 S_Common: "should-be-but-is-not-common0",
456 },
457 &testPropertiesStruct{
458 name: "struct-1",
459 S_Common: "should-be-but-is-not-common1",
460 },
461 }
462
463 extractor := newCommonValueExtractor(common)
464
Paul Duffin864e1b42020-05-06 10:23:19 +0100465 err := extractor.extractCommonProperties(common, structs)
Paul Duffin36474d32021-03-12 12:19:43 +0000466 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 +0100467 "struct-0" has value "should-be-but-is-not-common0"
468 "struct-1" has value "should-be-but-is-not-common1"`, err)
469}
Paul Duffin62035b52021-05-05 21:35:49 +0100470
471// Ensure that sdk snapshot related environment variables work correctly.
472func TestSnapshot_EnvConfiguration(t *testing.T) {
473 bp := `
474 sdk {
475 name: "mysdk",
476 java_header_libs: ["myjavalib"],
477 }
478
479 java_library {
480 name: "myjavalib",
481 srcs: ["Test.java"],
482 system_modules: "none",
483 sdk_version: "none",
484 compile_dex: true,
485 host_supported: true,
486 }
487 `
488 preparer := android.GroupFixturePreparers(
489 prepareForSdkTestWithJava,
490 android.FixtureWithRootAndroidBp(bp),
491 )
492
493 checkZipFile := func(t *testing.T, result *android.TestResult, expected string) {
494 zipRule := result.ModuleForTests("mysdk", "common_os").Rule("SnapshotZipFiles")
495 android.AssertStringEquals(t, "snapshot zip file", expected, zipRule.Output.String())
496 }
497
498 t.Run("no env variables", func(t *testing.T) {
499 result := preparer.RunTest(t)
500
501 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-current.zip")
502
503 CheckSnapshot(t, result, "mysdk", "",
504 checkAndroidBpContents(`
505// This is auto-generated. DO NOT EDIT.
506
507java_import {
508 name: "mysdk_myjavalib@current",
509 sdk_member_name: "myjavalib",
510 visibility: ["//visibility:public"],
511 apex_available: ["//apex_available:platform"],
512 jars: ["java/myjavalib.jar"],
513}
514
515java_import {
516 name: "myjavalib",
517 prefer: false,
518 visibility: ["//visibility:public"],
519 apex_available: ["//apex_available:platform"],
520 jars: ["java/myjavalib.jar"],
521}
522
523sdk_snapshot {
524 name: "mysdk@current",
525 visibility: ["//visibility:public"],
526 java_header_libs: ["mysdk_myjavalib@current"],
527}
528 `),
529 )
530 })
Paul Duffin64fb5262021-05-05 21:36:04 +0100531
532 t.Run("SOONG_SDK_SNAPSHOT_PREFER=true", func(t *testing.T) {
533 result := android.GroupFixturePreparers(
534 preparer,
535 android.FixtureMergeEnv(map[string]string{
536 "SOONG_SDK_SNAPSHOT_PREFER": "true",
537 }),
538 ).RunTest(t)
539
540 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-current.zip")
541
542 CheckSnapshot(t, result, "mysdk", "",
543 checkAndroidBpContents(`
544// This is auto-generated. DO NOT EDIT.
545
546java_import {
547 name: "mysdk_myjavalib@current",
548 sdk_member_name: "myjavalib",
549 visibility: ["//visibility:public"],
550 apex_available: ["//apex_available:platform"],
551 jars: ["java/myjavalib.jar"],
552}
553
554java_import {
555 name: "myjavalib",
556 prefer: true,
557 visibility: ["//visibility:public"],
558 apex_available: ["//apex_available:platform"],
559 jars: ["java/myjavalib.jar"],
560}
561
562sdk_snapshot {
563 name: "mysdk@current",
564 visibility: ["//visibility:public"],
565 java_header_libs: ["mysdk_myjavalib@current"],
566}
567 `),
568 )
569 })
Paul Duffin43f7bf02021-05-05 22:00:51 +0100570
Paul Duffinfb9a7f92021-07-06 17:18:42 +0100571 t.Run("SOONG_SDK_SNAPSHOT_USE_SOURCE_CONFIG_VAR=module:build_from_source", func(t *testing.T) {
572 result := android.GroupFixturePreparers(
573 preparer,
574 android.FixtureMergeEnv(map[string]string{
575 "SOONG_SDK_SNAPSHOT_USE_SOURCE_CONFIG_VAR": "module:build_from_source",
576 }),
577 ).RunTest(t)
578
579 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-current.zip")
580
581 CheckSnapshot(t, result, "mysdk", "",
582 checkAndroidBpContents(`
583// This is auto-generated. DO NOT EDIT.
584
585java_import {
586 name: "mysdk_myjavalib@current",
587 sdk_member_name: "myjavalib",
588 visibility: ["//visibility:public"],
589 apex_available: ["//apex_available:platform"],
590 jars: ["java/myjavalib.jar"],
591}
592
593java_import {
594 name: "myjavalib",
595 prefer: false,
596 use_source_config_var: {
597 config_namespace: "module",
598 var_name: "build_from_source",
599 },
600 visibility: ["//visibility:public"],
601 apex_available: ["//apex_available:platform"],
602 jars: ["java/myjavalib.jar"],
603}
604
605sdk_snapshot {
606 name: "mysdk@current",
607 visibility: ["//visibility:public"],
608 java_header_libs: ["mysdk_myjavalib@current"],
609}
610 `),
611 )
612 })
613
Paul Duffin43f7bf02021-05-05 22:00:51 +0100614 t.Run("SOONG_SDK_SNAPSHOT_VERSION=unversioned", func(t *testing.T) {
615 result := android.GroupFixturePreparers(
616 preparer,
617 android.FixtureMergeEnv(map[string]string{
618 "SOONG_SDK_SNAPSHOT_VERSION": "unversioned",
619 }),
620 ).RunTest(t)
621
622 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk.zip")
623
624 CheckSnapshot(t, result, "mysdk", "",
625 checkAndroidBpContents(`
626// This is auto-generated. DO NOT EDIT.
627
628java_import {
629 name: "myjavalib",
630 prefer: false,
631 visibility: ["//visibility:public"],
632 apex_available: ["//apex_available:platform"],
633 jars: ["java/myjavalib.jar"],
634}
635 `),
636 )
637 })
638
639 t.Run("SOONG_SDK_SNAPSHOT_VERSION=current", func(t *testing.T) {
640 result := android.GroupFixturePreparers(
641 preparer,
642 android.FixtureMergeEnv(map[string]string{
643 "SOONG_SDK_SNAPSHOT_VERSION": "current",
644 }),
645 ).RunTest(t)
646
647 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-current.zip")
648
649 CheckSnapshot(t, result, "mysdk", "",
650 checkAndroidBpContents(`
651// This is auto-generated. DO NOT EDIT.
652
653java_import {
654 name: "mysdk_myjavalib@current",
655 sdk_member_name: "myjavalib",
656 visibility: ["//visibility:public"],
657 apex_available: ["//apex_available:platform"],
658 jars: ["java/myjavalib.jar"],
659}
660
661java_import {
662 name: "myjavalib",
663 prefer: false,
664 visibility: ["//visibility:public"],
665 apex_available: ["//apex_available:platform"],
666 jars: ["java/myjavalib.jar"],
667}
668
669sdk_snapshot {
670 name: "mysdk@current",
671 visibility: ["//visibility:public"],
672 java_header_libs: ["mysdk_myjavalib@current"],
673}
674 `),
675 )
676 })
677
678 t.Run("SOONG_SDK_SNAPSHOT_VERSION=2", func(t *testing.T) {
679 result := android.GroupFixturePreparers(
680 preparer,
681 android.FixtureMergeEnv(map[string]string{
682 "SOONG_SDK_SNAPSHOT_VERSION": "2",
683 }),
684 ).RunTest(t)
685
686 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-2.zip")
687
688 CheckSnapshot(t, result, "mysdk", "",
689 checkAndroidBpContents(`
690// This is auto-generated. DO NOT EDIT.
691
692java_import {
693 name: "mysdk_myjavalib@2",
694 sdk_member_name: "myjavalib",
695 visibility: ["//visibility:public"],
696 apex_available: ["//apex_available:platform"],
697 jars: ["java/myjavalib.jar"],
698}
699
700sdk_snapshot {
701 name: "mysdk@2",
702 visibility: ["//visibility:public"],
703 java_header_libs: ["mysdk_myjavalib@2"],
704}
705 `),
706 // A versioned snapshot cannot be used on its own so add the source back in.
707 snapshotTestPreparer(checkSnapshotWithoutSource, android.FixtureWithRootAndroidBp(bp)),
708 )
709 })
Paul Duffin39abf8f2021-09-24 14:58:27 +0100710
711 t.Run("SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE=S", func(t *testing.T) {
712 result := android.GroupFixturePreparers(
713 prepareForSdkTestWithJava,
714 java.PrepareForTestWithJavaDefaultModules,
715 java.PrepareForTestWithJavaSdkLibraryFiles,
716 java.FixtureWithLastReleaseApis("mysdklibrary"),
717 android.FixtureWithRootAndroidBp(`
718 sdk {
719 name: "mysdk",
720 bootclasspath_fragments: ["mybootclasspathfragment"],
721 }
722
723 bootclasspath_fragment {
724 name: "mybootclasspathfragment",
725 apex_available: ["myapex"],
726 contents: ["mysdklibrary"],
727 }
728
729 java_sdk_library {
730 name: "mysdklibrary",
731 srcs: ["Test.java"],
732 compile_dex: true,
733 public: {enabled: true},
734 permitted_packages: ["mysdklibrary"],
735 }
736 `),
737 android.FixtureMergeEnv(map[string]string{
738 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
739 }),
740 ).RunTest(t)
741
742 CheckSnapshot(t, result, "mysdk", "",
743 checkUnversionedAndroidBpContents(`
744// This is auto-generated. DO NOT EDIT.
745
746prebuilt_bootclasspath_fragment {
747 name: "mybootclasspathfragment",
748 prefer: false,
749 visibility: ["//visibility:public"],
750 apex_available: ["myapex"],
751 contents: ["mysdklibrary"],
752 hidden_api: {
753 annotation_flags: "hiddenapi/annotation-flags.csv",
754 metadata: "hiddenapi/metadata.csv",
755 index: "hiddenapi/index.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100756 stub_flags: "hiddenapi/stub-flags.csv",
757 all_flags: "hiddenapi/all-flags.csv",
Paul Duffin39abf8f2021-09-24 14:58:27 +0100758 },
759}
760
761java_sdk_library_import {
762 name: "mysdklibrary",
763 prefer: false,
764 visibility: ["//visibility:public"],
765 apex_available: ["//apex_available:platform"],
766 shared_library: true,
767 compile_dex: true,
768 permitted_packages: ["mysdklibrary"],
769 public: {
770 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
771 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
772 current_api: "sdk_library/public/mysdklibrary.txt",
773 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
774 sdk_version: "current",
775 },
776}
777`),
778
779 checkAllCopyRules(`
780.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 Duffin191be3a2021-08-10 16:14:16 +0100783.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/stub-flags.csv -> hiddenapi/stub-flags.csv
784.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/all-flags.csv -> hiddenapi/all-flags.csv
Paul Duffin39abf8f2021-09-24 14:58:27 +0100785.intermediates/mysdklibrary.stubs/android_common/javac/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
786.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
787.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
788`),
789 )
790 })
791
Paul Duffin62035b52021-05-05 21:35:49 +0100792}