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