Methods Summary |
---|
private void | assertRaisesException(java.lang.String script)
executeJavaScript("try {" +
script + ";" +
" testController.setBooleanValue(false);" +
"} catch (exception) {" +
" testController.setBooleanValue(true);" +
"}");
assertTrue(mTestController.waitForBooleanValue());
|
protected java.lang.String | executeJavaScriptAndGetStringResult(java.lang.String script)
executeJavaScript("testController.setStringValue(" + script + ");");
return mTestController.waitForStringValue();
|
protected void | injectObjectAndReload(java.lang.Object object, java.lang.String name)
runTestOnUiThread(new Runnable() {
@Override
public void run() {
getWebView().addJavascriptInterface(object, name);
getWebView().reload();
}
});
mWebViewClient.waitForOnPageFinished();
|
protected void | setUp()
super.setUp();
mTestController = new TestController();
setUpWebView(mTestController, "testController");
|
public void | testAdditionNotReflectedUntilReload()
assertEquals("undefined", executeJavaScriptAndGetStringResult("typeof testObject"));
runTestOnUiThread(new Runnable() {
@Override
public void run() {
getWebView().addJavascriptInterface(new Object(), "testObject");
}
});
assertEquals("undefined", executeJavaScriptAndGetStringResult("typeof testObject"));
runTestOnUiThread(new Runnable() {
@Override
public void run() {
getWebView().reload();
}
});
mWebViewClient.waitForOnPageFinished();
assertEquals("object", executeJavaScriptAndGetStringResult("typeof testObject"));
|
public void | testCallMethodOnReturnedObject()
injectObjectAndReload(new Object() {
public Object getInnerObject() {
return new Object() {
public void method(int x) { mTestController.setIntValue(x); }
};
}
}, "testObject");
executeJavaScript("testObject.getInnerObject().method(42)");
assertEquals(42, mTestController.waitForIntValue());
|
public void | testCallMethodWithWrongNumberOfArgumentsRaisesException()
assertRaisesException("testController.setIntValue()");
assertRaisesException("testController.setIntValue(42, 42)");
|
public void | testCallOverloadedMethodWithDifferentNumberOfArguments()
injectObjectAndReload(new Object() {
public void method() { mTestController.setStringValue("0 args"); }
public void method(int x) { mTestController.setStringValue("1 arg"); }
public void method(int x, int y) { mTestController.setStringValue("2 args"); }
}, "testObject");
executeJavaScript("testObject.method()");
assertEquals("0 args", mTestController.waitForStringValue());
executeJavaScript("testObject.method(42)");
assertEquals("1 arg", mTestController.waitForStringValue());
executeJavaScript("testObject.method(null)");
assertEquals("1 arg", mTestController.waitForStringValue());
executeJavaScript("testObject.method(undefined)");
assertEquals("1 arg", mTestController.waitForStringValue());
executeJavaScript("testObject.method(42, 42)");
assertEquals("2 args", mTestController.waitForStringValue());
|
public void | testCallStaticMethod()
injectObjectAndReload(new ObjectWithStaticMethod(), "testObject");
executeJavaScript("testController.setStringValue(testObject.staticMethod())");
assertEquals("foo", mTestController.waitForStringValue());
|
public void | testCallingInvalidMethodRaisesException()
assertRaisesException("testController.foo()");
|
public void | testEnumerateMembers()
injectObjectAndReload(new Object() {
public void method() {}
private void privateMethod() {}
public int field;
private int privateField;
}, "testObject");
executeJavaScript(
"var result = \"\"; " +
"for (x in testObject) { result += \" \" + x } " +
"testController.setStringValue(result);");
// LIVECONNECT_COMPLIANCE: Should be able to enumerate members.
assertEquals("", mTestController.waitForStringValue());
|
public void | testInjectNullObjectIsIgnored()
injectObjectAndReload(null, "testObject");
assertEquals("undefined", executeJavaScriptAndGetStringResult("typeof testObject"));
|
public void | testMethodInvokedOnBackgroundThread()
injectObjectAndReload(new Object() {
public void captureThreadId() {
mTestController.setLongValue(Thread.currentThread().getId());
}
}, "testObject");
executeJavaScript("testObject.captureThreadId()");
final long threadId = mTestController.waitForLongValue();
assertFalse(threadId == Thread.currentThread().getId());
runTestOnUiThread(new Runnable() {
@Override
public void run() {
assertFalse(threadId == Thread.currentThread().getId());
}
});
|
public void | testObjectPersistsAcrossPageLoads()
assertEquals("object", executeJavaScriptAndGetStringResult("typeof testController"));
runTestOnUiThread(new Runnable() {
@Override
public void run() {
getWebView().reload();
}
});
mWebViewClient.waitForOnPageFinished();
assertEquals("object", executeJavaScriptAndGetStringResult("typeof testController"));
|
public void | testOverriddenMethod()
class Base {
public void method() { mTestController.setStringValue("base"); }
}
class Derived extends Base {
public void method() { mTestController.setStringValue("derived"); }
}
injectObjectAndReload(new Derived(), "testObject");
executeJavaScript("testObject.method()");
assertEquals("derived", mTestController.waitForStringValue());
|
public void | testPrivateInheritedMethod()
class Base {
private void method() {}
}
class Derived extends Base {
}
injectObjectAndReload(new Derived(), "testObject");
assertEquals("undefined", executeJavaScriptAndGetStringResult("typeof testObject.method"));
|
public void | testPrivateMethodNotExposed()
injectObjectAndReload(new Object() {
private void method() {}
}, "testObject");
assertEquals("undefined",
executeJavaScriptAndGetStringResult("typeof testObject.method"));
|
public void | testPublicInheritedMethod()
class Base {
public void method(int x) { mTestController.setIntValue(x); }
}
class Derived extends Base {
}
injectObjectAndReload(new Derived(), "testObject");
assertEquals("function", executeJavaScriptAndGetStringResult("typeof testObject.method"));
executeJavaScript("testObject.method(42)");
assertEquals(42, mTestController.waitForIntValue());
|
public void | testReflectPrivateFieldRaisesException()
injectObjectAndReload(new Object() {
private int field;
}, "testObject");
assertRaisesException("testObject.getClass().getField('field')");
// getDeclaredField() is able to access a private field, but getInt()
// throws a Java exception.
assertRaisesException(
"testObject.getClass().getDeclaredField('field').getInt(testObject)");
|
public void | testReflectPrivateMethodRaisesException()
injectObjectAndReload(new Object() {
private void method() {};
}, "testObject");
assertRaisesException("testObject.getClass().getMethod('method', null)");
// getDeclaredMethod() is able to access a private method, but invoke()
// throws a Java exception.
assertRaisesException(
"testObject.getClass().getDeclaredMethod('method', null).invoke(testObject, null)");
|
public void | testReflectPublicField()
injectObjectAndReload(new Object() {
public String field = "foo";
}, "testObject");
assertEquals("foo", executeJavaScriptAndGetStringResult(
"testObject.getClass().getField('field').get(testObject).toString()"));
|
public void | testReflectPublicMethod()
injectObjectAndReload(new Object() {
public String method() { return "foo"; }
}, "testObject");
assertEquals("foo", executeJavaScriptAndGetStringResult(
"testObject.getClass().getMethod('method', null).invoke(testObject, null)" +
".toString()"));
|
public void | testRemovalNotReflectedUntilReload()
injectObjectAndReload(new Object(), "testObject");
assertEquals("object", executeJavaScriptAndGetStringResult("typeof testObject"));
runTestOnUiThread(new Runnable() {
@Override
public void run() {
getWebView().removeJavascriptInterface("testObject");
}
});
assertEquals("object", executeJavaScriptAndGetStringResult("typeof testObject"));
runTestOnUiThread(new Runnable() {
@Override
public void run() {
getWebView().reload();
}
});
mWebViewClient.waitForOnPageFinished();
assertEquals("undefined", executeJavaScriptAndGetStringResult("typeof testObject"));
|
public void | testRemoveObjectNotAdded()
runTestOnUiThread(new Runnable() {
@Override
public void run() {
getWebView().removeJavascriptInterface("foo");
getWebView().reload();
}
});
mWebViewClient.waitForOnPageFinished();
assertEquals("undefined", executeJavaScriptAndGetStringResult("typeof foo"));
|
public void | testReplaceInjectedObject()
injectObjectAndReload(new Object() {
public void method() { mTestController.setStringValue("object 1"); }
}, "testObject");
executeJavaScript("testObject.method()");
assertEquals("object 1", mTestController.waitForStringValue());
injectObjectAndReload(new Object() {
public void method() { mTestController.setStringValue("object 2"); }
}, "testObject");
executeJavaScript("testObject.method()");
assertEquals("object 2", mTestController.waitForStringValue());
|
public void | testReplaceInjectedObjectWithNullObjectIsIgnored()
injectObjectAndReload(new Object(), "testObject");
assertEquals("object", executeJavaScriptAndGetStringResult("typeof testObject"));
injectObjectAndReload(null, "testObject");
assertEquals("object", executeJavaScriptAndGetStringResult("typeof testObject"));
|
public void | testReturnedObjectInjectedElsewhere()
class InnerObject {
private int mNumMethodInvocations;
public void method() { mTestController.setIntValue(++mNumMethodInvocations); }
}
final InnerObject innerObject = new InnerObject();
final Object object = new Object() {
public InnerObject getInnerObject() {
return innerObject;
}
};
runTestOnUiThread(new Runnable() {
@Override
public void run() {
getWebView().addJavascriptInterface(object, "testObject");
getWebView().addJavascriptInterface(innerObject, "innerObject");
getWebView().reload();
}
});
mWebViewClient.waitForOnPageFinished();
executeJavaScript("testObject.getInnerObject().method()");
assertEquals(1, mTestController.waitForIntValue());
executeJavaScript("innerObject.method()");
assertEquals(2, mTestController.waitForIntValue());
|
public void | testSameObjectInjectedMultipleTimes()
class TestObject {
private int mNumMethodInvocations;
public void method() { mTestController.setIntValue(++mNumMethodInvocations); }
}
final TestObject testObject = new TestObject();
runTestOnUiThread(new Runnable() {
@Override
public void run() {
getWebView().addJavascriptInterface(testObject, "testObject1");
getWebView().addJavascriptInterface(testObject, "testObject2");
getWebView().reload();
}
});
mWebViewClient.waitForOnPageFinished();
executeJavaScript("testObject1.method()");
assertEquals(1, mTestController.waitForIntValue());
executeJavaScript("testObject2.method()");
assertEquals(2, mTestController.waitForIntValue());
|
public void | testTypeOfInjectedObject()
assertEquals("object", executeJavaScriptAndGetStringResult("typeof testController"));
|
public void | testTypeOfInvalidMethod()
assertEquals("undefined", executeJavaScriptAndGetStringResult("typeof testController.foo"));
|
public void | testTypeOfMethod()
assertEquals("function",
executeJavaScriptAndGetStringResult("typeof testController.setStringValue"));
|
public void | testTypeOfStaticMethod()
injectObjectAndReload(new ObjectWithStaticMethod(), "testObject");
executeJavaScript("testController.setStringValue(typeof testObject.staticMethod)");
assertEquals("function", mTestController.waitForStringValue());
|
public void | testUncaughtJavaExceptionRaisesJavaException()
injectObjectAndReload(new Object() {
public void method() { throw new RuntimeException("foo"); }
}, "testObject");
assertRaisesException("testObject.method()");
|