JavaBridgeArrayCoercionTest.java revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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. 4 5package org.chromium.content.browser; 6 7import android.test.suitebuilder.annotation.SmallTest; 8 9import org.chromium.base.test.util.DisabledTest; 10import org.chromium.base.test.util.Feature; 11 12/** 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. 15 * 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. 22 */ 23public class JavaBridgeArrayCoercionTest extends JavaBridgeTestBase { 24 private class TestObject extends Controller { 25 private final Object mObjectInstance; 26 private final CustomType mCustomTypeInstance; 27 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; 39 40 public TestObject() { 41 mObjectInstance = new Object(); 42 mCustomTypeInstance = new CustomType(); 43 } 44 45 public Object getObjectInstance() { 46 return mObjectInstance; 47 } 48 public CustomType getCustomTypeInstance() { 49 return mCustomTypeInstance; 50 } 51 52 public synchronized void setBooleanArray(boolean[] x) { 53 mBooleanArray = x; 54 notifyResultIsReady(); 55 } 56 public synchronized void setByteArray(byte[] x) { 57 mByteArray = x; 58 notifyResultIsReady(); 59 } 60 public synchronized void setCharArray(char[] x) { 61 mCharArray = x; 62 notifyResultIsReady(); 63 } 64 public synchronized void setShortArray(short[] x) { 65 mShortArray = x; 66 notifyResultIsReady(); 67 } 68 public synchronized void setIntArray(int[] x) { 69 mIntArray = x; 70 notifyResultIsReady(); 71 } 72 public synchronized void setLongArray(long[] x) { 73 mLongArray = x; 74 notifyResultIsReady(); 75 } 76 public synchronized void setFloatArray(float[] x) { 77 mFloatArray = x; 78 notifyResultIsReady(); 79 } 80 public synchronized void setDoubleArray(double[] x) { 81 mDoubleArray = x; 82 notifyResultIsReady(); 83 } 84 public synchronized void setStringArray(String[] x) { 85 mStringArray = x; 86 notifyResultIsReady(); 87 } 88 public synchronized void setObjectArray(Object[] x) { 89 mObjectArray = x; 90 notifyResultIsReady(); 91 } 92 public synchronized void setCustomTypeArray(CustomType[] x) { 93 mCustomTypeArray = x; 94 notifyResultIsReady(); 95 } 96 97 public synchronized boolean[] waitForBooleanArray() { 98 waitForResult(); 99 return mBooleanArray; 100 } 101 public synchronized byte[] waitForByteArray() { 102 waitForResult(); 103 return mByteArray; 104 } 105 public synchronized char[] waitForCharArray() { 106 waitForResult(); 107 return mCharArray; 108 } 109 public synchronized short[] waitForShortArray() { 110 waitForResult(); 111 return mShortArray; 112 } 113 public synchronized int[] waitForIntArray() { 114 waitForResult(); 115 return mIntArray; 116 } 117 public synchronized long[] waitForLongArray() { 118 waitForResult(); 119 return mLongArray; 120 } 121 public synchronized float[] waitForFloatArray() { 122 waitForResult(); 123 return mFloatArray; 124 } 125 public synchronized double[] waitForDoubleArray() { 126 waitForResult(); 127 return mDoubleArray; 128 } 129 public synchronized String[] waitForStringArray() { 130 waitForResult(); 131 return mStringArray; 132 } 133 public synchronized Object[] waitForObjectArray() { 134 waitForResult(); 135 return mObjectArray; 136 } 137 public synchronized CustomType[] waitForCustomTypeArray() { 138 waitForResult(); 139 return mCustomTypeArray; 140 } 141 } 142 143 // Two custom types used when testing passing objects. 144 private static class CustomType { 145 } 146 147 private TestObject mTestObject; 148 149 @Override 150 protected void setUp() throws Exception { 151 super.setUp(); 152 mTestObject = new TestObject(); 153 setUpContentView(mTestObject, "testObject"); 154 } 155 156 // Note that all tests use a single element array for simplicity. We test 157 // multiple elements elsewhere. 158 159 // Test passing an array of JavaScript numbers in the int32 range to a 160 // method which takes a Java array. 161 @SmallTest 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]); 169 170 executeJavaScript("testObject.setByteArray([42]);"); 171 assertEquals(42, mTestObject.waitForByteArray()[0]); 172 173 // LIVECONNECT_COMPLIANCE: Should convert to numeric char value. 174 executeJavaScript("testObject.setCharArray([42]);"); 175 assertEquals('\u0000', mTestObject.waitForCharArray()[0]); 176 177 executeJavaScript("testObject.setShortArray([42]);"); 178 assertEquals(42, mTestObject.waitForShortArray()[0]); 179 180 executeJavaScript("testObject.setIntArray([42]);"); 181 assertEquals(42, mTestObject.waitForIntArray()[0]); 182 183 executeJavaScript("testObject.setLongArray([42]);"); 184 assertEquals(42L, mTestObject.waitForLongArray()[0]); 185 186 executeJavaScript("testObject.setFloatArray([42]);"); 187 assertEquals(42.0f, mTestObject.waitForFloatArray()[0]); 188 189 executeJavaScript("testObject.setDoubleArray([42]);"); 190 assertEquals(42.0, mTestObject.waitForDoubleArray()[0]); 191 192 // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number. 193 executeJavaScript("testObject.setObjectArray([42]);"); 194 assertNull(mTestObject.waitForObjectArray()); 195 196 // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String. 197 executeJavaScript("testObject.setStringArray([42]);"); 198 assertNull(mTestObject.waitForStringArray()[0]); 199 200 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 201 executeJavaScript("testObject.setCustomTypeArray([42]);"); 202 assertNull(mTestObject.waitForCustomTypeArray()); 203 } 204 205 // Test passing an array of JavaScript numbers in the double range to a 206 // method which takes a Java array. 207 @SmallTest 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]); 213 214 executeJavaScript("testObject.setByteArray([42.1]);"); 215 assertEquals(42, mTestObject.waitForByteArray()[0]); 216 217 // LIVECONNECT_COMPLIANCE: Should convert to numeric char value. 218 executeJavaScript("testObject.setCharArray([42.1]);"); 219 assertEquals('\u0000', mTestObject.waitForCharArray()[0]); 220 221 executeJavaScript("testObject.setShortArray([42.1]);"); 222 assertEquals(42, mTestObject.waitForShortArray()[0]); 223 224 executeJavaScript("testObject.setIntArray([42.1]);"); 225 assertEquals(42, mTestObject.waitForIntArray()[0]); 226 227 executeJavaScript("testObject.setLongArray([42.1]);"); 228 assertEquals(42L, mTestObject.waitForLongArray()[0]); 229 230 executeJavaScript("testObject.setFloatArray([42.1]);"); 231 assertEquals(42.1f, mTestObject.waitForFloatArray()[0]); 232 233 executeJavaScript("testObject.setDoubleArray([42.1]);"); 234 assertEquals(42.1, mTestObject.waitForDoubleArray()[0]); 235 236 // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number. 237 executeJavaScript("testObject.setObjectArray([42.1]);"); 238 assertNull(mTestObject.waitForObjectArray()); 239 240 // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String. 241 executeJavaScript("testObject.setStringArray([42.1]);"); 242 assertNull(mTestObject.waitForStringArray()[0]); 243 244 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 245 executeJavaScript("testObject.setCustomTypeArray([42.1]);"); 246 assertNull(mTestObject.waitForCustomTypeArray()); 247 } 248 249 // Test passing an array of JavaScript NaN values to a method which takes a 250 // Java array. 251 /* 252 @SmallTest 253 @Feature({"AndroidWebView", "Android-JavaBridge"}) 254 Bug: http://code.google.com/p/chromium/issues/detail?id=145881 255 */ 256 @DisabledTest 257 public void testPassNumberNaN() throws Throwable { 258 executeJavaScript("testObject.setBooleanArray([Number.NaN]);"); 259 assertFalse(mTestObject.waitForBooleanArray()[0]); 260 261 executeJavaScript("testObject.setByteArray([Number.NaN]);"); 262 assertEquals(0, mTestObject.waitForByteArray()[0]); 263 264 executeJavaScript("testObject.setCharArray([Number.NaN]);"); 265 assertEquals('\u0000', mTestObject.waitForCharArray()[0]); 266 267 executeJavaScript("testObject.setShortArray([Number.NaN]);"); 268 assertEquals(0, mTestObject.waitForShortArray()[0]); 269 270 executeJavaScript("testObject.setIntArray([Number.NaN]);"); 271 assertEquals(0, mTestObject.waitForIntArray()[0]); 272 273 executeJavaScript("testObject.setLongArray([Number.NaN]);"); 274 assertEquals(0L, mTestObject.waitForLongArray()[0]); 275 276 executeJavaScript("testObject.setFloatArray([Number.NaN]);"); 277 assertEquals(Float.NaN, mTestObject.waitForFloatArray()[0]); 278 279 executeJavaScript("testObject.setDoubleArray([Number.NaN]);"); 280 assertEquals(Double.NaN, mTestObject.waitForDoubleArray()[0]); 281 282 // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number. 283 executeJavaScript("testObject.setObjectArray([Number.NaN]);"); 284 assertNull(mTestObject.waitForObjectArray()); 285 286 // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String. 287 executeJavaScript("testObject.setStringArray([Number.NaN]);"); 288 assertNull(mTestObject.waitForStringArray()[0]); 289 290 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 291 executeJavaScript("testObject.setCustomTypeArray([Number.NaN]);"); 292 assertNull(mTestObject.waitForCustomTypeArray()); 293 } 294 295 // Test passing an array of JavaScript infinity values to a method which 296 // takes a Java array. 297 /* 298 @SmallTest 299 @Feature({"AndroidWebView", "Android-JavaBridge"}) 300 Bug: http://code.google.com/p/chromium/issues/detail?id=145881 301 */ 302 @DisabledTest 303 public void testPassNumberInfinity() throws Throwable { 304 executeJavaScript("testObject.setBooleanArray([Infinity]);"); 305 assertFalse(mTestObject.waitForBooleanArray()[0]); 306 307 executeJavaScript("testObject.setByteArray([Infinity]);"); 308 assertEquals(-1, mTestObject.waitForByteArray()[0]); 309 310 // LIVECONNECT_COMPLIANCE: Should convert to maximum numeric char value. 311 executeJavaScript("testObject.setCharArray([Infinity]);"); 312 assertEquals('\u0000', mTestObject.waitForCharArray()[0]); 313 314 executeJavaScript("testObject.setShortArray([Infinity]);"); 315 assertEquals(-1, mTestObject.waitForShortArray()[0]); 316 317 executeJavaScript("testObject.setIntArray([Infinity]);"); 318 assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntArray()[0]); 319 320 // LIVECONNECT_COMPLIANCE: Should be Long.MAX_VALUE. 321 executeJavaScript("testObject.setLongArray([Infinity]);"); 322 assertEquals(-1L, mTestObject.waitForLongArray()[0]); 323 324 executeJavaScript("testObject.setFloatArray([Infinity]);"); 325 assertEquals(Float.POSITIVE_INFINITY, mTestObject.waitForFloatArray()[0]); 326 327 executeJavaScript("testObject.setDoubleArray([Infinity]);"); 328 assertEquals(Double.POSITIVE_INFINITY, mTestObject.waitForDoubleArray()[0]); 329 330 // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number. 331 executeJavaScript("testObject.setObjectArray([Infinity]);"); 332 assertNull(mTestObject.waitForObjectArray()); 333 334 // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String. 335 executeJavaScript("testObject.setStringArray([Infinity]);"); 336 assertNull(mTestObject.waitForStringArray()[0]); 337 338 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 339 executeJavaScript("testObject.setCustomTypeArray([Infinity]);"); 340 assertNull(mTestObject.waitForCustomTypeArray()); 341 } 342 343 // Test passing an array of JavaScript boolean values to a method which 344 // takes a Java array. 345 @SmallTest 346 @Feature({"AndroidWebView", "Android-JavaBridge"}) 347 public void testPassBoolean() throws Throwable { 348 executeJavaScript("testObject.setBooleanArray([true]);"); 349 assertTrue(mTestObject.waitForBooleanArray()[0]); 350 executeJavaScript("testObject.setBooleanArray([false]);"); 351 assertFalse(mTestObject.waitForBooleanArray()[0]); 352 353 // LIVECONNECT_COMPLIANCE: Should be 1. 354 executeJavaScript("testObject.setByteArray([true]);"); 355 assertEquals(0, mTestObject.waitForByteArray()[0]); 356 executeJavaScript("testObject.setByteArray([false]);"); 357 assertEquals(0, mTestObject.waitForByteArray()[0]); 358 359 // LIVECONNECT_COMPLIANCE: Should convert to numeric char value 1. 360 executeJavaScript("testObject.setCharArray([true]);"); 361 assertEquals('\u0000', mTestObject.waitForCharArray()[0]); 362 executeJavaScript("testObject.setCharArray([false]);"); 363 assertEquals('\u0000', mTestObject.waitForCharArray()[0]); 364 365 // LIVECONNECT_COMPLIANCE: Should be 1. 366 executeJavaScript("testObject.setShortArray([true]);"); 367 assertEquals(0, mTestObject.waitForShortArray()[0]); 368 executeJavaScript("testObject.setShortArray([false]);"); 369 assertEquals(0, mTestObject.waitForShortArray()[0]); 370 371 // LIVECONNECT_COMPLIANCE: Should be 1. 372 executeJavaScript("testObject.setIntArray([true]);"); 373 assertEquals(0, mTestObject.waitForIntArray()[0]); 374 executeJavaScript("testObject.setIntArray([false]);"); 375 assertEquals(0, mTestObject.waitForIntArray()[0]); 376 377 // LIVECONNECT_COMPLIANCE: Should be 1. 378 executeJavaScript("testObject.setLongArray([true]);"); 379 assertEquals(0L, mTestObject.waitForLongArray()[0]); 380 executeJavaScript("testObject.setLongArray([false]);"); 381 assertEquals(0L, mTestObject.waitForLongArray()[0]); 382 383 // LIVECONNECT_COMPLIANCE: Should be 1.0. 384 executeJavaScript("testObject.setFloatArray([true]);"); 385 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]); 386 executeJavaScript("testObject.setFloatArray([false]);"); 387 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]); 388 389 // LIVECONNECT_COMPLIANCE: Should be 1.0. 390 executeJavaScript("testObject.setDoubleArray([true]);"); 391 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]); 392 executeJavaScript("testObject.setDoubleArray([false]);"); 393 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]); 394 395 // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number. 396 executeJavaScript("testObject.setObjectArray([true]);"); 397 assertNull(mTestObject.waitForObjectArray()); 398 399 // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String. 400 executeJavaScript("testObject.setStringArray([true]);"); 401 assertNull(mTestObject.waitForStringArray()[0]); 402 403 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 404 executeJavaScript("testObject.setCustomTypeArray([true]);"); 405 assertNull(mTestObject.waitForCustomTypeArray()); 406 } 407 408 // Test passing an array of JavaScript strings to a method which takes a 409 // Java array. 410 @SmallTest 411 @Feature({"AndroidWebView", "Android-JavaBridge"}) 412 public void testPassString() throws Throwable { 413 // LIVECONNECT_COMPLIANCE: Non-empty string should convert to true. 414 executeJavaScript("testObject.setBooleanArray([\"+042.10\"]);"); 415 assertFalse(mTestObject.waitForBooleanArray()[0]); 416 417 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. 418 executeJavaScript("testObject.setByteArray([\"+042.10\"]);"); 419 assertEquals(0, mTestObject.waitForByteArray()[0]); 420 421 // LIVECONNECT_COMPLIANCE: Should decode and convert to numeric char value. 422 executeJavaScript("testObject.setCharArray([\"+042.10\"]);"); 423 assertEquals(0, mTestObject.waitForCharArray()[0]); 424 425 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. 426 executeJavaScript("testObject.setShortArray([\"+042.10\"]);"); 427 assertEquals(0, mTestObject.waitForShortArray()[0]); 428 429 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. 430 executeJavaScript("testObject.setIntArray([\"+042.10\"]);"); 431 assertEquals(0, mTestObject.waitForIntArray()[0]); 432 433 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. 434 executeJavaScript("testObject.setLongArray([\"+042.10\"]);"); 435 assertEquals(0L, mTestObject.waitForLongArray()[0]); 436 437 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. 438 executeJavaScript("testObject.setFloatArray([\"+042.10\"]);"); 439 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]); 440 441 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. 442 executeJavaScript("testObject.setDoubleArray([\"+042.10\"]);"); 443 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]); 444 445 // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number. 446 executeJavaScript("testObject.setObjectArray([\"+042.10\"]);"); 447 assertNull(mTestObject.waitForObjectArray()); 448 449 executeJavaScript("testObject.setStringArray([\"+042.10\"]);"); 450 assertEquals("+042.10", mTestObject.waitForStringArray()[0]); 451 452 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 453 executeJavaScript("testObject.setCustomTypeArray([\"+042.10\"]);"); 454 assertNull(mTestObject.waitForCustomTypeArray()); 455 } 456 457 // Test passing an array of JavaScript objects to a method which takes a 458 // Java array. 459 @SmallTest 460 @Feature({"AndroidWebView", "Android-JavaBridge"}) 461 public void testPassJavaScriptObject() throws Throwable { 462 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 463 executeJavaScript("testObject.setBooleanArray([{foo: 42}]);"); 464 assertFalse(mTestObject.waitForBooleanArray()[0]); 465 466 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 467 executeJavaScript("testObject.setByteArray([{foo: 42}]);"); 468 assertEquals(0, mTestObject.waitForByteArray()[0]); 469 470 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 471 executeJavaScript("testObject.setCharArray([{foo: 42}]);"); 472 assertEquals('\u0000', mTestObject.waitForCharArray()[0]); 473 474 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 475 executeJavaScript("testObject.setShortArray([{foo: 42}]);"); 476 assertEquals(0, mTestObject.waitForShortArray()[0]); 477 478 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 479 executeJavaScript("testObject.setIntArray([{foo: 42}]);"); 480 assertEquals(0, mTestObject.waitForIntArray()[0]); 481 482 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 483 executeJavaScript("testObject.setLongArray([{foo: 42}]);"); 484 assertEquals(0L, mTestObject.waitForLongArray()[0]); 485 486 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 487 executeJavaScript("testObject.setFloatArray([{foo: 42}]);"); 488 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]); 489 490 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 491 executeJavaScript("testObject.setDoubleArray([{foo: 42}]);"); 492 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]); 493 494 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 495 executeJavaScript("testObject.setObjectArray([{foo: 42}]);"); 496 assertNull(mTestObject.waitForObjectArray()); 497 498 // LIVECONNECT_COMPLIANCE: Should call toString() on object. 499 executeJavaScript("testObject.setStringArray([{foo: 42}]);"); 500 assertNull(mTestObject.waitForStringArray()[0]); 501 502 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 503 executeJavaScript("testObject.setCustomTypeArray([{foo: 42}]);"); 504 assertNull(mTestObject.waitForCustomTypeArray()); 505 } 506 507 // Test passing an array of Java objects to a method which takes a Java 508 // array. 509 @SmallTest 510 @Feature({"AndroidWebView", "Android-JavaBridge"}) 511 public void testPassJavaObject() throws Throwable { 512 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 513 executeJavaScript("testObject.setBooleanArray([testObject.getObjectInstance()]);"); 514 assertFalse(mTestObject.waitForBooleanArray()[0]); 515 516 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 517 executeJavaScript("testObject.setByteArray([testObject.getObjectInstance()]);"); 518 assertEquals(0, mTestObject.waitForByteArray()[0]); 519 520 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 521 executeJavaScript("testObject.setCharArray([testObject.getObjectInstance()]);"); 522 assertEquals('\u0000', mTestObject.waitForCharArray()[0]); 523 524 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 525 executeJavaScript("testObject.setShortArray([testObject.getObjectInstance()]);"); 526 assertEquals(0, mTestObject.waitForShortArray()[0]); 527 528 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 529 executeJavaScript("testObject.setIntArray([testObject.getObjectInstance()]);"); 530 assertEquals(0, mTestObject.waitForIntArray()[0]); 531 532 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 533 executeJavaScript("testObject.setLongArray([testObject.getObjectInstance()]);"); 534 assertEquals(0L, mTestObject.waitForLongArray()[0]); 535 536 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 537 executeJavaScript("testObject.setFloatArray([testObject.getObjectInstance()]);"); 538 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]); 539 540 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 541 executeJavaScript("testObject.setDoubleArray([testObject.getObjectInstance()]);"); 542 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]); 543 544 // LIVECONNECT_COMPLIANCE: Should create an array and pass Java object. 545 executeJavaScript("testObject.setObjectArray([testObject.getObjectInstance()]);"); 546 assertNull(mTestObject.waitForObjectArray()); 547 548 // LIVECONNECT_COMPLIANCE: Should call toString() on object. 549 executeJavaScript("testObject.setStringArray([testObject.getObjectInstance()]);"); 550 assertNull(mTestObject.waitForStringArray()[0]); 551 552 // LIVECONNECT_COMPLIANCE: Should create array and pass Java object. 553 executeJavaScript("testObject.setCustomTypeArray([testObject.getObjectInstance()]);"); 554 assertNull(mTestObject.waitForCustomTypeArray()); 555 executeJavaScript("testObject.setCustomTypeArray([testObject.getCustomTypeInstance()]);"); 556 assertNull(mTestObject.waitForCustomTypeArray()); 557 } 558 559 // Test passing an array of JavaScript null values to a method which takes 560 // a Java array. 561 @SmallTest 562 @Feature({"AndroidWebView", "Android-JavaBridge"}) 563 public void testPassNull() throws Throwable { 564 executeJavaScript("testObject.setByteArray([null]);"); 565 assertEquals(0, mTestObject.waitForByteArray()[0]); 566 567 executeJavaScript("testObject.setCharArray([null]);"); 568 assertEquals('\u0000', mTestObject.waitForCharArray()[0]); 569 570 executeJavaScript("testObject.setShortArray([null]);"); 571 assertEquals(0, mTestObject.waitForShortArray()[0]); 572 573 executeJavaScript("testObject.setIntArray([null]);"); 574 assertEquals(0, mTestObject.waitForIntArray()[0]); 575 576 executeJavaScript("testObject.setLongArray([null]);"); 577 assertEquals(0L, mTestObject.waitForLongArray()[0]); 578 579 executeJavaScript("testObject.setFloatArray([null]);"); 580 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]); 581 582 executeJavaScript("testObject.setDoubleArray([null]);"); 583 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]); 584 585 executeJavaScript("testObject.setBooleanArray([null]);"); 586 assertFalse(mTestObject.waitForBooleanArray()[0]); 587 588 // LIVECONNECT_COMPLIANCE: Should create array and pass null. 589 executeJavaScript("testObject.setObjectArray([null]);"); 590 assertNull(mTestObject.waitForObjectArray()); 591 592 executeJavaScript("testObject.setStringArray([null]);"); 593 assertNull(mTestObject.waitForStringArray()[0]); 594 595 // LIVECONNECT_COMPLIANCE: Should create array and pass null. 596 executeJavaScript("testObject.setCustomTypeArray([null]);"); 597 assertNull(mTestObject.waitForCustomTypeArray()); 598 } 599 600 // Test passing an array of JavaScript undefined values to a method which 601 // takes a Java array. 602 @SmallTest 603 @Feature({"AndroidWebView", "Android-JavaBridge"}) 604 public void testPassUndefined() throws Throwable { 605 executeJavaScript("testObject.setByteArray([undefined]);"); 606 assertEquals(0, mTestObject.waitForByteArray()[0]); 607 608 executeJavaScript("testObject.setCharArray([undefined]);"); 609 assertEquals(0, mTestObject.waitForCharArray()[0]); 610 611 executeJavaScript("testObject.setShortArray([undefined]);"); 612 assertEquals(0, mTestObject.waitForShortArray()[0]); 613 614 executeJavaScript("testObject.setIntArray([undefined]);"); 615 assertEquals(0, mTestObject.waitForIntArray()[0]); 616 617 executeJavaScript("testObject.setLongArray([undefined]);"); 618 assertEquals(0L, mTestObject.waitForLongArray()[0]); 619 620 executeJavaScript("testObject.setFloatArray([undefined]);"); 621 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]); 622 623 executeJavaScript("testObject.setDoubleArray([undefined]);"); 624 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]); 625 626 executeJavaScript("testObject.setBooleanArray([undefined]);"); 627 assertEquals(false, mTestObject.waitForBooleanArray()[0]); 628 629 // LIVECONNECT_COMPLIANCE: Should create array and pass null. 630 executeJavaScript("testObject.setObjectArray([undefined]);"); 631 assertNull(mTestObject.waitForObjectArray()); 632 633 executeJavaScript("testObject.setStringArray([undefined]);"); 634 assertNull(mTestObject.waitForStringArray()[0]); 635 636 // LIVECONNECT_COMPLIANCE: Should create array and pass null. 637 executeJavaScript("testObject.setCustomTypeArray([undefined]);"); 638 assertNull(mTestObject.waitForCustomTypeArray()); 639 } 640} 641