xref: /aosp_15_r20/build/soong/java/sdk_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2019 Google Inc. All rights reserved.
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage java
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"path/filepath"
19*333d2b36SAndroid Build Coastguard Worker	"strings"
20*333d2b36SAndroid Build Coastguard Worker	"testing"
21*333d2b36SAndroid Build Coastguard Worker
22*333d2b36SAndroid Build Coastguard Worker	"github.com/google/blueprint/proptools"
23*333d2b36SAndroid Build Coastguard Worker
24*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
25*333d2b36SAndroid Build Coastguard Worker	"android/soong/java/config"
26*333d2b36SAndroid Build Coastguard Worker)
27*333d2b36SAndroid Build Coastguard Worker
28*333d2b36SAndroid Build Coastguard Workertype classpathTestCase struct {
29*333d2b36SAndroid Build Coastguard Worker	name       string
30*333d2b36SAndroid Build Coastguard Worker	unbundled  bool
31*333d2b36SAndroid Build Coastguard Worker	moduleType string
32*333d2b36SAndroid Build Coastguard Worker	host       android.OsClass
33*333d2b36SAndroid Build Coastguard Worker	properties string
34*333d2b36SAndroid Build Coastguard Worker
35*333d2b36SAndroid Build Coastguard Worker	// for java 8
36*333d2b36SAndroid Build Coastguard Worker	bootclasspath  []string
37*333d2b36SAndroid Build Coastguard Worker	java8classpath []string
38*333d2b36SAndroid Build Coastguard Worker
39*333d2b36SAndroid Build Coastguard Worker	// for java 9
40*333d2b36SAndroid Build Coastguard Worker	system         string
41*333d2b36SAndroid Build Coastguard Worker	java9classpath []string
42*333d2b36SAndroid Build Coastguard Worker
43*333d2b36SAndroid Build Coastguard Worker	forces8 bool // if set, javac will always be called with java 8 arguments
44*333d2b36SAndroid Build Coastguard Worker
45*333d2b36SAndroid Build Coastguard Worker	aidl string
46*333d2b36SAndroid Build Coastguard Worker
47*333d2b36SAndroid Build Coastguard Worker	// Indicates how this test case is affected by the setting of Always_use_prebuilt_sdks.
48*333d2b36SAndroid Build Coastguard Worker	//
49*333d2b36SAndroid Build Coastguard Worker	// If this is nil then the test case is unaffected by the setting of Always_use_prebuilt_sdks.
50*333d2b36SAndroid Build Coastguard Worker	// Otherwise, the test case can only be used when
51*333d2b36SAndroid Build Coastguard Worker	// Always_use_prebuilt_sdks=*forAlwaysUsePrebuiltSdks.
52*333d2b36SAndroid Build Coastguard Worker	forAlwaysUsePrebuiltSdks *bool
53*333d2b36SAndroid Build Coastguard Worker}
54*333d2b36SAndroid Build Coastguard Worker
55*333d2b36SAndroid Build Coastguard Workerfunc TestClasspath(t *testing.T) {
56*333d2b36SAndroid Build Coastguard Worker	const frameworkAidl = "-I" + defaultJavaDir + "/framework/aidl"
57*333d2b36SAndroid Build Coastguard Worker	var classpathTestcases = []classpathTestCase{
58*333d2b36SAndroid Build Coastguard Worker		{
59*333d2b36SAndroid Build Coastguard Worker			name:           "default",
60*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  config.StableCorePlatformBootclasspathLibraries,
61*333d2b36SAndroid Build Coastguard Worker			system:         config.StableCorePlatformSystemModules,
62*333d2b36SAndroid Build Coastguard Worker			java8classpath: config.FrameworkLibraries,
63*333d2b36SAndroid Build Coastguard Worker			java9classpath: config.FrameworkLibraries,
64*333d2b36SAndroid Build Coastguard Worker			aidl:           frameworkAidl,
65*333d2b36SAndroid Build Coastguard Worker		},
66*333d2b36SAndroid Build Coastguard Worker		{
67*333d2b36SAndroid Build Coastguard Worker			name:           `sdk_version:"core_platform"`,
68*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version:"core_platform"`,
69*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  config.StableCorePlatformBootclasspathLibraries,
70*333d2b36SAndroid Build Coastguard Worker			system:         config.StableCorePlatformSystemModules,
71*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{},
72*333d2b36SAndroid Build Coastguard Worker			aidl:           "",
73*333d2b36SAndroid Build Coastguard Worker		},
74*333d2b36SAndroid Build Coastguard Worker		{
75*333d2b36SAndroid Build Coastguard Worker			name:           "blank sdk version",
76*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "",`,
77*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  config.StableCorePlatformBootclasspathLibraries,
78*333d2b36SAndroid Build Coastguard Worker			system:         config.StableCorePlatformSystemModules,
79*333d2b36SAndroid Build Coastguard Worker			java8classpath: config.FrameworkLibraries,
80*333d2b36SAndroid Build Coastguard Worker			java9classpath: config.FrameworkLibraries,
81*333d2b36SAndroid Build Coastguard Worker			aidl:           frameworkAidl,
82*333d2b36SAndroid Build Coastguard Worker		},
83*333d2b36SAndroid Build Coastguard Worker		{
84*333d2b36SAndroid Build Coastguard Worker
85*333d2b36SAndroid Build Coastguard Worker			name:           "sdk v29",
86*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "29",`,
87*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
88*333d2b36SAndroid Build Coastguard Worker			forces8:        true,
89*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/29/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
90*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/29/public/framework.aidl",
91*333d2b36SAndroid Build Coastguard Worker		},
92*333d2b36SAndroid Build Coastguard Worker		{
93*333d2b36SAndroid Build Coastguard Worker
94*333d2b36SAndroid Build Coastguard Worker			name:           "sdk v30",
95*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "30",`,
96*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
97*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_public_30_system_modules",
98*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
99*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
100*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/30/public/framework.aidl",
101*333d2b36SAndroid Build Coastguard Worker		},
102*333d2b36SAndroid Build Coastguard Worker		{
103*333d2b36SAndroid Build Coastguard Worker			// Test case only applies when Always_use_prebuilt_sdks=false (the default).
104*333d2b36SAndroid Build Coastguard Worker			forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false),
105*333d2b36SAndroid Build Coastguard Worker
106*333d2b36SAndroid Build Coastguard Worker			name:           "current",
107*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "current",`,
108*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{"android_stubs_current", "core-lambda-stubs"},
109*333d2b36SAndroid Build Coastguard Worker			system:         "core-public-stubs-system-modules",
110*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"android_stubs_current"},
111*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pout/soong/framework.aidl",
112*333d2b36SAndroid Build Coastguard Worker		},
113*333d2b36SAndroid Build Coastguard Worker		{
114*333d2b36SAndroid Build Coastguard Worker			// Test case only applies when Always_use_prebuilt_sdks=true.
115*333d2b36SAndroid Build Coastguard Worker			forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true),
116*333d2b36SAndroid Build Coastguard Worker
117*333d2b36SAndroid Build Coastguard Worker			name:           "current",
118*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "current",`,
119*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
120*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_public_current_system_modules",
121*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
122*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
123*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/current/public/framework.aidl",
124*333d2b36SAndroid Build Coastguard Worker		},
125*333d2b36SAndroid Build Coastguard Worker		{
126*333d2b36SAndroid Build Coastguard Worker			// Test case only applies when Always_use_prebuilt_sdks=false (the default).
127*333d2b36SAndroid Build Coastguard Worker			forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false),
128*333d2b36SAndroid Build Coastguard Worker
129*333d2b36SAndroid Build Coastguard Worker			name:           "system_current",
130*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "system_current",`,
131*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{"android_system_stubs_current", "core-lambda-stubs"},
132*333d2b36SAndroid Build Coastguard Worker			system:         "core-public-stubs-system-modules",
133*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"android_system_stubs_current"},
134*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pout/soong/framework.aidl",
135*333d2b36SAndroid Build Coastguard Worker		},
136*333d2b36SAndroid Build Coastguard Worker		{
137*333d2b36SAndroid Build Coastguard Worker			// Test case only applies when Always_use_prebuilt_sdks=true.
138*333d2b36SAndroid Build Coastguard Worker			forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true),
139*333d2b36SAndroid Build Coastguard Worker
140*333d2b36SAndroid Build Coastguard Worker			name:           "system_current",
141*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "system_current",`,
142*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
143*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_public_current_system_modules",
144*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/current/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
145*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/current/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
146*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/current/public/framework.aidl",
147*333d2b36SAndroid Build Coastguard Worker		},
148*333d2b36SAndroid Build Coastguard Worker		{
149*333d2b36SAndroid Build Coastguard Worker			name:           "system_29",
150*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "system_29",`,
151*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
152*333d2b36SAndroid Build Coastguard Worker			forces8:        true,
153*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/29/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
154*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/29/public/framework.aidl",
155*333d2b36SAndroid Build Coastguard Worker		},
156*333d2b36SAndroid Build Coastguard Worker		{
157*333d2b36SAndroid Build Coastguard Worker			name:           "system_30",
158*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "system_30",`,
159*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
160*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_public_30_system_modules",
161*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/30/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
162*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/30/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
163*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/30/public/framework.aidl",
164*333d2b36SAndroid Build Coastguard Worker		},
165*333d2b36SAndroid Build Coastguard Worker		{
166*333d2b36SAndroid Build Coastguard Worker			// Test case only applies when Always_use_prebuilt_sdks=false (the default).
167*333d2b36SAndroid Build Coastguard Worker			forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false),
168*333d2b36SAndroid Build Coastguard Worker
169*333d2b36SAndroid Build Coastguard Worker			name:           "test_current",
170*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "test_current",`,
171*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{"android_test_stubs_current", "core-lambda-stubs"},
172*333d2b36SAndroid Build Coastguard Worker			system:         "core-public-stubs-system-modules",
173*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"android_test_stubs_current"},
174*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pout/soong/framework.aidl",
175*333d2b36SAndroid Build Coastguard Worker		},
176*333d2b36SAndroid Build Coastguard Worker		{
177*333d2b36SAndroid Build Coastguard Worker			// Test case only applies when Always_use_prebuilt_sdks=true.
178*333d2b36SAndroid Build Coastguard Worker			forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true),
179*333d2b36SAndroid Build Coastguard Worker
180*333d2b36SAndroid Build Coastguard Worker			name:           "test_current",
181*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "test_current",`,
182*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
183*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_public_current_system_modules",
184*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/current/test/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
185*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/current/test/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
186*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/current/public/framework.aidl",
187*333d2b36SAndroid Build Coastguard Worker		},
188*333d2b36SAndroid Build Coastguard Worker		{
189*333d2b36SAndroid Build Coastguard Worker			name:           "test_30",
190*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "test_30",`,
191*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
192*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_public_30_system_modules",
193*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/30/test/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
194*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/30/test/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
195*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/30/public/framework.aidl",
196*333d2b36SAndroid Build Coastguard Worker		},
197*333d2b36SAndroid Build Coastguard Worker		{
198*333d2b36SAndroid Build Coastguard Worker			// Test case only applies when Always_use_prebuilt_sdks=false (the default).
199*333d2b36SAndroid Build Coastguard Worker			forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false),
200*333d2b36SAndroid Build Coastguard Worker
201*333d2b36SAndroid Build Coastguard Worker			name:          "core_current",
202*333d2b36SAndroid Build Coastguard Worker			properties:    `sdk_version: "core_current",`,
203*333d2b36SAndroid Build Coastguard Worker			bootclasspath: []string{"core.current.stubs", "core-lambda-stubs"},
204*333d2b36SAndroid Build Coastguard Worker			system:        "core-public-stubs-system-modules",
205*333d2b36SAndroid Build Coastguard Worker		},
206*333d2b36SAndroid Build Coastguard Worker		{
207*333d2b36SAndroid Build Coastguard Worker			// Test case only applies when Always_use_prebuilt_sdks=true.
208*333d2b36SAndroid Build Coastguard Worker			forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true),
209*333d2b36SAndroid Build Coastguard Worker
210*333d2b36SAndroid Build Coastguard Worker			name:           "core_current",
211*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "core_current",`,
212*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
213*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_public_current_system_modules",
214*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/current/core/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
215*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/current/core/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
216*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/current/public/framework.aidl",
217*333d2b36SAndroid Build Coastguard Worker		},
218*333d2b36SAndroid Build Coastguard Worker		{
219*333d2b36SAndroid Build Coastguard Worker
220*333d2b36SAndroid Build Coastguard Worker			name:           "nostdlib",
221*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "none", system_modules: "none"`,
222*333d2b36SAndroid Build Coastguard Worker			system:         "none",
223*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
224*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{},
225*333d2b36SAndroid Build Coastguard Worker		},
226*333d2b36SAndroid Build Coastguard Worker		{
227*333d2b36SAndroid Build Coastguard Worker
228*333d2b36SAndroid Build Coastguard Worker			name:           "nostdlib system_modules",
229*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "none", system_modules: "stable-core-platform-api-stubs-system-modules"`,
230*333d2b36SAndroid Build Coastguard Worker			system:         "stable-core-platform-api-stubs-system-modules",
231*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{"stable-core-platform-api-stubs-system-modules-lib"},
232*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{},
233*333d2b36SAndroid Build Coastguard Worker		},
234*333d2b36SAndroid Build Coastguard Worker		{
235*333d2b36SAndroid Build Coastguard Worker
236*333d2b36SAndroid Build Coastguard Worker			name:           "host default",
237*333d2b36SAndroid Build Coastguard Worker			moduleType:     "java_library_host",
238*333d2b36SAndroid Build Coastguard Worker			properties:     ``,
239*333d2b36SAndroid Build Coastguard Worker			host:           android.Host,
240*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"},
241*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{},
242*333d2b36SAndroid Build Coastguard Worker		},
243*333d2b36SAndroid Build Coastguard Worker		{
244*333d2b36SAndroid Build Coastguard Worker
245*333d2b36SAndroid Build Coastguard Worker			name:           "host supported default",
246*333d2b36SAndroid Build Coastguard Worker			host:           android.Host,
247*333d2b36SAndroid Build Coastguard Worker			properties:     `host_supported: true,`,
248*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{},
249*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"},
250*333d2b36SAndroid Build Coastguard Worker		},
251*333d2b36SAndroid Build Coastguard Worker		{
252*333d2b36SAndroid Build Coastguard Worker			name:           "host supported nostdlib",
253*333d2b36SAndroid Build Coastguard Worker			host:           android.Host,
254*333d2b36SAndroid Build Coastguard Worker			properties:     `host_supported: true, sdk_version: "none", system_modules: "none"`,
255*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{},
256*333d2b36SAndroid Build Coastguard Worker		},
257*333d2b36SAndroid Build Coastguard Worker		{
258*333d2b36SAndroid Build Coastguard Worker
259*333d2b36SAndroid Build Coastguard Worker			name:           "unbundled sdk v29",
260*333d2b36SAndroid Build Coastguard Worker			unbundled:      true,
261*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "29",`,
262*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
263*333d2b36SAndroid Build Coastguard Worker			forces8:        true,
264*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/29/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
265*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/29/public/framework.aidl",
266*333d2b36SAndroid Build Coastguard Worker		},
267*333d2b36SAndroid Build Coastguard Worker		{
268*333d2b36SAndroid Build Coastguard Worker
269*333d2b36SAndroid Build Coastguard Worker			name:           "unbundled sdk v30",
270*333d2b36SAndroid Build Coastguard Worker			unbundled:      true,
271*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "30",`,
272*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
273*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_public_30_system_modules",
274*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
275*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/30/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
276*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/30/public/framework.aidl",
277*333d2b36SAndroid Build Coastguard Worker		},
278*333d2b36SAndroid Build Coastguard Worker		{
279*333d2b36SAndroid Build Coastguard Worker
280*333d2b36SAndroid Build Coastguard Worker			name:           "unbundled current",
281*333d2b36SAndroid Build Coastguard Worker			unbundled:      true,
282*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "current",`,
283*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
284*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_public_current_system_modules",
285*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
286*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
287*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/current/public/framework.aidl",
288*333d2b36SAndroid Build Coastguard Worker		},
289*333d2b36SAndroid Build Coastguard Worker		{
290*333d2b36SAndroid Build Coastguard Worker			// Test case only applies when Always_use_prebuilt_sdks=false (the default).
291*333d2b36SAndroid Build Coastguard Worker			forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false),
292*333d2b36SAndroid Build Coastguard Worker
293*333d2b36SAndroid Build Coastguard Worker			name:           "module_current",
294*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "module_current",`,
295*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{"android_module_lib_stubs_current", "core-lambda-stubs"},
296*333d2b36SAndroid Build Coastguard Worker			system:         "core-module-lib-stubs-system-modules",
297*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"android_module_lib_stubs_current"},
298*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pout/soong/framework_non_updatable.aidl",
299*333d2b36SAndroid Build Coastguard Worker		},
300*333d2b36SAndroid Build Coastguard Worker		{
301*333d2b36SAndroid Build Coastguard Worker			// Test case only applies when Always_use_prebuilt_sdks=true.
302*333d2b36SAndroid Build Coastguard Worker			forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true),
303*333d2b36SAndroid Build Coastguard Worker
304*333d2b36SAndroid Build Coastguard Worker			name:           "module_current",
305*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "module_current",`,
306*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
307*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_module-lib_current_system_modules",
308*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/current/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
309*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/current/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
310*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/current/public/framework.aidl",
311*333d2b36SAndroid Build Coastguard Worker		},
312*333d2b36SAndroid Build Coastguard Worker		{
313*333d2b36SAndroid Build Coastguard Worker			name:           "module_30",
314*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "module_30",`,
315*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
316*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_public_30_system_modules",
317*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/30/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
318*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/30/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
319*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/30/public/framework.aidl",
320*333d2b36SAndroid Build Coastguard Worker		},
321*333d2b36SAndroid Build Coastguard Worker		{
322*333d2b36SAndroid Build Coastguard Worker			name:           "module_31",
323*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "module_31",`,
324*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
325*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_public_31_system_modules",
326*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/31/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
327*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/31/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
328*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/31/public/framework.aidl",
329*333d2b36SAndroid Build Coastguard Worker		},
330*333d2b36SAndroid Build Coastguard Worker		{
331*333d2b36SAndroid Build Coastguard Worker			name:           "module_32",
332*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "module_32",`,
333*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
334*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_module-lib_32_system_modules",
335*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/32/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
336*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/32/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
337*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/32/public/framework.aidl",
338*333d2b36SAndroid Build Coastguard Worker		},
339*333d2b36SAndroid Build Coastguard Worker		{
340*333d2b36SAndroid Build Coastguard Worker			// Test case only applies when Always_use_prebuilt_sdks=false (the default).
341*333d2b36SAndroid Build Coastguard Worker			forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false),
342*333d2b36SAndroid Build Coastguard Worker
343*333d2b36SAndroid Build Coastguard Worker			name:           "system_server_current",
344*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "system_server_current",`,
345*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{"android_system_server_stubs_current", "core-lambda-stubs"},
346*333d2b36SAndroid Build Coastguard Worker			system:         "core-module-lib-stubs-system-modules",
347*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"android_system_server_stubs_current"},
348*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pout/soong/framework.aidl",
349*333d2b36SAndroid Build Coastguard Worker		},
350*333d2b36SAndroid Build Coastguard Worker		{
351*333d2b36SAndroid Build Coastguard Worker			// Test case only applies when Always_use_prebuilt_sdks=true.
352*333d2b36SAndroid Build Coastguard Worker			forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true),
353*333d2b36SAndroid Build Coastguard Worker
354*333d2b36SAndroid Build Coastguard Worker			name:           "system_server_current",
355*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "system_server_current",`,
356*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
357*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_module-lib_current_system_modules",
358*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/current/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
359*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/current/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
360*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/current/public/framework.aidl",
361*333d2b36SAndroid Build Coastguard Worker		},
362*333d2b36SAndroid Build Coastguard Worker		{
363*333d2b36SAndroid Build Coastguard Worker			name:           "system_server_30",
364*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "system_server_30",`,
365*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
366*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_public_30_system_modules",
367*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/30/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
368*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/30/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
369*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/30/public/framework.aidl",
370*333d2b36SAndroid Build Coastguard Worker		},
371*333d2b36SAndroid Build Coastguard Worker		{
372*333d2b36SAndroid Build Coastguard Worker			name:           "system_server_31",
373*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "system_server_31",`,
374*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
375*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_public_31_system_modules",
376*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/31/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
377*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/31/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
378*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/31/public/framework.aidl",
379*333d2b36SAndroid Build Coastguard Worker		},
380*333d2b36SAndroid Build Coastguard Worker		{
381*333d2b36SAndroid Build Coastguard Worker			name:           "system_server_32",
382*333d2b36SAndroid Build Coastguard Worker			properties:     `sdk_version: "system_server_32",`,
383*333d2b36SAndroid Build Coastguard Worker			bootclasspath:  []string{`""`},
384*333d2b36SAndroid Build Coastguard Worker			system:         "sdk_module-lib_32_system_modules",
385*333d2b36SAndroid Build Coastguard Worker			java8classpath: []string{"prebuilts/sdk/32/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
386*333d2b36SAndroid Build Coastguard Worker			java9classpath: []string{"prebuilts/sdk/32/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
387*333d2b36SAndroid Build Coastguard Worker			aidl:           "-pprebuilts/sdk/32/public/framework.aidl",
388*333d2b36SAndroid Build Coastguard Worker		},
389*333d2b36SAndroid Build Coastguard Worker	}
390*333d2b36SAndroid Build Coastguard Worker
391*333d2b36SAndroid Build Coastguard Worker	t.Parallel()
392*333d2b36SAndroid Build Coastguard Worker	t.Run("basic", func(t *testing.T) {
393*333d2b36SAndroid Build Coastguard Worker		t.Parallel()
394*333d2b36SAndroid Build Coastguard Worker		testClasspathTestCases(t, classpathTestcases, false, false)
395*333d2b36SAndroid Build Coastguard Worker	})
396*333d2b36SAndroid Build Coastguard Worker
397*333d2b36SAndroid Build Coastguard Worker	t.Run("Always_use_prebuilt_sdks=true", func(t *testing.T) {
398*333d2b36SAndroid Build Coastguard Worker		testClasspathTestCases(t, classpathTestcases, true, false)
399*333d2b36SAndroid Build Coastguard Worker	})
400*333d2b36SAndroid Build Coastguard Worker
401*333d2b36SAndroid Build Coastguard Worker	t.Run("UseTransitiveJarsInClasspath", func(t *testing.T) {
402*333d2b36SAndroid Build Coastguard Worker		testClasspathTestCases(t, classpathTestcases, false, true)
403*333d2b36SAndroid Build Coastguard Worker	})
404*333d2b36SAndroid Build Coastguard Worker}
405*333d2b36SAndroid Build Coastguard Worker
406*333d2b36SAndroid Build Coastguard Workerfunc testClasspathTestCases(t *testing.T, classpathTestcases []classpathTestCase, alwaysUsePrebuiltSdks, useTransitiveJarsInClasspath bool) {
407*333d2b36SAndroid Build Coastguard Worker	for _, testcase := range classpathTestcases {
408*333d2b36SAndroid Build Coastguard Worker		if testcase.forAlwaysUsePrebuiltSdks != nil && *testcase.forAlwaysUsePrebuiltSdks != alwaysUsePrebuiltSdks {
409*333d2b36SAndroid Build Coastguard Worker			continue
410*333d2b36SAndroid Build Coastguard Worker		}
411*333d2b36SAndroid Build Coastguard Worker
412*333d2b36SAndroid Build Coastguard Worker		t.Run(testcase.name, func(t *testing.T) {
413*333d2b36SAndroid Build Coastguard Worker			t.Parallel()
414*333d2b36SAndroid Build Coastguard Worker			moduleType := "java_library"
415*333d2b36SAndroid Build Coastguard Worker			if testcase.moduleType != "" {
416*333d2b36SAndroid Build Coastguard Worker				moduleType = testcase.moduleType
417*333d2b36SAndroid Build Coastguard Worker			}
418*333d2b36SAndroid Build Coastguard Worker
419*333d2b36SAndroid Build Coastguard Worker			props := `
420*333d2b36SAndroid Build Coastguard Worker				name: "foo",
421*333d2b36SAndroid Build Coastguard Worker				srcs: ["a.java"],
422*333d2b36SAndroid Build Coastguard Worker				target: {
423*333d2b36SAndroid Build Coastguard Worker					android: {
424*333d2b36SAndroid Build Coastguard Worker						srcs: ["bar-doc/IFoo.aidl"],
425*333d2b36SAndroid Build Coastguard Worker					},
426*333d2b36SAndroid Build Coastguard Worker				},
427*333d2b36SAndroid Build Coastguard Worker				`
428*333d2b36SAndroid Build Coastguard Worker			bp := moduleType + " {" + props + testcase.properties + `
429*333d2b36SAndroid Build Coastguard Worker			}`
430*333d2b36SAndroid Build Coastguard Worker			bpJava8 := moduleType + " {" + props + `java_version: "1.8",
431*333d2b36SAndroid Build Coastguard Worker				` + testcase.properties + `
432*333d2b36SAndroid Build Coastguard Worker			}`
433*333d2b36SAndroid Build Coastguard Worker
434*333d2b36SAndroid Build Coastguard Worker			variant := func(result *android.TestResult) string {
435*333d2b36SAndroid Build Coastguard Worker				if testcase.host == android.Host {
436*333d2b36SAndroid Build Coastguard Worker					return result.Config.BuildOS.String() + "_common"
437*333d2b36SAndroid Build Coastguard Worker				}
438*333d2b36SAndroid Build Coastguard Worker				return "android_common"
439*333d2b36SAndroid Build Coastguard Worker			}
440*333d2b36SAndroid Build Coastguard Worker
441*333d2b36SAndroid Build Coastguard Worker			convertModulesToPaths := func(cp []string) []string {
442*333d2b36SAndroid Build Coastguard Worker				ret := make([]string, len(cp))
443*333d2b36SAndroid Build Coastguard Worker				for i, e := range cp {
444*333d2b36SAndroid Build Coastguard Worker					switch {
445*333d2b36SAndroid Build Coastguard Worker					case e == `""`, strings.HasSuffix(e, ".jar"):
446*333d2b36SAndroid Build Coastguard Worker						ret[i] = e
447*333d2b36SAndroid Build Coastguard Worker					case useTransitiveJarsInClasspath:
448*333d2b36SAndroid Build Coastguard Worker						ret[i] = filepath.Join("out", "soong", ".intermediates", defaultJavaDir, e, "android_common", "turbine", e+".jar")
449*333d2b36SAndroid Build Coastguard Worker					default:
450*333d2b36SAndroid Build Coastguard Worker						ret[i] = filepath.Join("out", "soong", ".intermediates", defaultJavaDir, e, "android_common", "turbine-combined", e+".jar")
451*333d2b36SAndroid Build Coastguard Worker					}
452*333d2b36SAndroid Build Coastguard Worker				}
453*333d2b36SAndroid Build Coastguard Worker				return ret
454*333d2b36SAndroid Build Coastguard Worker			}
455*333d2b36SAndroid Build Coastguard Worker
456*333d2b36SAndroid Build Coastguard Worker			bootclasspath := convertModulesToPaths(testcase.bootclasspath)
457*333d2b36SAndroid Build Coastguard Worker			java8classpath := convertModulesToPaths(testcase.java8classpath)
458*333d2b36SAndroid Build Coastguard Worker			java9classpath := convertModulesToPaths(testcase.java9classpath)
459*333d2b36SAndroid Build Coastguard Worker
460*333d2b36SAndroid Build Coastguard Worker			bc := ""
461*333d2b36SAndroid Build Coastguard Worker			var bcDeps []string
462*333d2b36SAndroid Build Coastguard Worker			if len(bootclasspath) > 0 {
463*333d2b36SAndroid Build Coastguard Worker				bc = "-bootclasspath " + strings.Join(bootclasspath, ":")
464*333d2b36SAndroid Build Coastguard Worker				if bootclasspath[0] != `""` {
465*333d2b36SAndroid Build Coastguard Worker					bcDeps = bootclasspath
466*333d2b36SAndroid Build Coastguard Worker				}
467*333d2b36SAndroid Build Coastguard Worker			}
468*333d2b36SAndroid Build Coastguard Worker
469*333d2b36SAndroid Build Coastguard Worker			j8c := ""
470*333d2b36SAndroid Build Coastguard Worker			if len(java8classpath) > 0 {
471*333d2b36SAndroid Build Coastguard Worker				j8c = "-classpath " + strings.Join(java8classpath, ":")
472*333d2b36SAndroid Build Coastguard Worker			}
473*333d2b36SAndroid Build Coastguard Worker
474*333d2b36SAndroid Build Coastguard Worker			j9c := ""
475*333d2b36SAndroid Build Coastguard Worker			if len(java9classpath) > 0 {
476*333d2b36SAndroid Build Coastguard Worker				j9c = "-classpath " + strings.Join(java9classpath, ":")
477*333d2b36SAndroid Build Coastguard Worker			}
478*333d2b36SAndroid Build Coastguard Worker
479*333d2b36SAndroid Build Coastguard Worker			system := ""
480*333d2b36SAndroid Build Coastguard Worker			var systemDeps []string
481*333d2b36SAndroid Build Coastguard Worker			if testcase.system == "none" {
482*333d2b36SAndroid Build Coastguard Worker				system = "--system=none"
483*333d2b36SAndroid Build Coastguard Worker			} else if testcase.system != "" {
484*333d2b36SAndroid Build Coastguard Worker				dir := ""
485*333d2b36SAndroid Build Coastguard Worker				// If the system modules name starts with sdk_ then it is a prebuilt module and so comes
486*333d2b36SAndroid Build Coastguard Worker				// from the prebuilt directory.
487*333d2b36SAndroid Build Coastguard Worker				if strings.HasPrefix(testcase.system, "sdk_") {
488*333d2b36SAndroid Build Coastguard Worker					dir = "prebuilts/sdk"
489*333d2b36SAndroid Build Coastguard Worker				} else {
490*333d2b36SAndroid Build Coastguard Worker					dir = defaultJavaDir
491*333d2b36SAndroid Build Coastguard Worker				}
492*333d2b36SAndroid Build Coastguard Worker				system = "--system=" + filepath.Join("out", "soong", ".intermediates", dir, testcase.system, "android_common", "system")
493*333d2b36SAndroid Build Coastguard Worker				// The module-relative parts of these paths are hardcoded in system_modules.go:
494*333d2b36SAndroid Build Coastguard Worker				systemDeps = []string{
495*333d2b36SAndroid Build Coastguard Worker					filepath.Join("out", "soong", ".intermediates", dir, testcase.system, "android_common", "system", "lib", "modules"),
496*333d2b36SAndroid Build Coastguard Worker					filepath.Join("out", "soong", ".intermediates", dir, testcase.system, "android_common", "system", "lib", "jrt-fs.jar"),
497*333d2b36SAndroid Build Coastguard Worker					filepath.Join("out", "soong", ".intermediates", dir, testcase.system, "android_common", "system", "release"),
498*333d2b36SAndroid Build Coastguard Worker				}
499*333d2b36SAndroid Build Coastguard Worker			}
500*333d2b36SAndroid Build Coastguard Worker
501*333d2b36SAndroid Build Coastguard Worker			checkClasspath := func(t *testing.T, result *android.TestResult, isJava8 bool) {
502*333d2b36SAndroid Build Coastguard Worker				foo := result.ModuleForTests("foo", variant(result))
503*333d2b36SAndroid Build Coastguard Worker				javac := foo.Rule("javac")
504*333d2b36SAndroid Build Coastguard Worker				var deps []string
505*333d2b36SAndroid Build Coastguard Worker
506*333d2b36SAndroid Build Coastguard Worker				aidl := foo.MaybeRule("aidl")
507*333d2b36SAndroid Build Coastguard Worker				if aidl.Rule != nil {
508*333d2b36SAndroid Build Coastguard Worker					deps = append(deps, android.PathRelativeToTop(aidl.Output))
509*333d2b36SAndroid Build Coastguard Worker				}
510*333d2b36SAndroid Build Coastguard Worker
511*333d2b36SAndroid Build Coastguard Worker				got := javac.Args["bootClasspath"]
512*333d2b36SAndroid Build Coastguard Worker				expected := ""
513*333d2b36SAndroid Build Coastguard Worker				if isJava8 || testcase.forces8 {
514*333d2b36SAndroid Build Coastguard Worker					expected = bc
515*333d2b36SAndroid Build Coastguard Worker					deps = append(deps, bcDeps...)
516*333d2b36SAndroid Build Coastguard Worker				} else {
517*333d2b36SAndroid Build Coastguard Worker					expected = system
518*333d2b36SAndroid Build Coastguard Worker					deps = append(deps, systemDeps...)
519*333d2b36SAndroid Build Coastguard Worker				}
520*333d2b36SAndroid Build Coastguard Worker				if got != expected {
521*333d2b36SAndroid Build Coastguard Worker					t.Errorf("bootclasspath expected %q != got %q", expected, got)
522*333d2b36SAndroid Build Coastguard Worker				}
523*333d2b36SAndroid Build Coastguard Worker
524*333d2b36SAndroid Build Coastguard Worker				if isJava8 || testcase.forces8 {
525*333d2b36SAndroid Build Coastguard Worker					expected = j8c
526*333d2b36SAndroid Build Coastguard Worker					deps = append(deps, java8classpath...)
527*333d2b36SAndroid Build Coastguard Worker				} else {
528*333d2b36SAndroid Build Coastguard Worker					expected = j9c
529*333d2b36SAndroid Build Coastguard Worker					deps = append(deps, java9classpath...)
530*333d2b36SAndroid Build Coastguard Worker				}
531*333d2b36SAndroid Build Coastguard Worker				got = javac.Args["classpath"]
532*333d2b36SAndroid Build Coastguard Worker				if got != expected {
533*333d2b36SAndroid Build Coastguard Worker					t.Errorf("classpath expected %q != got %q", expected, got)
534*333d2b36SAndroid Build Coastguard Worker				}
535*333d2b36SAndroid Build Coastguard Worker
536*333d2b36SAndroid Build Coastguard Worker				android.AssertPathsRelativeToTopEquals(t, "implicits", deps, javac.Implicits)
537*333d2b36SAndroid Build Coastguard Worker			}
538*333d2b36SAndroid Build Coastguard Worker
539*333d2b36SAndroid Build Coastguard Worker			preparer := android.NullFixturePreparer
540*333d2b36SAndroid Build Coastguard Worker			if alwaysUsePrebuiltSdks {
541*333d2b36SAndroid Build Coastguard Worker				preparer = android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
542*333d2b36SAndroid Build Coastguard Worker					variables.Always_use_prebuilt_sdks = proptools.BoolPtr(true)
543*333d2b36SAndroid Build Coastguard Worker				})
544*333d2b36SAndroid Build Coastguard Worker			}
545*333d2b36SAndroid Build Coastguard Worker			if useTransitiveJarsInClasspath {
546*333d2b36SAndroid Build Coastguard Worker				preparer = PrepareForTestWithTransitiveClasspathEnabled
547*333d2b36SAndroid Build Coastguard Worker			}
548*333d2b36SAndroid Build Coastguard Worker
549*333d2b36SAndroid Build Coastguard Worker			fixtureFactory := android.GroupFixturePreparers(
550*333d2b36SAndroid Build Coastguard Worker				prepareForJavaTest,
551*333d2b36SAndroid Build Coastguard Worker				FixtureWithPrebuiltApis(map[string][]string{
552*333d2b36SAndroid Build Coastguard Worker					"29":      {},
553*333d2b36SAndroid Build Coastguard Worker					"30":      {},
554*333d2b36SAndroid Build Coastguard Worker					"31":      {},
555*333d2b36SAndroid Build Coastguard Worker					"32":      {},
556*333d2b36SAndroid Build Coastguard Worker					"current": {},
557*333d2b36SAndroid Build Coastguard Worker				}),
558*333d2b36SAndroid Build Coastguard Worker				android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
559*333d2b36SAndroid Build Coastguard Worker					if testcase.unbundled {
560*333d2b36SAndroid Build Coastguard Worker						variables.Unbundled_build = proptools.BoolPtr(true)
561*333d2b36SAndroid Build Coastguard Worker						variables.Always_use_prebuilt_sdks = proptools.BoolPtr(true)
562*333d2b36SAndroid Build Coastguard Worker					}
563*333d2b36SAndroid Build Coastguard Worker				}),
564*333d2b36SAndroid Build Coastguard Worker				android.FixtureModifyEnv(func(env map[string]string) {
565*333d2b36SAndroid Build Coastguard Worker					if env["ANDROID_JAVA8_HOME"] == "" {
566*333d2b36SAndroid Build Coastguard Worker						env["ANDROID_JAVA8_HOME"] = "jdk8"
567*333d2b36SAndroid Build Coastguard Worker					}
568*333d2b36SAndroid Build Coastguard Worker				}),
569*333d2b36SAndroid Build Coastguard Worker				preparer,
570*333d2b36SAndroid Build Coastguard Worker			)
571*333d2b36SAndroid Build Coastguard Worker
572*333d2b36SAndroid Build Coastguard Worker			// Test with legacy javac -source 1.8 -target 1.8
573*333d2b36SAndroid Build Coastguard Worker			t.Run("Java language level 8", func(t *testing.T) {
574*333d2b36SAndroid Build Coastguard Worker				result := fixtureFactory.RunTestWithBp(t, bpJava8)
575*333d2b36SAndroid Build Coastguard Worker
576*333d2b36SAndroid Build Coastguard Worker				checkClasspath(t, result, true /* isJava8 */)
577*333d2b36SAndroid Build Coastguard Worker
578*333d2b36SAndroid Build Coastguard Worker				if testcase.host != android.Host {
579*333d2b36SAndroid Build Coastguard Worker					aidl := result.ModuleForTests("foo", variant(result)).Rule("aidl")
580*333d2b36SAndroid Build Coastguard Worker
581*333d2b36SAndroid Build Coastguard Worker					android.AssertStringDoesContain(t, "aidl command", aidl.RuleParams.Command, testcase.aidl+" -I.")
582*333d2b36SAndroid Build Coastguard Worker				}
583*333d2b36SAndroid Build Coastguard Worker			})
584*333d2b36SAndroid Build Coastguard Worker
585*333d2b36SAndroid Build Coastguard Worker			// Test with default javac -source 9 -target 9
586*333d2b36SAndroid Build Coastguard Worker			t.Run("Java language level 9", func(t *testing.T) {
587*333d2b36SAndroid Build Coastguard Worker				result := fixtureFactory.RunTestWithBp(t, bp)
588*333d2b36SAndroid Build Coastguard Worker
589*333d2b36SAndroid Build Coastguard Worker				checkClasspath(t, result, false /* isJava8 */)
590*333d2b36SAndroid Build Coastguard Worker
591*333d2b36SAndroid Build Coastguard Worker				if testcase.host != android.Host {
592*333d2b36SAndroid Build Coastguard Worker					aidl := result.ModuleForTests("foo", variant(result)).Rule("aidl")
593*333d2b36SAndroid Build Coastguard Worker
594*333d2b36SAndroid Build Coastguard Worker					android.AssertStringDoesContain(t, "aidl command", aidl.RuleParams.Command, testcase.aidl+" -I.")
595*333d2b36SAndroid Build Coastguard Worker				}
596*333d2b36SAndroid Build Coastguard Worker			})
597*333d2b36SAndroid Build Coastguard Worker
598*333d2b36SAndroid Build Coastguard Worker			prepareWithPlatformVersionRel := android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
599*333d2b36SAndroid Build Coastguard Worker				variables.Platform_sdk_codename = proptools.StringPtr("REL")
600*333d2b36SAndroid Build Coastguard Worker				variables.Platform_sdk_final = proptools.BoolPtr(true)
601*333d2b36SAndroid Build Coastguard Worker			})
602*333d2b36SAndroid Build Coastguard Worker
603*333d2b36SAndroid Build Coastguard Worker			// Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 8 -target 8
604*333d2b36SAndroid Build Coastguard Worker			t.Run("REL + Java language level 8", func(t *testing.T) {
605*333d2b36SAndroid Build Coastguard Worker				result := android.GroupFixturePreparers(
606*333d2b36SAndroid Build Coastguard Worker					fixtureFactory, prepareWithPlatformVersionRel).RunTestWithBp(t, bpJava8)
607*333d2b36SAndroid Build Coastguard Worker
608*333d2b36SAndroid Build Coastguard Worker				checkClasspath(t, result, true /* isJava8 */)
609*333d2b36SAndroid Build Coastguard Worker			})
610*333d2b36SAndroid Build Coastguard Worker
611*333d2b36SAndroid Build Coastguard Worker			// Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 9 -target 9
612*333d2b36SAndroid Build Coastguard Worker			t.Run("REL + Java language level 9", func(t *testing.T) {
613*333d2b36SAndroid Build Coastguard Worker				result := android.GroupFixturePreparers(
614*333d2b36SAndroid Build Coastguard Worker					fixtureFactory, prepareWithPlatformVersionRel).RunTestWithBp(t, bp)
615*333d2b36SAndroid Build Coastguard Worker
616*333d2b36SAndroid Build Coastguard Worker				checkClasspath(t, result, false /* isJava8 */)
617*333d2b36SAndroid Build Coastguard Worker			})
618*333d2b36SAndroid Build Coastguard Worker		})
619*333d2b36SAndroid Build Coastguard Worker	}
620*333d2b36SAndroid Build Coastguard Worker}
621