/* @SmallTest @Feature({"Android-WebView", "Android-JavaBridge"}) Bug: http://code.google.com/p/chromium/issues/detail?id=145881 */ @DisabledTest public void testPassNumberDouble() throws Throwable { executeJavaScript("testObject.setByteValue(42.1);"); assertEquals(42, mTestObject.waitForByteValue()); executeJavaScript("testObject.setByteValue(" + Byte.MAX_VALUE + " + 42.1);"); assertEquals(Byte.MIN_VALUE + 42 - 1, mTestObject.waitForByteValue()); executeJavaScript("testObject.setByteValue(" + Integer.MAX_VALUE + " + 42.1);"); assertEquals(-1, mTestObject.waitForByteValue()); // LIVECONNECT_COMPLIANCE: Should convert to numeric char value. executeJavaScript("testObject.setCharValue(42.1);"); assertEquals('\u0000', mTestObject.waitForCharValue()); executeJavaScript("testObject.setShortValue(42.1);"); assertEquals(42, mTestObject.waitForShortValue()); executeJavaScript("testObject.setShortValue(" + Short.MAX_VALUE + " + 42.1);"); assertEquals(Short.MIN_VALUE + 42 - 1, mTestObject.waitForShortValue()); executeJavaScript("testObject.setShortValue(" + Integer.MAX_VALUE + " + 42.1);"); assertEquals(-1, mTestObject.waitForShortValue()); executeJavaScript("testObject.setIntValue(42.1);"); assertEquals(42, mTestObject.waitForIntValue()); executeJavaScript("testObject.setIntValue(" + Integer.MAX_VALUE + " + 42.1);"); assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntValue()); executeJavaScript("testObject.setLongValue(42.1);"); 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()); executeJavaScript("testObject.setFloatValue(42.1);"); assertEquals(42.1f, mTestObject.waitForFloatValue()); executeJavaScript("testObject.setDoubleValue(42.1);"); assertEquals(42.1, mTestObject.waitForDoubleValue()); // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number. executeJavaScript("testObject.setObjectValue(42.1);"); assertNull(mTestObject.waitForObjectValue()); executeJavaScript("testObject.setStringValue(42.1);"); assertEquals("42.1", mTestObject.waitForStringValue()); executeJavaScript("testObject.setBooleanValue(0.0);"); assertFalse(mTestObject.waitForBooleanValue()); // LIVECONNECT_COMPLIANCE: Should be true. executeJavaScript("testObject.setBooleanValue(42.1);"); assertFalse(mTestObject.waitForBooleanValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setCustomTypeValue(42.1);"); assertNull(mTestObject.waitForCustomTypeValue()); }
// Test passing a JavaScript number in the int32 range to a method of an // injected object. @SmallTest @Feature({"Android-WebView", "Android-JavaBridge"}) public void testPassNumberInt32() throws Throwable { executeJavaScript("testObject.setByteValue(42);"); assertEquals(42, mTestObject.waitForByteValue()); executeJavaScript("testObject.setByteValue(" + Byte.MAX_VALUE + " + 42);"); assertEquals(Byte.MIN_VALUE + 42 - 1, mTestObject.waitForByteValue()); // LIVECONNECT_COMPLIANCE: Should convert to numeric char value. executeJavaScript("testObject.setCharValue(42);"); assertEquals('\u0000', mTestObject.waitForCharValue()); executeJavaScript("testObject.setShortValue(42);"); assertEquals(42, mTestObject.waitForShortValue()); executeJavaScript("testObject.setShortValue(" + Short.MAX_VALUE + " + 42);"); assertEquals(Short.MIN_VALUE + 42 - 1, mTestObject.waitForShortValue()); executeJavaScript("testObject.setIntValue(42);"); assertEquals(42, mTestObject.waitForIntValue()); executeJavaScript("testObject.setLongValue(42);"); assertEquals(42L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setFloatValue(42);"); assertEquals(42.0f, mTestObject.waitForFloatValue()); executeJavaScript("testObject.setDoubleValue(42);"); assertEquals(42.0, mTestObject.waitForDoubleValue()); // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number. executeJavaScript("testObject.setObjectValue(42);"); assertNull(mTestObject.waitForObjectValue()); // The spec allows the JS engine flexibility in how to format the number. executeJavaScript("testObject.setStringValue(42);"); String str = mTestObject.waitForStringValue(); assertTrue("42".equals(str) || "42.0".equals(str)); executeJavaScript("testObject.setBooleanValue(0);"); assertFalse(mTestObject.waitForBooleanValue()); // LIVECONNECT_COMPLIANCE: Should be true; executeJavaScript("testObject.setBooleanValue(42);"); assertFalse(mTestObject.waitForBooleanValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setCustomTypeValue(42);"); assertNull(mTestObject.waitForCustomTypeValue()); }
// Test passing a Java object to a method of an injected object. Note that // this test requires being able to return objects from the methods of // injected objects. This is tested elsewhere. @SmallTest @Feature({"Android-WebView", "Android-JavaBridge"}) public void testPassJavaObject() throws Throwable { executeJavaScript("testObject.setObjectValue(testObject.getObjectInstance());"); assertTrue(mTestObject.getObjectInstance() == mTestObject.waitForObjectValue()); executeJavaScript("testObject.setObjectValue(testObject.getCustomTypeInstance());"); assertTrue(mTestObject.getCustomTypeInstance() == mTestObject.waitForObjectValue()); executeJavaScript("testObject.setCustomTypeValue(testObject.getObjectInstance());"); assertTrue(mTestObject.getObjectInstance() == mTestObject.waitForCustomTypeValue()); executeJavaScript("testObject.setCustomTypeValue(testObject.getCustomTypeInstance());"); assertTrue(mTestObject.getCustomTypeInstance() == mTestObject.waitForCustomTypeValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception, as the types are unrelated. executeJavaScript("testObject.setCustomTypeValue(testObject.getCustomType2Instance());"); assertTrue( mTestObject.getCustomType2Instance() == (Object) mTestObject.waitForCustomTypeValue()); // LIVECONNECT_COMPLIANCE: Should call toString() on object. executeJavaScript("testObject.setStringValue(testObject.getObjectInstance());"); assertEquals("undefined", mTestObject.waitForStringValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setByteValue(testObject.getObjectInstance());"); assertEquals(0, mTestObject.waitForByteValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setCharValue(testObject.getObjectInstance());"); assertEquals('\u0000', mTestObject.waitForCharValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setShortValue(testObject.getObjectInstance());"); assertEquals(0, mTestObject.waitForShortValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setIntValue(testObject.getObjectInstance());"); assertEquals(0, mTestObject.waitForIntValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setLongValue(testObject.getObjectInstance());"); assertEquals(0L, mTestObject.waitForLongValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setFloatValue(testObject.getObjectInstance());"); assertEquals(0.0f, mTestObject.waitForFloatValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setDoubleValue(testObject.getObjectInstance());"); assertEquals(0.0, mTestObject.waitForDoubleValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setBooleanValue(testObject.getObjectInstance());"); assertFalse(mTestObject.waitForBooleanValue()); }
// Test passing a JavaScript string to a method of an injected object. @SmallTest @Feature({"Android-WebView", "Android-JavaBridge"}) public void testPassString() throws Throwable { executeJavaScript("testObject.setStringValue(\"+042.10\");"); assertEquals("+042.10", mTestObject.waitForStringValue()); // Make sure that we distinguish between the empty string and NULL. executeJavaScript("testObject.setStringValue(\"\");"); assertEquals("", mTestObject.waitForStringValue()); // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.String. executeJavaScript("testObject.setObjectValue(\"+042.10\");"); assertNull(mTestObject.waitForObjectValue()); // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. executeJavaScript("testObject.setByteValue(\"+042.10\");"); assertEquals(0, mTestObject.waitForByteValue()); // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. executeJavaScript("testObject.setShortValue(\"+042.10\");"); assertEquals(0, mTestObject.waitForShortValue()); // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. executeJavaScript("testObject.setIntValue(\"+042.10\");"); assertEquals(0, mTestObject.waitForIntValue()); // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. executeJavaScript("testObject.setLongValue(\"+042.10\");"); assertEquals(0L, mTestObject.waitForLongValue()); // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. executeJavaScript("testObject.setFloatValue(\"+042.10\");"); assertEquals(0.0f, mTestObject.waitForFloatValue()); // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. executeJavaScript("testObject.setDoubleValue(\"+042.10\");"); assertEquals(0.0, mTestObject.waitForDoubleValue()); // LIVECONNECT_COMPLIANCE: Should decode and convert to numeric char value. 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()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setCustomTypeValue(\"+042.10\");"); assertNull(mTestObject.waitForCustomTypeValue()); }
/* @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.setByteValue(Infinity);"); assertEquals(-1, mTestObject.waitForByteValue()); // LIVECONNECT_COMPLIANCE: Should convert to maximum numeric char value. executeJavaScript("testObject.setCharValue(Infinity);"); assertEquals('\u0000', mTestObject.waitForCharValue()); executeJavaScript("testObject.setShortValue(Infinity);"); assertEquals(-1, mTestObject.waitForShortValue()); executeJavaScript("testObject.setIntValue(Infinity);"); assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntValue()); // LIVECONNECT_COMPLIANCE: Should be Long.MAX_VALUE. executeJavaScript("testObject.setLongValue(Infinity);"); assertEquals(-1L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setFloatValue(Infinity);"); assertEquals(Float.POSITIVE_INFINITY, mTestObject.waitForFloatValue()); executeJavaScript("testObject.setDoubleValue(Infinity);"); assertEquals(Double.POSITIVE_INFINITY, mTestObject.waitForDoubleValue()); // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number. executeJavaScript("testObject.setObjectValue(Infinity);"); assertNull(mTestObject.waitForObjectValue()); executeJavaScript("testObject.setStringValue(Infinity);"); assertEquals("Inf", mTestObject.waitForStringValue()); executeJavaScript("testObject.setBooleanValue(Infinity);"); assertFalse(mTestObject.waitForBooleanValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setCustomTypeValue(Infinity);"); assertNull(mTestObject.waitForCustomTypeValue()); }
// Test passing JavaScript undefined to a method of an injected object. @SmallTest @Feature({"Android-WebView", "Android-JavaBridge"}) public void testPassUndefined() throws Throwable { executeJavaScript("testObject.setObjectValue(undefined);"); assertNull(mTestObject.waitForObjectValue()); executeJavaScript("testObject.setCustomTypeValue(undefined);"); assertNull(mTestObject.waitForCustomTypeValue()); // LIVECONNECT_COMPLIANCE: Should be NULL. executeJavaScript("testObject.setStringValue(undefined);"); assertEquals("undefined", mTestObject.waitForStringValue()); executeJavaScript("testObject.setByteValue(undefined);"); assertEquals(0, mTestObject.waitForByteValue()); executeJavaScript("testObject.setCharValue(undefined);"); assertEquals('\u0000', mTestObject.waitForCharValue()); executeJavaScript("testObject.setShortValue(undefined);"); assertEquals(0, mTestObject.waitForShortValue()); executeJavaScript("testObject.setIntValue(undefined);"); assertEquals(0, mTestObject.waitForIntValue()); executeJavaScript("testObject.setLongValue(undefined);"); assertEquals(0L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setFloatValue(undefined);"); assertEquals(0.0f, mTestObject.waitForFloatValue()); executeJavaScript("testObject.setDoubleValue(undefined);"); assertEquals(0.0, mTestObject.waitForDoubleValue()); executeJavaScript("testObject.setBooleanValue(undefined);"); assertFalse(mTestObject.waitForBooleanValue()); }
/* @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.setByteValue(Number.NaN);"); assertEquals(0, mTestObject.waitForByteValue()); executeJavaScript("testObject.setCharValue(Number.NaN);"); assertEquals('\u0000', mTestObject.waitForCharValue()); executeJavaScript("testObject.setShortValue(Number.NaN);"); assertEquals(0, mTestObject.waitForShortValue()); executeJavaScript("testObject.setIntValue(Number.NaN);"); assertEquals(0, mTestObject.waitForIntValue()); executeJavaScript("testObject.setLongValue(Number.NaN);"); assertEquals(0L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setFloatValue(Number.NaN);"); assertEquals(Float.NaN, mTestObject.waitForFloatValue()); executeJavaScript("testObject.setDoubleValue(Number.NaN);"); assertEquals(Double.NaN, mTestObject.waitForDoubleValue()); // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number. executeJavaScript("testObject.setObjectValue(Number.NaN);"); assertNull(mTestObject.waitForObjectValue()); executeJavaScript("testObject.setStringValue(Number.NaN);"); assertEquals("NaN", mTestObject.waitForStringValue()); executeJavaScript("testObject.setBooleanValue(Number.NaN);"); assertFalse(mTestObject.waitForBooleanValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setCustomTypeValue(Number.NaN);"); assertNull(mTestObject.waitForCustomTypeValue()); }
// Test passing JavaScript null to a method of an injected object. @SmallTest @Feature({"Android-WebView", "Android-JavaBridge"}) public void testPassNull() throws Throwable { executeJavaScript("testObject.setObjectValue(null);"); assertNull(mTestObject.waitForObjectValue()); executeJavaScript("testObject.setCustomTypeValue(null);"); assertNull(mTestObject.waitForCustomTypeValue()); executeJavaScript("testObject.setStringValue(null);"); assertNull(mTestObject.waitForStringValue()); executeJavaScript("testObject.setByteValue(null);"); assertEquals(0, mTestObject.waitForByteValue()); executeJavaScript("testObject.setCharValue(null);"); assertEquals('\u0000', mTestObject.waitForCharValue()); executeJavaScript("testObject.setShortValue(null);"); assertEquals(0, mTestObject.waitForShortValue()); executeJavaScript("testObject.setIntValue(null);"); assertEquals(0, mTestObject.waitForIntValue()); executeJavaScript("testObject.setLongValue(null);"); assertEquals(0L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setFloatValue(null);"); assertEquals(0.0f, mTestObject.waitForFloatValue()); executeJavaScript("testObject.setDoubleValue(null);"); assertEquals(0.0, mTestObject.waitForDoubleValue()); executeJavaScript("testObject.setBooleanValue(null);"); assertFalse(mTestObject.waitForBooleanValue()); }
// Test passing a JavaScript boolean to a method of an injected object. @SmallTest @Feature({"Android-WebView", "Android-JavaBridge"}) public void testPassBoolean() throws Throwable { executeJavaScript("testObject.setBooleanValue(true);"); assertTrue(mTestObject.waitForBooleanValue()); executeJavaScript("testObject.setBooleanValue(false);"); assertFalse(mTestObject.waitForBooleanValue()); // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Boolean. executeJavaScript("testObject.setObjectValue(true);"); assertNull(mTestObject.waitForObjectValue()); executeJavaScript("testObject.setStringValue(false);"); assertEquals("false", mTestObject.waitForStringValue()); executeJavaScript("testObject.setStringValue(true);"); assertEquals("true", mTestObject.waitForStringValue()); // LIVECONNECT_COMPLIANCE: Should be 1. executeJavaScript("testObject.setByteValue(true);"); assertEquals(0, mTestObject.waitForByteValue()); executeJavaScript("testObject.setByteValue(false);"); assertEquals(0, mTestObject.waitForByteValue()); // LIVECONNECT_COMPLIANCE: Should convert to numeric char value 1. executeJavaScript("testObject.setCharValue(true);"); assertEquals('\u0000', mTestObject.waitForCharValue()); executeJavaScript("testObject.setCharValue(false);"); assertEquals('\u0000', mTestObject.waitForCharValue()); // LIVECONNECT_COMPLIANCE: Should be 1. executeJavaScript("testObject.setShortValue(true);"); assertEquals(0, mTestObject.waitForShortValue()); executeJavaScript("testObject.setShortValue(false);"); assertEquals(0, mTestObject.waitForShortValue()); // LIVECONNECT_COMPLIANCE: Should be 1. executeJavaScript("testObject.setIntValue(true);"); assertEquals(0, mTestObject.waitForIntValue()); executeJavaScript("testObject.setIntValue(false);"); assertEquals(0, mTestObject.waitForIntValue()); // LIVECONNECT_COMPLIANCE: Should be 1. executeJavaScript("testObject.setLongValue(true);"); assertEquals(0L, mTestObject.waitForLongValue()); executeJavaScript("testObject.setLongValue(false);"); assertEquals(0L, mTestObject.waitForLongValue()); // LIVECONNECT_COMPLIANCE: Should be 1.0. executeJavaScript("testObject.setFloatValue(true);"); assertEquals(0.0f, mTestObject.waitForFloatValue()); executeJavaScript("testObject.setFloatValue(false);"); assertEquals(0.0f, mTestObject.waitForFloatValue()); // LIVECONNECT_COMPLIANCE: Should be 1.0. executeJavaScript("testObject.setDoubleValue(true);"); assertEquals(0.0, mTestObject.waitForDoubleValue()); executeJavaScript("testObject.setDoubleValue(false);"); assertEquals(0.0, mTestObject.waitForDoubleValue()); // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. executeJavaScript("testObject.setCustomTypeValue(true);"); assertNull(mTestObject.waitForCustomTypeValue()); }