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