| Index: content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeCoercionTest.java | 
| diff --git a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeCoercionTest.java b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeCoercionTest.java | 
| index 075eb59676079d3f554cf16976062475a62bc0c5..fcccc8969a95b21d84ede8e955c756725dc90793 100644 | 
| --- a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeCoercionTest.java | 
| +++ b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeCoercionTest.java | 
| @@ -8,7 +8,14 @@ import android.support.test.filters.SmallTest; | 
|  | 
| import dalvik.system.DexClassLoader; | 
|  | 
| +import org.junit.Assert; | 
| +import org.junit.Before; | 
| +import org.junit.Rule; | 
| +import org.junit.Test; | 
| +import org.junit.runner.RunWith; | 
| + | 
| import org.chromium.base.annotations.SuppressFBWarnings; | 
| +import org.chromium.base.test.BaseJUnit4ClassRunner; | 
| import org.chromium.base.test.util.Feature; | 
| import org.chromium.base.test.util.UrlUtils; | 
| import org.chromium.content.browser.JavaBridgeTestCommon.Controller; | 
| @@ -27,7 +34,13 @@ import java.io.File; | 
| * FIXME: Consider making our implementation more compliant, if it will not | 
| * break backwards-compatibility. See b/4408210. | 
| */ | 
| -public class JavaBridgeCoercionTest extends JavaBridgeTestBase { | 
| +@RunWith(BaseJUnit4ClassRunner.class) | 
| +public class JavaBridgeCoercionTest { | 
| +    private static final double ASSERTION_DELTA = 0; | 
| + | 
| +    @Rule | 
| +    public JavaBridgeActivityTestRule mActivityTestRule = new JavaBridgeActivityTestRule(); | 
| + | 
| @SuppressFBWarnings("CHROMIUM_SYNCHRONIZED_METHOD") | 
| private static class TestObject extends Controller { | 
| private Object mObjectInstance; | 
| @@ -179,451 +192,487 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { | 
|  | 
| // Note that this requires that we can pass a JavaScript boolean to Java. | 
| private void assertRaisesException(String script) throws Throwable { | 
| -        executeJavaScript("try {" | 
| -                + script + ";" | 
| +        mActivityTestRule.executeJavaScript("try {" + script + ";" | 
| + "  testController.setBooleanValue(false);" | 
| + "} catch (exception) {" | 
| + "  testController.setBooleanValue(true);" | 
| + "}"); | 
| -        assertTrue(mTestController.waitForBooleanValue()); | 
| +        Assert.assertTrue(mTestController.waitForBooleanValue()); | 
| } | 
|  | 
| -    @Override | 
| -    protected void setUp() throws Exception { | 
| -        super.setUp(); | 
| +    @Before | 
| +    public void setUp() throws Exception { | 
| mTestObject = new TestObject(); | 
| mTestController = new TestController(); | 
| -        injectObjectsAndReload(mTestObject, "testObject", mTestController, "testController", null); | 
| +        mActivityTestRule.injectObjectsAndReload( | 
| +                mTestObject, "testObject", mTestController, "testController", null); | 
| } | 
|  | 
| // Test passing a 32-bit integer JavaScript number to a method of an | 
| // injected object. Note that JavaScript may choose to represent these | 
| // values as either 32-bit integers or doubles, though this should not | 
| // affect the result. | 
| +    @Test | 
| @SmallTest | 
| @Feature({"AndroidWebView", "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()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setByteValue(42);"); | 
| +        Assert.assertEquals(42, mTestObject.waitForByteValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setByteValue(" + Byte.MAX_VALUE + " + 42);"); | 
| +        Assert.assertEquals(Byte.MIN_VALUE + 42 - 1, mTestObject.waitForByteValue()); | 
|  | 
| -        executeJavaScript("testObject.setCharValue(42);"); | 
| -        assertEquals(42, mTestObject.waitForCharValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCharValue(42);"); | 
| +        Assert.assertEquals(42, 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()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setShortValue(42);"); | 
| +        Assert.assertEquals(42, mTestObject.waitForShortValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setShortValue(" + Short.MAX_VALUE + " + 42);"); | 
| +        Assert.assertEquals(Short.MIN_VALUE + 42 - 1, mTestObject.waitForShortValue()); | 
|  | 
| -        executeJavaScript("testObject.setIntValue(42);"); | 
| -        assertEquals(42, mTestObject.waitForIntValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setIntValue(42);"); | 
| +        Assert.assertEquals(42, mTestObject.waitForIntValue()); | 
|  | 
| -        executeJavaScript("testObject.setLongValue(42);"); | 
| -        assertEquals(42L, mTestObject.waitForLongValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setLongValue(42);"); | 
| +        Assert.assertEquals(42L, mTestObject.waitForLongValue()); | 
|  | 
| -        executeJavaScript("testObject.setFloatValue(42);"); | 
| -        assertEquals(42.0f, mTestObject.waitForFloatValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setFloatValue(42);"); | 
| +        Assert.assertEquals(42.0f, mTestObject.waitForFloatValue(), ASSERTION_DELTA); | 
|  | 
| -        executeJavaScript("testObject.setDoubleValue(42);"); | 
| -        assertEquals(42.0, mTestObject.waitForDoubleValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setDoubleValue(42);"); | 
| +        Assert.assertEquals(42.0, mTestObject.waitForDoubleValue(), ASSERTION_DELTA); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number. | 
| -        executeJavaScript("testObject.setObjectValue(42);"); | 
| -        assertNull(mTestObject.waitForObjectValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setObjectValue(42);"); | 
| +        Assert.assertNull(mTestObject.waitForObjectValue()); | 
|  | 
| // The spec allows the JS engine flexibility in how to format the number. | 
| -        executeJavaScript("testObject.setStringValue(42);"); | 
| +        mActivityTestRule.executeJavaScript("testObject.setStringValue(42);"); | 
| String str = mTestObject.waitForStringValue(); | 
| -        assertTrue("42".equals(str) || "42.0".equals(str)); | 
| +        Assert.assertTrue("42".equals(str) || "42.0".equals(str)); | 
|  | 
| -        executeJavaScript("testObject.setBooleanValue(0);"); | 
| -        assertFalse(mTestObject.waitForBooleanValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setBooleanValue(0);"); | 
| +        Assert.assertFalse(mTestObject.waitForBooleanValue()); | 
| // LIVECONNECT_COMPLIANCE: Should be true; | 
| -        executeJavaScript("testObject.setBooleanValue(42);"); | 
| -        assertFalse(mTestObject.waitForBooleanValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setBooleanValue(42);"); | 
| +        Assert.assertFalse(mTestObject.waitForBooleanValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setCustomTypeValue(42);"); | 
| -        assertNull(mTestObject.waitForCustomTypeValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue(42);"); | 
| +        Assert.assertNull(mTestObject.waitForCustomTypeValue()); | 
| } | 
|  | 
| // Test passing a floating-point JavaScript number to a method of an | 
| // injected object. JavaScript represents these values as doubles. | 
| +    @Test | 
| @SmallTest | 
| @Feature({"AndroidWebView", "Android-JavaBridge"}) | 
| 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(" + Byte.MIN_VALUE + " - 42.1);"); | 
| -        assertEquals(Byte.MAX_VALUE - 42 + 1, mTestObject.waitForByteValue()); | 
| -        executeJavaScript("testObject.setByteValue(" + Integer.MAX_VALUE + " + 42.1);"); | 
| -        assertEquals(-1, mTestObject.waitForByteValue()); | 
| -        executeJavaScript("testObject.setByteValue(" + Integer.MIN_VALUE + " - 42.1);"); | 
| -        assertEquals(0, mTestObject.waitForByteValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setByteValue(42.1);"); | 
| +        Assert.assertEquals(42, mTestObject.waitForByteValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setByteValue(" + Byte.MAX_VALUE + " + 42.1);"); | 
| +        Assert.assertEquals(Byte.MIN_VALUE + 42 - 1, mTestObject.waitForByteValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setByteValue(" + Byte.MIN_VALUE + " - 42.1);"); | 
| +        Assert.assertEquals(Byte.MAX_VALUE - 42 + 1, mTestObject.waitForByteValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setByteValue(" + Integer.MAX_VALUE + " + 42.1);"); | 
| +        Assert.assertEquals(-1, mTestObject.waitForByteValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setByteValue(" + Integer.MIN_VALUE + " - 42.1);"); | 
| +        Assert.assertEquals(0, 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(" + Short.MIN_VALUE + " - 42.1);"); | 
| -        assertEquals(Short.MAX_VALUE - 42 + 1, mTestObject.waitForShortValue()); | 
| -        executeJavaScript("testObject.setShortValue(" + Integer.MAX_VALUE + " + 42.1);"); | 
| -        assertEquals(-1, mTestObject.waitForShortValue()); | 
| -        executeJavaScript("testObject.setShortValue(" + Integer.MIN_VALUE + " - 42.1);"); | 
| -        assertEquals(0, 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.setIntValue(" + Integer.MIN_VALUE + " - 42.1);"); | 
| -        assertEquals(Integer.MIN_VALUE, mTestObject.waitForIntValue()); | 
| - | 
| -        executeJavaScript("testObject.setLongValue(42.1);"); | 
| -        assertEquals(42L, mTestObject.waitForLongValue()); | 
| -        executeJavaScript("testObject.setLongValue(" + Long.MAX_VALUE + " + 42.1);"); | 
| -        assertEquals(Long.MAX_VALUE, mTestObject.waitForLongValue()); | 
| -        executeJavaScript("testObject.setLongValue(" + Long.MIN_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()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCharValue(42.1);"); | 
| +        Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); | 
| + | 
| +        mActivityTestRule.executeJavaScript("testObject.setShortValue(42.1);"); | 
| +        Assert.assertEquals(42, mTestObject.waitForShortValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setShortValue(" + Short.MAX_VALUE + " + 42.1);"); | 
| +        Assert.assertEquals(Short.MIN_VALUE + 42 - 1, mTestObject.waitForShortValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setShortValue(" + Short.MIN_VALUE + " - 42.1);"); | 
| +        Assert.assertEquals(Short.MAX_VALUE - 42 + 1, mTestObject.waitForShortValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setShortValue(" + Integer.MAX_VALUE + " + 42.1);"); | 
| +        Assert.assertEquals(-1, mTestObject.waitForShortValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setShortValue(" + Integer.MIN_VALUE + " - 42.1);"); | 
| +        Assert.assertEquals(0, mTestObject.waitForShortValue()); | 
| + | 
| +        mActivityTestRule.executeJavaScript("testObject.setIntValue(42.1);"); | 
| +        Assert.assertEquals(42, mTestObject.waitForIntValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setIntValue(" + Integer.MAX_VALUE + " + 42.1);"); | 
| +        Assert.assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setIntValue(" + Integer.MIN_VALUE + " - 42.1);"); | 
| +        Assert.assertEquals(Integer.MIN_VALUE, mTestObject.waitForIntValue()); | 
| + | 
| +        mActivityTestRule.executeJavaScript("testObject.setLongValue(42.1);"); | 
| +        Assert.assertEquals(42L, mTestObject.waitForLongValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setLongValue(" + Long.MAX_VALUE + " + 42.1);"); | 
| +        Assert.assertEquals(Long.MAX_VALUE, mTestObject.waitForLongValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setLongValue(" + Long.MIN_VALUE + " - 42.1);"); | 
| +        Assert.assertEquals(Long.MIN_VALUE, mTestObject.waitForLongValue()); | 
| + | 
| +        mActivityTestRule.executeJavaScript("testObject.setFloatValue(42.1);"); | 
| +        Assert.assertEquals(42.1f, mTestObject.waitForFloatValue(), ASSERTION_DELTA); | 
| + | 
| +        mActivityTestRule.executeJavaScript("testObject.setDoubleValue(42.1);"); | 
| +        Assert.assertEquals(42.1, mTestObject.waitForDoubleValue(), ASSERTION_DELTA); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number. | 
| -        executeJavaScript("testObject.setObjectValue(42.1);"); | 
| -        assertNull(mTestObject.waitForObjectValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setObjectValue(42.1);"); | 
| +        Assert.assertNull(mTestObject.waitForObjectValue()); | 
|  | 
| -        executeJavaScript("testObject.setStringValue(42.1);"); | 
| -        assertEquals("42.1", mTestObject.waitForStringValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setStringValue(42.1);"); | 
| +        Assert.assertEquals("42.1", mTestObject.waitForStringValue()); | 
|  | 
| -        executeJavaScript("testObject.setBooleanValue(0.0);"); | 
| -        assertFalse(mTestObject.waitForBooleanValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setBooleanValue(0.0);"); | 
| +        Assert.assertFalse(mTestObject.waitForBooleanValue()); | 
| // LIVECONNECT_COMPLIANCE: Should be true. | 
| -        executeJavaScript("testObject.setBooleanValue(42.1);"); | 
| -        assertFalse(mTestObject.waitForBooleanValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setBooleanValue(42.1);"); | 
| +        Assert.assertFalse(mTestObject.waitForBooleanValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setCustomTypeValue(42.1);"); | 
| -        assertNull(mTestObject.waitForCustomTypeValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue(42.1);"); | 
| +        Assert.assertNull(mTestObject.waitForCustomTypeValue()); | 
| } | 
|  | 
| // Test passing JavaScript NaN to a method of an injected object. | 
| +    @Test | 
| @SmallTest | 
| @Feature({"AndroidWebView", "Android-JavaBridge"}) | 
| public void testPassNumberNaN() throws Throwable { | 
| -        executeJavaScript("testObject.setByteValue(Number.NaN);"); | 
| -        assertEquals(0, mTestObject.waitForByteValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setByteValue(Number.NaN);"); | 
| +        Assert.assertEquals(0, mTestObject.waitForByteValue()); | 
|  | 
| -        executeJavaScript("testObject.setCharValue(Number.NaN);"); | 
| -        assertEquals('\u0000', mTestObject.waitForCharValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCharValue(Number.NaN);"); | 
| +        Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); | 
|  | 
| -        executeJavaScript("testObject.setShortValue(Number.NaN);"); | 
| -        assertEquals(0, mTestObject.waitForShortValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setShortValue(Number.NaN);"); | 
| +        Assert.assertEquals(0, mTestObject.waitForShortValue()); | 
|  | 
| -        executeJavaScript("testObject.setIntValue(Number.NaN);"); | 
| -        assertEquals(0, mTestObject.waitForIntValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setIntValue(Number.NaN);"); | 
| +        Assert.assertEquals(0, mTestObject.waitForIntValue()); | 
|  | 
| -        executeJavaScript("testObject.setLongValue(Number.NaN);"); | 
| -        assertEquals(0L, mTestObject.waitForLongValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setLongValue(Number.NaN);"); | 
| +        Assert.assertEquals(0L, mTestObject.waitForLongValue()); | 
|  | 
| -        executeJavaScript("testObject.setFloatValue(Number.NaN);"); | 
| -        assertEquals(Float.NaN, mTestObject.waitForFloatValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setFloatValue(Number.NaN);"); | 
| +        Assert.assertEquals(Float.NaN, mTestObject.waitForFloatValue(), ASSERTION_DELTA); | 
|  | 
| -        executeJavaScript("testObject.setDoubleValue(Number.NaN);"); | 
| -        assertEquals(Double.NaN, mTestObject.waitForDoubleValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setDoubleValue(Number.NaN);"); | 
| +        Assert.assertEquals(Double.NaN, mTestObject.waitForDoubleValue(), ASSERTION_DELTA); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number. | 
| -        executeJavaScript("testObject.setObjectValue(Number.NaN);"); | 
| -        assertNull(mTestObject.waitForObjectValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setObjectValue(Number.NaN);"); | 
| +        Assert.assertNull(mTestObject.waitForObjectValue()); | 
|  | 
| -        executeJavaScript("testObject.setStringValue(Number.NaN);"); | 
| -        assertTrue("nan".equalsIgnoreCase(mTestObject.waitForStringValue())); | 
| +        mActivityTestRule.executeJavaScript("testObject.setStringValue(Number.NaN);"); | 
| +        Assert.assertTrue("nan".equalsIgnoreCase(mTestObject.waitForStringValue())); | 
|  | 
| -        executeJavaScript("testObject.setBooleanValue(Number.NaN);"); | 
| -        assertFalse(mTestObject.waitForBooleanValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setBooleanValue(Number.NaN);"); | 
| +        Assert.assertFalse(mTestObject.waitForBooleanValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setCustomTypeValue(Number.NaN);"); | 
| -        assertNull(mTestObject.waitForCustomTypeValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue(Number.NaN);"); | 
| +        Assert.assertNull(mTestObject.waitForCustomTypeValue()); | 
| } | 
|  | 
| // Test passing JavaScript infinity to a method of an injected object. | 
| +    @Test | 
| @SmallTest | 
| @Feature({"AndroidWebView", "Android-JavaBridge"}) | 
| public void testPassNumberInfinity() throws Throwable { | 
| -        executeJavaScript("testObject.setByteValue(Infinity);"); | 
| -        assertEquals(-1, mTestObject.waitForByteValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setByteValue(Infinity);"); | 
| +        Assert.assertEquals(-1, mTestObject.waitForByteValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should convert to maximum numeric char value. | 
| -        executeJavaScript("testObject.setCharValue(Infinity);"); | 
| -        assertEquals('\u0000', mTestObject.waitForCharValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCharValue(Infinity);"); | 
| +        Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); | 
|  | 
| -        executeJavaScript("testObject.setShortValue(Infinity);"); | 
| -        assertEquals(-1, mTestObject.waitForShortValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setShortValue(Infinity);"); | 
| +        Assert.assertEquals(-1, mTestObject.waitForShortValue()); | 
|  | 
| -        executeJavaScript("testObject.setIntValue(Infinity);"); | 
| -        assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setIntValue(Infinity);"); | 
| +        Assert.assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntValue()); | 
|  | 
| -        executeJavaScript("testObject.setLongValue(Infinity);"); | 
| -        assertEquals(Long.MAX_VALUE, mTestObject.waitForLongValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setLongValue(Infinity);"); | 
| +        Assert.assertEquals(Long.MAX_VALUE, mTestObject.waitForLongValue()); | 
|  | 
| -        executeJavaScript("testObject.setFloatValue(Infinity);"); | 
| -        assertEquals(Float.POSITIVE_INFINITY, mTestObject.waitForFloatValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setFloatValue(Infinity);"); | 
| +        Assert.assertEquals( | 
| +                Float.POSITIVE_INFINITY, mTestObject.waitForFloatValue(), ASSERTION_DELTA); | 
|  | 
| -        executeJavaScript("testObject.setDoubleValue(Infinity);"); | 
| -        assertEquals(Double.POSITIVE_INFINITY, mTestObject.waitForDoubleValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setDoubleValue(Infinity);"); | 
| +        Assert.assertEquals( | 
| +                Double.POSITIVE_INFINITY, mTestObject.waitForDoubleValue(), ASSERTION_DELTA); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number. | 
| -        executeJavaScript("testObject.setObjectValue(Infinity);"); | 
| -        assertNull(mTestObject.waitForObjectValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setObjectValue(Infinity);"); | 
| +        Assert.assertNull(mTestObject.waitForObjectValue()); | 
|  | 
| -        executeJavaScript("testObject.setStringValue(Infinity);"); | 
| -        assertTrue("inf".equalsIgnoreCase(mTestObject.waitForStringValue())); | 
| +        mActivityTestRule.executeJavaScript("testObject.setStringValue(Infinity);"); | 
| +        Assert.assertTrue("inf".equalsIgnoreCase(mTestObject.waitForStringValue())); | 
|  | 
| -        executeJavaScript("testObject.setBooleanValue(Infinity);"); | 
| -        assertFalse(mTestObject.waitForBooleanValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setBooleanValue(Infinity);"); | 
| +        Assert.assertFalse(mTestObject.waitForBooleanValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setCustomTypeValue(Infinity);"); | 
| -        assertNull(mTestObject.waitForCustomTypeValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue(Infinity);"); | 
| +        Assert.assertNull(mTestObject.waitForCustomTypeValue()); | 
| } | 
|  | 
| // Test passing a JavaScript boolean to a method of an injected object. | 
| +    @Test | 
| @SmallTest | 
| @Feature({"AndroidWebView", "Android-JavaBridge"}) | 
| public void testPassBoolean() throws Throwable { | 
| -        executeJavaScript("testObject.setBooleanValue(true);"); | 
| -        assertTrue(mTestObject.waitForBooleanValue()); | 
| -        executeJavaScript("testObject.setBooleanValue(false);"); | 
| -        assertFalse(mTestObject.waitForBooleanValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setBooleanValue(true);"); | 
| +        Assert.assertTrue(mTestObject.waitForBooleanValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setBooleanValue(false);"); | 
| +        Assert.assertFalse(mTestObject.waitForBooleanValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Boolean. | 
| -        executeJavaScript("testObject.setObjectValue(true);"); | 
| -        assertNull(mTestObject.waitForObjectValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setObjectValue(true);"); | 
| +        Assert.assertNull(mTestObject.waitForObjectValue()); | 
|  | 
| -        executeJavaScript("testObject.setStringValue(false);"); | 
| -        assertEquals("false", mTestObject.waitForStringValue()); | 
| -        executeJavaScript("testObject.setStringValue(true);"); | 
| -        assertEquals("true", mTestObject.waitForStringValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setStringValue(false);"); | 
| +        Assert.assertEquals("false", mTestObject.waitForStringValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setStringValue(true);"); | 
| +        Assert.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()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setByteValue(true);"); | 
| +        Assert.assertEquals(0, mTestObject.waitForByteValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setByteValue(false);"); | 
| +        Assert.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()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCharValue(true);"); | 
| +        Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCharValue(false);"); | 
| +        Assert.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()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setShortValue(true);"); | 
| +        Assert.assertEquals(0, mTestObject.waitForShortValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setShortValue(false);"); | 
| +        Assert.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()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setIntValue(true);"); | 
| +        Assert.assertEquals(0, mTestObject.waitForIntValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setIntValue(false);"); | 
| +        Assert.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()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setLongValue(true);"); | 
| +        Assert.assertEquals(0L, mTestObject.waitForLongValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setLongValue(false);"); | 
| +        Assert.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()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setFloatValue(true);"); | 
| +        Assert.assertEquals(0.0f, mTestObject.waitForFloatValue(), ASSERTION_DELTA); | 
| +        mActivityTestRule.executeJavaScript("testObject.setFloatValue(false);"); | 
| +        Assert.assertEquals(0.0f, mTestObject.waitForFloatValue(), ASSERTION_DELTA); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should be 1.0. | 
| -        executeJavaScript("testObject.setDoubleValue(true);"); | 
| -        assertEquals(0.0, mTestObject.waitForDoubleValue()); | 
| -        executeJavaScript("testObject.setDoubleValue(false);"); | 
| -        assertEquals(0.0, mTestObject.waitForDoubleValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setDoubleValue(true);"); | 
| +        Assert.assertEquals(0.0, mTestObject.waitForDoubleValue(), ASSERTION_DELTA); | 
| +        mActivityTestRule.executeJavaScript("testObject.setDoubleValue(false);"); | 
| +        Assert.assertEquals(0.0, mTestObject.waitForDoubleValue(), ASSERTION_DELTA); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setCustomTypeValue(true);"); | 
| -        assertNull(mTestObject.waitForCustomTypeValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue(true);"); | 
| +        Assert.assertNull(mTestObject.waitForCustomTypeValue()); | 
| } | 
|  | 
| // Test passing a JavaScript string to a method of an injected object. | 
| +    @Test | 
| @SmallTest | 
| @Feature({"AndroidWebView", "Android-JavaBridge"}) | 
| public void testPassString() throws Throwable { | 
| -        executeJavaScript("testObject.setStringValue(\"+042.10\");"); | 
| -        assertEquals("+042.10", mTestObject.waitForStringValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setStringValue(\"+042.10\");"); | 
| +        Assert.assertEquals("+042.10", mTestObject.waitForStringValue()); | 
|  | 
| // Make sure that we distinguish between the empty string and NULL. | 
| -        executeJavaScript("testObject.setStringValue(\"\");"); | 
| -        assertEquals("", mTestObject.waitForStringValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setStringValue(\"\");"); | 
| +        Assert.assertEquals("", mTestObject.waitForStringValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.String. | 
| -        executeJavaScript("testObject.setObjectValue(\"+042.10\");"); | 
| -        assertNull(mTestObject.waitForObjectValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setObjectValue(\"+042.10\");"); | 
| +        Assert.assertNull(mTestObject.waitForObjectValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. | 
| -        executeJavaScript("testObject.setByteValue(\"+042.10\");"); | 
| -        assertEquals(0, mTestObject.waitForByteValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setByteValue(\"+042.10\");"); | 
| +        Assert.assertEquals(0, mTestObject.waitForByteValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. | 
| -        executeJavaScript("testObject.setShortValue(\"+042.10\");"); | 
| -        assertEquals(0, mTestObject.waitForShortValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setShortValue(\"+042.10\");"); | 
| +        Assert.assertEquals(0, mTestObject.waitForShortValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. | 
| -        executeJavaScript("testObject.setIntValue(\"+042.10\");"); | 
| -        assertEquals(0, mTestObject.waitForIntValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setIntValue(\"+042.10\");"); | 
| +        Assert.assertEquals(0, mTestObject.waitForIntValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. | 
| -        executeJavaScript("testObject.setLongValue(\"+042.10\");"); | 
| -        assertEquals(0L, mTestObject.waitForLongValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setLongValue(\"+042.10\");"); | 
| +        Assert.assertEquals(0L, mTestObject.waitForLongValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. | 
| -        executeJavaScript("testObject.setFloatValue(\"+042.10\");"); | 
| -        assertEquals(0.0f, mTestObject.waitForFloatValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setFloatValue(\"+042.10\");"); | 
| +        Assert.assertEquals(0.0f, mTestObject.waitForFloatValue(), ASSERTION_DELTA); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. | 
| -        executeJavaScript("testObject.setDoubleValue(\"+042.10\");"); | 
| -        assertEquals(0.0, mTestObject.waitForDoubleValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setDoubleValue(\"+042.10\");"); | 
| +        Assert.assertEquals(0.0, mTestObject.waitForDoubleValue(), ASSERTION_DELTA); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should decode and convert to numeric char value. | 
| -        executeJavaScript("testObject.setCharValue(\"+042.10\");"); | 
| -        assertEquals('\u0000', mTestObject.waitForCharValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCharValue(\"+042.10\");"); | 
| +        Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Non-empty string should convert to true. | 
| -        executeJavaScript("testObject.setBooleanValue(\"+042.10\");"); | 
| -        assertFalse(mTestObject.waitForBooleanValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setBooleanValue(\"+042.10\");"); | 
| +        Assert.assertFalse(mTestObject.waitForBooleanValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setCustomTypeValue(\"+042.10\");"); | 
| -        assertNull(mTestObject.waitForCustomTypeValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue(\"+042.10\");"); | 
| +        Assert.assertNull(mTestObject.waitForCustomTypeValue()); | 
| } | 
|  | 
| // Test passing a JavaScript object to a method of an injected object. | 
| +    @Test | 
| @SmallTest | 
| @Feature({"AndroidWebView", "Android-JavaBridge"}) | 
| public void testPassJavaScriptObject() throws Throwable { | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setObjectValue({foo: 42});"); | 
| -        assertNull(mTestObject.waitForObjectValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setObjectValue({foo: 42});"); | 
| +        Assert.assertNull(mTestObject.waitForObjectValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setCustomTypeValue({foo: 42});"); | 
| -        assertNull(mTestObject.waitForCustomTypeValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue({foo: 42});"); | 
| +        Assert.assertNull(mTestObject.waitForCustomTypeValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should call toString() on object. | 
| -        executeJavaScript("testObject.setStringValue({foo: 42});"); | 
| -        assertEquals("undefined", mTestObject.waitForStringValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setStringValue({foo: 42});"); | 
| +        Assert.assertEquals("undefined", mTestObject.waitForStringValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setByteValue({foo: 42});"); | 
| -        assertEquals(0, mTestObject.waitForByteValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setByteValue({foo: 42});"); | 
| +        Assert.assertEquals(0, mTestObject.waitForByteValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setCharValue({foo: 42});"); | 
| -        assertEquals('\u0000', mTestObject.waitForCharValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCharValue({foo: 42});"); | 
| +        Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setShortValue({foo: 42});"); | 
| -        assertEquals(0, mTestObject.waitForShortValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setShortValue({foo: 42});"); | 
| +        Assert.assertEquals(0, mTestObject.waitForShortValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setIntValue({foo: 42});"); | 
| -        assertEquals(0, mTestObject.waitForIntValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setIntValue({foo: 42});"); | 
| +        Assert.assertEquals(0, mTestObject.waitForIntValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setLongValue({foo: 42});"); | 
| -        assertEquals(0L, mTestObject.waitForLongValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setLongValue({foo: 42});"); | 
| +        Assert.assertEquals(0L, mTestObject.waitForLongValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setFloatValue({foo: 42});"); | 
| -        assertEquals(0.0f, mTestObject.waitForFloatValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setFloatValue({foo: 42});"); | 
| +        Assert.assertEquals(0.0f, mTestObject.waitForFloatValue(), ASSERTION_DELTA); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setDoubleValue({foo: 42});"); | 
| -        assertEquals(0.0, mTestObject.waitForDoubleValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setDoubleValue({foo: 42});"); | 
| +        Assert.assertEquals(0.0, mTestObject.waitForDoubleValue(), ASSERTION_DELTA); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setBooleanValue({foo: 42});"); | 
| -        assertFalse(mTestObject.waitForBooleanValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setBooleanValue({foo: 42});"); | 
| +        Assert.assertFalse(mTestObject.waitForBooleanValue()); | 
| } | 
|  | 
| // 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. | 
| +    @Test | 
| @SmallTest | 
| @Feature({"AndroidWebView", "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()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setObjectValue(testObject.getObjectInstance());"); | 
| +        Assert.assertTrue(mTestObject.getObjectInstance() == mTestObject.waitForObjectValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setObjectValue(testObject.getCustomTypeInstance());"); | 
| +        Assert.assertTrue(mTestObject.getCustomTypeInstance() == mTestObject.waitForObjectValue()); | 
|  | 
| assertRaisesException("testObject.setCustomTypeValue(testObject.getObjectInstance());"); | 
| -        executeJavaScript("testObject.setCustomTypeValue(testObject.getCustomTypeInstance());"); | 
| -        assertTrue(mTestObject.getCustomTypeInstance() == mTestObject.waitForCustomTypeValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setCustomTypeValue(testObject.getCustomTypeInstance());"); | 
| +        Assert.assertTrue( | 
| +                mTestObject.getCustomTypeInstance() == mTestObject.waitForCustomTypeValue()); | 
| assertRaisesException( | 
| "testObject.setCustomTypeValue(testObject.getCustomType2Instance());"); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should call toString() on object. | 
| -        executeJavaScript("testObject.setStringValue(testObject.getObjectInstance());"); | 
| -        assertEquals("undefined", mTestObject.waitForStringValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setStringValue(testObject.getObjectInstance());"); | 
| +        Assert.assertEquals("undefined", mTestObject.waitForStringValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setByteValue(testObject.getObjectInstance());"); | 
| -        assertEquals(0, mTestObject.waitForByteValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setByteValue(testObject.getObjectInstance());"); | 
| +        Assert.assertEquals(0, mTestObject.waitForByteValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setCharValue(testObject.getObjectInstance());"); | 
| -        assertEquals('\u0000', mTestObject.waitForCharValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setCharValue(testObject.getObjectInstance());"); | 
| +        Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setShortValue(testObject.getObjectInstance());"); | 
| -        assertEquals(0, mTestObject.waitForShortValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setShortValue(testObject.getObjectInstance());"); | 
| +        Assert.assertEquals(0, mTestObject.waitForShortValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setIntValue(testObject.getObjectInstance());"); | 
| -        assertEquals(0, mTestObject.waitForIntValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setIntValue(testObject.getObjectInstance());"); | 
| +        Assert.assertEquals(0, mTestObject.waitForIntValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setLongValue(testObject.getObjectInstance());"); | 
| -        assertEquals(0L, mTestObject.waitForLongValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setLongValue(testObject.getObjectInstance());"); | 
| +        Assert.assertEquals(0L, mTestObject.waitForLongValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setFloatValue(testObject.getObjectInstance());"); | 
| -        assertEquals(0.0f, mTestObject.waitForFloatValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setFloatValue(testObject.getObjectInstance());"); | 
| +        Assert.assertEquals(0.0f, mTestObject.waitForFloatValue(), ASSERTION_DELTA); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setDoubleValue(testObject.getObjectInstance());"); | 
| -        assertEquals(0.0, mTestObject.waitForDoubleValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setDoubleValue(testObject.getObjectInstance());"); | 
| +        Assert.assertEquals(0.0, mTestObject.waitForDoubleValue(), ASSERTION_DELTA); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 
| -        executeJavaScript("testObject.setBooleanValue(testObject.getObjectInstance());"); | 
| -        assertFalse(mTestObject.waitForBooleanValue()); | 
| +        mActivityTestRule.executeJavaScript( | 
| +                "testObject.setBooleanValue(testObject.getObjectInstance());"); | 
| +        Assert.assertFalse(mTestObject.waitForBooleanValue()); | 
| } | 
|  | 
| static void assertFileIsReadable(String filePath) { | 
| File file = new File(filePath); | 
| try { | 
| -            assertTrue("Test file \"" + filePath + "\" is not readable.", file.canRead()); | 
| +            Assert.assertTrue("Test file \"" + filePath + "\" is not readable.", file.canRead()); | 
| } catch (SecurityException e) { | 
| -            fail("Got a SecurityException for \"" + filePath + "\": " + e.toString()); | 
| +            Assert.fail("Got a SecurityException for \"" + filePath + "\": " + e.toString()); | 
| } | 
| } | 
|  | 
| @@ -632,6 +681,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { | 
| // WebView and the app use different class loaders, thus we need to make | 
| // sure that WebView code doesn't attempt to find an app's class using | 
| // its own class loader. See crbug.com/491800. | 
| +    @Test | 
| @SmallTest | 
| @Feature({"AndroidWebView", "Android-JavaBridge"}) | 
| public void testPassJavaObjectFromCustomClassLoader() throws Throwable { | 
| @@ -649,167 +699,174 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase { | 
| final String dexFileName = "content/test/data/android/SelfConsumingObject.dex"; | 
| assertFileIsReadable(UrlUtils.getIsolatedTestFilePath(dexFileName)); | 
| final File optimizedDir = File.createTempFile("optimized", ""); | 
| -        assertTrue(optimizedDir.delete()); | 
| -        assertTrue(optimizedDir.mkdirs()); | 
| +        Assert.assertTrue(optimizedDir.delete()); | 
| +        Assert.assertTrue(optimizedDir.mkdirs()); | 
| DexClassLoader loader = new DexClassLoader(UrlUtils.getIsolatedTestFilePath(dexFileName), | 
| optimizedDir.getAbsolutePath(), null, ClassLoader.getSystemClassLoader()); | 
| final Object selfConsuming = loader.loadClass( | 
| "org.example.SelfConsumingObject").newInstance(); | 
| -        runTestOnUiThread(new Runnable() { | 
| +        mActivityTestRule.runOnUiThread(new Runnable() { | 
| @Override | 
| public void run() { | 
| -                getContentViewCore().addPossiblyUnsafeJavascriptInterface( | 
| +                mActivityTestRule.getContentViewCore().addPossiblyUnsafeJavascriptInterface( | 
| selfConsuming, "selfConsuming", null); | 
| } | 
| }); | 
| -        synchronousPageReload(); | 
| -        executeJavaScript("testObject.setBooleanValue(" | 
| +        mActivityTestRule.synchronousPageReload(); | 
| +        mActivityTestRule.executeJavaScript("testObject.setBooleanValue(" | 
| + "selfConsuming.verifySelf(selfConsuming.getSelf()));"); | 
| -        assertTrue(mTestObject.waitForBooleanValue()); | 
| +        Assert.assertTrue(mTestObject.waitForBooleanValue()); | 
| } | 
|  | 
| // Test passing JavaScript null to a method of an injected object. | 
| +    @Test | 
| @SmallTest | 
| @Feature({"AndroidWebView", "Android-JavaBridge"}) | 
| public void testPassNull() throws Throwable { | 
| -        executeJavaScript("testObject.setObjectValue(null);"); | 
| -        assertNull(mTestObject.waitForObjectValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setObjectValue(null);"); | 
| +        Assert.assertNull(mTestObject.waitForObjectValue()); | 
|  | 
| -        executeJavaScript("testObject.setCustomTypeValue(null);"); | 
| -        assertNull(mTestObject.waitForCustomTypeValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue(null);"); | 
| +        Assert.assertNull(mTestObject.waitForCustomTypeValue()); | 
|  | 
| -        executeJavaScript("testObject.setStringValue(null);"); | 
| -        assertNull(mTestObject.waitForStringValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setStringValue(null);"); | 
| +        Assert.assertNull(mTestObject.waitForStringValue()); | 
|  | 
| -        executeJavaScript("testObject.setByteValue(null);"); | 
| -        assertEquals(0, mTestObject.waitForByteValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setByteValue(null);"); | 
| +        Assert.assertEquals(0, mTestObject.waitForByteValue()); | 
|  | 
| -        executeJavaScript("testObject.setCharValue(null);"); | 
| -        assertEquals('\u0000', mTestObject.waitForCharValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCharValue(null);"); | 
| +        Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); | 
|  | 
| -        executeJavaScript("testObject.setShortValue(null);"); | 
| -        assertEquals(0, mTestObject.waitForShortValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setShortValue(null);"); | 
| +        Assert.assertEquals(0, mTestObject.waitForShortValue()); | 
|  | 
| -        executeJavaScript("testObject.setIntValue(null);"); | 
| -        assertEquals(0, mTestObject.waitForIntValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setIntValue(null);"); | 
| +        Assert.assertEquals(0, mTestObject.waitForIntValue()); | 
|  | 
| -        executeJavaScript("testObject.setLongValue(null);"); | 
| -        assertEquals(0L, mTestObject.waitForLongValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setLongValue(null);"); | 
| +        Assert.assertEquals(0L, mTestObject.waitForLongValue()); | 
|  | 
| -        executeJavaScript("testObject.setFloatValue(null);"); | 
| -        assertEquals(0.0f, mTestObject.waitForFloatValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setFloatValue(null);"); | 
| +        Assert.assertEquals(0.0f, mTestObject.waitForFloatValue(), ASSERTION_DELTA); | 
|  | 
| -        executeJavaScript("testObject.setDoubleValue(null);"); | 
| -        assertEquals(0.0, mTestObject.waitForDoubleValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setDoubleValue(null);"); | 
| +        Assert.assertEquals(0.0, mTestObject.waitForDoubleValue(), ASSERTION_DELTA); | 
|  | 
| -        executeJavaScript("testObject.setBooleanValue(null);"); | 
| -        assertFalse(mTestObject.waitForBooleanValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setBooleanValue(null);"); | 
| +        Assert.assertFalse(mTestObject.waitForBooleanValue()); | 
| } | 
|  | 
| // Test passing JavaScript undefined to a method of an injected object. | 
| +    @Test | 
| @SmallTest | 
| @Feature({"AndroidWebView", "Android-JavaBridge"}) | 
| public void testPassUndefined() throws Throwable { | 
| -        executeJavaScript("testObject.setObjectValue(undefined);"); | 
| -        assertNull(mTestObject.waitForObjectValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setObjectValue(undefined);"); | 
| +        Assert.assertNull(mTestObject.waitForObjectValue()); | 
|  | 
| -        executeJavaScript("testObject.setCustomTypeValue(undefined);"); | 
| -        assertNull(mTestObject.waitForCustomTypeValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue(undefined);"); | 
| +        Assert.assertNull(mTestObject.waitForCustomTypeValue()); | 
|  | 
| // LIVECONNECT_COMPLIANCE: Should be NULL. | 
| -        executeJavaScript("testObject.setStringValue(undefined);"); | 
| -        assertEquals("undefined", mTestObject.waitForStringValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setStringValue(undefined);"); | 
| +        Assert.assertEquals("undefined", mTestObject.waitForStringValue()); | 
|  | 
| -        executeJavaScript("testObject.setByteValue(undefined);"); | 
| -        assertEquals(0, mTestObject.waitForByteValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setByteValue(undefined);"); | 
| +        Assert.assertEquals(0, mTestObject.waitForByteValue()); | 
|  | 
| -        executeJavaScript("testObject.setCharValue(undefined);"); | 
| -        assertEquals('\u0000', mTestObject.waitForCharValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setCharValue(undefined);"); | 
| +        Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); | 
|  | 
| -        executeJavaScript("testObject.setShortValue(undefined);"); | 
| -        assertEquals(0, mTestObject.waitForShortValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setShortValue(undefined);"); | 
| +        Assert.assertEquals(0, mTestObject.waitForShortValue()); | 
|  | 
| -        executeJavaScript("testObject.setIntValue(undefined);"); | 
| -        assertEquals(0, mTestObject.waitForIntValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setIntValue(undefined);"); | 
| +        Assert.assertEquals(0, mTestObject.waitForIntValue()); | 
|  | 
| -        executeJavaScript("testObject.setLongValue(undefined);"); | 
| -        assertEquals(0L, mTestObject.waitForLongValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setLongValue(undefined);"); | 
| +        Assert.assertEquals(0L, mTestObject.waitForLongValue()); | 
|  | 
| -        executeJavaScript("testObject.setFloatValue(undefined);"); | 
| -        assertEquals(0.0f, mTestObject.waitForFloatValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setFloatValue(undefined);"); | 
| +        Assert.assertEquals(0.0f, mTestObject.waitForFloatValue(), ASSERTION_DELTA); | 
|  | 
| -        executeJavaScript("testObject.setDoubleValue(undefined);"); | 
| -        assertEquals(0.0, mTestObject.waitForDoubleValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setDoubleValue(undefined);"); | 
| +        Assert.assertEquals(0.0, mTestObject.waitForDoubleValue(), ASSERTION_DELTA); | 
|  | 
| -        executeJavaScript("testObject.setBooleanValue(undefined);"); | 
| -        assertFalse(mTestObject.waitForBooleanValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setBooleanValue(undefined);"); | 
| +        Assert.assertFalse(mTestObject.waitForBooleanValue()); | 
| } | 
|  | 
| // Verify that ArrayBuffers are not converted into objects or strings when passed | 
| // to Java. Basically, ArrayBuffers are treated as generic JavaScript objects. | 
| +    @Test | 
| @SmallTest | 
| @Feature({"AndroidWebView", "Android-JavaBridge"}) | 
| public void testPassArrayBuffer() throws Throwable { | 
| -        executeJavaScript("buffer = new ArrayBuffer(16);"); | 
| +        mActivityTestRule.executeJavaScript("buffer = new ArrayBuffer(16);"); | 
|  | 
| -        executeJavaScript("testObject.setObjectValue(buffer);"); | 
| -        assertNull(mTestObject.waitForObjectValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setObjectValue(buffer);"); | 
| +        Assert.assertNull(mTestObject.waitForObjectValue()); | 
|  | 
| -        executeJavaScript("testObject.setStringValue(buffer);"); | 
| -        assertEquals("undefined", mTestObject.waitForStringValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setStringValue(buffer);"); | 
| +        Assert.assertEquals("undefined", mTestObject.waitForStringValue()); | 
| } | 
|  | 
| // Verify that ArrayBufferViewss are not converted into objects or strings when passed | 
| // to Java. Basically, ArrayBufferViews are treated as generic JavaScript objects. | 
| // Here, a DataView is used as an ArrayBufferView instance (since the latter is | 
| // an interface and can't be instantiated directly). | 
| +    @Test | 
| @SmallTest | 
| @Feature({"AndroidWebView", "Android-JavaBridge"}) | 
| public void testPassDataView() throws Throwable { | 
| -        executeJavaScript("buffer = new ArrayBuffer(16);"); | 
| +        mActivityTestRule.executeJavaScript("buffer = new ArrayBuffer(16);"); | 
|  | 
| -        executeJavaScript("testObject.setObjectValue(new DataView(buffer));"); | 
| -        assertNull(mTestObject.waitForObjectValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setObjectValue(new DataView(buffer));"); | 
| +        Assert.assertNull(mTestObject.waitForObjectValue()); | 
|  | 
| -        executeJavaScript("testObject.setStringValue(new DataView(buffer));"); | 
| -        assertEquals("undefined", mTestObject.waitForStringValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setStringValue(new DataView(buffer));"); | 
| +        Assert.assertEquals("undefined", mTestObject.waitForStringValue()); | 
| } | 
|  | 
| // Verify that Date objects are not converted into double values, strings or objects. | 
| +    @Test | 
| @SmallTest | 
| @Feature({"AndroidWebView", "Android-JavaBridge"}) | 
| public void testPassDateObject() throws Throwable { | 
| -        executeJavaScript("testObject.setDoubleValue(new Date(2000, 0, 1));"); | 
| -        assertEquals(0.0, mTestObject.waitForDoubleValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setDoubleValue(new Date(2000, 0, 1));"); | 
| +        Assert.assertEquals(0.0, mTestObject.waitForDoubleValue(), ASSERTION_DELTA); | 
|  | 
| -        executeJavaScript("testObject.setStringValue(new Date(2000, 0, 1));"); | 
| -        assertEquals("undefined", mTestObject.waitForStringValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setStringValue(new Date(2000, 0, 1));"); | 
| +        Assert.assertEquals("undefined", mTestObject.waitForStringValue()); | 
|  | 
| -        executeJavaScript("testObject.setObjectValue(new Date(2000, 0, 1));"); | 
| -        assertNull(mTestObject.waitForObjectValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setObjectValue(new Date(2000, 0, 1));"); | 
| +        Assert.assertNull(mTestObject.waitForObjectValue()); | 
| } | 
|  | 
| // Verify that RegExp objects are not converted into strings or objects. | 
| +    @Test | 
| @SmallTest | 
| @Feature({"AndroidWebView", "Android-JavaBridge"}) | 
| public void testPassRegExpObject() throws Throwable { | 
| -        executeJavaScript("testObject.setStringValue(/abc/);"); | 
| -        assertEquals("undefined", mTestObject.waitForStringValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setStringValue(/abc/);"); | 
| +        Assert.assertEquals("undefined", mTestObject.waitForStringValue()); | 
|  | 
| -        executeJavaScript("testObject.setObjectValue(/abc/);"); | 
| -        assertNull(mTestObject.waitForObjectValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setObjectValue(/abc/);"); | 
| +        Assert.assertNull(mTestObject.waitForObjectValue()); | 
| } | 
|  | 
| // Verify that Function objects are not converted into strings or objects. | 
| +    @Test | 
| @SmallTest | 
| @Feature({"AndroidWebView", "Android-JavaBridge"}) | 
| public void testPassFunctionObject() throws Throwable { | 
| -        executeJavaScript("func = new Function('a', 'b', 'return a + b');"); | 
| +        mActivityTestRule.executeJavaScript("func = new Function('a', 'b', 'return a + b');"); | 
|  | 
| -        executeJavaScript("testObject.setStringValue(func);"); | 
| -        assertEquals("undefined", mTestObject.waitForStringValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setStringValue(func);"); | 
| +        Assert.assertEquals("undefined", mTestObject.waitForStringValue()); | 
|  | 
| -        executeJavaScript("testObject.setObjectValue(func);"); | 
| -        assertNull(mTestObject.waitForObjectValue()); | 
| +        mActivityTestRule.executeJavaScript("testObject.setObjectValue(func);"); | 
| +        Assert.assertNull(mTestObject.waitForObjectValue()); | 
| } | 
| } | 
|  |