Test WebView.addJavascriptInterface() with an oddly named property

Change-Id: I7d04eb452ba771726f87737553b30e8bdcab0c9a
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java b/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
index 84fe827..6bae428 100644
--- a/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
@@ -541,7 +541,7 @@
         method = "addJavascriptInterface",
         args = {Object.class, String.class}
     )
-    public void testAddJavascriptInterfaceNull() throws Exception {
+    public void testAddJavascriptInterfaceNullObject() throws Exception {
         WebSettings settings = mWebView.getSettings();
         settings.setJavaScriptEnabled(true);
         String setTitleToPropertyTypeHtml = "<html><head></head>" +
@@ -572,6 +572,47 @@
         assertEquals("object", mWebView.getTitle());
     }
 
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "addJavascriptInterface",
+            args = {Object.class, String.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "removeJavascriptInterface",
+            args = {String.class}
+        )
+    })
+    public void testAddJavascriptInterfaceOddName() throws Exception {
+        WebSettings settings = mWebView.getSettings();
+        settings.setJavaScriptEnabled(true);
+        final DummyJavaScriptInterface obj = new DummyJavaScriptInterface();
+
+        // We should be able to use any character other than a single quote.
+        // TODO: We currently fail when the name contains '#', '\', '\n' or '\r'.
+        // See b/3279426
+        //String oddNames[] = {" x y ", "`!\"$%^&*()-=_+[]{};#:@~\\|,./<>?\n\r ", " ", "\n", ""};
+        String oddNames[] = {" x y ", "`!\"$%^&*()-=_+[]{};:@~|,./<>? ", " ", ""};
+        for (String name : oddNames) {
+            String setTitleToPropertyTypeHtml = "<html><head>" +
+                    "<script>function updateTitle() { document.title = typeof window['" +
+                    name +
+                    "']; }</script>" +
+                    "</head><body onload=\"updateTitle();\"></body></html>";
+
+            mWebView.addJavascriptInterface(obj, name);
+            mWebView.loadData(setTitleToPropertyTypeHtml, "text/html", "UTF-8");
+            waitForLoadComplete(mWebView, TEST_TIMEOUT);
+            assertEquals("object", mWebView.getTitle());
+
+            mWebView.removeJavascriptInterface(name);
+            mWebView.loadData(setTitleToPropertyTypeHtml, "text/html", "UTF-8");
+            waitForLoadComplete(mWebView, TEST_TIMEOUT);
+            assertEquals("undefined", mWebView.getTitle());
+        }
+    }
+
     @TestTargetNew(
         level = TestLevel.COMPLETE,
         method = "removeJavascriptInterface",