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