1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 package org.chromium.content.browser;
7 import android.test.suitebuilder.annotation.SmallTest;
9 import org.chromium.base.test.util.DisabledTest;
10 import org.chromium.base.test.util.Feature;
13 * Part of the test suite for the Java Bridge. This class tests that we correctly convert
14 * JavaScript arrays to Java arrays when passing them to the methods of injected Java objects.
16 * The conversions should follow
17 * http://jdk6.java.net/plugin2/liveconnect/#JS_JAVA_CONVERSIONS. Places in
18 * which the implementation differs from the spec are marked with
19 * LIVECONNECT_COMPLIANCE.
20 * FIXME: Consider making our implementation more compliant, if it will not
21 * break backwards-compatibility. See b/4408210.
23 public class JavaBridgeArrayCoercionTest extends JavaBridgeTestBase {
24 private class TestObject extends Controller {
25 private final Object mObjectInstance;
26 private final CustomType mCustomTypeInstance;
28 private boolean[] mBooleanArray;
29 private byte[] mByteArray;
30 private char[] mCharArray;
31 private short[] mShortArray;
32 private int[] mIntArray;
33 private long[] mLongArray;
34 private float[] mFloatArray;
35 private double[] mDoubleArray;
36 private String[] mStringArray;
37 private Object[] mObjectArray;
38 private CustomType[] mCustomTypeArray;
41 mObjectInstance = new Object();
42 mCustomTypeInstance = new CustomType();
45 public Object getObjectInstance() {
46 return mObjectInstance;
48 public CustomType getCustomTypeInstance() {
49 return mCustomTypeInstance;
52 public synchronized void setBooleanArray(boolean[] x) {
54 notifyResultIsReady();
56 public synchronized void setByteArray(byte[] x) {
58 notifyResultIsReady();
60 public synchronized void setCharArray(char[] x) {
62 notifyResultIsReady();
64 public synchronized void setShortArray(short[] x) {
66 notifyResultIsReady();
68 public synchronized void setIntArray(int[] x) {
70 notifyResultIsReady();
72 public synchronized void setLongArray(long[] x) {
74 notifyResultIsReady();
76 public synchronized void setFloatArray(float[] x) {
78 notifyResultIsReady();
80 public synchronized void setDoubleArray(double[] x) {
82 notifyResultIsReady();
84 public synchronized void setStringArray(String[] x) {
86 notifyResultIsReady();
88 public synchronized void setObjectArray(Object[] x) {
90 notifyResultIsReady();
92 public synchronized void setCustomTypeArray(CustomType[] x) {
94 notifyResultIsReady();
97 public synchronized boolean[] waitForBooleanArray() {
101 public synchronized byte[] waitForByteArray() {
105 public synchronized char[] waitForCharArray() {
109 public synchronized short[] waitForShortArray() {
113 public synchronized int[] waitForIntArray() {
117 public synchronized long[] waitForLongArray() {
121 public synchronized float[] waitForFloatArray() {
125 public synchronized double[] waitForDoubleArray() {
129 public synchronized String[] waitForStringArray() {
133 public synchronized Object[] waitForObjectArray() {
137 public synchronized CustomType[] waitForCustomTypeArray() {
139 return mCustomTypeArray;
143 // Two custom types used when testing passing objects.
144 private static class CustomType {
147 private TestObject mTestObject;
150 protected void setUp() throws Exception {
152 mTestObject = new TestObject();
153 setUpContentView(mTestObject, "testObject");
156 // Note that all tests use a single element array for simplicity. We test
157 // multiple elements elsewhere.
159 // Test passing an array of JavaScript numbers in the int32 range to a
160 // method which takes a Java array.
162 @Feature({"AndroidWebView", "Android-JavaBridge"})
163 public void testPassNumberInt32() throws Throwable {
164 executeJavaScript("testObject.setBooleanArray([0]);");
165 assertFalse(mTestObject.waitForBooleanArray()[0]);
166 // LIVECONNECT_COMPLIANCE: Should convert to boolean.
167 executeJavaScript("testObject.setBooleanArray([42]);");
168 assertFalse(mTestObject.waitForBooleanArray()[0]);
170 executeJavaScript("testObject.setByteArray([42]);");
171 assertEquals(42, mTestObject.waitForByteArray()[0]);
173 // LIVECONNECT_COMPLIANCE: Should convert to numeric char value.
174 executeJavaScript("testObject.setCharArray([42]);");
175 assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
177 executeJavaScript("testObject.setShortArray([42]);");
178 assertEquals(42, mTestObject.waitForShortArray()[0]);
180 executeJavaScript("testObject.setIntArray([42]);");
181 assertEquals(42, mTestObject.waitForIntArray()[0]);
183 executeJavaScript("testObject.setLongArray([42]);");
184 assertEquals(42L, mTestObject.waitForLongArray()[0]);
186 executeJavaScript("testObject.setFloatArray([42]);");
187 assertEquals(42.0f, mTestObject.waitForFloatArray()[0]);
189 executeJavaScript("testObject.setDoubleArray([42]);");
190 assertEquals(42.0, mTestObject.waitForDoubleArray()[0]);
192 // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number.
193 executeJavaScript("testObject.setObjectArray([42]);");
194 assertNull(mTestObject.waitForObjectArray());
196 // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String.
197 executeJavaScript("testObject.setStringArray([42]);");
198 assertNull(mTestObject.waitForStringArray()[0]);
200 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
201 executeJavaScript("testObject.setCustomTypeArray([42]);");
202 assertNull(mTestObject.waitForCustomTypeArray());
205 // Test passing an array of JavaScript numbers in the double range to a
206 // method which takes a Java array.
208 @Feature({"AndroidWebView", "Android-JavaBridge"})
209 public void testPassNumberDouble() throws Throwable {
210 // LIVECONNECT_COMPLIANCE: Should convert to boolean.
211 executeJavaScript("testObject.setBooleanArray([42.1]);");
212 assertFalse(mTestObject.waitForBooleanArray()[0]);
214 executeJavaScript("testObject.setByteArray([42.1]);");
215 assertEquals(42, mTestObject.waitForByteArray()[0]);
217 // LIVECONNECT_COMPLIANCE: Should convert to numeric char value.
218 executeJavaScript("testObject.setCharArray([42.1]);");
219 assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
221 executeJavaScript("testObject.setShortArray([42.1]);");
222 assertEquals(42, mTestObject.waitForShortArray()[0]);
224 executeJavaScript("testObject.setIntArray([42.1]);");
225 assertEquals(42, mTestObject.waitForIntArray()[0]);
227 executeJavaScript("testObject.setLongArray([42.1]);");
228 assertEquals(42L, mTestObject.waitForLongArray()[0]);
230 executeJavaScript("testObject.setFloatArray([42.1]);");
231 assertEquals(42.1f, mTestObject.waitForFloatArray()[0]);
233 executeJavaScript("testObject.setDoubleArray([42.1]);");
234 assertEquals(42.1, mTestObject.waitForDoubleArray()[0]);
236 // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number.
237 executeJavaScript("testObject.setObjectArray([42.1]);");
238 assertNull(mTestObject.waitForObjectArray());
240 // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String.
241 executeJavaScript("testObject.setStringArray([42.1]);");
242 assertNull(mTestObject.waitForStringArray()[0]);
244 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
245 executeJavaScript("testObject.setCustomTypeArray([42.1]);");
246 assertNull(mTestObject.waitForCustomTypeArray());
249 // Test passing an array of JavaScript NaN values to a method which takes a
252 @Feature({"AndroidWebView", "Android-JavaBridge"})
253 public void testPassNumberNaN() throws Throwable {
254 executeJavaScript("testObject.setBooleanArray([Number.NaN]);");
255 assertFalse(mTestObject.waitForBooleanArray()[0]);
257 executeJavaScript("testObject.setByteArray([Number.NaN]);");
258 assertEquals(0, mTestObject.waitForByteArray()[0]);
260 executeJavaScript("testObject.setCharArray([Number.NaN]);");
261 assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
263 executeJavaScript("testObject.setShortArray([Number.NaN]);");
264 assertEquals(0, mTestObject.waitForShortArray()[0]);
266 executeJavaScript("testObject.setIntArray([Number.NaN]);");
267 assertEquals(0, mTestObject.waitForIntArray()[0]);
269 executeJavaScript("testObject.setLongArray([Number.NaN]);");
270 assertEquals(0L, mTestObject.waitForLongArray()[0]);
272 executeJavaScript("testObject.setFloatArray([Number.NaN]);");
273 assertEquals(Float.NaN, mTestObject.waitForFloatArray()[0]);
275 executeJavaScript("testObject.setDoubleArray([Number.NaN]);");
276 assertEquals(Double.NaN, mTestObject.waitForDoubleArray()[0]);
278 // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number.
279 executeJavaScript("testObject.setObjectArray([Number.NaN]);");
280 assertNull(mTestObject.waitForObjectArray());
282 // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String.
283 executeJavaScript("testObject.setStringArray([Number.NaN]);");
284 assertNull(mTestObject.waitForStringArray()[0]);
286 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
287 executeJavaScript("testObject.setCustomTypeArray([Number.NaN]);");
288 assertNull(mTestObject.waitForCustomTypeArray());
291 // Test passing an array of JavaScript infinity values to a method which
292 // takes a Java array.
294 @Feature({"AndroidWebView", "Android-JavaBridge"})
295 public void testPassNumberInfinity() throws Throwable {
296 executeJavaScript("testObject.setBooleanArray([Infinity]);");
297 assertFalse(mTestObject.waitForBooleanArray()[0]);
299 executeJavaScript("testObject.setByteArray([Infinity]);");
300 assertEquals(-1, mTestObject.waitForByteArray()[0]);
302 // LIVECONNECT_COMPLIANCE: Should convert to maximum numeric char value.
303 executeJavaScript("testObject.setCharArray([Infinity]);");
304 assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
306 executeJavaScript("testObject.setShortArray([Infinity]);");
307 assertEquals(-1, mTestObject.waitForShortArray()[0]);
309 executeJavaScript("testObject.setIntArray([Infinity]);");
310 assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntArray()[0]);
312 executeJavaScript("testObject.setLongArray([Infinity]);");
313 assertEquals(Long.MAX_VALUE, mTestObject.waitForLongArray()[0]);
315 executeJavaScript("testObject.setFloatArray([Infinity]);");
316 assertEquals(Float.POSITIVE_INFINITY, mTestObject.waitForFloatArray()[0]);
318 executeJavaScript("testObject.setDoubleArray([Infinity]);");
319 assertEquals(Double.POSITIVE_INFINITY, mTestObject.waitForDoubleArray()[0]);
321 // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number.
322 executeJavaScript("testObject.setObjectArray([Infinity]);");
323 assertNull(mTestObject.waitForObjectArray());
325 // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String.
326 executeJavaScript("testObject.setStringArray([Infinity]);");
327 assertNull(mTestObject.waitForStringArray()[0]);
329 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
330 executeJavaScript("testObject.setCustomTypeArray([Infinity]);");
331 assertNull(mTestObject.waitForCustomTypeArray());
334 // Test passing an array of JavaScript boolean values to a method which
335 // takes a Java array.
337 @Feature({"AndroidWebView", "Android-JavaBridge"})
338 public void testPassBoolean() throws Throwable {
339 executeJavaScript("testObject.setBooleanArray([true]);");
340 assertTrue(mTestObject.waitForBooleanArray()[0]);
341 executeJavaScript("testObject.setBooleanArray([false]);");
342 assertFalse(mTestObject.waitForBooleanArray()[0]);
344 // LIVECONNECT_COMPLIANCE: Should be 1.
345 executeJavaScript("testObject.setByteArray([true]);");
346 assertEquals(0, mTestObject.waitForByteArray()[0]);
347 executeJavaScript("testObject.setByteArray([false]);");
348 assertEquals(0, mTestObject.waitForByteArray()[0]);
350 // LIVECONNECT_COMPLIANCE: Should convert to numeric char value 1.
351 executeJavaScript("testObject.setCharArray([true]);");
352 assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
353 executeJavaScript("testObject.setCharArray([false]);");
354 assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
356 // LIVECONNECT_COMPLIANCE: Should be 1.
357 executeJavaScript("testObject.setShortArray([true]);");
358 assertEquals(0, mTestObject.waitForShortArray()[0]);
359 executeJavaScript("testObject.setShortArray([false]);");
360 assertEquals(0, mTestObject.waitForShortArray()[0]);
362 // LIVECONNECT_COMPLIANCE: Should be 1.
363 executeJavaScript("testObject.setIntArray([true]);");
364 assertEquals(0, mTestObject.waitForIntArray()[0]);
365 executeJavaScript("testObject.setIntArray([false]);");
366 assertEquals(0, mTestObject.waitForIntArray()[0]);
368 // LIVECONNECT_COMPLIANCE: Should be 1.
369 executeJavaScript("testObject.setLongArray([true]);");
370 assertEquals(0L, mTestObject.waitForLongArray()[0]);
371 executeJavaScript("testObject.setLongArray([false]);");
372 assertEquals(0L, mTestObject.waitForLongArray()[0]);
374 // LIVECONNECT_COMPLIANCE: Should be 1.0.
375 executeJavaScript("testObject.setFloatArray([true]);");
376 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]);
377 executeJavaScript("testObject.setFloatArray([false]);");
378 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]);
380 // LIVECONNECT_COMPLIANCE: Should be 1.0.
381 executeJavaScript("testObject.setDoubleArray([true]);");
382 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]);
383 executeJavaScript("testObject.setDoubleArray([false]);");
384 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]);
386 // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number.
387 executeJavaScript("testObject.setObjectArray([true]);");
388 assertNull(mTestObject.waitForObjectArray());
390 // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String.
391 executeJavaScript("testObject.setStringArray([true]);");
392 assertNull(mTestObject.waitForStringArray()[0]);
394 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
395 executeJavaScript("testObject.setCustomTypeArray([true]);");
396 assertNull(mTestObject.waitForCustomTypeArray());
399 // Test passing an array of JavaScript strings to a method which takes a
402 @Feature({"AndroidWebView", "Android-JavaBridge"})
403 public void testPassString() throws Throwable {
404 // LIVECONNECT_COMPLIANCE: Non-empty string should convert to true.
405 executeJavaScript("testObject.setBooleanArray([\"+042.10\"]);");
406 assertFalse(mTestObject.waitForBooleanArray()[0]);
408 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
409 executeJavaScript("testObject.setByteArray([\"+042.10\"]);");
410 assertEquals(0, mTestObject.waitForByteArray()[0]);
412 // LIVECONNECT_COMPLIANCE: Should decode and convert to numeric char value.
413 executeJavaScript("testObject.setCharArray([\"+042.10\"]);");
414 assertEquals(0, mTestObject.waitForCharArray()[0]);
416 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
417 executeJavaScript("testObject.setShortArray([\"+042.10\"]);");
418 assertEquals(0, mTestObject.waitForShortArray()[0]);
420 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
421 executeJavaScript("testObject.setIntArray([\"+042.10\"]);");
422 assertEquals(0, mTestObject.waitForIntArray()[0]);
424 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
425 executeJavaScript("testObject.setLongArray([\"+042.10\"]);");
426 assertEquals(0L, mTestObject.waitForLongArray()[0]);
428 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
429 executeJavaScript("testObject.setFloatArray([\"+042.10\"]);");
430 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]);
432 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
433 executeJavaScript("testObject.setDoubleArray([\"+042.10\"]);");
434 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]);
436 // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number.
437 executeJavaScript("testObject.setObjectArray([\"+042.10\"]);");
438 assertNull(mTestObject.waitForObjectArray());
440 executeJavaScript("testObject.setStringArray([\"+042.10\"]);");
441 assertEquals("+042.10", mTestObject.waitForStringArray()[0]);
443 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
444 executeJavaScript("testObject.setCustomTypeArray([\"+042.10\"]);");
445 assertNull(mTestObject.waitForCustomTypeArray());
448 // Test passing an array of JavaScript objects to a method which takes a
451 @Feature({"AndroidWebView", "Android-JavaBridge"})
452 public void testPassJavaScriptObject() throws Throwable {
453 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
454 executeJavaScript("testObject.setBooleanArray([{foo: 42}]);");
455 assertFalse(mTestObject.waitForBooleanArray()[0]);
457 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
458 executeJavaScript("testObject.setByteArray([{foo: 42}]);");
459 assertEquals(0, mTestObject.waitForByteArray()[0]);
461 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
462 executeJavaScript("testObject.setCharArray([{foo: 42}]);");
463 assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
465 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
466 executeJavaScript("testObject.setShortArray([{foo: 42}]);");
467 assertEquals(0, mTestObject.waitForShortArray()[0]);
469 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
470 executeJavaScript("testObject.setIntArray([{foo: 42}]);");
471 assertEquals(0, mTestObject.waitForIntArray()[0]);
473 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
474 executeJavaScript("testObject.setLongArray([{foo: 42}]);");
475 assertEquals(0L, mTestObject.waitForLongArray()[0]);
477 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
478 executeJavaScript("testObject.setFloatArray([{foo: 42}]);");
479 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]);
481 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
482 executeJavaScript("testObject.setDoubleArray([{foo: 42}]);");
483 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]);
485 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
486 executeJavaScript("testObject.setObjectArray([{foo: 42}]);");
487 assertNull(mTestObject.waitForObjectArray());
489 // LIVECONNECT_COMPLIANCE: Should call toString() on object.
490 executeJavaScript("testObject.setStringArray([{foo: 42}]);");
491 assertNull(mTestObject.waitForStringArray()[0]);
493 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
494 executeJavaScript("testObject.setCustomTypeArray([{foo: 42}]);");
495 assertNull(mTestObject.waitForCustomTypeArray());
498 // Test passing an array of Java objects to a method which takes a Java
501 @Feature({"AndroidWebView", "Android-JavaBridge"})
502 public void testPassJavaObject() throws Throwable {
503 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
504 executeJavaScript("testObject.setBooleanArray([testObject.getObjectInstance()]);");
505 assertFalse(mTestObject.waitForBooleanArray()[0]);
507 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
508 executeJavaScript("testObject.setByteArray([testObject.getObjectInstance()]);");
509 assertEquals(0, mTestObject.waitForByteArray()[0]);
511 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
512 executeJavaScript("testObject.setCharArray([testObject.getObjectInstance()]);");
513 assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
515 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
516 executeJavaScript("testObject.setShortArray([testObject.getObjectInstance()]);");
517 assertEquals(0, mTestObject.waitForShortArray()[0]);
519 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
520 executeJavaScript("testObject.setIntArray([testObject.getObjectInstance()]);");
521 assertEquals(0, mTestObject.waitForIntArray()[0]);
523 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
524 executeJavaScript("testObject.setLongArray([testObject.getObjectInstance()]);");
525 assertEquals(0L, mTestObject.waitForLongArray()[0]);
527 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
528 executeJavaScript("testObject.setFloatArray([testObject.getObjectInstance()]);");
529 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]);
531 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
532 executeJavaScript("testObject.setDoubleArray([testObject.getObjectInstance()]);");
533 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]);
535 // LIVECONNECT_COMPLIANCE: Should create an array and pass Java object.
536 executeJavaScript("testObject.setObjectArray([testObject.getObjectInstance()]);");
537 assertNull(mTestObject.waitForObjectArray());
539 // LIVECONNECT_COMPLIANCE: Should call toString() on object.
540 executeJavaScript("testObject.setStringArray([testObject.getObjectInstance()]);");
541 assertNull(mTestObject.waitForStringArray()[0]);
543 // LIVECONNECT_COMPLIANCE: Should create array and pass Java object.
544 executeJavaScript("testObject.setCustomTypeArray([testObject.getObjectInstance()]);");
545 assertNull(mTestObject.waitForCustomTypeArray());
546 executeJavaScript("testObject.setCustomTypeArray([testObject.getCustomTypeInstance()]);");
547 assertNull(mTestObject.waitForCustomTypeArray());
550 // Test passing an array of JavaScript null values to a method which takes
553 @Feature({"AndroidWebView", "Android-JavaBridge"})
554 public void testPassNull() throws Throwable {
555 executeJavaScript("testObject.setByteArray([null]);");
556 assertEquals(0, mTestObject.waitForByteArray()[0]);
558 executeJavaScript("testObject.setCharArray([null]);");
559 assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
561 executeJavaScript("testObject.setShortArray([null]);");
562 assertEquals(0, mTestObject.waitForShortArray()[0]);
564 executeJavaScript("testObject.setIntArray([null]);");
565 assertEquals(0, mTestObject.waitForIntArray()[0]);
567 executeJavaScript("testObject.setLongArray([null]);");
568 assertEquals(0L, mTestObject.waitForLongArray()[0]);
570 executeJavaScript("testObject.setFloatArray([null]);");
571 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]);
573 executeJavaScript("testObject.setDoubleArray([null]);");
574 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]);
576 executeJavaScript("testObject.setBooleanArray([null]);");
577 assertFalse(mTestObject.waitForBooleanArray()[0]);
579 // LIVECONNECT_COMPLIANCE: Should create array and pass null.
580 executeJavaScript("testObject.setObjectArray([null]);");
581 assertNull(mTestObject.waitForObjectArray());
583 executeJavaScript("testObject.setStringArray([null]);");
584 assertNull(mTestObject.waitForStringArray()[0]);
586 // LIVECONNECT_COMPLIANCE: Should create array and pass null.
587 executeJavaScript("testObject.setCustomTypeArray([null]);");
588 assertNull(mTestObject.waitForCustomTypeArray());
591 // Test passing an array of JavaScript undefined values to a method which
592 // takes a Java array.
594 @Feature({"AndroidWebView", "Android-JavaBridge"})
595 public void testPassUndefined() throws Throwable {
596 executeJavaScript("testObject.setByteArray([undefined]);");
597 assertEquals(0, mTestObject.waitForByteArray()[0]);
599 executeJavaScript("testObject.setCharArray([undefined]);");
600 assertEquals(0, mTestObject.waitForCharArray()[0]);
602 executeJavaScript("testObject.setShortArray([undefined]);");
603 assertEquals(0, mTestObject.waitForShortArray()[0]);
605 executeJavaScript("testObject.setIntArray([undefined]);");
606 assertEquals(0, mTestObject.waitForIntArray()[0]);
608 executeJavaScript("testObject.setLongArray([undefined]);");
609 assertEquals(0L, mTestObject.waitForLongArray()[0]);
611 executeJavaScript("testObject.setFloatArray([undefined]);");
612 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]);
614 executeJavaScript("testObject.setDoubleArray([undefined]);");
615 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]);
617 executeJavaScript("testObject.setBooleanArray([undefined]);");
618 assertEquals(false, mTestObject.waitForBooleanArray()[0]);
620 // LIVECONNECT_COMPLIANCE: Should create array and pass null.
621 executeJavaScript("testObject.setObjectArray([undefined]);");
622 assertNull(mTestObject.waitForObjectArray());
624 executeJavaScript("testObject.setStringArray([undefined]);");
625 assertNull(mTestObject.waitForStringArray()[0]);
627 // LIVECONNECT_COMPLIANCE: Should create array and pass null.
628 executeJavaScript("testObject.setCustomTypeArray([undefined]);");
629 assertNull(mTestObject.waitForCustomTypeArray());