blob: 1aa91846992b47d91419bdbe7d6a33d698c24463 [file] [log] [blame]
Paul Duffina80fdec2019-12-03 15:25:00 +00001// Copyright (C) 2019 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package sdk
16
17import (
18 "testing"
19)
20
Paul Duffind835daa2019-11-30 17:49:09 +000021func testSdkWithJava(t *testing.T, bp string) *testSdkResult {
22 t.Helper()
23
24 fs := map[string][]byte{
25 "Test.java": nil,
26 "aidl/foo/bar/Test.aidl": nil,
27 }
28 return testSdkWithFs(t, bp, fs)
29}
30
Paul Duffina80fdec2019-12-03 15:25:00 +000031// Contains tests for SDK members provided by the java package.
32
33func TestBasicSdkWithJavaLibrary(t *testing.T) {
Paul Duffind835daa2019-11-30 17:49:09 +000034 result := testSdkWithJava(t, `
Paul Duffina80fdec2019-12-03 15:25:00 +000035 sdk {
36 name: "mysdk",
Paul Duffina0dbf432019-12-05 11:25:53 +000037 java_header_libs: ["myjavalib"],
Paul Duffina80fdec2019-12-03 15:25:00 +000038 }
39
40 sdk_snapshot {
41 name: "mysdk@1",
Paul Duffina0dbf432019-12-05 11:25:53 +000042 java_header_libs: ["sdkmember_mysdk_1"],
Paul Duffina80fdec2019-12-03 15:25:00 +000043 }
44
45 sdk_snapshot {
46 name: "mysdk@2",
Paul Duffina0dbf432019-12-05 11:25:53 +000047 java_header_libs: ["sdkmember_mysdk_2"],
Paul Duffina80fdec2019-12-03 15:25:00 +000048 }
49
50 java_import {
51 name: "sdkmember",
52 prefer: false,
53 host_supported: true,
54 }
55
56 java_import {
57 name: "sdkmember_mysdk_1",
58 sdk_member_name: "sdkmember",
59 host_supported: true,
60 }
61
62 java_import {
63 name: "sdkmember_mysdk_2",
64 sdk_member_name: "sdkmember",
65 host_supported: true,
66 }
67
68 java_library {
69 name: "myjavalib",
70 srcs: ["Test.java"],
71 libs: ["sdkmember"],
72 system_modules: "none",
73 sdk_version: "none",
74 compile_dex: true,
75 host_supported: true,
76 }
77
78 apex {
79 name: "myapex",
80 java_libs: ["myjavalib"],
81 uses_sdks: ["mysdk@1"],
82 key: "myapex.key",
83 certificate: ":myapex.cert",
84 }
85
86 apex {
87 name: "myapex2",
88 java_libs: ["myjavalib"],
89 uses_sdks: ["mysdk@2"],
90 key: "myapex.key",
91 certificate: ":myapex.cert",
92 }
93 `)
94
95 sdkMemberV1 := result.ctx.ModuleForTests("sdkmember_mysdk_1", "android_common_myapex").Rule("combineJar").Output
96 sdkMemberV2 := result.ctx.ModuleForTests("sdkmember_mysdk_2", "android_common_myapex2").Rule("combineJar").Output
97
98 javalibForMyApex := result.ctx.ModuleForTests("myjavalib", "android_common_myapex")
99 javalibForMyApex2 := result.ctx.ModuleForTests("myjavalib", "android_common_myapex2")
100
101 // Depending on the uses_sdks value, different libs are linked
102 ensureListContains(t, pathsToStrings(javalibForMyApex.Rule("javac").Implicits), sdkMemberV1.String())
103 ensureListContains(t, pathsToStrings(javalibForMyApex2.Rule("javac").Implicits), sdkMemberV2.String())
104}
105
Paul Duffina0dbf432019-12-05 11:25:53 +0000106func TestSnapshotWithJavaHeaderLibrary(t *testing.T) {
107 result := testSdkWithJava(t, `
108 sdk {
109 name: "mysdk",
110 java_header_libs: ["myjavalib"],
111 }
112
113 java_library {
114 name: "myjavalib",
115 srcs: ["Test.java"],
116 aidl: {
117 export_include_dirs: ["aidl"],
118 },
119 system_modules: "none",
120 sdk_version: "none",
121 compile_dex: true,
122 host_supported: true,
123 }
124 `)
125
Paul Duffin593b3c92019-12-05 14:31:48 +0000126 result.CheckSnapshot("mysdk", "android_common", "",
Paul Duffina0dbf432019-12-05 11:25:53 +0000127 checkAndroidBpContents(`
128// This is auto-generated. DO NOT EDIT.
129
130java_import {
131 name: "mysdk_myjavalib@current",
132 sdk_member_name: "myjavalib",
133 jars: ["java/myjavalib.jar"],
134}
135
136java_import {
137 name: "myjavalib",
138 prefer: false,
139 jars: ["java/myjavalib.jar"],
140}
141
142sdk_snapshot {
143 name: "mysdk@current",
144 java_header_libs: ["mysdk_myjavalib@current"],
145}
146
147`),
148 checkAllCopyRules(`
149.intermediates/myjavalib/android_common/turbine-combined/myjavalib.jar -> java/myjavalib.jar
150aidl/foo/bar/Test.aidl -> aidl/aidl/foo/bar/Test.aidl
151`),
152 )
153}
154
155func TestHostSnapshotWithJavaHeaderLibrary(t *testing.T) {
156 // b/145598135 - Generating host snapshots for anything other than linux is not supported.
157 SkipIfNotLinux(t)
158
159 result := testSdkWithJava(t, `
160 sdk {
161 name: "mysdk",
162 device_supported: false,
163 host_supported: true,
164 java_header_libs: ["myjavalib"],
165 }
166
167 java_library {
168 name: "myjavalib",
169 device_supported: false,
170 host_supported: true,
171 srcs: ["Test.java"],
172 aidl: {
173 export_include_dirs: ["aidl"],
174 },
175 system_modules: "none",
176 sdk_version: "none",
177 compile_dex: true,
178 }
179 `)
180
Paul Duffin593b3c92019-12-05 14:31:48 +0000181 result.CheckSnapshot("mysdk", "linux_glibc_common", "",
Paul Duffina0dbf432019-12-05 11:25:53 +0000182 checkAndroidBpContents(`
183// This is auto-generated. DO NOT EDIT.
184
185java_import {
186 name: "mysdk_myjavalib@current",
187 sdk_member_name: "myjavalib",
188 device_supported: false,
189 host_supported: true,
190 jars: ["java/myjavalib.jar"],
191}
192
193java_import {
194 name: "myjavalib",
195 prefer: false,
196 device_supported: false,
197 host_supported: true,
198 jars: ["java/myjavalib.jar"],
199}
200
201sdk_snapshot {
202 name: "mysdk@current",
203 device_supported: false,
204 host_supported: true,
205 java_header_libs: ["mysdk_myjavalib@current"],
206}
207`),
208 checkAllCopyRules(`
209.intermediates/myjavalib/linux_glibc_common/javac/myjavalib.jar -> java/myjavalib.jar
210aidl/foo/bar/Test.aidl -> aidl/aidl/foo/bar/Test.aidl
211`),
212 )
213}
214
215func TestSnapshotWithJavaImplLibrary(t *testing.T) {
Paul Duffind835daa2019-11-30 17:49:09 +0000216 result := testSdkWithJava(t, `
Paul Duffina80fdec2019-12-03 15:25:00 +0000217 sdk {
218 name: "mysdk",
219 java_libs: ["myjavalib"],
220 }
221
222 java_library {
223 name: "myjavalib",
224 srcs: ["Test.java"],
225 aidl: {
226 export_include_dirs: ["aidl"],
227 },
228 system_modules: "none",
229 sdk_version: "none",
230 compile_dex: true,
231 host_supported: true,
232 }
233 `)
234
Paul Duffin593b3c92019-12-05 14:31:48 +0000235 result.CheckSnapshot("mysdk", "android_common", "",
Paul Duffina80fdec2019-12-03 15:25:00 +0000236 checkAndroidBpContents(`
237// This is auto-generated. DO NOT EDIT.
238
239java_import {
240 name: "mysdk_myjavalib@current",
241 sdk_member_name: "myjavalib",
242 jars: ["java/myjavalib.jar"],
243}
244
245java_import {
246 name: "myjavalib",
247 prefer: false,
248 jars: ["java/myjavalib.jar"],
249}
250
251sdk_snapshot {
252 name: "mysdk@current",
253 java_libs: ["mysdk_myjavalib@current"],
254}
255
256`),
257 checkAllCopyRules(`
Paul Duffina0dbf432019-12-05 11:25:53 +0000258.intermediates/myjavalib/android_common/javac/myjavalib.jar -> java/myjavalib.jar
Paul Duffina80fdec2019-12-03 15:25:00 +0000259aidl/foo/bar/Test.aidl -> aidl/aidl/foo/bar/Test.aidl
260`),
261 )
262}
263
Paul Duffina0dbf432019-12-05 11:25:53 +0000264func TestHostSnapshotWithJavaImplLibrary(t *testing.T) {
Paul Duffina80fdec2019-12-03 15:25:00 +0000265 // b/145598135 - Generating host snapshots for anything other than linux is not supported.
266 SkipIfNotLinux(t)
267
Paul Duffind835daa2019-11-30 17:49:09 +0000268 result := testSdkWithJava(t, `
Paul Duffina80fdec2019-12-03 15:25:00 +0000269 sdk {
270 name: "mysdk",
271 device_supported: false,
272 host_supported: true,
273 java_libs: ["myjavalib"],
274 }
275
276 java_library {
277 name: "myjavalib",
278 device_supported: false,
279 host_supported: true,
280 srcs: ["Test.java"],
281 aidl: {
282 export_include_dirs: ["aidl"],
283 },
284 system_modules: "none",
285 sdk_version: "none",
286 compile_dex: true,
287 }
288 `)
289
Paul Duffin593b3c92019-12-05 14:31:48 +0000290 result.CheckSnapshot("mysdk", "linux_glibc_common", "",
Paul Duffina80fdec2019-12-03 15:25:00 +0000291 checkAndroidBpContents(`
292// This is auto-generated. DO NOT EDIT.
293
294java_import {
295 name: "mysdk_myjavalib@current",
296 sdk_member_name: "myjavalib",
297 device_supported: false,
298 host_supported: true,
299 jars: ["java/myjavalib.jar"],
300}
301
302java_import {
303 name: "myjavalib",
304 prefer: false,
305 device_supported: false,
306 host_supported: true,
307 jars: ["java/myjavalib.jar"],
308}
309
310sdk_snapshot {
311 name: "mysdk@current",
312 device_supported: false,
313 host_supported: true,
314 java_libs: ["mysdk_myjavalib@current"],
315}
316`),
317 checkAllCopyRules(`
318.intermediates/myjavalib/linux_glibc_common/javac/myjavalib.jar -> java/myjavalib.jar
319aidl/foo/bar/Test.aidl -> aidl/aidl/foo/bar/Test.aidl
320`),
321 )
322}
323
Paul Duffind835daa2019-11-30 17:49:09 +0000324func testSdkWithDroidstubs(t *testing.T, bp string) *testSdkResult {
325 t.Helper()
326
327 fs := map[string][]byte{
328 "foo/bar/Foo.java": nil,
329 "stubs-sources/foo/bar/Foo.java": nil,
330 }
331 return testSdkWithFs(t, bp, fs)
332}
333
Paul Duffina80fdec2019-12-03 15:25:00 +0000334// Note: This test does not verify that a droidstubs can be referenced, either
335// directly or indirectly from an APEX as droidstubs can never be a part of an
336// apex.
337func TestBasicSdkWithDroidstubs(t *testing.T) {
Paul Duffind835daa2019-11-30 17:49:09 +0000338 testSdkWithDroidstubs(t, `
Paul Duffina80fdec2019-12-03 15:25:00 +0000339 sdk {
340 name: "mysdk",
341 stubs_sources: ["mystub"],
342 }
343 sdk_snapshot {
344 name: "mysdk@10",
345 stubs_sources: ["mystub_mysdk@10"],
346 }
347 prebuilt_stubs_sources {
348 name: "mystub_mysdk@10",
349 sdk_member_name: "mystub",
350 srcs: ["stubs-sources/foo/bar/Foo.java"],
351 }
352 droidstubs {
353 name: "mystub",
354 srcs: ["foo/bar/Foo.java"],
355 sdk_version: "none",
356 system_modules: "none",
357 }
358 java_library {
359 name: "myjavalib",
360 srcs: [":mystub"],
361 sdk_version: "none",
362 system_modules: "none",
363 }
364 `)
365}
366
367func TestSnapshotWithDroidstubs(t *testing.T) {
Paul Duffind835daa2019-11-30 17:49:09 +0000368 result := testSdkWithDroidstubs(t, `
Paul Duffina80fdec2019-12-03 15:25:00 +0000369 sdk {
370 name: "mysdk",
371 stubs_sources: ["myjavaapistubs"],
372 }
373
374 droidstubs {
375 name: "myjavaapistubs",
376 srcs: ["foo/bar/Foo.java"],
377 system_modules: "none",
378 sdk_version: "none",
379 }
380 `)
381
Paul Duffin593b3c92019-12-05 14:31:48 +0000382 result.CheckSnapshot("mysdk", "android_common", "",
Paul Duffina80fdec2019-12-03 15:25:00 +0000383 checkAndroidBpContents(`
384// This is auto-generated. DO NOT EDIT.
385
386prebuilt_stubs_sources {
387 name: "mysdk_myjavaapistubs@current",
388 sdk_member_name: "myjavaapistubs",
389 srcs: ["java/myjavaapistubs_stubs_sources"],
390}
391
392prebuilt_stubs_sources {
393 name: "myjavaapistubs",
394 prefer: false,
395 srcs: ["java/myjavaapistubs_stubs_sources"],
396}
397
398sdk_snapshot {
399 name: "mysdk@current",
400 stubs_sources: ["mysdk_myjavaapistubs@current"],
401}
402
403`),
404 checkAllCopyRules(""),
405 checkMergeZip(".intermediates/mysdk/android_common/tmp/java/myjavaapistubs_stubs_sources.zip"),
406 )
407}
408
409func TestHostSnapshotWithDroidstubs(t *testing.T) {
410 // b/145598135 - Generating host snapshots for anything other than linux is not supported.
411 SkipIfNotLinux(t)
412
Paul Duffind835daa2019-11-30 17:49:09 +0000413 result := testSdkWithDroidstubs(t, `
Paul Duffina80fdec2019-12-03 15:25:00 +0000414 sdk {
415 name: "mysdk",
416 device_supported: false,
417 host_supported: true,
418 stubs_sources: ["myjavaapistubs"],
419 }
420
421 droidstubs {
422 name: "myjavaapistubs",
423 device_supported: false,
424 host_supported: true,
425 srcs: ["foo/bar/Foo.java"],
426 system_modules: "none",
427 sdk_version: "none",
428 }
429 `)
430
Paul Duffin593b3c92019-12-05 14:31:48 +0000431 result.CheckSnapshot("mysdk", "linux_glibc_common", "",
Paul Duffina80fdec2019-12-03 15:25:00 +0000432 checkAndroidBpContents(`
433// This is auto-generated. DO NOT EDIT.
434
435prebuilt_stubs_sources {
436 name: "mysdk_myjavaapistubs@current",
437 sdk_member_name: "myjavaapistubs",
438 device_supported: false,
439 host_supported: true,
440 srcs: ["java/myjavaapistubs_stubs_sources"],
441}
442
443prebuilt_stubs_sources {
444 name: "myjavaapistubs",
445 prefer: false,
446 device_supported: false,
447 host_supported: true,
448 srcs: ["java/myjavaapistubs_stubs_sources"],
449}
450
451sdk_snapshot {
452 name: "mysdk@current",
453 device_supported: false,
454 host_supported: true,
455 stubs_sources: ["mysdk_myjavaapistubs@current"],
456}
457`),
458 checkAllCopyRules(""),
459 checkMergeZip(".intermediates/mysdk/linux_glibc_common/tmp/java/myjavaapistubs_stubs_sources.zip"),
460 )
461}