1// Copyright (C) 2019 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
17import (
18	"testing"
19
20	"android/soong/android"
21	"android/soong/java"
22)
23
24var prepareForSdkTestWithJava = android.GroupFixturePreparers(
25	java.PrepareForTestWithJavaBuildComponents,
26	PrepareForTestWithSdkBuildComponents,
27
28	// Ensure that all source paths are provided. This helps ensure that the snapshot generation is
29	// consistent and all files referenced from the snapshot's Android.bp file have actually been
30	// copied into the snapshot.
31	android.PrepareForTestDisallowNonExistentPaths,
32
33	// Files needs by most of the tests.
34	android.MockFS{
35		"Test.java": nil,
36	}.AddToFixture(),
37)
38
39var prepareForSdkTestWithJavaSdkLibrary = android.GroupFixturePreparers(
40	prepareForSdkTestWithJava,
41	java.PrepareForTestWithJavaDefaultModules,
42	java.PrepareForTestWithJavaSdkLibraryFiles,
43	java.FixtureWithLastReleaseApis("myjavalib"),
44)
45
46// Contains tests for SDK members provided by the java package.
47
48func TestSdkDependsOnSourceEvenWhenPrebuiltPreferred(t *testing.T) {
49	result := android.GroupFixturePreparers(prepareForSdkTestWithJava).RunTestWithBp(t, `
50		sdk {
51			name: "mysdk",
52			java_header_libs: ["sdkmember"],
53		}
54
55		java_library {
56			name: "sdkmember",
57			srcs: ["Test.java"],
58			system_modules: "none",
59			sdk_version: "none",
60		}
61	`)
62
63	// Make sure that the mysdk module depends on "sdkmember" and not "prebuilt_sdkmember".
64	sdkChecker := func(t *testing.T, result *android.TestResult) {
65		java.CheckModuleDependencies(t, result.TestContext, "mysdk", "android_common", []string{"sdkmember"})
66	}
67
68	CheckSnapshot(t, result, "mysdk", "",
69		snapshotTestChecker(checkSnapshotWithSourcePreferred, sdkChecker),
70		snapshotTestChecker(checkSnapshotPreferredWithSource, sdkChecker),
71	)
72}
73
74func TestBasicSdkWithJavaLibrary(t *testing.T) {
75	result := android.GroupFixturePreparers(
76		prepareForSdkTestWithJava,
77		prepareForSdkTestWithApex,
78	).RunTestWithBp(t, `
79		sdk {
80			name: "mysdk",
81			java_header_libs: ["sdkmember"],
82		}
83
84		sdk_snapshot {
85			name: "mysdk@1",
86			java_header_libs: ["sdkmember_mysdk@1"],
87		}
88
89		sdk_snapshot {
90			name: "mysdk@2",
91			java_header_libs: ["sdkmember_mysdk@2"],
92		}
93
94		java_library {
95			name: "sdkmember",
96			srcs: ["Test.java"],
97			system_modules: "none",
98			sdk_version: "none",
99			host_supported: true,
100		}
101
102		java_import {
103			name: "sdkmember_mysdk@1",
104			sdk_member_name: "sdkmember",
105			host_supported: true,
106		}
107
108		java_import {
109			name: "sdkmember_mysdk@2",
110			sdk_member_name: "sdkmember",
111			host_supported: true,
112		}
113
114		java_library {
115			name: "myjavalib",
116			srcs: ["Test.java"],
117			libs: ["sdkmember"],
118			system_modules: "none",
119			sdk_version: "none",
120			compile_dex: true,
121			host_supported: true,
122			apex_available: [
123				"myapex",
124				"myapex2",
125			],
126		}
127
128		apex {
129			name: "myapex",
130			java_libs: ["myjavalib"],
131			uses_sdks: ["mysdk@1"],
132			key: "myapex.key",
133			certificate: ":myapex.cert",
134			updatable: false,
135		}
136
137		apex {
138			name: "myapex2",
139			java_libs: ["myjavalib"],
140			uses_sdks: ["mysdk@2"],
141			key: "myapex.key",
142			certificate: ":myapex.cert",
143			updatable: false,
144		}
145	`)
146
147	sdkMemberV1 := result.ModuleForTests("sdkmember_mysdk@1", "android_common").Rule("combineJar").Output
148	sdkMemberV2 := result.ModuleForTests("sdkmember_mysdk@2", "android_common").Rule("combineJar").Output
149
150	javalibForMyApex := result.ModuleForTests("myjavalib", "android_common_apex10000_mysdk_1")
151	javalibForMyApex2 := result.ModuleForTests("myjavalib", "android_common_apex10000_mysdk_2")
152
153	// Depending on the uses_sdks value, different libs are linked
154	ensureListContains(t, pathsToStrings(javalibForMyApex.Rule("javac").Implicits), sdkMemberV1.String())
155	ensureListContains(t, pathsToStrings(javalibForMyApex2.Rule("javac").Implicits), sdkMemberV2.String())
156}
157
158func TestSnapshotWithJavaHeaderLibrary(t *testing.T) {
159	result := android.GroupFixturePreparers(
160		prepareForSdkTestWithJava,
161		android.FixtureAddFile("aidl/foo/bar/Test.aidl", nil),
162	).RunTestWithBp(t, `
163		sdk {
164			name: "mysdk",
165			java_header_libs: ["myjavalib"],
166		}
167
168		java_library {
169			name: "myjavalib",
170			srcs: ["Test.java"],
171			aidl: {
172				export_include_dirs: ["aidl"],
173			},
174			system_modules: "none",
175			sdk_version: "none",
176			compile_dex: true,
177			host_supported: true,
178			permitted_packages: ["pkg.myjavalib"],
179		}
180	`)
181
182	CheckSnapshot(t, result, "mysdk", "",
183		checkUnversionedAndroidBpContents(`
184// This is auto-generated. DO NOT EDIT.
185
186java_import {
187    name: "myjavalib",
188    prefer: false,
189    visibility: ["//visibility:public"],
190    apex_available: ["//apex_available:platform"],
191    jars: ["java/myjavalib.jar"],
192    permitted_packages: ["pkg.myjavalib"],
193}
194`),
195		checkVersionedAndroidBpContents(`
196// This is auto-generated. DO NOT EDIT.
197
198java_import {
199    name: "mysdk_myjavalib@current",
200    sdk_member_name: "myjavalib",
201    visibility: ["//visibility:public"],
202    apex_available: ["//apex_available:platform"],
203    jars: ["java/myjavalib.jar"],
204    permitted_packages: ["pkg.myjavalib"],
205}
206
207sdk_snapshot {
208    name: "mysdk@current",
209    visibility: ["//visibility:public"],
210    java_header_libs: ["mysdk_myjavalib@current"],
211}
212`),
213		checkAllCopyRules(`
214.intermediates/myjavalib/android_common/turbine-combined/myjavalib.jar -> java/myjavalib.jar
215aidl/foo/bar/Test.aidl -> aidl/aidl/foo/bar/Test.aidl
216`),
217	)
218}
219
220func TestHostSnapshotWithJavaHeaderLibrary(t *testing.T) {
221	result := android.GroupFixturePreparers(
222		prepareForSdkTestWithJava,
223		android.FixtureAddFile("aidl/foo/bar/Test.aidl", nil),
224	).RunTestWithBp(t, `
225		sdk {
226			name: "mysdk",
227			device_supported: false,
228			host_supported: true,
229			java_header_libs: ["myjavalib"],
230		}
231
232		java_library {
233			name: "myjavalib",
234			device_supported: false,
235			host_supported: true,
236			srcs: ["Test.java"],
237			aidl: {
238				export_include_dirs: ["aidl"],
239			},
240			system_modules: "none",
241			sdk_version: "none",
242			compile_dex: true,
243		}
244	`)
245
246	CheckSnapshot(t, result, "mysdk", "",
247		checkUnversionedAndroidBpContents(`
248// This is auto-generated. DO NOT EDIT.
249
250java_import {
251    name: "myjavalib",
252    prefer: false,
253    visibility: ["//visibility:public"],
254    apex_available: ["//apex_available:platform"],
255    device_supported: false,
256    host_supported: true,
257    jars: ["java/myjavalib.jar"],
258}
259`),
260		checkVersionedAndroidBpContents(`
261// This is auto-generated. DO NOT EDIT.
262
263java_import {
264    name: "mysdk_myjavalib@current",
265    sdk_member_name: "myjavalib",
266    visibility: ["//visibility:public"],
267    apex_available: ["//apex_available:platform"],
268    device_supported: false,
269    host_supported: true,
270    jars: ["java/myjavalib.jar"],
271}
272
273sdk_snapshot {
274    name: "mysdk@current",
275    visibility: ["//visibility:public"],
276    device_supported: false,
277    host_supported: true,
278    java_header_libs: ["mysdk_myjavalib@current"],
279}
280`),
281		checkAllCopyRules(`
282.intermediates/myjavalib/linux_glibc_common/javac/myjavalib.jar -> java/myjavalib.jar
283aidl/foo/bar/Test.aidl -> aidl/aidl/foo/bar/Test.aidl
284`),
285	)
286}
287
288func TestDeviceAndHostSnapshotWithJavaHeaderLibrary(t *testing.T) {
289	result := android.GroupFixturePreparers(prepareForSdkTestWithJava).RunTestWithBp(t, `
290		sdk {
291			name: "mysdk",
292			host_supported: true,
293			java_header_libs: ["myjavalib"],
294		}
295
296		java_library {
297			name: "myjavalib",
298			host_supported: true,
299			srcs: ["Test.java"],
300			system_modules: "none",
301			sdk_version: "none",
302			compile_dex: true,
303		}
304	`)
305
306	CheckSnapshot(t, result, "mysdk", "",
307		checkUnversionedAndroidBpContents(`
308// This is auto-generated. DO NOT EDIT.
309
310java_import {
311    name: "myjavalib",
312    prefer: false,
313    visibility: ["//visibility:public"],
314    apex_available: ["//apex_available:platform"],
315    host_supported: true,
316    target: {
317        android: {
318            jars: ["java/android/myjavalib.jar"],
319        },
320        linux_glibc: {
321            jars: ["java/linux_glibc/myjavalib.jar"],
322        },
323    },
324}
325`),
326		checkVersionedAndroidBpContents(`
327// This is auto-generated. DO NOT EDIT.
328
329java_import {
330    name: "mysdk_myjavalib@current",
331    sdk_member_name: "myjavalib",
332    visibility: ["//visibility:public"],
333    apex_available: ["//apex_available:platform"],
334    host_supported: true,
335    target: {
336        android: {
337            jars: ["java/android/myjavalib.jar"],
338        },
339        linux_glibc: {
340            jars: ["java/linux_glibc/myjavalib.jar"],
341        },
342    },
343}
344
345sdk_snapshot {
346    name: "mysdk@current",
347    visibility: ["//visibility:public"],
348    host_supported: true,
349    java_header_libs: ["mysdk_myjavalib@current"],
350}
351`),
352		checkAllCopyRules(`
353.intermediates/myjavalib/android_common/turbine-combined/myjavalib.jar -> java/android/myjavalib.jar
354.intermediates/myjavalib/linux_glibc_common/javac/myjavalib.jar -> java/linux_glibc/myjavalib.jar
355`),
356	)
357}
358
359func TestSnapshotWithJavaImplLibrary(t *testing.T) {
360	result := android.GroupFixturePreparers(
361		prepareForSdkTestWithJava,
362		android.FixtureAddFile("aidl/foo/bar/Test.aidl", nil),
363		android.FixtureAddFile("resource.txt", nil),
364	).RunTestWithBp(t, `
365		module_exports {
366			name: "myexports",
367			java_libs: ["myjavalib"],
368		}
369
370		java_library {
371			name: "myjavalib",
372			srcs: ["Test.java"],
373			java_resources: ["resource.txt"],
374			aidl: {
375				export_include_dirs: ["aidl"],
376			},
377			system_modules: "none",
378			sdk_version: "none",
379			compile_dex: true,
380			host_supported: true,
381		}
382	`)
383
384	CheckSnapshot(t, result, "myexports", "",
385		checkUnversionedAndroidBpContents(`
386// This is auto-generated. DO NOT EDIT.
387
388java_import {
389    name: "myjavalib",
390    prefer: false,
391    visibility: ["//visibility:public"],
392    apex_available: ["//apex_available:platform"],
393    jars: ["java/myjavalib.jar"],
394}
395`),
396		checkVersionedAndroidBpContents(`
397// This is auto-generated. DO NOT EDIT.
398
399java_import {
400    name: "myexports_myjavalib@current",
401    sdk_member_name: "myjavalib",
402    visibility: ["//visibility:public"],
403    apex_available: ["//apex_available:platform"],
404    jars: ["java/myjavalib.jar"],
405}
406
407module_exports_snapshot {
408    name: "myexports@current",
409    visibility: ["//visibility:public"],
410    java_libs: ["myexports_myjavalib@current"],
411}
412`),
413		checkAllCopyRules(`
414.intermediates/myjavalib/android_common/withres/myjavalib.jar -> java/myjavalib.jar
415aidl/foo/bar/Test.aidl -> aidl/aidl/foo/bar/Test.aidl
416`),
417	)
418}
419
420func TestSnapshotWithJavaBootLibrary(t *testing.T) {
421	result := android.GroupFixturePreparers(
422		prepareForSdkTestWithJava,
423		android.FixtureAddFile("aidl", nil),
424		android.FixtureAddFile("resource.txt", nil),
425	).RunTestWithBp(t, `
426		module_exports {
427			name: "myexports",
428			java_boot_libs: ["myjavalib"],
429		}
430
431		java_library {
432			name: "myjavalib",
433			srcs: ["Test.java"],
434			java_resources: ["resource.txt"],
435			// The aidl files should not be copied to the snapshot because a java_boot_libs member is not
436			// intended to be used for compiling Java, only for accessing the dex implementation jar.
437			aidl: {
438				export_include_dirs: ["aidl"],
439			},
440			system_modules: "none",
441			sdk_version: "none",
442			compile_dex: true,
443			permitted_packages: ["pkg.myjavalib"],
444		}
445	`)
446
447	CheckSnapshot(t, result, "myexports", "",
448		checkUnversionedAndroidBpContents(`
449// This is auto-generated. DO NOT EDIT.
450
451java_import {
452    name: "myjavalib",
453    prefer: false,
454    visibility: ["//visibility:public"],
455    apex_available: ["//apex_available:platform"],
456    jars: ["java/myjavalib.jar"],
457    permitted_packages: ["pkg.myjavalib"],
458}
459`),
460		checkVersionedAndroidBpContents(`
461// This is auto-generated. DO NOT EDIT.
462
463java_import {
464    name: "myexports_myjavalib@current",
465    sdk_member_name: "myjavalib",
466    visibility: ["//visibility:public"],
467    apex_available: ["//apex_available:platform"],
468    jars: ["java/myjavalib.jar"],
469    permitted_packages: ["pkg.myjavalib"],
470}
471
472module_exports_snapshot {
473    name: "myexports@current",
474    visibility: ["//visibility:public"],
475    java_boot_libs: ["myexports_myjavalib@current"],
476}
477`),
478		checkAllCopyRules(`
479.intermediates/myjavalib/android_common/withres/myjavalib.jar -> java/myjavalib.jar
480`),
481	)
482}
483
484func TestHostSnapshotWithJavaImplLibrary(t *testing.T) {
485	result := android.GroupFixturePreparers(
486		prepareForSdkTestWithJava,
487		android.FixtureAddFile("aidl/foo/bar/Test.aidl", nil),
488	).RunTestWithBp(t, `
489		module_exports {
490			name: "myexports",
491			device_supported: false,
492			host_supported: true,
493			java_libs: ["myjavalib"],
494		}
495
496		java_library {
497			name: "myjavalib",
498			device_supported: false,
499			host_supported: true,
500			srcs: ["Test.java"],
501			aidl: {
502				export_include_dirs: ["aidl"],
503			},
504			system_modules: "none",
505			sdk_version: "none",
506			compile_dex: true,
507		}
508	`)
509
510	CheckSnapshot(t, result, "myexports", "",
511		checkUnversionedAndroidBpContents(`
512// This is auto-generated. DO NOT EDIT.
513
514java_import {
515    name: "myjavalib",
516    prefer: false,
517    visibility: ["//visibility:public"],
518    apex_available: ["//apex_available:platform"],
519    device_supported: false,
520    host_supported: true,
521    jars: ["java/myjavalib.jar"],
522}
523`),
524		checkVersionedAndroidBpContents(`
525// This is auto-generated. DO NOT EDIT.
526
527java_import {
528    name: "myexports_myjavalib@current",
529    sdk_member_name: "myjavalib",
530    visibility: ["//visibility:public"],
531    apex_available: ["//apex_available:platform"],
532    device_supported: false,
533    host_supported: true,
534    jars: ["java/myjavalib.jar"],
535}
536
537module_exports_snapshot {
538    name: "myexports@current",
539    visibility: ["//visibility:public"],
540    device_supported: false,
541    host_supported: true,
542    java_libs: ["myexports_myjavalib@current"],
543}
544`),
545		checkAllCopyRules(`
546.intermediates/myjavalib/linux_glibc_common/javac/myjavalib.jar -> java/myjavalib.jar
547aidl/foo/bar/Test.aidl -> aidl/aidl/foo/bar/Test.aidl
548`),
549	)
550}
551
552func TestSnapshotWithJavaTest(t *testing.T) {
553	result := android.GroupFixturePreparers(prepareForSdkTestWithJava).RunTestWithBp(t, `
554		module_exports {
555			name: "myexports",
556			java_tests: ["myjavatests"],
557		}
558
559		java_test {
560			name: "myjavatests",
561			srcs: ["Test.java"],
562			system_modules: "none",
563			sdk_version: "none",
564			compile_dex: true,
565			host_supported: true,
566		}
567	`)
568
569	CheckSnapshot(t, result, "myexports", "",
570		checkUnversionedAndroidBpContents(`
571// This is auto-generated. DO NOT EDIT.
572
573java_test_import {
574    name: "myjavatests",
575    prefer: false,
576    visibility: ["//visibility:public"],
577    apex_available: ["//apex_available:platform"],
578    jars: ["java/myjavatests.jar"],
579    test_config: "java/myjavatests-AndroidTest.xml",
580}
581`),
582		checkVersionedAndroidBpContents(`
583// This is auto-generated. DO NOT EDIT.
584
585java_test_import {
586    name: "myexports_myjavatests@current",
587    sdk_member_name: "myjavatests",
588    visibility: ["//visibility:public"],
589    apex_available: ["//apex_available:platform"],
590    jars: ["java/myjavatests.jar"],
591    test_config: "java/myjavatests-AndroidTest.xml",
592}
593
594module_exports_snapshot {
595    name: "myexports@current",
596    visibility: ["//visibility:public"],
597    java_tests: ["myexports_myjavatests@current"],
598}
599`),
600		checkAllCopyRules(`
601.intermediates/myjavatests/android_common/javac/myjavatests.jar -> java/myjavatests.jar
602.intermediates/myjavatests/android_common/myjavatests.config -> java/myjavatests-AndroidTest.xml
603`),
604	)
605}
606
607func TestHostSnapshotWithJavaTest(t *testing.T) {
608	result := android.GroupFixturePreparers(prepareForSdkTestWithJava).RunTestWithBp(t, `
609		module_exports {
610			name: "myexports",
611			device_supported: false,
612			host_supported: true,
613			java_tests: ["myjavatests"],
614		}
615
616		java_test {
617			name: "myjavatests",
618			device_supported: false,
619			host_supported: true,
620			srcs: ["Test.java"],
621			system_modules: "none",
622			sdk_version: "none",
623			compile_dex: true,
624		}
625	`)
626
627	CheckSnapshot(t, result, "myexports", "",
628		checkUnversionedAndroidBpContents(`
629// This is auto-generated. DO NOT EDIT.
630
631java_test_import {
632    name: "myjavatests",
633    prefer: false,
634    visibility: ["//visibility:public"],
635    apex_available: ["//apex_available:platform"],
636    device_supported: false,
637    host_supported: true,
638    jars: ["java/myjavatests.jar"],
639    test_config: "java/myjavatests-AndroidTest.xml",
640}
641`),
642		checkVersionedAndroidBpContents(`
643// This is auto-generated. DO NOT EDIT.
644
645java_test_import {
646    name: "myexports_myjavatests@current",
647    sdk_member_name: "myjavatests",
648    visibility: ["//visibility:public"],
649    apex_available: ["//apex_available:platform"],
650    device_supported: false,
651    host_supported: true,
652    jars: ["java/myjavatests.jar"],
653    test_config: "java/myjavatests-AndroidTest.xml",
654}
655
656module_exports_snapshot {
657    name: "myexports@current",
658    visibility: ["//visibility:public"],
659    device_supported: false,
660    host_supported: true,
661    java_tests: ["myexports_myjavatests@current"],
662}
663`),
664		checkAllCopyRules(`
665.intermediates/myjavatests/linux_glibc_common/javac/myjavatests.jar -> java/myjavatests.jar
666.intermediates/myjavatests/linux_glibc_common/myjavatests.config -> java/myjavatests-AndroidTest.xml
667`),
668	)
669}
670
671func TestSnapshotWithJavaSystemModules(t *testing.T) {
672	result := android.GroupFixturePreparers(prepareForSdkTestWithJavaSdkLibrary).RunTestWithBp(t, `
673		sdk {
674			name: "mysdk",
675			java_header_libs: ["exported-system-module"],
676			java_sdk_libs: ["myjavalib"],
677			java_system_modules: ["my-system-modules"],
678		}
679
680		java_sdk_library {
681			name: "myjavalib",
682			apex_available: ["//apex_available:anyapex"],
683			srcs: ["Test.java"],
684			sdk_version: "current",
685			shared_library: false,
686			public: {
687				enabled: true,
688			},
689		}
690
691		java_system_modules {
692			name: "my-system-modules",
693			libs: ["system-module", "exported-system-module", "myjavalib.stubs"],
694		}
695
696		java_library {
697			name: "system-module",
698			srcs: ["Test.java"],
699			sdk_version: "none",
700			system_modules: "none",
701		}
702
703		java_library {
704			name: "exported-system-module",
705			srcs: ["Test.java"],
706			sdk_version: "none",
707			system_modules: "none",
708		}
709	`)
710
711	CheckSnapshot(t, result, "mysdk", "",
712		checkUnversionedAndroidBpContents(`
713// This is auto-generated. DO NOT EDIT.
714
715java_import {
716    name: "exported-system-module",
717    prefer: false,
718    visibility: ["//visibility:public"],
719    apex_available: ["//apex_available:platform"],
720    jars: ["java/exported-system-module.jar"],
721}
722
723java_import {
724    name: "mysdk_system-module",
725    prefer: false,
726    visibility: ["//visibility:private"],
727    apex_available: ["//apex_available:platform"],
728    jars: ["java/system-module.jar"],
729}
730
731java_sdk_library_import {
732    name: "myjavalib",
733    prefer: false,
734    visibility: ["//visibility:public"],
735    apex_available: ["//apex_available:anyapex"],
736    shared_library: false,
737    public: {
738        jars: ["sdk_library/public/myjavalib-stubs.jar"],
739        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
740        current_api: "sdk_library/public/myjavalib.txt",
741        removed_api: "sdk_library/public/myjavalib-removed.txt",
742        sdk_version: "current",
743    },
744}
745
746java_system_modules_import {
747    name: "my-system-modules",
748    prefer: false,
749    visibility: ["//visibility:public"],
750    libs: [
751        "mysdk_system-module",
752        "exported-system-module",
753        "myjavalib.stubs",
754    ],
755}
756`),
757		checkVersionedAndroidBpContents(`
758// This is auto-generated. DO NOT EDIT.
759
760java_import {
761    name: "mysdk_exported-system-module@current",
762    sdk_member_name: "exported-system-module",
763    visibility: ["//visibility:public"],
764    apex_available: ["//apex_available:platform"],
765    jars: ["java/exported-system-module.jar"],
766}
767
768java_import {
769    name: "mysdk_system-module@current",
770    sdk_member_name: "system-module",
771    visibility: ["//visibility:private"],
772    apex_available: ["//apex_available:platform"],
773    jars: ["java/system-module.jar"],
774}
775
776java_sdk_library_import {
777    name: "mysdk_myjavalib@current",
778    sdk_member_name: "myjavalib",
779    visibility: ["//visibility:public"],
780    apex_available: ["//apex_available:anyapex"],
781    shared_library: false,
782    public: {
783        jars: ["sdk_library/public/myjavalib-stubs.jar"],
784        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
785        current_api: "sdk_library/public/myjavalib.txt",
786        removed_api: "sdk_library/public/myjavalib-removed.txt",
787        sdk_version: "current",
788    },
789}
790
791java_system_modules_import {
792    name: "mysdk_my-system-modules@current",
793    sdk_member_name: "my-system-modules",
794    visibility: ["//visibility:public"],
795    libs: [
796        "mysdk_system-module@current",
797        "mysdk_exported-system-module@current",
798        "mysdk_myjavalib.stubs@current",
799    ],
800}
801
802sdk_snapshot {
803    name: "mysdk@current",
804    visibility: ["//visibility:public"],
805    java_header_libs: ["mysdk_exported-system-module@current"],
806    java_sdk_libs: ["mysdk_myjavalib@current"],
807    java_system_modules: ["mysdk_my-system-modules@current"],
808}
809`),
810		checkAllCopyRules(`
811.intermediates/exported-system-module/android_common/turbine-combined/exported-system-module.jar -> java/exported-system-module.jar
812.intermediates/system-module/android_common/turbine-combined/system-module.jar -> java/system-module.jar
813.intermediates/myjavalib.stubs/android_common/javac/myjavalib.stubs.jar -> sdk_library/public/myjavalib-stubs.jar
814.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_api.txt -> sdk_library/public/myjavalib.txt
815.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_removed.txt -> sdk_library/public/myjavalib-removed.txt
816`),
817	)
818}
819
820func TestHostSnapshotWithJavaSystemModules(t *testing.T) {
821	result := android.GroupFixturePreparers(prepareForSdkTestWithJava).RunTestWithBp(t, `
822		sdk {
823			name: "mysdk",
824			device_supported: false,
825			host_supported: true,
826			java_system_modules: ["my-system-modules"],
827		}
828
829		java_system_modules {
830			name: "my-system-modules",
831			device_supported: false,
832			host_supported: true,
833			libs: ["system-module"],
834		}
835
836		java_library {
837			name: "system-module",
838			device_supported: false,
839			host_supported: true,
840			srcs: ["Test.java"],
841			sdk_version: "none",
842			system_modules: "none",
843		}
844	`)
845
846	CheckSnapshot(t, result, "mysdk", "",
847		checkUnversionedAndroidBpContents(`
848// This is auto-generated. DO NOT EDIT.
849
850java_import {
851    name: "mysdk_system-module",
852    prefer: false,
853    visibility: ["//visibility:private"],
854    apex_available: ["//apex_available:platform"],
855    device_supported: false,
856    host_supported: true,
857    jars: ["java/system-module.jar"],
858}
859
860java_system_modules_import {
861    name: "my-system-modules",
862    prefer: false,
863    visibility: ["//visibility:public"],
864    device_supported: false,
865    host_supported: true,
866    libs: ["mysdk_system-module"],
867}
868`),
869		checkVersionedAndroidBpContents(`
870// This is auto-generated. DO NOT EDIT.
871
872java_import {
873    name: "mysdk_system-module@current",
874    sdk_member_name: "system-module",
875    visibility: ["//visibility:private"],
876    apex_available: ["//apex_available:platform"],
877    device_supported: false,
878    host_supported: true,
879    jars: ["java/system-module.jar"],
880}
881
882java_system_modules_import {
883    name: "mysdk_my-system-modules@current",
884    sdk_member_name: "my-system-modules",
885    visibility: ["//visibility:public"],
886    device_supported: false,
887    host_supported: true,
888    libs: ["mysdk_system-module@current"],
889}
890
891sdk_snapshot {
892    name: "mysdk@current",
893    visibility: ["//visibility:public"],
894    device_supported: false,
895    host_supported: true,
896    java_system_modules: ["mysdk_my-system-modules@current"],
897}
898`),
899		checkAllCopyRules(".intermediates/system-module/linux_glibc_common/javac/system-module.jar -> java/system-module.jar"),
900	)
901}
902
903func TestDeviceAndHostSnapshotWithOsSpecificMembers(t *testing.T) {
904	result := android.GroupFixturePreparers(prepareForSdkTestWithJava).RunTestWithBp(t, `
905		module_exports {
906			name: "myexports",
907			host_supported: true,
908			java_libs: ["myjavalib"],
909			target: {
910				android: {
911					java_header_libs: ["androidjavalib"],
912				},
913				host: {
914					java_header_libs: ["hostjavalib"],
915				},
916			},
917		}
918
919		java_library {
920			name: "myjavalib",
921			host_supported: true,
922			srcs: ["Test.java"],
923			system_modules: "none",
924			sdk_version: "none",
925		}
926
927		java_library {
928			name: "androidjavalib",
929			srcs: ["Test.java"],
930			system_modules: "none",
931			sdk_version: "none",
932		}
933
934		java_library_host {
935			name: "hostjavalib",
936			srcs: ["Test.java"],
937		}
938	`)
939
940	CheckSnapshot(t, result, "myexports", "",
941		checkUnversionedAndroidBpContents(`
942// This is auto-generated. DO NOT EDIT.
943
944java_import {
945    name: "hostjavalib",
946    prefer: false,
947    visibility: ["//visibility:public"],
948    apex_available: ["//apex_available:platform"],
949    device_supported: false,
950    host_supported: true,
951    jars: ["java/hostjavalib.jar"],
952}
953
954java_import {
955    name: "androidjavalib",
956    prefer: false,
957    visibility: ["//visibility:public"],
958    apex_available: ["//apex_available:platform"],
959    jars: ["java/androidjavalib.jar"],
960}
961
962java_import {
963    name: "myjavalib",
964    prefer: false,
965    visibility: ["//visibility:public"],
966    apex_available: ["//apex_available:platform"],
967    host_supported: true,
968    target: {
969        android: {
970            jars: ["java/android/myjavalib.jar"],
971        },
972        linux_glibc: {
973            jars: ["java/linux_glibc/myjavalib.jar"],
974        },
975    },
976}
977`),
978		checkVersionedAndroidBpContents(`
979// This is auto-generated. DO NOT EDIT.
980
981java_import {
982    name: "myexports_hostjavalib@current",
983    sdk_member_name: "hostjavalib",
984    visibility: ["//visibility:public"],
985    apex_available: ["//apex_available:platform"],
986    device_supported: false,
987    host_supported: true,
988    jars: ["java/hostjavalib.jar"],
989}
990
991java_import {
992    name: "myexports_androidjavalib@current",
993    sdk_member_name: "androidjavalib",
994    visibility: ["//visibility:public"],
995    apex_available: ["//apex_available:platform"],
996    jars: ["java/androidjavalib.jar"],
997}
998
999java_import {
1000    name: "myexports_myjavalib@current",
1001    sdk_member_name: "myjavalib",
1002    visibility: ["//visibility:public"],
1003    apex_available: ["//apex_available:platform"],
1004    host_supported: true,
1005    target: {
1006        android: {
1007            jars: ["java/android/myjavalib.jar"],
1008        },
1009        linux_glibc: {
1010            jars: ["java/linux_glibc/myjavalib.jar"],
1011        },
1012    },
1013}
1014
1015module_exports_snapshot {
1016    name: "myexports@current",
1017    visibility: ["//visibility:public"],
1018    host_supported: true,
1019    java_libs: ["myexports_myjavalib@current"],
1020    target: {
1021        android: {
1022            java_header_libs: ["myexports_androidjavalib@current"],
1023        },
1024        linux_glibc: {
1025            java_header_libs: ["myexports_hostjavalib@current"],
1026        },
1027    },
1028}
1029`),
1030		checkAllCopyRules(`
1031.intermediates/hostjavalib/linux_glibc_common/javac/hostjavalib.jar -> java/hostjavalib.jar
1032.intermediates/androidjavalib/android_common/turbine-combined/androidjavalib.jar -> java/androidjavalib.jar
1033.intermediates/myjavalib/android_common/javac/myjavalib.jar -> java/android/myjavalib.jar
1034.intermediates/myjavalib/linux_glibc_common/javac/myjavalib.jar -> java/linux_glibc/myjavalib.jar
1035`),
1036	)
1037}
1038
1039func TestSnapshotWithJavaSdkLibrary(t *testing.T) {
1040	result := android.GroupFixturePreparers(prepareForSdkTestWithJavaSdkLibrary).RunTestWithBp(t, `
1041		sdk {
1042			name: "mysdk",
1043			java_sdk_libs: ["myjavalib"],
1044		}
1045
1046		java_sdk_library {
1047			name: "myjavalib",
1048			apex_available: ["//apex_available:anyapex"],
1049			srcs: ["Test.java"],
1050			sdk_version: "current",
1051			shared_library: false,
1052			stubs_library_visibility: ["//other"],
1053			stubs_source_visibility: ["//another"],
1054			permitted_packages: ["pkg.myjavalib"],
1055		}
1056	`)
1057
1058	CheckSnapshot(t, result, "mysdk", "",
1059		checkUnversionedAndroidBpContents(`
1060// This is auto-generated. DO NOT EDIT.
1061
1062java_sdk_library_import {
1063    name: "myjavalib",
1064    prefer: false,
1065    visibility: ["//visibility:public"],
1066    apex_available: ["//apex_available:anyapex"],
1067    shared_library: false,
1068    permitted_packages: ["pkg.myjavalib"],
1069    public: {
1070        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1071        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1072        current_api: "sdk_library/public/myjavalib.txt",
1073        removed_api: "sdk_library/public/myjavalib-removed.txt",
1074        sdk_version: "current",
1075    },
1076    system: {
1077        jars: ["sdk_library/system/myjavalib-stubs.jar"],
1078        stub_srcs: ["sdk_library/system/myjavalib_stub_sources"],
1079        current_api: "sdk_library/system/myjavalib.txt",
1080        removed_api: "sdk_library/system/myjavalib-removed.txt",
1081        sdk_version: "system_current",
1082    },
1083    test: {
1084        jars: ["sdk_library/test/myjavalib-stubs.jar"],
1085        stub_srcs: ["sdk_library/test/myjavalib_stub_sources"],
1086        current_api: "sdk_library/test/myjavalib.txt",
1087        removed_api: "sdk_library/test/myjavalib-removed.txt",
1088        sdk_version: "test_current",
1089    },
1090}
1091`),
1092		checkVersionedAndroidBpContents(`
1093// This is auto-generated. DO NOT EDIT.
1094
1095java_sdk_library_import {
1096    name: "mysdk_myjavalib@current",
1097    sdk_member_name: "myjavalib",
1098    visibility: ["//visibility:public"],
1099    apex_available: ["//apex_available:anyapex"],
1100    shared_library: false,
1101    permitted_packages: ["pkg.myjavalib"],
1102    public: {
1103        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1104        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1105        current_api: "sdk_library/public/myjavalib.txt",
1106        removed_api: "sdk_library/public/myjavalib-removed.txt",
1107        sdk_version: "current",
1108    },
1109    system: {
1110        jars: ["sdk_library/system/myjavalib-stubs.jar"],
1111        stub_srcs: ["sdk_library/system/myjavalib_stub_sources"],
1112        current_api: "sdk_library/system/myjavalib.txt",
1113        removed_api: "sdk_library/system/myjavalib-removed.txt",
1114        sdk_version: "system_current",
1115    },
1116    test: {
1117        jars: ["sdk_library/test/myjavalib-stubs.jar"],
1118        stub_srcs: ["sdk_library/test/myjavalib_stub_sources"],
1119        current_api: "sdk_library/test/myjavalib.txt",
1120        removed_api: "sdk_library/test/myjavalib-removed.txt",
1121        sdk_version: "test_current",
1122    },
1123}
1124
1125sdk_snapshot {
1126    name: "mysdk@current",
1127    visibility: ["//visibility:public"],
1128    java_sdk_libs: ["mysdk_myjavalib@current"],
1129}
1130`),
1131		checkAllCopyRules(`
1132.intermediates/myjavalib.stubs/android_common/javac/myjavalib.stubs.jar -> sdk_library/public/myjavalib-stubs.jar
1133.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_api.txt -> sdk_library/public/myjavalib.txt
1134.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_removed.txt -> sdk_library/public/myjavalib-removed.txt
1135.intermediates/myjavalib.stubs.system/android_common/javac/myjavalib.stubs.system.jar -> sdk_library/system/myjavalib-stubs.jar
1136.intermediates/myjavalib.stubs.source.system/android_common/metalava/myjavalib.stubs.source.system_api.txt -> sdk_library/system/myjavalib.txt
1137.intermediates/myjavalib.stubs.source.system/android_common/metalava/myjavalib.stubs.source.system_removed.txt -> sdk_library/system/myjavalib-removed.txt
1138.intermediates/myjavalib.stubs.test/android_common/javac/myjavalib.stubs.test.jar -> sdk_library/test/myjavalib-stubs.jar
1139.intermediates/myjavalib.stubs.source.test/android_common/metalava/myjavalib.stubs.source.test_api.txt -> sdk_library/test/myjavalib.txt
1140.intermediates/myjavalib.stubs.source.test/android_common/metalava/myjavalib.stubs.source.test_removed.txt -> sdk_library/test/myjavalib-removed.txt
1141`),
1142		checkMergeZips(
1143			".intermediates/mysdk/common_os/tmp/sdk_library/public/myjavalib_stub_sources.zip",
1144			".intermediates/mysdk/common_os/tmp/sdk_library/system/myjavalib_stub_sources.zip",
1145			".intermediates/mysdk/common_os/tmp/sdk_library/test/myjavalib_stub_sources.zip",
1146		),
1147		snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
1148			// Make sure that the name of the child modules created by a versioned java_sdk_library_import
1149			// module is correct, i.e. the suffix is added before the version and not after.
1150			result.Module("mysdk_myjavalib.stubs@current", "android_common")
1151			result.Module("mysdk_myjavalib.stubs.source@current", "android_common")
1152		}),
1153	)
1154}
1155
1156func TestSnapshotWithJavaSdkLibrary_UseSrcJar(t *testing.T) {
1157	result := android.GroupFixturePreparers(
1158		prepareForSdkTestWithJavaSdkLibrary,
1159		android.FixtureMergeEnv(map[string]string{
1160			"SOONG_SDK_SNAPSHOT_USE_SRCJAR": "true",
1161		}),
1162	).RunTestWithBp(t, `
1163		sdk {
1164			name: "mysdk",
1165			java_sdk_libs: ["myjavalib"],
1166		}
1167
1168		java_sdk_library {
1169			name: "myjavalib",
1170			srcs: ["Test.java"],
1171			sdk_version: "current",
1172			shared_library: false,
1173			public: {
1174				enabled: true,
1175			},
1176		}
1177	`)
1178
1179	CheckSnapshot(t, result, "mysdk", "",
1180		checkUnversionedAndroidBpContents(`
1181// This is auto-generated. DO NOT EDIT.
1182
1183java_sdk_library_import {
1184    name: "myjavalib",
1185    prefer: false,
1186    visibility: ["//visibility:public"],
1187    apex_available: ["//apex_available:platform"],
1188    shared_library: false,
1189    public: {
1190        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1191        stub_srcs: ["sdk_library/public/myjavalib.srcjar"],
1192        current_api: "sdk_library/public/myjavalib.txt",
1193        removed_api: "sdk_library/public/myjavalib-removed.txt",
1194        sdk_version: "current",
1195    },
1196}
1197		`),
1198		checkAllCopyRules(`
1199.intermediates/myjavalib.stubs/android_common/javac/myjavalib.stubs.jar -> sdk_library/public/myjavalib-stubs.jar
1200.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source-stubs.srcjar -> sdk_library/public/myjavalib.srcjar
1201.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_api.txt -> sdk_library/public/myjavalib.txt
1202.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_removed.txt -> sdk_library/public/myjavalib-removed.txt
1203		`),
1204	)
1205}
1206
1207func TestSnapshotWithJavaSdkLibrary_CompileDex(t *testing.T) {
1208	result := android.GroupFixturePreparers(prepareForSdkTestWithJavaSdkLibrary).RunTestWithBp(t, `
1209		sdk {
1210			name: "mysdk",
1211			java_sdk_libs: ["myjavalib"],
1212		}
1213
1214		java_sdk_library {
1215			name: "myjavalib",
1216			srcs: ["Test.java"],
1217			sdk_version: "current",
1218			shared_library: false,
1219			compile_dex: true,
1220			public: {
1221				enabled: true,
1222			},
1223			system: {
1224				enabled: true,
1225			},
1226		}
1227	`)
1228
1229	CheckSnapshot(t, result, "mysdk", "",
1230		checkUnversionedAndroidBpContents(`
1231// This is auto-generated. DO NOT EDIT.
1232
1233java_sdk_library_import {
1234    name: "myjavalib",
1235    prefer: false,
1236    visibility: ["//visibility:public"],
1237    apex_available: ["//apex_available:platform"],
1238    shared_library: false,
1239    compile_dex: true,
1240    public: {
1241        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1242        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1243        current_api: "sdk_library/public/myjavalib.txt",
1244        removed_api: "sdk_library/public/myjavalib-removed.txt",
1245        sdk_version: "current",
1246    },
1247    system: {
1248        jars: ["sdk_library/system/myjavalib-stubs.jar"],
1249        stub_srcs: ["sdk_library/system/myjavalib_stub_sources"],
1250        current_api: "sdk_library/system/myjavalib.txt",
1251        removed_api: "sdk_library/system/myjavalib-removed.txt",
1252        sdk_version: "system_current",
1253    },
1254}
1255`),
1256		snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
1257			ctx := android.ModuleInstallPathContextForTesting(result.Config)
1258			dexJarBuildPath := func(name string, kind android.SdkKind) string {
1259				dep := result.Module(name, "android_common").(java.SdkLibraryDependency)
1260				path := dep.SdkApiStubDexJar(ctx, kind)
1261				return path.RelativeToTop().String()
1262			}
1263
1264			dexJarPath := dexJarBuildPath("myjavalib", android.SdkPublic)
1265			android.AssertStringEquals(t, "source dex public stubs jar build path", "out/soong/.intermediates/myjavalib.stubs/android_common/dex/myjavalib.stubs.jar", dexJarPath)
1266
1267			dexJarPath = dexJarBuildPath("myjavalib", android.SdkSystem)
1268			systemDexJar := "out/soong/.intermediates/myjavalib.stubs.system/android_common/dex/myjavalib.stubs.system.jar"
1269			android.AssertStringEquals(t, "source dex system stubs jar build path", systemDexJar, dexJarPath)
1270
1271			// This should fall back to system as module is not available.
1272			dexJarPath = dexJarBuildPath("myjavalib", android.SdkModule)
1273			android.AssertStringEquals(t, "source dex module stubs jar build path", systemDexJar, dexJarPath)
1274
1275			dexJarPath = dexJarBuildPath(android.PrebuiltNameFromSource("myjavalib"), android.SdkPublic)
1276			android.AssertStringEquals(t, "prebuilt dex public stubs jar build path", "out/soong/.intermediates/snapshot/prebuilt_myjavalib.stubs/android_common/dex/myjavalib.stubs.jar", dexJarPath)
1277		}),
1278	)
1279}
1280
1281func TestSnapshotWithJavaSdkLibrary_SdkVersion_None(t *testing.T) {
1282	result := android.GroupFixturePreparers(prepareForSdkTestWithJavaSdkLibrary).RunTestWithBp(t, `
1283		sdk {
1284			name: "mysdk",
1285			java_sdk_libs: ["myjavalib"],
1286		}
1287
1288		java_sdk_library {
1289			name: "myjavalib",
1290			srcs: ["Test.java"],
1291			sdk_version: "none",
1292			system_modules: "none",
1293		}
1294	`)
1295
1296	CheckSnapshot(t, result, "mysdk", "",
1297		checkUnversionedAndroidBpContents(`
1298// This is auto-generated. DO NOT EDIT.
1299
1300java_sdk_library_import {
1301    name: "myjavalib",
1302    prefer: false,
1303    visibility: ["//visibility:public"],
1304    apex_available: ["//apex_available:platform"],
1305    shared_library: true,
1306    public: {
1307        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1308        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1309        current_api: "sdk_library/public/myjavalib.txt",
1310        removed_api: "sdk_library/public/myjavalib-removed.txt",
1311        sdk_version: "none",
1312    },
1313}
1314`),
1315		checkVersionedAndroidBpContents(`
1316// This is auto-generated. DO NOT EDIT.
1317
1318java_sdk_library_import {
1319    name: "mysdk_myjavalib@current",
1320    sdk_member_name: "myjavalib",
1321    visibility: ["//visibility:public"],
1322    apex_available: ["//apex_available:platform"],
1323    shared_library: true,
1324    public: {
1325        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1326        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1327        current_api: "sdk_library/public/myjavalib.txt",
1328        removed_api: "sdk_library/public/myjavalib-removed.txt",
1329        sdk_version: "none",
1330    },
1331}
1332
1333sdk_snapshot {
1334    name: "mysdk@current",
1335    visibility: ["//visibility:public"],
1336    java_sdk_libs: ["mysdk_myjavalib@current"],
1337}
1338`),
1339		checkAllCopyRules(`
1340.intermediates/myjavalib.stubs/android_common/javac/myjavalib.stubs.jar -> sdk_library/public/myjavalib-stubs.jar
1341.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_api.txt -> sdk_library/public/myjavalib.txt
1342.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_removed.txt -> sdk_library/public/myjavalib-removed.txt
1343`),
1344		checkMergeZips(
1345			".intermediates/mysdk/common_os/tmp/sdk_library/public/myjavalib_stub_sources.zip",
1346		),
1347	)
1348}
1349
1350func TestSnapshotWithJavaSdkLibrary_SdkVersion_ForScope(t *testing.T) {
1351	result := android.GroupFixturePreparers(prepareForSdkTestWithJavaSdkLibrary).RunTestWithBp(t, `
1352		sdk {
1353			name: "mysdk",
1354			java_sdk_libs: ["myjavalib"],
1355		}
1356
1357		java_sdk_library {
1358			name: "myjavalib",
1359			srcs: ["Test.java"],
1360			sdk_version: "module_current",
1361			public: {
1362				enabled: true,
1363				sdk_version: "module_current",
1364			},
1365		}
1366	`)
1367
1368	CheckSnapshot(t, result, "mysdk", "",
1369		checkUnversionedAndroidBpContents(`
1370// This is auto-generated. DO NOT EDIT.
1371
1372java_sdk_library_import {
1373    name: "myjavalib",
1374    prefer: false,
1375    visibility: ["//visibility:public"],
1376    apex_available: ["//apex_available:platform"],
1377    shared_library: true,
1378    public: {
1379        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1380        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1381        current_api: "sdk_library/public/myjavalib.txt",
1382        removed_api: "sdk_library/public/myjavalib-removed.txt",
1383        sdk_version: "module_current",
1384    },
1385}
1386`),
1387		checkVersionedAndroidBpContents(`
1388// This is auto-generated. DO NOT EDIT.
1389
1390java_sdk_library_import {
1391    name: "mysdk_myjavalib@current",
1392    sdk_member_name: "myjavalib",
1393    visibility: ["//visibility:public"],
1394    apex_available: ["//apex_available:platform"],
1395    shared_library: true,
1396    public: {
1397        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1398        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1399        current_api: "sdk_library/public/myjavalib.txt",
1400        removed_api: "sdk_library/public/myjavalib-removed.txt",
1401        sdk_version: "module_current",
1402    },
1403}
1404
1405sdk_snapshot {
1406    name: "mysdk@current",
1407    visibility: ["//visibility:public"],
1408    java_sdk_libs: ["mysdk_myjavalib@current"],
1409}
1410`),
1411		checkAllCopyRules(`
1412.intermediates/myjavalib.stubs/android_common/javac/myjavalib.stubs.jar -> sdk_library/public/myjavalib-stubs.jar
1413.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_api.txt -> sdk_library/public/myjavalib.txt
1414.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_removed.txt -> sdk_library/public/myjavalib-removed.txt
1415`),
1416		checkMergeZips(
1417			".intermediates/mysdk/common_os/tmp/sdk_library/public/myjavalib_stub_sources.zip",
1418		),
1419	)
1420}
1421
1422func TestSnapshotWithJavaSdkLibrary_ApiScopes(t *testing.T) {
1423	result := android.GroupFixturePreparers(prepareForSdkTestWithJavaSdkLibrary).RunTestWithBp(t, `
1424		sdk {
1425			name: "mysdk",
1426			java_sdk_libs: ["myjavalib"],
1427		}
1428
1429		java_sdk_library {
1430			name: "myjavalib",
1431			apex_available: ["//apex_available:anyapex"],
1432			srcs: ["Test.java"],
1433			sdk_version: "current",
1434			public: {
1435				enabled: true,
1436			},
1437			system: {
1438				enabled: true,
1439			},
1440		}
1441	`)
1442
1443	CheckSnapshot(t, result, "mysdk", "",
1444		checkUnversionedAndroidBpContents(`
1445// This is auto-generated. DO NOT EDIT.
1446
1447java_sdk_library_import {
1448    name: "myjavalib",
1449    prefer: false,
1450    visibility: ["//visibility:public"],
1451    apex_available: ["//apex_available:anyapex"],
1452    shared_library: true,
1453    public: {
1454        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1455        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1456        current_api: "sdk_library/public/myjavalib.txt",
1457        removed_api: "sdk_library/public/myjavalib-removed.txt",
1458        sdk_version: "current",
1459    },
1460    system: {
1461        jars: ["sdk_library/system/myjavalib-stubs.jar"],
1462        stub_srcs: ["sdk_library/system/myjavalib_stub_sources"],
1463        current_api: "sdk_library/system/myjavalib.txt",
1464        removed_api: "sdk_library/system/myjavalib-removed.txt",
1465        sdk_version: "system_current",
1466    },
1467}
1468`),
1469		checkVersionedAndroidBpContents(`
1470// This is auto-generated. DO NOT EDIT.
1471
1472java_sdk_library_import {
1473    name: "mysdk_myjavalib@current",
1474    sdk_member_name: "myjavalib",
1475    visibility: ["//visibility:public"],
1476    apex_available: ["//apex_available:anyapex"],
1477    shared_library: true,
1478    public: {
1479        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1480        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1481        current_api: "sdk_library/public/myjavalib.txt",
1482        removed_api: "sdk_library/public/myjavalib-removed.txt",
1483        sdk_version: "current",
1484    },
1485    system: {
1486        jars: ["sdk_library/system/myjavalib-stubs.jar"],
1487        stub_srcs: ["sdk_library/system/myjavalib_stub_sources"],
1488        current_api: "sdk_library/system/myjavalib.txt",
1489        removed_api: "sdk_library/system/myjavalib-removed.txt",
1490        sdk_version: "system_current",
1491    },
1492}
1493
1494sdk_snapshot {
1495    name: "mysdk@current",
1496    visibility: ["//visibility:public"],
1497    java_sdk_libs: ["mysdk_myjavalib@current"],
1498}
1499`),
1500		checkAllCopyRules(`
1501.intermediates/myjavalib.stubs/android_common/javac/myjavalib.stubs.jar -> sdk_library/public/myjavalib-stubs.jar
1502.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_api.txt -> sdk_library/public/myjavalib.txt
1503.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_removed.txt -> sdk_library/public/myjavalib-removed.txt
1504.intermediates/myjavalib.stubs.system/android_common/javac/myjavalib.stubs.system.jar -> sdk_library/system/myjavalib-stubs.jar
1505.intermediates/myjavalib.stubs.source.system/android_common/metalava/myjavalib.stubs.source.system_api.txt -> sdk_library/system/myjavalib.txt
1506.intermediates/myjavalib.stubs.source.system/android_common/metalava/myjavalib.stubs.source.system_removed.txt -> sdk_library/system/myjavalib-removed.txt
1507`),
1508		checkMergeZips(
1509			".intermediates/mysdk/common_os/tmp/sdk_library/public/myjavalib_stub_sources.zip",
1510			".intermediates/mysdk/common_os/tmp/sdk_library/system/myjavalib_stub_sources.zip",
1511		),
1512	)
1513}
1514
1515func TestSnapshotWithJavaSdkLibrary_ModuleLib(t *testing.T) {
1516	result := android.GroupFixturePreparers(prepareForSdkTestWithJavaSdkLibrary).RunTestWithBp(t, `
1517		sdk {
1518			name: "mysdk",
1519			java_sdk_libs: ["myjavalib"],
1520		}
1521
1522		java_sdk_library {
1523			name: "myjavalib",
1524			apex_available: ["//apex_available:anyapex"],
1525			srcs: ["Test.java"],
1526			sdk_version: "current",
1527			public: {
1528				enabled: true,
1529			},
1530			system: {
1531				enabled: true,
1532			},
1533			module_lib: {
1534				enabled: true,
1535			},
1536		}
1537	`)
1538
1539	CheckSnapshot(t, result, "mysdk", "",
1540		checkUnversionedAndroidBpContents(`
1541// This is auto-generated. DO NOT EDIT.
1542
1543java_sdk_library_import {
1544    name: "myjavalib",
1545    prefer: false,
1546    visibility: ["//visibility:public"],
1547    apex_available: ["//apex_available:anyapex"],
1548    shared_library: true,
1549    public: {
1550        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1551        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1552        current_api: "sdk_library/public/myjavalib.txt",
1553        removed_api: "sdk_library/public/myjavalib-removed.txt",
1554        sdk_version: "current",
1555    },
1556    system: {
1557        jars: ["sdk_library/system/myjavalib-stubs.jar"],
1558        stub_srcs: ["sdk_library/system/myjavalib_stub_sources"],
1559        current_api: "sdk_library/system/myjavalib.txt",
1560        removed_api: "sdk_library/system/myjavalib-removed.txt",
1561        sdk_version: "system_current",
1562    },
1563    module_lib: {
1564        jars: ["sdk_library/module-lib/myjavalib-stubs.jar"],
1565        stub_srcs: ["sdk_library/module-lib/myjavalib_stub_sources"],
1566        current_api: "sdk_library/module-lib/myjavalib.txt",
1567        removed_api: "sdk_library/module-lib/myjavalib-removed.txt",
1568        sdk_version: "module_current",
1569    },
1570}
1571`),
1572		checkVersionedAndroidBpContents(`
1573// This is auto-generated. DO NOT EDIT.
1574
1575java_sdk_library_import {
1576    name: "mysdk_myjavalib@current",
1577    sdk_member_name: "myjavalib",
1578    visibility: ["//visibility:public"],
1579    apex_available: ["//apex_available:anyapex"],
1580    shared_library: true,
1581    public: {
1582        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1583        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1584        current_api: "sdk_library/public/myjavalib.txt",
1585        removed_api: "sdk_library/public/myjavalib-removed.txt",
1586        sdk_version: "current",
1587    },
1588    system: {
1589        jars: ["sdk_library/system/myjavalib-stubs.jar"],
1590        stub_srcs: ["sdk_library/system/myjavalib_stub_sources"],
1591        current_api: "sdk_library/system/myjavalib.txt",
1592        removed_api: "sdk_library/system/myjavalib-removed.txt",
1593        sdk_version: "system_current",
1594    },
1595    module_lib: {
1596        jars: ["sdk_library/module-lib/myjavalib-stubs.jar"],
1597        stub_srcs: ["sdk_library/module-lib/myjavalib_stub_sources"],
1598        current_api: "sdk_library/module-lib/myjavalib.txt",
1599        removed_api: "sdk_library/module-lib/myjavalib-removed.txt",
1600        sdk_version: "module_current",
1601    },
1602}
1603
1604sdk_snapshot {
1605    name: "mysdk@current",
1606    visibility: ["//visibility:public"],
1607    java_sdk_libs: ["mysdk_myjavalib@current"],
1608}
1609`),
1610		checkAllCopyRules(`
1611.intermediates/myjavalib.stubs/android_common/javac/myjavalib.stubs.jar -> sdk_library/public/myjavalib-stubs.jar
1612.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_api.txt -> sdk_library/public/myjavalib.txt
1613.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_removed.txt -> sdk_library/public/myjavalib-removed.txt
1614.intermediates/myjavalib.stubs.system/android_common/javac/myjavalib.stubs.system.jar -> sdk_library/system/myjavalib-stubs.jar
1615.intermediates/myjavalib.stubs.source.system/android_common/metalava/myjavalib.stubs.source.system_api.txt -> sdk_library/system/myjavalib.txt
1616.intermediates/myjavalib.stubs.source.system/android_common/metalava/myjavalib.stubs.source.system_removed.txt -> sdk_library/system/myjavalib-removed.txt
1617.intermediates/myjavalib.stubs.module_lib/android_common/javac/myjavalib.stubs.module_lib.jar -> sdk_library/module-lib/myjavalib-stubs.jar
1618.intermediates/myjavalib.stubs.source.module_lib/android_common/metalava/myjavalib.stubs.source.module_lib_api.txt -> sdk_library/module-lib/myjavalib.txt
1619.intermediates/myjavalib.stubs.source.module_lib/android_common/metalava/myjavalib.stubs.source.module_lib_removed.txt -> sdk_library/module-lib/myjavalib-removed.txt
1620`),
1621		checkMergeZips(
1622			".intermediates/mysdk/common_os/tmp/sdk_library/public/myjavalib_stub_sources.zip",
1623			".intermediates/mysdk/common_os/tmp/sdk_library/system/myjavalib_stub_sources.zip",
1624			".intermediates/mysdk/common_os/tmp/sdk_library/module-lib/myjavalib_stub_sources.zip",
1625		),
1626	)
1627}
1628
1629func TestSnapshotWithJavaSdkLibrary_SystemServer(t *testing.T) {
1630	result := android.GroupFixturePreparers(prepareForSdkTestWithJavaSdkLibrary).RunTestWithBp(t, `
1631		sdk {
1632			name: "mysdk",
1633			java_sdk_libs: ["myjavalib"],
1634		}
1635
1636		java_sdk_library {
1637			name: "myjavalib",
1638			apex_available: ["//apex_available:anyapex"],
1639			srcs: ["Test.java"],
1640			sdk_version: "current",
1641			public: {
1642				enabled: true,
1643			},
1644			system_server: {
1645				enabled: true,
1646			},
1647		}
1648	`)
1649
1650	CheckSnapshot(t, result, "mysdk", "",
1651		checkUnversionedAndroidBpContents(`
1652// This is auto-generated. DO NOT EDIT.
1653
1654java_sdk_library_import {
1655    name: "myjavalib",
1656    prefer: false,
1657    visibility: ["//visibility:public"],
1658    apex_available: ["//apex_available:anyapex"],
1659    shared_library: true,
1660    public: {
1661        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1662        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1663        current_api: "sdk_library/public/myjavalib.txt",
1664        removed_api: "sdk_library/public/myjavalib-removed.txt",
1665        sdk_version: "current",
1666    },
1667    system_server: {
1668        jars: ["sdk_library/system-server/myjavalib-stubs.jar"],
1669        stub_srcs: ["sdk_library/system-server/myjavalib_stub_sources"],
1670        current_api: "sdk_library/system-server/myjavalib.txt",
1671        removed_api: "sdk_library/system-server/myjavalib-removed.txt",
1672        sdk_version: "system_server_current",
1673    },
1674}
1675`),
1676		checkVersionedAndroidBpContents(`
1677// This is auto-generated. DO NOT EDIT.
1678
1679java_sdk_library_import {
1680    name: "mysdk_myjavalib@current",
1681    sdk_member_name: "myjavalib",
1682    visibility: ["//visibility:public"],
1683    apex_available: ["//apex_available:anyapex"],
1684    shared_library: true,
1685    public: {
1686        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1687        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1688        current_api: "sdk_library/public/myjavalib.txt",
1689        removed_api: "sdk_library/public/myjavalib-removed.txt",
1690        sdk_version: "current",
1691    },
1692    system_server: {
1693        jars: ["sdk_library/system-server/myjavalib-stubs.jar"],
1694        stub_srcs: ["sdk_library/system-server/myjavalib_stub_sources"],
1695        current_api: "sdk_library/system-server/myjavalib.txt",
1696        removed_api: "sdk_library/system-server/myjavalib-removed.txt",
1697        sdk_version: "system_server_current",
1698    },
1699}
1700
1701sdk_snapshot {
1702    name: "mysdk@current",
1703    visibility: ["//visibility:public"],
1704    java_sdk_libs: ["mysdk_myjavalib@current"],
1705}
1706`),
1707		checkAllCopyRules(`
1708.intermediates/myjavalib.stubs/android_common/javac/myjavalib.stubs.jar -> sdk_library/public/myjavalib-stubs.jar
1709.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_api.txt -> sdk_library/public/myjavalib.txt
1710.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_removed.txt -> sdk_library/public/myjavalib-removed.txt
1711.intermediates/myjavalib.stubs.system_server/android_common/javac/myjavalib.stubs.system_server.jar -> sdk_library/system-server/myjavalib-stubs.jar
1712.intermediates/myjavalib.stubs.source.system_server/android_common/metalava/myjavalib.stubs.source.system_server_api.txt -> sdk_library/system-server/myjavalib.txt
1713.intermediates/myjavalib.stubs.source.system_server/android_common/metalava/myjavalib.stubs.source.system_server_removed.txt -> sdk_library/system-server/myjavalib-removed.txt
1714`),
1715		checkMergeZips(
1716			".intermediates/mysdk/common_os/tmp/sdk_library/public/myjavalib_stub_sources.zip",
1717			".intermediates/mysdk/common_os/tmp/sdk_library/system-server/myjavalib_stub_sources.zip",
1718		),
1719	)
1720}
1721
1722func TestSnapshotWithJavaSdkLibrary_NamingScheme(t *testing.T) {
1723	result := android.GroupFixturePreparers(prepareForSdkTestWithJavaSdkLibrary).RunTestWithBp(t, `
1724		sdk {
1725			name: "mysdk",
1726			java_sdk_libs: ["myjavalib"],
1727		}
1728
1729		java_sdk_library {
1730			name: "myjavalib",
1731			apex_available: ["//apex_available:anyapex"],
1732			srcs: ["Test.java"],
1733			sdk_version: "current",
1734			naming_scheme: "default",
1735			public: {
1736				enabled: true,
1737			},
1738		}
1739	`)
1740
1741	CheckSnapshot(t, result, "mysdk", "",
1742		checkUnversionedAndroidBpContents(`
1743// This is auto-generated. DO NOT EDIT.
1744
1745java_sdk_library_import {
1746    name: "myjavalib",
1747    prefer: false,
1748    visibility: ["//visibility:public"],
1749    apex_available: ["//apex_available:anyapex"],
1750    naming_scheme: "default",
1751    shared_library: true,
1752    public: {
1753        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1754        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1755        current_api: "sdk_library/public/myjavalib.txt",
1756        removed_api: "sdk_library/public/myjavalib-removed.txt",
1757        sdk_version: "current",
1758    },
1759}
1760`),
1761		checkVersionedAndroidBpContents(`
1762// This is auto-generated. DO NOT EDIT.
1763
1764java_sdk_library_import {
1765    name: "mysdk_myjavalib@current",
1766    sdk_member_name: "myjavalib",
1767    visibility: ["//visibility:public"],
1768    apex_available: ["//apex_available:anyapex"],
1769    naming_scheme: "default",
1770    shared_library: true,
1771    public: {
1772        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1773        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1774        current_api: "sdk_library/public/myjavalib.txt",
1775        removed_api: "sdk_library/public/myjavalib-removed.txt",
1776        sdk_version: "current",
1777    },
1778}
1779
1780sdk_snapshot {
1781    name: "mysdk@current",
1782    visibility: ["//visibility:public"],
1783    java_sdk_libs: ["mysdk_myjavalib@current"],
1784}
1785`),
1786		checkAllCopyRules(`
1787.intermediates/myjavalib.stubs/android_common/javac/myjavalib.stubs.jar -> sdk_library/public/myjavalib-stubs.jar
1788.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_api.txt -> sdk_library/public/myjavalib.txt
1789.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_removed.txt -> sdk_library/public/myjavalib-removed.txt
1790`),
1791		checkMergeZips(
1792			".intermediates/mysdk/common_os/tmp/sdk_library/public/myjavalib_stub_sources.zip",
1793		),
1794	)
1795}
1796
1797func TestSnapshotWithJavaSdkLibrary_DoctagFiles(t *testing.T) {
1798	result := android.GroupFixturePreparers(
1799		prepareForSdkTestWithJavaSdkLibrary,
1800		android.FixtureAddFile("docs/known_doctags", nil),
1801	).RunTestWithBp(t, `
1802		sdk {
1803			name: "mysdk",
1804			java_sdk_libs: ["myjavalib"],
1805		}
1806
1807		java_sdk_library {
1808			name: "myjavalib",
1809			srcs: ["Test.java"],
1810			sdk_version: "current",
1811			public: {
1812				enabled: true,
1813			},
1814			doctag_files: ["docs/known_doctags"],
1815		}
1816
1817		filegroup {
1818			name: "mygroup",
1819			srcs: [":myjavalib{.doctags}"],
1820		}
1821	`)
1822
1823	CheckSnapshot(t, result, "mysdk", "",
1824		checkUnversionedAndroidBpContents(`
1825// This is auto-generated. DO NOT EDIT.
1826
1827java_sdk_library_import {
1828    name: "myjavalib",
1829    prefer: false,
1830    visibility: ["//visibility:public"],
1831    apex_available: ["//apex_available:platform"],
1832    shared_library: true,
1833    doctag_files: ["doctags/docs/known_doctags"],
1834    public: {
1835        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1836        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1837        current_api: "sdk_library/public/myjavalib.txt",
1838        removed_api: "sdk_library/public/myjavalib-removed.txt",
1839        sdk_version: "current",
1840    },
1841}
1842`),
1843		checkVersionedAndroidBpContents(`
1844// This is auto-generated. DO NOT EDIT.
1845
1846java_sdk_library_import {
1847    name: "mysdk_myjavalib@current",
1848    sdk_member_name: "myjavalib",
1849    visibility: ["//visibility:public"],
1850    apex_available: ["//apex_available:platform"],
1851    shared_library: true,
1852    doctag_files: ["doctags/docs/known_doctags"],
1853    public: {
1854        jars: ["sdk_library/public/myjavalib-stubs.jar"],
1855        stub_srcs: ["sdk_library/public/myjavalib_stub_sources"],
1856        current_api: "sdk_library/public/myjavalib.txt",
1857        removed_api: "sdk_library/public/myjavalib-removed.txt",
1858        sdk_version: "current",
1859    },
1860}
1861
1862sdk_snapshot {
1863    name: "mysdk@current",
1864    visibility: ["//visibility:public"],
1865    java_sdk_libs: ["mysdk_myjavalib@current"],
1866}
1867`),
1868		checkAllCopyRules(`
1869.intermediates/myjavalib.stubs/android_common/javac/myjavalib.stubs.jar -> sdk_library/public/myjavalib-stubs.jar
1870.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_api.txt -> sdk_library/public/myjavalib.txt
1871.intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_removed.txt -> sdk_library/public/myjavalib-removed.txt
1872docs/known_doctags -> doctags/docs/known_doctags
1873`),
1874	)
1875}
1876