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