Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 862c2f52 authored by Steve Block's avatar Steve Block Committed by Android (Google) Code Review
Browse files

Merge changes I2c304952,Ic04bbd69,Ibbac2268

* changes:
  Update Java Bridge test for coercing JavaScript String to Java char in an array
  Add tests for multidimensional arrays in WebView's Java Bridge
  Fix tests for methods returning arrays in WebView's Java Bridge
parents 45047a11 286788c3
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -411,9 +411,9 @@ public class JavaBridgeArrayCoercionTest extends JavaBridgeTestBase {
        executeJavaScript("testObject.setByteArray([\"+042.10\"]);");
        assertEquals(0, mTestObject.waitForByteArray()[0]);

        // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
        // LIVECONNECT_COMPLIANCE: Should decode and convert to numeric char value.
        executeJavaScript("testObject.setCharArray([\"+042.10\"]);");
        assertEquals('+', mTestObject.waitForCharArray()[0]);
        assertEquals(0, mTestObject.waitForCharArray()[0]);

        // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
        executeJavaScript("testObject.setShortArray([\"+042.10\"]);");
+43 −13
Original line number Diff line number Diff line
@@ -39,6 +39,9 @@ public class JavaBridgeArrayTest extends JavaBridgeTestBase {
        private String mStringValue;

        private int[] mIntArray;
        private int[][] mIntIntArray;

        private boolean mWasArrayMethodCalled;

        public synchronized void setBooleanValue(boolean x) {
            mBooleanValue = x;
@@ -70,17 +73,27 @@ public class JavaBridgeArrayTest extends JavaBridgeTestBase {
            mIntArray = x;
            notifyResultIsReady();
        }
        public synchronized void setIntIntArray(int[][] x) {
            mIntIntArray = x;
            notifyResultIsReady();
        }

        public synchronized int[] waitForIntArray() {
            waitForResult();
            return mIntArray;
        }
        public synchronized int[][] waitForIntIntArray() {
            waitForResult();
            return mIntIntArray;
        }

        public int[] getIntArray() {
        public synchronized int[] arrayMethod() {
            mWasArrayMethodCalled = true;
            return new int[] {42, 43, 44};
        }
        public int[] getEmptyIntArray() {
            return new int[] {};

        public synchronized boolean wasArrayMethodCalled() {
            return mWasArrayMethodCalled;
        }
    }

@@ -148,6 +161,13 @@ public class JavaBridgeArrayTest extends JavaBridgeTestBase {
        assertEquals(0, result[2]);
    }

    public void testNonNumericLengthProperty() throws Throwable {
        // LIVECONNECT_COMPLIANCE: This should not count as an array, so we
        // should raise a JavaScript exception.
        executeJavaScript("testObject.setIntArray({length: \"foo\"});");
        assertEquals(0, mTestObject.waitForIntArray().length);
    }

    public void testSparseArray() throws Throwable {
        executeJavaScript("var x = [42, 43]; x[3] = 45; testObject.setIntArray(x);");
        int[] result = mTestObject.waitForIntArray();
@@ -160,18 +180,28 @@ public class JavaBridgeArrayTest extends JavaBridgeTestBase {

    // Note that this requires being able to pass a boolean from JavaScript to
    // Java.
    public void testReturnArray() throws Throwable {
        // LIVECONNECT_COMPLIANCE: Convert to JavaScript array.
        executeJavaScript("testObject.setBooleanValue(undefined === testObject.getIntArray())");
    public void testMethodReturningArrayNotCalled() throws Throwable {
        // We don't invoke methods which return arrays, but note that no
        // exception is raised.
        // LIVECONNECT_COMPLIANCE: Should call method and convert result to
        // JavaScript array.
        executeJavaScript("testObject.setBooleanValue(undefined === testObject.arrayMethod())");
        assertTrue(mTestObject.waitForBooleanValue());
        assertFalse(mTestObject.wasArrayMethodCalled());
    }

    // Note that this requires being able to pass a boolean from JavaScript to
    // Java.
    public void testReturnEmptyArray() throws Throwable {
        // LIVECONNECT_COMPLIANCE: Convert to JavaScript array.
        executeJavaScript(
            "testObject.setBooleanValue(undefined === testObject.getEmptyIntArray())");
        assertTrue(mTestObject.waitForBooleanValue());
    public void testMultiDimensionalArrayMethod() throws Throwable {
        // LIVECONNECT_COMPLIANCE: Should handle multi-dimensional arrays.
        executeJavaScript("testObject.setIntIntArray([ [42, 43], [44, 45] ]);");
        assertNull(mTestObject.waitForIntIntArray());
    }

    public void testPassMultiDimensionalArray() throws Throwable {
        // LIVECONNECT_COMPLIANCE: Should handle multi-dimensional arrays.
        executeJavaScript("testObject.setIntArray([ [42, 43], [44, 45] ]);");
        int[] result = mTestObject.waitForIntArray();
        assertEquals(2, result.length);
        assertEquals(0, result[0]);
        assertEquals(0, result[1]);
    }
}