JavaBridgeArrayCoercionTest.java revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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 @SmallTest 252 @Feature({"AndroidWebView", "Android-JavaBridge"}) 253 public void testPassNumberNaN() throws Throwable { 254 executeJavaScript("testObject.setBooleanArray([Number.NaN]);"); 255 assertFalse(mTestObject.waitForBooleanArray()[0]); 256 257 executeJavaScript("testObject.setByteArray([Number.NaN]);"); 258 assertEquals(0, mTestObject.waitForByteArray()[0]); 259 260 executeJavaScript("testObject.setCharArray([Number.NaN]);"); 261 assertEquals('\u0000', mTestObject.waitForCharArray()[0]); 262 263 executeJavaScript("testObject.setShortArray([Number.NaN]);"); 264 assertEquals(0, mTestObject.waitForShortArray()[0]); 265 266 executeJavaScript("testObject.setIntArray([Number.NaN]);"); 267 assertEquals(0, mTestObject.waitForIntArray()[0]); 268 269 executeJavaScript("testObject.setLongArray([Number.NaN]);"); 270 assertEquals(0L, mTestObject.waitForLongArray()[0]); 271 272 executeJavaScript("testObject.setFloatArray([Number.NaN]);"); 273 assertEquals(Float.NaN, mTestObject.waitForFloatArray()[0]); 274 275 executeJavaScript("testObject.setDoubleArray([Number.NaN]);"); 276 assertEquals(Double.NaN, mTestObject.waitForDoubleArray()[0]); 277 278 // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number. 279 executeJavaScript("testObject.setObjectArray([Number.NaN]);"); 280 assertNull(mTestObject.waitForObjectArray()); 281 282 // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String. 283 executeJavaScript("testObject.setStringArray([Number.NaN]);"); 284 assertNull(mTestObject.waitForStringArray()[0]); 285 286 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 287 executeJavaScript("testObject.setCustomTypeArray([Number.NaN]);"); 288 assertNull(mTestObject.waitForCustomTypeArray()); 289 } 290 291 // Test passing an array of JavaScript infinity values to a method which 292 // takes a Java array. 293 @SmallTest 294 @Feature({"AndroidWebView", "Android-JavaBridge"}) 295 public void testPassNumberInfinity() throws Throwable { 296 executeJavaScript("testObject.setBooleanArray([Infinity]);"); 297 assertFalse(mTestObject.waitForBooleanArray()[0]); 298 299 executeJavaScript("testObject.setByteArray([Infinity]);"); 300 assertEquals(-1, mTestObject.waitForByteArray()[0]); 301 302 // LIVECONNECT_COMPLIANCE: Should convert to maximum numeric char value. 303 executeJavaScript("testObject.setCharArray([Infinity]);"); 304 assertEquals('\u0000', mTestObject.waitForCharArray()[0]); 305 306 executeJavaScript("testObject.setShortArray([Infinity]);"); 307 assertEquals(-1, mTestObject.waitForShortArray()[0]); 308 309 executeJavaScript("testObject.setIntArray([Infinity]);"); 310 assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntArray()[0]); 311 312 executeJavaScript("testObject.setLongArray([Infinity]);"); 313 assertEquals(Long.MAX_VALUE, mTestObject.waitForLongArray()[0]); 314 315 executeJavaScript("testObject.setFloatArray([Infinity]);"); 316 assertEquals(Float.POSITIVE_INFINITY, mTestObject.waitForFloatArray()[0]); 317 318 executeJavaScript("testObject.setDoubleArray([Infinity]);"); 319 assertEquals(Double.POSITIVE_INFINITY, mTestObject.waitForDoubleArray()[0]); 320 321 // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number. 322 executeJavaScript("testObject.setObjectArray([Infinity]);"); 323 assertNull(mTestObject.waitForObjectArray()); 324 325 // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String. 326 executeJavaScript("testObject.setStringArray([Infinity]);"); 327 assertNull(mTestObject.waitForStringArray()[0]); 328 329 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 330 executeJavaScript("testObject.setCustomTypeArray([Infinity]);"); 331 assertNull(mTestObject.waitForCustomTypeArray()); 332 } 333 334 // Test passing an array of JavaScript boolean values to a method which 335 // takes a Java array. 336 @SmallTest 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]); 343 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]); 349 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]); 355 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]); 361 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]); 367 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]); 373 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]); 379 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]); 385 386 // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number. 387 executeJavaScript("testObject.setObjectArray([true]);"); 388 assertNull(mTestObject.waitForObjectArray()); 389 390 // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String. 391 executeJavaScript("testObject.setStringArray([true]);"); 392 assertNull(mTestObject.waitForStringArray()[0]); 393 394 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 395 executeJavaScript("testObject.setCustomTypeArray([true]);"); 396 assertNull(mTestObject.waitForCustomTypeArray()); 397 } 398 399 // Test passing an array of JavaScript strings to a method which takes a 400 // Java array. 401 @SmallTest 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]); 407 408 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. 409 executeJavaScript("testObject.setByteArray([\"+042.10\"]);"); 410 assertEquals(0, mTestObject.waitForByteArray()[0]); 411 412 // LIVECONNECT_COMPLIANCE: Should decode and convert to numeric char value. 413 executeJavaScript("testObject.setCharArray([\"+042.10\"]);"); 414 assertEquals(0, mTestObject.waitForCharArray()[0]); 415 416 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. 417 executeJavaScript("testObject.setShortArray([\"+042.10\"]);"); 418 assertEquals(0, mTestObject.waitForShortArray()[0]); 419 420 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. 421 executeJavaScript("testObject.setIntArray([\"+042.10\"]);"); 422 assertEquals(0, mTestObject.waitForIntArray()[0]); 423 424 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. 425 executeJavaScript("testObject.setLongArray([\"+042.10\"]);"); 426 assertEquals(0L, mTestObject.waitForLongArray()[0]); 427 428 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. 429 executeJavaScript("testObject.setFloatArray([\"+042.10\"]);"); 430 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]); 431 432 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. 433 executeJavaScript("testObject.setDoubleArray([\"+042.10\"]);"); 434 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]); 435 436 // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number. 437 executeJavaScript("testObject.setObjectArray([\"+042.10\"]);"); 438 assertNull(mTestObject.waitForObjectArray()); 439 440 executeJavaScript("testObject.setStringArray([\"+042.10\"]);"); 441 assertEquals("+042.10", mTestObject.waitForStringArray()[0]); 442 443 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 444 executeJavaScript("testObject.setCustomTypeArray([\"+042.10\"]);"); 445 assertNull(mTestObject.waitForCustomTypeArray()); 446 } 447 448 // Test passing an array of JavaScript objects to a method which takes a 449 // Java array. 450 @SmallTest 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]); 456 457 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 458 executeJavaScript("testObject.setByteArray([{foo: 42}]);"); 459 assertEquals(0, mTestObject.waitForByteArray()[0]); 460 461 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 462 executeJavaScript("testObject.setCharArray([{foo: 42}]);"); 463 assertEquals('\u0000', mTestObject.waitForCharArray()[0]); 464 465 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 466 executeJavaScript("testObject.setShortArray([{foo: 42}]);"); 467 assertEquals(0, mTestObject.waitForShortArray()[0]); 468 469 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 470 executeJavaScript("testObject.setIntArray([{foo: 42}]);"); 471 assertEquals(0, mTestObject.waitForIntArray()[0]); 472 473 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 474 executeJavaScript("testObject.setLongArray([{foo: 42}]);"); 475 assertEquals(0L, mTestObject.waitForLongArray()[0]); 476 477 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 478 executeJavaScript("testObject.setFloatArray([{foo: 42}]);"); 479 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]); 480 481 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 482 executeJavaScript("testObject.setDoubleArray([{foo: 42}]);"); 483 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]); 484 485 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 486 executeJavaScript("testObject.setObjectArray([{foo: 42}]);"); 487 assertNull(mTestObject.waitForObjectArray()); 488 489 // LIVECONNECT_COMPLIANCE: Should call toString() on object. 490 executeJavaScript("testObject.setStringArray([{foo: 42}]);"); 491 assertNull(mTestObject.waitForStringArray()[0]); 492 493 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 494 executeJavaScript("testObject.setCustomTypeArray([{foo: 42}]);"); 495 assertNull(mTestObject.waitForCustomTypeArray()); 496 } 497 498 // Test passing an array of Java objects to a method which takes a Java 499 // array. 500 @SmallTest 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]); 506 507 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 508 executeJavaScript("testObject.setByteArray([testObject.getObjectInstance()]);"); 509 assertEquals(0, mTestObject.waitForByteArray()[0]); 510 511 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 512 executeJavaScript("testObject.setCharArray([testObject.getObjectInstance()]);"); 513 assertEquals('\u0000', mTestObject.waitForCharArray()[0]); 514 515 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 516 executeJavaScript("testObject.setShortArray([testObject.getObjectInstance()]);"); 517 assertEquals(0, mTestObject.waitForShortArray()[0]); 518 519 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 520 executeJavaScript("testObject.setIntArray([testObject.getObjectInstance()]);"); 521 assertEquals(0, mTestObject.waitForIntArray()[0]); 522 523 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 524 executeJavaScript("testObject.setLongArray([testObject.getObjectInstance()]);"); 525 assertEquals(0L, mTestObject.waitForLongArray()[0]); 526 527 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 528 executeJavaScript("testObject.setFloatArray([testObject.getObjectInstance()]);"); 529 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]); 530 531 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. 532 executeJavaScript("testObject.setDoubleArray([testObject.getObjectInstance()]);"); 533 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]); 534 535 // LIVECONNECT_COMPLIANCE: Should create an array and pass Java object. 536 executeJavaScript("testObject.setObjectArray([testObject.getObjectInstance()]);"); 537 assertNull(mTestObject.waitForObjectArray()); 538 539 // LIVECONNECT_COMPLIANCE: Should call toString() on object. 540 executeJavaScript("testObject.setStringArray([testObject.getObjectInstance()]);"); 541 assertNull(mTestObject.waitForStringArray()[0]); 542 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()); 548 } 549 550 // Test passing an array of JavaScript null values to a method which takes 551 // a Java array. 552 @SmallTest 553 @Feature({"AndroidWebView", "Android-JavaBridge"}) 554 public void testPassNull() throws Throwable { 555 executeJavaScript("testObject.setByteArray([null]);"); 556 assertEquals(0, mTestObject.waitForByteArray()[0]); 557 558 executeJavaScript("testObject.setCharArray([null]);"); 559 assertEquals('\u0000', mTestObject.waitForCharArray()[0]); 560 561 executeJavaScript("testObject.setShortArray([null]);"); 562 assertEquals(0, mTestObject.waitForShortArray()[0]); 563 564 executeJavaScript("testObject.setIntArray([null]);"); 565 assertEquals(0, mTestObject.waitForIntArray()[0]); 566 567 executeJavaScript("testObject.setLongArray([null]);"); 568 assertEquals(0L, mTestObject.waitForLongArray()[0]); 569 570 executeJavaScript("testObject.setFloatArray([null]);"); 571 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]); 572 573 executeJavaScript("testObject.setDoubleArray([null]);"); 574 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]); 575 576 executeJavaScript("testObject.setBooleanArray([null]);"); 577 assertFalse(mTestObject.waitForBooleanArray()[0]); 578 579 // LIVECONNECT_COMPLIANCE: Should create array and pass null. 580 executeJavaScript("testObject.setObjectArray([null]);"); 581 assertNull(mTestObject.waitForObjectArray()); 582 583 executeJavaScript("testObject.setStringArray([null]);"); 584 assertNull(mTestObject.waitForStringArray()[0]); 585 586 // LIVECONNECT_COMPLIANCE: Should create array and pass null. 587 executeJavaScript("testObject.setCustomTypeArray([null]);"); 588 assertNull(mTestObject.waitForCustomTypeArray()); 589 } 590 591 // Test passing an array of JavaScript undefined values to a method which 592 // takes a Java array. 593 @SmallTest 594 @Feature({"AndroidWebView", "Android-JavaBridge"}) 595 public void testPassUndefined() throws Throwable { 596 executeJavaScript("testObject.setByteArray([undefined]);"); 597 assertEquals(0, mTestObject.waitForByteArray()[0]); 598 599 executeJavaScript("testObject.setCharArray([undefined]);"); 600 assertEquals(0, mTestObject.waitForCharArray()[0]); 601 602 executeJavaScript("testObject.setShortArray([undefined]);"); 603 assertEquals(0, mTestObject.waitForShortArray()[0]); 604 605 executeJavaScript("testObject.setIntArray([undefined]);"); 606 assertEquals(0, mTestObject.waitForIntArray()[0]); 607 608 executeJavaScript("testObject.setLongArray([undefined]);"); 609 assertEquals(0L, mTestObject.waitForLongArray()[0]); 610 611 executeJavaScript("testObject.setFloatArray([undefined]);"); 612 assertEquals(0.0f, mTestObject.waitForFloatArray()[0]); 613 614 executeJavaScript("testObject.setDoubleArray([undefined]);"); 615 assertEquals(0.0, mTestObject.waitForDoubleArray()[0]); 616 617 executeJavaScript("testObject.setBooleanArray([undefined]);"); 618 assertEquals(false, mTestObject.waitForBooleanArray()[0]); 619 620 // LIVECONNECT_COMPLIANCE: Should create array and pass null. 621 executeJavaScript("testObject.setObjectArray([undefined]);"); 622 assertNull(mTestObject.waitForObjectArray()); 623 624 executeJavaScript("testObject.setStringArray([undefined]);"); 625 assertNull(mTestObject.waitForStringArray()[0]); 626 627 // LIVECONNECT_COMPLIANCE: Should create array and pass null. 628 executeJavaScript("testObject.setCustomTypeArray([undefined]);"); 629 assertNull(mTestObject.waitForCustomTypeArray()); 630 } 631} 632