Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(227)

Unified Diff: content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeArrayCoercionTest.java

Issue 10911131: Upstream JavaBridge tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing check_deps failure Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeArrayCoercionTest.java
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeArrayCoercionTest.java b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeArrayCoercionTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..494fd18f82aa4d0cb18833410f3fb98473a0f99b
--- /dev/null
+++ b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeArrayCoercionTest.java
@@ -0,0 +1,640 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.content.browser;
+
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.chromium.base.test.util.Feature;
+import org.chromium.base.test.util.DisabledTest;
+
+/**
+ * Part of the test suite for the Java Bridge. This class tests that we correctly convert
+ * JavaScript arrays to Java arrays when passing them to the methods of injected Java objects.
+ *
+ * The conversions should follow
+ * http://jdk6.java.net/plugin2/liveconnect/#JS_JAVA_CONVERSIONS. Places in
+ * which the implementation differs from the spec are marked with
+ * LIVECONNECT_COMPLIANCE.
+ * FIXME: Consider making our implementation more compliant, if it will not
+ * break backwards-compatibility. See b/4408210.
+ */
+public class JavaBridgeArrayCoercionTest extends JavaBridgeTestBase {
+ private class TestObject extends Controller {
+ private Object mObjectInstance;
+ private CustomType mCustomTypeInstance;
+
+ private boolean[] mBooleanArray;
+ private byte[] mByteArray;
+ private char[] mCharArray;
+ private short[] mShortArray;
+ private int[] mIntArray;
+ private long[] mLongArray;
+ private float[] mFloatArray;
+ private double[] mDoubleArray;
+ private String[] mStringArray;
+ private Object[] mObjectArray;
+ private CustomType[] mCustomTypeArray;
+
+ public TestObject() {
+ mObjectInstance = new Object();
+ mCustomTypeInstance = new CustomType();
+ }
+
+ public Object getObjectInstance() {
+ return mObjectInstance;
+ }
+ public CustomType getCustomTypeInstance() {
+ return mCustomTypeInstance;
+ }
+
+ public synchronized void setBooleanArray(boolean[] x) {
+ mBooleanArray = x;
+ notifyResultIsReady();
+ }
+ public synchronized void setByteArray(byte[] x) {
+ mByteArray = x;
+ notifyResultIsReady();
+ }
+ public synchronized void setCharArray(char[] x) {
+ mCharArray = x;
+ notifyResultIsReady();
+ }
+ public synchronized void setShortArray(short[] x) {
+ mShortArray = x;
+ notifyResultIsReady();
+ }
+ public synchronized void setIntArray(int[] x) {
+ mIntArray = x;
+ notifyResultIsReady();
+ }
+ public synchronized void setLongArray(long[] x) {
+ mLongArray = x;
+ notifyResultIsReady();
+ }
+ public synchronized void setFloatArray(float[] x) {
+ mFloatArray = x;
+ notifyResultIsReady();
+ }
+ public synchronized void setDoubleArray(double[] x) {
+ mDoubleArray = x;
+ notifyResultIsReady();
+ }
+ public synchronized void setStringArray(String[] x) {
+ mStringArray = x;
+ notifyResultIsReady();
+ }
+ public synchronized void setObjectArray(Object[] x) {
+ mObjectArray = x;
+ notifyResultIsReady();
+ }
+ public synchronized void setCustomTypeArray(CustomType[] x) {
+ mCustomTypeArray = x;
+ notifyResultIsReady();
+ }
+
+ public synchronized boolean[] waitForBooleanArray() {
+ waitForResult();
+ return mBooleanArray;
+ }
+ public synchronized byte[] waitForByteArray() {
+ waitForResult();
+ return mByteArray;
+ }
+ public synchronized char[] waitForCharArray() {
+ waitForResult();
+ return mCharArray;
+ }
+ public synchronized short[] waitForShortArray() {
+ waitForResult();
+ return mShortArray;
+ }
+ public synchronized int[] waitForIntArray() {
+ waitForResult();
+ return mIntArray;
+ }
+ public synchronized long[] waitForLongArray() {
+ waitForResult();
+ return mLongArray;
+ }
+ public synchronized float[] waitForFloatArray() {
+ waitForResult();
+ return mFloatArray;
+ }
+ public synchronized double[] waitForDoubleArray() {
+ waitForResult();
+ return mDoubleArray;
+ }
+ public synchronized String[] waitForStringArray() {
+ waitForResult();
+ return mStringArray;
+ }
+ public synchronized Object[] waitForObjectArray() {
+ waitForResult();
+ return mObjectArray;
+ }
+ public synchronized CustomType[] waitForCustomTypeArray() {
+ waitForResult();
+ return mCustomTypeArray;
+ }
+ }
+
+ // Two custom types used when testing passing objects.
+ private class CustomType {
+ }
+
+ private TestObject mTestObject;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mTestObject = new TestObject();
+ setUpContentView(mTestObject, "testObject");
+ }
+
+ // Note that all tests use a single element array for simplicity. We test
+ // multiple elements elsewhere.
+
+ // Test passing an array of JavaScript numbers in the int32 range to a
+ // method which takes a Java array.
+ @SmallTest
+ @Feature({"Android-WebView", "Android-JavaBridge"})
+ public void testPassNumberInt32() throws Throwable {
+ executeJavaScript("testObject.setBooleanArray([0]);");
+ assertFalse(mTestObject.waitForBooleanArray()[0]);
+ // LIVECONNECT_COMPLIANCE: Should convert to boolean.
+ executeJavaScript("testObject.setBooleanArray([42]);");
+ assertFalse(mTestObject.waitForBooleanArray()[0]);
+
+ executeJavaScript("testObject.setByteArray([42]);");
+ assertEquals(42, mTestObject.waitForByteArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should convert to numeric char value.
+ executeJavaScript("testObject.setCharArray([42]);");
+ assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
+
+ executeJavaScript("testObject.setShortArray([42]);");
+ assertEquals(42, mTestObject.waitForShortArray()[0]);
+
+ executeJavaScript("testObject.setIntArray([42]);");
+ assertEquals(42, mTestObject.waitForIntArray()[0]);
+
+ executeJavaScript("testObject.setLongArray([42]);");
+ assertEquals(42L, mTestObject.waitForLongArray()[0]);
+
+ executeJavaScript("testObject.setFloatArray([42]);");
+ assertEquals(42.0f, mTestObject.waitForFloatArray()[0]);
+
+ executeJavaScript("testObject.setDoubleArray([42]);");
+ assertEquals(42.0, mTestObject.waitForDoubleArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number.
+ executeJavaScript("testObject.setObjectArray([42]);");
+ assertNull(mTestObject.waitForObjectArray());
+
+ // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String.
+ executeJavaScript("testObject.setStringArray([42]);");
+ assertNull(mTestObject.waitForStringArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setCustomTypeArray([42]);");
+ assertNull(mTestObject.waitForCustomTypeArray());
+ }
+
+ // Test passing an array of JavaScript numbers in the double range to a
+ // method which takes a Java array.
+ @SmallTest
+ @Feature({"Android-WebView", "Android-JavaBridge"})
+ public void testPassNumberDouble() throws Throwable {
+ // LIVECONNECT_COMPLIANCE: Should convert to boolean.
+ executeJavaScript("testObject.setBooleanArray([42.1]);");
+ assertFalse(mTestObject.waitForBooleanArray()[0]);
+
+ executeJavaScript("testObject.setByteArray([42.1]);");
+ assertEquals(42, mTestObject.waitForByteArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should convert to numeric char value.
+ executeJavaScript("testObject.setCharArray([42.1]);");
+ assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
+
+ executeJavaScript("testObject.setShortArray([42.1]);");
+ assertEquals(42, mTestObject.waitForShortArray()[0]);
+
+ executeJavaScript("testObject.setIntArray([42.1]);");
+ assertEquals(42, mTestObject.waitForIntArray()[0]);
+
+ executeJavaScript("testObject.setLongArray([42.1]);");
+ assertEquals(42L, mTestObject.waitForLongArray()[0]);
+
+ executeJavaScript("testObject.setFloatArray([42.1]);");
+ assertEquals(42.1f, mTestObject.waitForFloatArray()[0]);
+
+ executeJavaScript("testObject.setDoubleArray([42.1]);");
+ assertEquals(42.1, mTestObject.waitForDoubleArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number.
+ executeJavaScript("testObject.setObjectArray([42.1]);");
+ assertNull(mTestObject.waitForObjectArray());
+
+ // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String.
+ executeJavaScript("testObject.setStringArray([42.1]);");
+ assertNull(mTestObject.waitForStringArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setCustomTypeArray([42.1]);");
+ assertNull(mTestObject.waitForCustomTypeArray());
+ }
+
+ // Test passing an array of JavaScript NaN values to a method which takes a
+ // Java array.
+ /*
+ @SmallTest
+ @Feature({"Android-WebView", "Android-JavaBridge"})
+ Bug: http://code.google.com/p/chromium/issues/detail?id=145881
+ */
+ @DisabledTest
+ public void testPassNumberNaN() throws Throwable {
+ executeJavaScript("testObject.setBooleanArray([Number.NaN]);");
+ assertFalse(mTestObject.waitForBooleanArray()[0]);
+
+ executeJavaScript("testObject.setByteArray([Number.NaN]);");
+ assertEquals(0, mTestObject.waitForByteArray()[0]);
+
+ executeJavaScript("testObject.setCharArray([Number.NaN]);");
+ assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
+
+ executeJavaScript("testObject.setShortArray([Number.NaN]);");
+ assertEquals(0, mTestObject.waitForShortArray()[0]);
+
+ executeJavaScript("testObject.setIntArray([Number.NaN]);");
+ assertEquals(0, mTestObject.waitForIntArray()[0]);
+
+ executeJavaScript("testObject.setLongArray([Number.NaN]);");
+ assertEquals(0L, mTestObject.waitForLongArray()[0]);
+
+ executeJavaScript("testObject.setFloatArray([Number.NaN]);");
+ assertEquals(Float.NaN, mTestObject.waitForFloatArray()[0]);
+
+ executeJavaScript("testObject.setDoubleArray([Number.NaN]);");
+ assertEquals(Double.NaN, mTestObject.waitForDoubleArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number.
+ executeJavaScript("testObject.setObjectArray([Number.NaN]);");
+ assertNull(mTestObject.waitForObjectArray());
+
+ // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String.
+ executeJavaScript("testObject.setStringArray([Number.NaN]);");
+ assertNull(mTestObject.waitForStringArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setCustomTypeArray([Number.NaN]);");
+ assertNull(mTestObject.waitForCustomTypeArray());
+ }
+
+ // Test passing an array of JavaScript infinity values to a method which
+ // takes a Java array.
+ /*
+ @SmallTest
+ @Feature({"Android-WebView", "Android-JavaBridge"})
+ Bug: http://code.google.com/p/chromium/issues/detail?id=145881
+ */
+ @DisabledTest
+ public void testPassNumberInfinity() throws Throwable {
+ executeJavaScript("testObject.setBooleanArray([Infinity]);");
+ assertFalse(mTestObject.waitForBooleanArray()[0]);
+
+ executeJavaScript("testObject.setByteArray([Infinity]);");
+ assertEquals(-1, mTestObject.waitForByteArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should convert to maximum numeric char value.
+ executeJavaScript("testObject.setCharArray([Infinity]);");
+ assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
+
+ executeJavaScript("testObject.setShortArray([Infinity]);");
+ assertEquals(-1, mTestObject.waitForShortArray()[0]);
+
+ executeJavaScript("testObject.setIntArray([Infinity]);");
+ assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should be Long.MAX_VALUE.
+ executeJavaScript("testObject.setLongArray([Infinity]);");
+ assertEquals(-1L, mTestObject.waitForLongArray()[0]);
+
+ executeJavaScript("testObject.setFloatArray([Infinity]);");
+ assertEquals(Float.POSITIVE_INFINITY, mTestObject.waitForFloatArray()[0]);
+
+ executeJavaScript("testObject.setDoubleArray([Infinity]);");
+ assertEquals(Double.POSITIVE_INFINITY, mTestObject.waitForDoubleArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number.
+ executeJavaScript("testObject.setObjectArray([Infinity]);");
+ assertNull(mTestObject.waitForObjectArray());
+
+ // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String.
+ executeJavaScript("testObject.setStringArray([Infinity]);");
+ assertNull(mTestObject.waitForStringArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setCustomTypeArray([Infinity]);");
+ assertNull(mTestObject.waitForCustomTypeArray());
+ }
+
+ // Test passing an array of JavaScript boolean values to a method which
+ // takes a Java array.
+ @SmallTest
+ @Feature({"Android-WebView", "Android-JavaBridge"})
+ public void testPassBoolean() throws Throwable {
+ executeJavaScript("testObject.setBooleanArray([true]);");
+ assertTrue(mTestObject.waitForBooleanArray()[0]);
+ executeJavaScript("testObject.setBooleanArray([false]);");
+ assertFalse(mTestObject.waitForBooleanArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should be 1.
+ executeJavaScript("testObject.setByteArray([true]);");
+ assertEquals(0, mTestObject.waitForByteArray()[0]);
+ executeJavaScript("testObject.setByteArray([false]);");
+ assertEquals(0, mTestObject.waitForByteArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should convert to numeric char value 1.
+ executeJavaScript("testObject.setCharArray([true]);");
+ assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
+ executeJavaScript("testObject.setCharArray([false]);");
+ assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should be 1.
+ executeJavaScript("testObject.setShortArray([true]);");
+ assertEquals(0, mTestObject.waitForShortArray()[0]);
+ executeJavaScript("testObject.setShortArray([false]);");
+ assertEquals(0, mTestObject.waitForShortArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should be 1.
+ executeJavaScript("testObject.setIntArray([true]);");
+ assertEquals(0, mTestObject.waitForIntArray()[0]);
+ executeJavaScript("testObject.setIntArray([false]);");
+ assertEquals(0, mTestObject.waitForIntArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should be 1.
+ executeJavaScript("testObject.setLongArray([true]);");
+ assertEquals(0L, mTestObject.waitForLongArray()[0]);
+ executeJavaScript("testObject.setLongArray([false]);");
+ assertEquals(0L, mTestObject.waitForLongArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should be 1.0.
+ executeJavaScript("testObject.setFloatArray([true]);");
+ assertEquals(0.0f, mTestObject.waitForFloatArray()[0]);
+ executeJavaScript("testObject.setFloatArray([false]);");
+ assertEquals(0.0f, mTestObject.waitForFloatArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should be 1.0.
+ executeJavaScript("testObject.setDoubleArray([true]);");
+ assertEquals(0.0, mTestObject.waitForDoubleArray()[0]);
+ executeJavaScript("testObject.setDoubleArray([false]);");
+ assertEquals(0.0, mTestObject.waitForDoubleArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number.
+ executeJavaScript("testObject.setObjectArray([true]);");
+ assertNull(mTestObject.waitForObjectArray());
+
+ // LIVECONNECT_COMPLIANCE: Should create instances of java.lang.String.
+ executeJavaScript("testObject.setStringArray([true]);");
+ assertNull(mTestObject.waitForStringArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setCustomTypeArray([true]);");
+ assertNull(mTestObject.waitForCustomTypeArray());
+ }
+
+ // Test passing an array of JavaScript strings to a method which takes a
+ // Java array.
+ @SmallTest
+ @Feature({"Android-WebView", "Android-JavaBridge"})
+ public void testPassString() throws Throwable {
+ // LIVECONNECT_COMPLIANCE: Non-empty string should convert to true.
+ executeJavaScript("testObject.setBooleanArray([\"+042.10\"]);");
+ assertFalse(mTestObject.waitForBooleanArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
+ executeJavaScript("testObject.setByteArray([\"+042.10\"]);");
+ assertEquals(0, mTestObject.waitForByteArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should decode and convert to numeric char value.
+ executeJavaScript("testObject.setCharArray([\"+042.10\"]);");
+ assertEquals(0, mTestObject.waitForCharArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
+ executeJavaScript("testObject.setShortArray([\"+042.10\"]);");
+ assertEquals(0, mTestObject.waitForShortArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
+ executeJavaScript("testObject.setIntArray([\"+042.10\"]);");
+ assertEquals(0, mTestObject.waitForIntArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
+ executeJavaScript("testObject.setLongArray([\"+042.10\"]);");
+ assertEquals(0L, mTestObject.waitForLongArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
+ executeJavaScript("testObject.setFloatArray([\"+042.10\"]);");
+ assertEquals(0.0f, mTestObject.waitForFloatArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
+ executeJavaScript("testObject.setDoubleArray([\"+042.10\"]);");
+ assertEquals(0.0, mTestObject.waitForDoubleArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should create array and create instances of java.lang.Number.
+ executeJavaScript("testObject.setObjectArray([\"+042.10\"]);");
+ assertNull(mTestObject.waitForObjectArray());
+
+ executeJavaScript("testObject.setStringArray([\"+042.10\"]);");
+ assertEquals("+042.10", mTestObject.waitForStringArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setCustomTypeArray([\"+042.10\"]);");
+ assertNull(mTestObject.waitForCustomTypeArray());
+ }
+
+ // Test passing an array of JavaScript objects to a method which takes a
+ // Java array.
+ @SmallTest
+ @Feature({"Android-WebView", "Android-JavaBridge"})
+ public void testPassJavaScriptObject() throws Throwable {
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setBooleanArray([{foo: 42}]);");
+ assertFalse(mTestObject.waitForBooleanArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setByteArray([{foo: 42}]);");
+ assertEquals(0, mTestObject.waitForByteArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setCharArray([{foo: 42}]);");
+ assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setShortArray([{foo: 42}]);");
+ assertEquals(0, mTestObject.waitForShortArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setIntArray([{foo: 42}]);");
+ assertEquals(0, mTestObject.waitForIntArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setLongArray([{foo: 42}]);");
+ assertEquals(0L, mTestObject.waitForLongArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setFloatArray([{foo: 42}]);");
+ assertEquals(0.0f, mTestObject.waitForFloatArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setDoubleArray([{foo: 42}]);");
+ assertEquals(0.0, mTestObject.waitForDoubleArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setObjectArray([{foo: 42}]);");
+ assertNull(mTestObject.waitForObjectArray());
+
+ // LIVECONNECT_COMPLIANCE: Should call toString() on object.
+ executeJavaScript("testObject.setStringArray([{foo: 42}]);");
+ assertNull(mTestObject.waitForStringArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setCustomTypeArray([{foo: 42}]);");
+ assertNull(mTestObject.waitForCustomTypeArray());
+ }
+
+ // Test passing an array of Java objects to a method which takes a Java
+ // array.
+ @SmallTest
+ @Feature({"Android-WebView", "Android-JavaBridge"})
+ public void testPassJavaObject() throws Throwable {
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setBooleanArray([testObject.getObjectInstance()]);");
+ assertFalse(mTestObject.waitForBooleanArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setByteArray([testObject.getObjectInstance()]);");
+ assertEquals(0, mTestObject.waitForByteArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setCharArray([testObject.getObjectInstance()]);");
+ assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setShortArray([testObject.getObjectInstance()]);");
+ assertEquals(0, mTestObject.waitForShortArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setIntArray([testObject.getObjectInstance()]);");
+ assertEquals(0, mTestObject.waitForIntArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setLongArray([testObject.getObjectInstance()]);");
+ assertEquals(0L, mTestObject.waitForLongArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setFloatArray([testObject.getObjectInstance()]);");
+ assertEquals(0.0f, mTestObject.waitForFloatArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
+ executeJavaScript("testObject.setDoubleArray([testObject.getObjectInstance()]);");
+ assertEquals(0.0, mTestObject.waitForDoubleArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should create an array and pass Java object.
+ executeJavaScript("testObject.setObjectArray([testObject.getObjectInstance()]);");
+ assertNull(mTestObject.waitForObjectArray());
+
+ // LIVECONNECT_COMPLIANCE: Should call toString() on object.
+ executeJavaScript("testObject.setStringArray([testObject.getObjectInstance()]);");
+ assertNull(mTestObject.waitForStringArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should create array and pass Java object.
+ executeJavaScript("testObject.setCustomTypeArray([testObject.getObjectInstance()]);");
+ assertNull(mTestObject.waitForCustomTypeArray());
+ executeJavaScript("testObject.setCustomTypeArray([testObject.getCustomTypeInstance()]);");
+ assertNull(mTestObject.waitForCustomTypeArray());
+ }
+
+ // Test passing an array of JavaScript null values to a method which takes
+ // a Java array.
+ @SmallTest
+ @Feature({"Android-WebView", "Android-JavaBridge"})
+ public void testPassNull() throws Throwable {
+ executeJavaScript("testObject.setByteArray([null]);");
+ assertEquals(0, mTestObject.waitForByteArray()[0]);
+
+ executeJavaScript("testObject.setCharArray([null]);");
+ assertEquals('\u0000', mTestObject.waitForCharArray()[0]);
+
+ executeJavaScript("testObject.setShortArray([null]);");
+ assertEquals(0, mTestObject.waitForShortArray()[0]);
+
+ executeJavaScript("testObject.setIntArray([null]);");
+ assertEquals(0, mTestObject.waitForIntArray()[0]);
+
+ executeJavaScript("testObject.setLongArray([null]);");
+ assertEquals(0L, mTestObject.waitForLongArray()[0]);
+
+ executeJavaScript("testObject.setFloatArray([null]);");
+ assertEquals(0.0f, mTestObject.waitForFloatArray()[0]);
+
+ executeJavaScript("testObject.setDoubleArray([null]);");
+ assertEquals(0.0, mTestObject.waitForDoubleArray()[0]);
+
+ executeJavaScript("testObject.setBooleanArray([null]);");
+ assertFalse(mTestObject.waitForBooleanArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should create array and pass null.
+ executeJavaScript("testObject.setObjectArray([null]);");
+ assertNull(mTestObject.waitForObjectArray());
+
+ executeJavaScript("testObject.setStringArray([null]);");
+ assertNull(mTestObject.waitForStringArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should create array and pass null.
+ executeJavaScript("testObject.setCustomTypeArray([null]);");
+ assertNull(mTestObject.waitForCustomTypeArray());
+ }
+
+ // Test passing an array of JavaScript undefined values to a method which
+ // takes a Java array.
+ @SmallTest
+ @Feature({"Android-WebView", "Android-JavaBridge"})
+ public void testPassUndefined() throws Throwable {
+ executeJavaScript("testObject.setByteArray([undefined]);");
+ assertEquals(0, mTestObject.waitForByteArray()[0]);
+
+ executeJavaScript("testObject.setCharArray([undefined]);");
+ assertEquals(0, mTestObject.waitForCharArray()[0]);
+
+ executeJavaScript("testObject.setShortArray([undefined]);");
+ assertEquals(0, mTestObject.waitForShortArray()[0]);
+
+ executeJavaScript("testObject.setIntArray([undefined]);");
+ assertEquals(0, mTestObject.waitForIntArray()[0]);
+
+ executeJavaScript("testObject.setLongArray([undefined]);");
+ assertEquals(0L, mTestObject.waitForLongArray()[0]);
+
+ executeJavaScript("testObject.setFloatArray([undefined]);");
+ assertEquals(0.0f, mTestObject.waitForFloatArray()[0]);
+
+ executeJavaScript("testObject.setDoubleArray([undefined]);");
+ assertEquals(0.0, mTestObject.waitForDoubleArray()[0]);
+
+ executeJavaScript("testObject.setBooleanArray([undefined]);");
+ assertEquals(false, mTestObject.waitForBooleanArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should create array and pass null.
+ executeJavaScript("testObject.setObjectArray([undefined]);");
+ assertNull(mTestObject.waitForObjectArray());
+
+ executeJavaScript("testObject.setStringArray([undefined]);");
+ assertNull(mTestObject.waitForStringArray()[0]);
+
+ // LIVECONNECT_COMPLIANCE: Should create array and pass null.
+ executeJavaScript("testObject.setCustomTypeArray([undefined]);");
+ assertNull(mTestObject.waitForCustomTypeArray());
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698