blob: 7af5d80de64b736e6105886a394edf9c7d8917de [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", "",
Paul Duffin1a44a992022-05-06 09:38:02 +0000324 checkAllOtherCopyRules(`
325.intermediates/mysdk/common_os/mysdk-current.info -> mysdk-current.info
326.intermediates/mysdk/common_os/mysdk-current.zip -> mysdk-current.zip
327`))
Nicolas Geoffray1228e9c2020-02-27 13:45:35 +0000328}
Paul Duffinb07fa512020-03-10 22:17:04 +0000329
330type EmbeddedPropertiesStruct struct {
Paul Duffin864e1b42020-05-06 10:23:19 +0100331 S_Embedded_Common string `android:"arch_variant"`
332 S_Embedded_Different string `android:"arch_variant"`
Paul Duffinb07fa512020-03-10 22:17:04 +0000333}
334
335type testPropertiesStruct struct {
Paul Duffin4b8b7932020-05-06 12:35:38 +0100336 name string
Paul Duffinb07fa512020-03-10 22:17:04 +0000337 private string
338 Public_Kept string `sdk:"keep"`
339 S_Common string
Paul Duffin864e1b42020-05-06 10:23:19 +0100340 S_Different string `android:"arch_variant"`
Paul Duffinb07fa512020-03-10 22:17:04 +0000341 A_Common []string
Paul Duffin864e1b42020-05-06 10:23:19 +0100342 A_Different []string `android:"arch_variant"`
Paul Duffinb07fa512020-03-10 22:17:04 +0000343 F_Common *bool
Paul Duffin864e1b42020-05-06 10:23:19 +0100344 F_Different *bool `android:"arch_variant"`
Paul Duffinb07fa512020-03-10 22:17:04 +0000345 EmbeddedPropertiesStruct
346}
347
Paul Duffinf34f6d82020-04-30 15:48:31 +0100348func (p *testPropertiesStruct) optimizableProperties() interface{} {
349 return p
350}
351
Paul Duffin4b8b7932020-05-06 12:35:38 +0100352func (p *testPropertiesStruct) String() string {
353 return p.name
354}
355
356var _ propertiesContainer = (*testPropertiesStruct)(nil)
357
Paul Duffinb07fa512020-03-10 22:17:04 +0000358func TestCommonValueOptimization(t *testing.T) {
Paul Duffin4b8b7932020-05-06 12:35:38 +0100359 common := &testPropertiesStruct{name: "common"}
Paul Duffinf34f6d82020-04-30 15:48:31 +0100360 structs := []propertiesContainer{
Paul Duffinb07fa512020-03-10 22:17:04 +0000361 &testPropertiesStruct{
Paul Duffin4b8b7932020-05-06 12:35:38 +0100362 name: "struct-0",
Paul Duffinb07fa512020-03-10 22:17:04 +0000363 private: "common",
364 Public_Kept: "common",
365 S_Common: "common",
366 S_Different: "upper",
367 A_Common: []string{"first", "second"},
368 A_Different: []string{"alpha", "beta"},
369 F_Common: proptools.BoolPtr(false),
370 F_Different: proptools.BoolPtr(false),
371 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
372 S_Embedded_Common: "embedded_common",
373 S_Embedded_Different: "embedded_upper",
374 },
375 },
376 &testPropertiesStruct{
Paul Duffin4b8b7932020-05-06 12:35:38 +0100377 name: "struct-1",
Paul Duffinb07fa512020-03-10 22:17:04 +0000378 private: "common",
379 Public_Kept: "common",
380 S_Common: "common",
381 S_Different: "lower",
382 A_Common: []string{"first", "second"},
383 A_Different: []string{"alpha", "delta"},
384 F_Common: proptools.BoolPtr(false),
385 F_Different: proptools.BoolPtr(true),
386 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
387 S_Embedded_Common: "embedded_common",
388 S_Embedded_Different: "embedded_lower",
389 },
390 },
391 }
392
393 extractor := newCommonValueExtractor(common)
Paul Duffinb07fa512020-03-10 22:17:04 +0000394
Paul Duffinc459f892020-04-30 18:08:29 +0100395 err := extractor.extractCommonProperties(common, structs)
Paul Duffin36474d32021-03-12 12:19:43 +0000396 android.AssertDeepEquals(t, "unexpected error", nil, err)
Paul Duffinc459f892020-04-30 18:08:29 +0100397
Paul Duffin36474d32021-03-12 12:19:43 +0000398 android.AssertDeepEquals(t, "common properties not correct",
Paul Duffinb07fa512020-03-10 22:17:04 +0000399 &testPropertiesStruct{
Paul Duffin4b8b7932020-05-06 12:35:38 +0100400 name: "common",
Paul Duffinb07fa512020-03-10 22:17:04 +0000401 private: "",
402 Public_Kept: "",
403 S_Common: "common",
404 S_Different: "",
405 A_Common: []string{"first", "second"},
406 A_Different: []string(nil),
407 F_Common: proptools.BoolPtr(false),
408 F_Different: nil,
409 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
410 S_Embedded_Common: "embedded_common",
411 S_Embedded_Different: "",
412 },
Paul Duffin1d6c0df2020-05-06 12:50:19 +0100413 },
414 common)
Paul Duffinb07fa512020-03-10 22:17:04 +0000415
Paul Duffin36474d32021-03-12 12:19:43 +0000416 android.AssertDeepEquals(t, "updated properties[0] not correct",
Paul Duffinb07fa512020-03-10 22:17:04 +0000417 &testPropertiesStruct{
Paul Duffin4b8b7932020-05-06 12:35:38 +0100418 name: "struct-0",
Paul Duffinb07fa512020-03-10 22:17:04 +0000419 private: "common",
420 Public_Kept: "common",
421 S_Common: "",
422 S_Different: "upper",
423 A_Common: nil,
424 A_Different: []string{"alpha", "beta"},
425 F_Common: nil,
426 F_Different: proptools.BoolPtr(false),
427 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
428 S_Embedded_Common: "",
429 S_Embedded_Different: "embedded_upper",
430 },
Paul Duffin1d6c0df2020-05-06 12:50:19 +0100431 },
432 structs[0])
Paul Duffinb07fa512020-03-10 22:17:04 +0000433
Paul Duffin36474d32021-03-12 12:19:43 +0000434 android.AssertDeepEquals(t, "updated properties[1] not correct",
Paul Duffinb07fa512020-03-10 22:17:04 +0000435 &testPropertiesStruct{
Paul Duffin4b8b7932020-05-06 12:35:38 +0100436 name: "struct-1",
Paul Duffinb07fa512020-03-10 22:17:04 +0000437 private: "common",
438 Public_Kept: "common",
439 S_Common: "",
440 S_Different: "lower",
441 A_Common: nil,
442 A_Different: []string{"alpha", "delta"},
443 F_Common: nil,
444 F_Different: proptools.BoolPtr(true),
445 EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
446 S_Embedded_Common: "",
447 S_Embedded_Different: "embedded_lower",
448 },
Paul Duffin1d6c0df2020-05-06 12:50:19 +0100449 },
450 structs[1])
Paul Duffinb07fa512020-03-10 22:17:04 +0000451}
Paul Duffin864e1b42020-05-06 10:23:19 +0100452
453func TestCommonValueOptimization_InvalidArchSpecificVariants(t *testing.T) {
454 common := &testPropertiesStruct{name: "common"}
455 structs := []propertiesContainer{
456 &testPropertiesStruct{
457 name: "struct-0",
458 S_Common: "should-be-but-is-not-common0",
459 },
460 &testPropertiesStruct{
461 name: "struct-1",
462 S_Common: "should-be-but-is-not-common1",
463 },
464 }
465
466 extractor := newCommonValueExtractor(common)
467
Paul Duffin864e1b42020-05-06 10:23:19 +0100468 err := extractor.extractCommonProperties(common, structs)
Paul Duffin36474d32021-03-12 12:19:43 +0000469 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 +0100470 "struct-0" has value "should-be-but-is-not-common0"
471 "struct-1" has value "should-be-but-is-not-common1"`, err)
472}
Paul Duffin62035b52021-05-05 21:35:49 +0100473
474// Ensure that sdk snapshot related environment variables work correctly.
475func TestSnapshot_EnvConfiguration(t *testing.T) {
476 bp := `
477 sdk {
478 name: "mysdk",
479 java_header_libs: ["myjavalib"],
480 }
481
482 java_library {
483 name: "myjavalib",
484 srcs: ["Test.java"],
485 system_modules: "none",
486 sdk_version: "none",
487 compile_dex: true,
488 host_supported: true,
489 }
490 `
491 preparer := android.GroupFixturePreparers(
492 prepareForSdkTestWithJava,
493 android.FixtureWithRootAndroidBp(bp),
494 )
495
496 checkZipFile := func(t *testing.T, result *android.TestResult, expected string) {
497 zipRule := result.ModuleForTests("mysdk", "common_os").Rule("SnapshotZipFiles")
498 android.AssertStringEquals(t, "snapshot zip file", expected, zipRule.Output.String())
499 }
500
501 t.Run("no env variables", func(t *testing.T) {
502 result := preparer.RunTest(t)
503
504 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-current.zip")
505
506 CheckSnapshot(t, result, "mysdk", "",
507 checkAndroidBpContents(`
508// This is auto-generated. DO NOT EDIT.
509
510java_import {
511 name: "mysdk_myjavalib@current",
512 sdk_member_name: "myjavalib",
513 visibility: ["//visibility:public"],
514 apex_available: ["//apex_available:platform"],
515 jars: ["java/myjavalib.jar"],
516}
517
518java_import {
519 name: "myjavalib",
520 prefer: false,
521 visibility: ["//visibility:public"],
522 apex_available: ["//apex_available:platform"],
523 jars: ["java/myjavalib.jar"],
524}
525
526sdk_snapshot {
527 name: "mysdk@current",
528 visibility: ["//visibility:public"],
529 java_header_libs: ["mysdk_myjavalib@current"],
530}
531 `),
532 )
533 })
Paul Duffin64fb5262021-05-05 21:36:04 +0100534
535 t.Run("SOONG_SDK_SNAPSHOT_PREFER=true", func(t *testing.T) {
536 result := android.GroupFixturePreparers(
537 preparer,
538 android.FixtureMergeEnv(map[string]string{
539 "SOONG_SDK_SNAPSHOT_PREFER": "true",
540 }),
541 ).RunTest(t)
542
543 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-current.zip")
544
545 CheckSnapshot(t, result, "mysdk", "",
546 checkAndroidBpContents(`
547// This is auto-generated. DO NOT EDIT.
548
549java_import {
550 name: "mysdk_myjavalib@current",
551 sdk_member_name: "myjavalib",
552 visibility: ["//visibility:public"],
553 apex_available: ["//apex_available:platform"],
554 jars: ["java/myjavalib.jar"],
555}
556
557java_import {
558 name: "myjavalib",
559 prefer: true,
560 visibility: ["//visibility:public"],
561 apex_available: ["//apex_available:platform"],
562 jars: ["java/myjavalib.jar"],
563}
564
565sdk_snapshot {
566 name: "mysdk@current",
567 visibility: ["//visibility:public"],
568 java_header_libs: ["mysdk_myjavalib@current"],
569}
570 `),
571 )
572 })
Paul Duffin43f7bf02021-05-05 22:00:51 +0100573
Paul Duffinfb9a7f92021-07-06 17:18:42 +0100574 t.Run("SOONG_SDK_SNAPSHOT_USE_SOURCE_CONFIG_VAR=module:build_from_source", func(t *testing.T) {
575 result := android.GroupFixturePreparers(
576 preparer,
577 android.FixtureMergeEnv(map[string]string{
578 "SOONG_SDK_SNAPSHOT_USE_SOURCE_CONFIG_VAR": "module:build_from_source",
579 }),
580 ).RunTest(t)
581
582 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-current.zip")
583
584 CheckSnapshot(t, result, "mysdk", "",
585 checkAndroidBpContents(`
586// This is auto-generated. DO NOT EDIT.
587
588java_import {
589 name: "mysdk_myjavalib@current",
590 sdk_member_name: "myjavalib",
591 visibility: ["//visibility:public"],
592 apex_available: ["//apex_available:platform"],
593 jars: ["java/myjavalib.jar"],
594}
595
596java_import {
597 name: "myjavalib",
598 prefer: false,
599 use_source_config_var: {
600 config_namespace: "module",
601 var_name: "build_from_source",
602 },
603 visibility: ["//visibility:public"],
604 apex_available: ["//apex_available:platform"],
605 jars: ["java/myjavalib.jar"],
606}
607
608sdk_snapshot {
609 name: "mysdk@current",
610 visibility: ["//visibility:public"],
611 java_header_libs: ["mysdk_myjavalib@current"],
612}
613 `),
614 )
615 })
616
Paul Duffin43f7bf02021-05-05 22:00:51 +0100617 t.Run("SOONG_SDK_SNAPSHOT_VERSION=unversioned", func(t *testing.T) {
618 result := android.GroupFixturePreparers(
619 preparer,
620 android.FixtureMergeEnv(map[string]string{
621 "SOONG_SDK_SNAPSHOT_VERSION": "unversioned",
622 }),
623 ).RunTest(t)
624
625 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk.zip")
626
627 CheckSnapshot(t, result, "mysdk", "",
628 checkAndroidBpContents(`
629// This is auto-generated. DO NOT EDIT.
630
631java_import {
632 name: "myjavalib",
633 prefer: false,
634 visibility: ["//visibility:public"],
635 apex_available: ["//apex_available:platform"],
636 jars: ["java/myjavalib.jar"],
637}
638 `),
639 )
640 })
641
642 t.Run("SOONG_SDK_SNAPSHOT_VERSION=current", func(t *testing.T) {
643 result := android.GroupFixturePreparers(
644 preparer,
645 android.FixtureMergeEnv(map[string]string{
646 "SOONG_SDK_SNAPSHOT_VERSION": "current",
647 }),
648 ).RunTest(t)
649
650 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-current.zip")
651
652 CheckSnapshot(t, result, "mysdk", "",
653 checkAndroidBpContents(`
654// This is auto-generated. DO NOT EDIT.
655
656java_import {
657 name: "mysdk_myjavalib@current",
658 sdk_member_name: "myjavalib",
659 visibility: ["//visibility:public"],
660 apex_available: ["//apex_available:platform"],
661 jars: ["java/myjavalib.jar"],
662}
663
664java_import {
665 name: "myjavalib",
666 prefer: false,
667 visibility: ["//visibility:public"],
668 apex_available: ["//apex_available:platform"],
669 jars: ["java/myjavalib.jar"],
670}
671
672sdk_snapshot {
673 name: "mysdk@current",
674 visibility: ["//visibility:public"],
675 java_header_libs: ["mysdk_myjavalib@current"],
676}
677 `),
678 )
679 })
680
681 t.Run("SOONG_SDK_SNAPSHOT_VERSION=2", func(t *testing.T) {
682 result := android.GroupFixturePreparers(
683 preparer,
684 android.FixtureMergeEnv(map[string]string{
685 "SOONG_SDK_SNAPSHOT_VERSION": "2",
686 }),
687 ).RunTest(t)
688
689 checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-2.zip")
690
691 CheckSnapshot(t, result, "mysdk", "",
692 checkAndroidBpContents(`
693// This is auto-generated. DO NOT EDIT.
694
695java_import {
696 name: "mysdk_myjavalib@2",
697 sdk_member_name: "myjavalib",
698 visibility: ["//visibility:public"],
699 apex_available: ["//apex_available:platform"],
700 jars: ["java/myjavalib.jar"],
701}
702
703sdk_snapshot {
704 name: "mysdk@2",
705 visibility: ["//visibility:public"],
706 java_header_libs: ["mysdk_myjavalib@2"],
707}
708 `),
709 // A versioned snapshot cannot be used on its own so add the source back in.
710 snapshotTestPreparer(checkSnapshotWithoutSource, android.FixtureWithRootAndroidBp(bp)),
711 )
712 })
Paul Duffin39abf8f2021-09-24 14:58:27 +0100713
714 t.Run("SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE=S", func(t *testing.T) {
715 result := android.GroupFixturePreparers(
716 prepareForSdkTestWithJava,
717 java.PrepareForTestWithJavaDefaultModules,
718 java.PrepareForTestWithJavaSdkLibraryFiles,
719 java.FixtureWithLastReleaseApis("mysdklibrary"),
720 android.FixtureWithRootAndroidBp(`
721 sdk {
722 name: "mysdk",
723 bootclasspath_fragments: ["mybootclasspathfragment"],
724 }
725
726 bootclasspath_fragment {
727 name: "mybootclasspathfragment",
728 apex_available: ["myapex"],
729 contents: ["mysdklibrary"],
730 }
731
732 java_sdk_library {
733 name: "mysdklibrary",
734 srcs: ["Test.java"],
735 compile_dex: true,
736 public: {enabled: true},
737 permitted_packages: ["mysdklibrary"],
738 }
739 `),
740 android.FixtureMergeEnv(map[string]string{
741 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
742 }),
743 ).RunTest(t)
744
745 CheckSnapshot(t, result, "mysdk", "",
746 checkUnversionedAndroidBpContents(`
747// This is auto-generated. DO NOT EDIT.
748
749prebuilt_bootclasspath_fragment {
750 name: "mybootclasspathfragment",
751 prefer: false,
752 visibility: ["//visibility:public"],
753 apex_available: ["myapex"],
754 contents: ["mysdklibrary"],
755 hidden_api: {
756 annotation_flags: "hiddenapi/annotation-flags.csv",
757 metadata: "hiddenapi/metadata.csv",
758 index: "hiddenapi/index.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100759 stub_flags: "hiddenapi/stub-flags.csv",
760 all_flags: "hiddenapi/all-flags.csv",
Paul Duffin39abf8f2021-09-24 14:58:27 +0100761 },
762}
763
764java_sdk_library_import {
765 name: "mysdklibrary",
766 prefer: false,
767 visibility: ["//visibility:public"],
768 apex_available: ["//apex_available:platform"],
769 shared_library: true,
770 compile_dex: true,
771 permitted_packages: ["mysdklibrary"],
772 public: {
773 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
774 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
775 current_api: "sdk_library/public/mysdklibrary.txt",
776 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
777 sdk_version: "current",
778 },
779}
780`),
781
782 checkAllCopyRules(`
783.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
784.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
785.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin191be3a2021-08-10 16:14:16 +0100786.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/stub-flags.csv -> hiddenapi/stub-flags.csv
787.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/all-flags.csv -> hiddenapi/all-flags.csv
Paul Duffin39abf8f2021-09-24 14:58:27 +0100788.intermediates/mysdklibrary.stubs/android_common/javac/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
789.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
790.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
791`),
792 )
793 })
794
Paul Duffin62035b52021-05-05 21:35:49 +0100795}