< prev index next >

modules/web/src/test/java/test/javafx/scene/web/JavaScriptBridgeTest.java

Print this page
rev 9389 : Add testcase and support java.lang.Number
rev 9675 : 8089842: JavaScript2Java Bridge: A char value cannot be set from JavaScript

@@ -324,10 +324,12 @@
         public Double d1; // direct access
         public Integer i0; // using setter
         public Integer i1; // direct access
         public Boolean b0; // using setter
         public Boolean b1; // direct access
+        public Character c0; // using setter
+        public Character c1; // direct access
 
         public void setNumberVal(Number n) {
             n0 = n;
         }
 

@@ -340,10 +342,14 @@
         }
 
         public void setBooleanVal(Boolean b) {
             b0 = b;
         }
+
+        public void setCharacterVal(Character c) {
+            c0 = c;
+        }
     }
 
     public @Test void testMethodCallWithWrapperObjects() {
         final WebEngine web = getEngine();
 

@@ -372,10 +378,47 @@
             assertEquals(false, obj.b0.booleanValue());
             web.executeScript("obj.b1 = true");
             assertEquals(true, obj.b1.booleanValue());
             web.executeScript("obj.b1 = false");
             assertEquals(false, obj.b1.booleanValue());
+            // Test java.lang.Character
+            web.executeScript("obj.setCharacterVal('o')");
+            assertEquals('o', obj.c0.charValue());
+            web.executeScript("obj.c1 = '1'");
+            assertEquals('1', obj.c1.charValue());
+        });
+    }
+
+    // JDK-8089842
+    public static class CharMember {
+        public char c;
+    }
+
+    public @Test void testJSStringToJavaCharSpecilization() {
+        final WebEngine web = getEngine();
+
+        submit(() -> {
+            CharMember charTest = new CharMember();
+            bind("charTest", charTest);
+            // ascii char
+            web.executeScript("charTest.c = 'o';");
+            assertEquals('o', charTest.c);
+            web.executeScript("charTest.c = undefined;");
+            assertEquals('\0', charTest.c);
+            web.executeScript("charTest.c = '11111111o';");
+            assertEquals('1', charTest.c);
+            web.executeScript("charTest.c = null;");
+            assertEquals('\0', charTest.c);
+            web.executeScript("charTest.c = ' ';");
+            assertEquals(' ', charTest.c);
+            web.executeScript("charTest.c = '';");
+            assertEquals('\0', charTest.c);
+            web.executeScript("charTest.c = 65;");
+            assertEquals('A', charTest.c);
+            // unicode
+            web.executeScript("charTest.c = '\u03A9';");
+            assertEquals('Ω', charTest.c);
         });
     }
 
     public @Test void testBridgeExplicitOverloading() throws InterruptedException {
         final WebEngine web = getEngine();
< prev index next >