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

Commit 13ad467a authored by Steve Block's avatar Steve Block
Browse files

Add tests for invalid and static methods in the WebView's Java Bridge

Change-Id: I18dacf4a4de8c787e46ea2781f5a365372a0a7da
parent e3571f63
Loading
Loading
Loading
Loading
+41 −14
Original line number Diff line number Diff line
@@ -75,6 +75,12 @@ public class JavaBridgeBasicsTest extends JavaBridgeTestBase {
        }
    }

    private static class ObjectWithStaticMethod {
        public static String staticMethod() {
            return "foo";
        }
    }

    TestController mTestController;

    @Override
@@ -101,6 +107,17 @@ public class JavaBridgeBasicsTest extends JavaBridgeTestBase {
        mWebViewClient.waitForOnPageFinished();
    }

    // Note that this requires that we can pass a JavaScript boolean to Java.
    private void assertRaisesException(String script) throws Throwable {
        executeJavaScript("try {" +
                          script + ";" +
                          "  testController.setBooleanValue(false);" +
                          "} catch (exception) {" +
                          "  testController.setBooleanValue(true);" +
                          "}");
        assertTrue(mTestController.waitForBooleanValue());
    }

    public void testTypeOfInjectedObject() throws Throwable {
        assertEquals("object", executeJavaScriptAndGetStringResult("typeof testController"));
    }
@@ -161,6 +178,28 @@ public class JavaBridgeBasicsTest extends JavaBridgeTestBase {
                executeJavaScriptAndGetStringResult("typeof testController.setStringValue"));
    }

    public void testTypeOfInvalidMethod() throws Throwable {
        assertEquals("undefined", executeJavaScriptAndGetStringResult("typeof testController.foo"));
    }

    public void testCallingInvalidMethodRaisesException() throws Throwable {
        assertRaisesException("testController.foo()");
    }

    // Note that this requires that we can pass a JavaScript string to Java.
    public void testTypeOfStaticMethod() throws Throwable {
        injectObjectAndReload(new ObjectWithStaticMethod(), "testObject");
        executeJavaScript("testController.setStringValue(typeof testObject.staticMethod)");
        assertEquals("function", mTestController.waitForStringValue());
    }

    // Note that this requires that we can pass a JavaScript string to Java.
    public void testCallStaticMethod() throws Throwable {
        injectObjectAndReload(new ObjectWithStaticMethod(), "testObject");
        executeJavaScript("testController.setStringValue(testObject.staticMethod())");
        assertEquals("foo", mTestController.waitForStringValue());
    }

    public void testPrivateMethodNotExposed() throws Throwable {
        injectObjectAndReload(new Object() {
            private void method() {}
@@ -214,20 +253,8 @@ public class JavaBridgeBasicsTest extends JavaBridgeTestBase {
    }

    public void testCallMethodWithWrongNumberOfArgumentsRaisesException() throws Throwable {
        class Test {
            public void run(String script) throws Throwable {
                executeJavaScript("try {" +
                                  script + ";" +
                                  "  testController.setBooleanValue(false);" +
                                  "} catch (exception) {" +
                                  "  testController.setBooleanValue(true);" +
                                  "}");
                assertTrue(mTestController.waitForBooleanValue());
            }
        }
        Test test = new Test();
        test.run("testController.setIntValue()");
        test.run("testController.setIntValue(42, 42)");
        assertRaisesException("testController.setIntValue()");
        assertRaisesException("testController.setIntValue(42, 42)");
    }

    public void testObjectPersistsAcrossPageLoads() throws Throwable {