Loading tests/WebViewTests/src/com/android/webviewtests/JavaBridgeArrayCoercionTest.java 0 → 100644 +625 −0 File added.Preview size limit exceeded, changes collapsed. Show changes tests/WebViewTests/src/com/android/webviewtests/JavaBridgeArrayTest.java 0 → 100644 +177 −0 Original line number Diff line number Diff line /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Part of the test suite for the WebView's Java Bridge. This class tests the * general use of arrays. * * 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. * * To run this test ... * adb shell am instrument -w -e class com.android.webviewtests.JavaBridgeArrayTest \ * com.android.webviewtests/android.test.InstrumentationTestRunner */ package com.android.webviewtests; public class JavaBridgeArrayTest extends JavaBridgeTestBase { private class TestObject extends Controller { private boolean mBooleanValue; private int mIntValue; private String mStringValue; private int[] mIntArray; public synchronized void setBooleanValue(boolean x) { mBooleanValue = x; notifyResultIsReady(); } public synchronized void setIntValue(int x) { mIntValue = x; notifyResultIsReady(); } public synchronized void setStringValue(String x) { mStringValue = x; notifyResultIsReady(); } public synchronized boolean waitForBooleanValue() { waitForResult(); return mBooleanValue; } public synchronized int waitForIntValue() { waitForResult(); return mIntValue; } public synchronized String waitForStringValue() { waitForResult(); return mStringValue; } public synchronized void setIntArray(int[] x) { mIntArray = x; notifyResultIsReady(); } public synchronized int[] waitForIntArray() { waitForResult(); return mIntArray; } public int[] getIntArray() { return new int[] {42, 43, 44}; } public int[] getEmptyIntArray() { return new int[] {}; } } private TestObject mTestObject; @Override protected void setUp() throws Exception { super.setUp(); mTestObject = new TestObject(); setUpWebView(mTestObject, "testObject"); } public void testArrayLength() throws Throwable { executeJavaScript("testObject.setIntArray([42, 43, 44]);"); int[] result = mTestObject.waitForIntArray(); assertEquals(3, result.length); assertEquals(42, result[0]); assertEquals(43, result[1]); assertEquals(44, result[2]); } public void testPassNull() throws Throwable { executeJavaScript("testObject.setIntArray(null);"); assertNull(mTestObject.waitForIntArray()); } public void testPassUndefined() throws Throwable { executeJavaScript("testObject.setIntArray(undefined);"); assertNull(mTestObject.waitForIntArray()); } public void testPassEmptyArray() throws Throwable { executeJavaScript("testObject.setIntArray([]);"); assertEquals(0, mTestObject.waitForIntArray().length); } // Note that this requires being able to pass a string from JavaScript to // Java. public void testPassArrayToStringMethod() throws Throwable { // LIVECONNECT_COMPLIANCE: Should call toString() on array. executeJavaScript("testObject.setStringValue([42, 42, 42]);"); assertEquals("undefined", mTestObject.waitForStringValue()); } // Note that this requires being able to pass an integer from JavaScript to // Java. public void testPassArrayToNonStringNonArrayMethod() throws Throwable { // LIVECONNECT_COMPLIANCE: Should raise JavaScript exception. executeJavaScript("testObject.setIntValue([42, 42, 42]);"); assertEquals(0, mTestObject.waitForIntValue()); } public void testPassNonArrayToArrayMethod() throws Throwable { // LIVECONNECT_COMPLIANCE: Should raise JavaScript exception. executeJavaScript("testObject.setIntArray(42);"); assertNull(mTestObject.waitForIntArray()); } public void testObjectWithLengthProperty() throws Throwable { executeJavaScript("testObject.setIntArray({length: 3, 1: 42});"); int[] result = mTestObject.waitForIntArray(); assertEquals(3, result.length); assertEquals(0, result[0]); assertEquals(42, result[1]); assertEquals(0, result[2]); } public void testSparseArray() throws Throwable { executeJavaScript("var x = [42, 43]; x[3] = 45; testObject.setIntArray(x);"); int[] result = mTestObject.waitForIntArray(); assertEquals(4, result.length); assertEquals(42, result[0]); assertEquals(43, result[1]); assertEquals(0, result[2]); assertEquals(45, result[3]); } // 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())"); assertTrue(mTestObject.waitForBooleanValue()); } // 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()); } } tests/WebViewTests/src/com/android/webviewtests/JavaBridgeCoercionTest.java +12 −11 Original line number Diff line number Diff line Loading @@ -197,7 +197,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { assertEquals(42, mTestObject.waitForIntValue()); executeJavaScript("testObject.setLongValue(42);"); assertEquals(42, mTestObject.waitForLongValue()); assertEquals(42L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setFloatValue(42);"); assertEquals(42.0f, mTestObject.waitForFloatValue()); Loading Loading @@ -252,7 +252,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntValue()); executeJavaScript("testObject.setLongValue(42.1);"); assertEquals(42, mTestObject.waitForLongValue()); assertEquals(42L, mTestObject.waitForLongValue()); // LIVECONNECT_COMPLIANCE: Should be Long.MAX_VALUE. executeJavaScript("testObject.setLongValue(" + Long.MAX_VALUE + " + 42.1);"); assertEquals(Long.MIN_VALUE, mTestObject.waitForLongValue()); Loading Loading @@ -296,7 +296,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { assertEquals(0, mTestObject.waitForIntValue()); executeJavaScript("testObject.setLongValue(Number.NaN);"); assertEquals(0, mTestObject.waitForLongValue()); assertEquals(0L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setFloatValue(Number.NaN);"); assertEquals(Float.NaN, mTestObject.waitForFloatValue()); Loading Loading @@ -336,7 +336,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { // LIVECONNECT_COMPLIANCE: Should be Long.MAX_VALUE. executeJavaScript("testObject.setLongValue(Infinity);"); assertEquals(-1, mTestObject.waitForLongValue()); assertEquals(-1L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setFloatValue(Infinity);"); assertEquals(Float.POSITIVE_INFINITY, mTestObject.waitForFloatValue()); Loading Loading @@ -401,9 +401,9 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { // LIVECONNECT_COMPLIANCE: Should be 1. executeJavaScript("testObject.setLongValue(true);"); assertEquals(0, mTestObject.waitForLongValue()); assertEquals(0L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setLongValue(false);"); assertEquals(0, mTestObject.waitForLongValue()); assertEquals(0L, mTestObject.waitForLongValue()); // LIVECONNECT_COMPLIANCE: Should be 1.0. executeJavaScript("testObject.setFloatValue(true);"); Loading Loading @@ -449,7 +449,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. executeJavaScript("testObject.setLongValue(\"+042.10\");"); assertEquals(0, mTestObject.waitForLongValue()); assertEquals(0L, mTestObject.waitForLongValue()); // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. executeJavaScript("testObject.setFloatValue(\"+042.10\");"); Loading @@ -463,6 +463,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { executeJavaScript("testObject.setCharValue(\"+042.10\");"); assertEquals('\u0000', mTestObject.waitForCharValue()); // LIVECONNECT_COMPLIANCE: Non-empty string should convert to true. executeJavaScript("testObject.setBooleanValue(\"+042.10\");"); assertFalse(mTestObject.waitForBooleanValue()); Loading Loading @@ -505,7 +506,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setLongValue({foo: 42});"); assertEquals(0, mTestObject.waitForLongValue()); assertEquals(0L, mTestObject.waitForLongValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setFloatValue({foo: 42});"); Loading Loading @@ -560,7 +561,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setLongValue(testObject.getObjectInstance());"); assertEquals(0, mTestObject.waitForLongValue()); assertEquals(0L, mTestObject.waitForLongValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setFloatValue(testObject.getObjectInstance());"); Loading Loading @@ -599,7 +600,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { assertEquals(0, mTestObject.waitForIntValue()); executeJavaScript("testObject.setLongValue(null);"); assertEquals(0, mTestObject.waitForLongValue()); assertEquals(0L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setFloatValue(null);"); assertEquals(0.0f, mTestObject.waitForFloatValue()); Loading Loading @@ -636,7 +637,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { assertEquals(0, mTestObject.waitForIntValue()); executeJavaScript("testObject.setLongValue(undefined);"); assertEquals(0, mTestObject.waitForLongValue()); assertEquals(0L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setFloatValue(undefined);"); assertEquals(0.0f, mTestObject.waitForFloatValue()); Loading tests/WebViewTests/src/com/android/webviewtests/JavaBridgeTestBase.java +1 −1 Original line number Diff line number Diff line Loading @@ -93,7 +93,7 @@ public class JavaBridgeTestBase extends ActivityInstrumentationTestCase2<WebView webView.addJavascriptInterface(object, name); webView.getSettings().setJavaScriptEnabled(true); webView.setWebViewClient(mWebViewClient); webView.loadData("<html><head></head><body></body></html>", "text/html", null); webView.loadData("<!DOCTYPE html><title></title>", "text/html", null); } }); mWebViewClient.waitForOnPageFinished(); Loading Loading
tests/WebViewTests/src/com/android/webviewtests/JavaBridgeArrayCoercionTest.java 0 → 100644 +625 −0 File added.Preview size limit exceeded, changes collapsed. Show changes
tests/WebViewTests/src/com/android/webviewtests/JavaBridgeArrayTest.java 0 → 100644 +177 −0 Original line number Diff line number Diff line /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Part of the test suite for the WebView's Java Bridge. This class tests the * general use of arrays. * * 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. * * To run this test ... * adb shell am instrument -w -e class com.android.webviewtests.JavaBridgeArrayTest \ * com.android.webviewtests/android.test.InstrumentationTestRunner */ package com.android.webviewtests; public class JavaBridgeArrayTest extends JavaBridgeTestBase { private class TestObject extends Controller { private boolean mBooleanValue; private int mIntValue; private String mStringValue; private int[] mIntArray; public synchronized void setBooleanValue(boolean x) { mBooleanValue = x; notifyResultIsReady(); } public synchronized void setIntValue(int x) { mIntValue = x; notifyResultIsReady(); } public synchronized void setStringValue(String x) { mStringValue = x; notifyResultIsReady(); } public synchronized boolean waitForBooleanValue() { waitForResult(); return mBooleanValue; } public synchronized int waitForIntValue() { waitForResult(); return mIntValue; } public synchronized String waitForStringValue() { waitForResult(); return mStringValue; } public synchronized void setIntArray(int[] x) { mIntArray = x; notifyResultIsReady(); } public synchronized int[] waitForIntArray() { waitForResult(); return mIntArray; } public int[] getIntArray() { return new int[] {42, 43, 44}; } public int[] getEmptyIntArray() { return new int[] {}; } } private TestObject mTestObject; @Override protected void setUp() throws Exception { super.setUp(); mTestObject = new TestObject(); setUpWebView(mTestObject, "testObject"); } public void testArrayLength() throws Throwable { executeJavaScript("testObject.setIntArray([42, 43, 44]);"); int[] result = mTestObject.waitForIntArray(); assertEquals(3, result.length); assertEquals(42, result[0]); assertEquals(43, result[1]); assertEquals(44, result[2]); } public void testPassNull() throws Throwable { executeJavaScript("testObject.setIntArray(null);"); assertNull(mTestObject.waitForIntArray()); } public void testPassUndefined() throws Throwable { executeJavaScript("testObject.setIntArray(undefined);"); assertNull(mTestObject.waitForIntArray()); } public void testPassEmptyArray() throws Throwable { executeJavaScript("testObject.setIntArray([]);"); assertEquals(0, mTestObject.waitForIntArray().length); } // Note that this requires being able to pass a string from JavaScript to // Java. public void testPassArrayToStringMethod() throws Throwable { // LIVECONNECT_COMPLIANCE: Should call toString() on array. executeJavaScript("testObject.setStringValue([42, 42, 42]);"); assertEquals("undefined", mTestObject.waitForStringValue()); } // Note that this requires being able to pass an integer from JavaScript to // Java. public void testPassArrayToNonStringNonArrayMethod() throws Throwable { // LIVECONNECT_COMPLIANCE: Should raise JavaScript exception. executeJavaScript("testObject.setIntValue([42, 42, 42]);"); assertEquals(0, mTestObject.waitForIntValue()); } public void testPassNonArrayToArrayMethod() throws Throwable { // LIVECONNECT_COMPLIANCE: Should raise JavaScript exception. executeJavaScript("testObject.setIntArray(42);"); assertNull(mTestObject.waitForIntArray()); } public void testObjectWithLengthProperty() throws Throwable { executeJavaScript("testObject.setIntArray({length: 3, 1: 42});"); int[] result = mTestObject.waitForIntArray(); assertEquals(3, result.length); assertEquals(0, result[0]); assertEquals(42, result[1]); assertEquals(0, result[2]); } public void testSparseArray() throws Throwable { executeJavaScript("var x = [42, 43]; x[3] = 45; testObject.setIntArray(x);"); int[] result = mTestObject.waitForIntArray(); assertEquals(4, result.length); assertEquals(42, result[0]); assertEquals(43, result[1]); assertEquals(0, result[2]); assertEquals(45, result[3]); } // 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())"); assertTrue(mTestObject.waitForBooleanValue()); } // 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()); } }
tests/WebViewTests/src/com/android/webviewtests/JavaBridgeCoercionTest.java +12 −11 Original line number Diff line number Diff line Loading @@ -197,7 +197,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { assertEquals(42, mTestObject.waitForIntValue()); executeJavaScript("testObject.setLongValue(42);"); assertEquals(42, mTestObject.waitForLongValue()); assertEquals(42L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setFloatValue(42);"); assertEquals(42.0f, mTestObject.waitForFloatValue()); Loading Loading @@ -252,7 +252,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntValue()); executeJavaScript("testObject.setLongValue(42.1);"); assertEquals(42, mTestObject.waitForLongValue()); assertEquals(42L, mTestObject.waitForLongValue()); // LIVECONNECT_COMPLIANCE: Should be Long.MAX_VALUE. executeJavaScript("testObject.setLongValue(" + Long.MAX_VALUE + " + 42.1);"); assertEquals(Long.MIN_VALUE, mTestObject.waitForLongValue()); Loading Loading @@ -296,7 +296,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { assertEquals(0, mTestObject.waitForIntValue()); executeJavaScript("testObject.setLongValue(Number.NaN);"); assertEquals(0, mTestObject.waitForLongValue()); assertEquals(0L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setFloatValue(Number.NaN);"); assertEquals(Float.NaN, mTestObject.waitForFloatValue()); Loading Loading @@ -336,7 +336,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { // LIVECONNECT_COMPLIANCE: Should be Long.MAX_VALUE. executeJavaScript("testObject.setLongValue(Infinity);"); assertEquals(-1, mTestObject.waitForLongValue()); assertEquals(-1L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setFloatValue(Infinity);"); assertEquals(Float.POSITIVE_INFINITY, mTestObject.waitForFloatValue()); Loading Loading @@ -401,9 +401,9 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { // LIVECONNECT_COMPLIANCE: Should be 1. executeJavaScript("testObject.setLongValue(true);"); assertEquals(0, mTestObject.waitForLongValue()); assertEquals(0L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setLongValue(false);"); assertEquals(0, mTestObject.waitForLongValue()); assertEquals(0L, mTestObject.waitForLongValue()); // LIVECONNECT_COMPLIANCE: Should be 1.0. executeJavaScript("testObject.setFloatValue(true);"); Loading Loading @@ -449,7 +449,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. executeJavaScript("testObject.setLongValue(\"+042.10\");"); assertEquals(0, mTestObject.waitForLongValue()); assertEquals(0L, mTestObject.waitForLongValue()); // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. executeJavaScript("testObject.setFloatValue(\"+042.10\");"); Loading @@ -463,6 +463,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { executeJavaScript("testObject.setCharValue(\"+042.10\");"); assertEquals('\u0000', mTestObject.waitForCharValue()); // LIVECONNECT_COMPLIANCE: Non-empty string should convert to true. executeJavaScript("testObject.setBooleanValue(\"+042.10\");"); assertFalse(mTestObject.waitForBooleanValue()); Loading Loading @@ -505,7 +506,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setLongValue({foo: 42});"); assertEquals(0, mTestObject.waitForLongValue()); assertEquals(0L, mTestObject.waitForLongValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setFloatValue({foo: 42});"); Loading Loading @@ -560,7 +561,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setLongValue(testObject.getObjectInstance());"); assertEquals(0, mTestObject.waitForLongValue()); assertEquals(0L, mTestObject.waitForLongValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setFloatValue(testObject.getObjectInstance());"); Loading Loading @@ -599,7 +600,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { assertEquals(0, mTestObject.waitForIntValue()); executeJavaScript("testObject.setLongValue(null);"); assertEquals(0, mTestObject.waitForLongValue()); assertEquals(0L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setFloatValue(null);"); assertEquals(0.0f, mTestObject.waitForFloatValue()); Loading Loading @@ -636,7 +637,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { assertEquals(0, mTestObject.waitForIntValue()); executeJavaScript("testObject.setLongValue(undefined);"); assertEquals(0, mTestObject.waitForLongValue()); assertEquals(0L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setFloatValue(undefined);"); assertEquals(0.0f, mTestObject.waitForFloatValue()); Loading
tests/WebViewTests/src/com/android/webviewtests/JavaBridgeTestBase.java +1 −1 Original line number Diff line number Diff line Loading @@ -93,7 +93,7 @@ public class JavaBridgeTestBase extends ActivityInstrumentationTestCase2<WebView webView.addJavascriptInterface(object, name); webView.getSettings().setJavaScriptEnabled(true); webView.setWebViewClient(mWebViewClient); webView.loadData("<html><head></head><body></body></html>", "text/html", null); webView.loadData("<!DOCTYPE html><title></title>", "text/html", null); } }); mWebViewClient.waitForOnPageFinished(); Loading