< 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


 309             try {
 310                 Object o2 = web.executeScript("x.listRoots()");
 311                 fail("exception expected for invoking static method");
 312             } catch (JSException ex) {
 313                 if (ex.toString().indexOf("static") < 0)
 314                     fail("caught unexpected exception: "+ex);
 315             }
 316         });
 317     }
 318 
 319     // JDK-8141386
 320     public static class WrapperObjects {
 321         public Number n0; // using setter
 322         public Number n1; // direct access
 323         public Double d0; // using setter
 324         public Double d1; // direct access
 325         public Integer i0; // using setter
 326         public Integer i1; // direct access
 327         public Boolean b0; // using setter
 328         public Boolean b1; // direct access


 329 
 330         public void setNumberVal(Number n) {
 331             n0 = n;
 332         }
 333 
 334         public void setDoubleVal(Double d) {
 335             d0 = d;
 336         }
 337 
 338         public void setIntegerVal(Integer i) {
 339             i0 = i;
 340         }
 341 
 342         public void setBooleanVal(Boolean b) {
 343             b0 = b;
 344         }




 345     }
 346 
 347     public @Test void testMethodCallWithWrapperObjects() {
 348         final WebEngine web = getEngine();
 349 
 350         submit(() -> {
 351             WrapperObjects obj = new WrapperObjects();
 352             bind("obj", obj);
 353             // Test java.lang.Number
 354             web.executeScript("obj.setNumberVal(1.23)");
 355             assertEquals(1.23, obj.n0.doubleValue(), 0.1);
 356             web.executeScript("obj.n1 = 1.23");
 357             assertEquals(1.23, obj.n1.doubleValue(), 0.1);
 358             // Test java.lang.Double
 359             web.executeScript("obj.setDoubleVal(1.23)");
 360             assertEquals(1.23, obj.d0, 0.1);
 361             web.executeScript("obj.d1 = 1.23");
 362             assertEquals(1.23, obj.d1, 0.1);
 363             // Test java.lang.Integer
 364             web.executeScript("obj.setIntegerVal(123)");
 365             assertEquals(123, obj.i0.intValue());
 366             web.executeScript("obj.i1 = 123");
 367             assertEquals(123, obj.i1.intValue());
 368             // Test java.lang.Boolean
 369             web.executeScript("obj.setBooleanVal(true)");
 370             assertEquals(true, obj.b0.booleanValue());
 371             web.executeScript("obj.setBooleanVal(false)");
 372             assertEquals(false, obj.b0.booleanValue());
 373             web.executeScript("obj.b1 = true");
 374             assertEquals(true, obj.b1.booleanValue());
 375             web.executeScript("obj.b1 = false");
 376             assertEquals(false, obj.b1.booleanValue());





































 377         });
 378     }
 379 
 380     public @Test void testBridgeExplicitOverloading() throws InterruptedException {
 381         final WebEngine web = getEngine();
 382 
 383         submit(() -> {
 384             StringBuilder sb = new StringBuilder();
 385             bind("sb", sb);
 386             web.executeScript("sb['append(int)'](123)");
 387             assertEquals("123", sb.toString());
 388             sb.append(' ');
 389             web.executeScript("sb['append(int)'](5.5)");
 390             // Note 5.5 is truncated to int.
 391             assertEquals("123 5", sb.toString());
 392             sb.append(' ');
 393             web.executeScript("sb['append(Object)'](5.5)");
 394             assertEquals("123 5 5.5", sb.toString());
 395             sb.append(' ');
 396             web.executeScript("sb['append(java.lang.String)']('abc')");




 309             try {
 310                 Object o2 = web.executeScript("x.listRoots()");
 311                 fail("exception expected for invoking static method");
 312             } catch (JSException ex) {
 313                 if (ex.toString().indexOf("static") < 0)
 314                     fail("caught unexpected exception: "+ex);
 315             }
 316         });
 317     }
 318 
 319     // JDK-8141386
 320     public static class WrapperObjects {
 321         public Number n0; // using setter
 322         public Number n1; // direct access
 323         public Double d0; // using setter
 324         public Double d1; // direct access
 325         public Integer i0; // using setter
 326         public Integer i1; // direct access
 327         public Boolean b0; // using setter
 328         public Boolean b1; // direct access
 329         public Character c0; // using setter
 330         public Character c1; // direct access
 331 
 332         public void setNumberVal(Number n) {
 333             n0 = n;
 334         }
 335 
 336         public void setDoubleVal(Double d) {
 337             d0 = d;
 338         }
 339 
 340         public void setIntegerVal(Integer i) {
 341             i0 = i;
 342         }
 343 
 344         public void setBooleanVal(Boolean b) {
 345             b0 = b;
 346         }
 347 
 348         public void setCharacterVal(Character c) {
 349             c0 = c;
 350         }
 351     }
 352 
 353     public @Test void testMethodCallWithWrapperObjects() {
 354         final WebEngine web = getEngine();
 355 
 356         submit(() -> {
 357             WrapperObjects obj = new WrapperObjects();
 358             bind("obj", obj);
 359             // Test java.lang.Number
 360             web.executeScript("obj.setNumberVal(1.23)");
 361             assertEquals(1.23, obj.n0.doubleValue(), 0.1);
 362             web.executeScript("obj.n1 = 1.23");
 363             assertEquals(1.23, obj.n1.doubleValue(), 0.1);
 364             // Test java.lang.Double
 365             web.executeScript("obj.setDoubleVal(1.23)");
 366             assertEquals(1.23, obj.d0, 0.1);
 367             web.executeScript("obj.d1 = 1.23");
 368             assertEquals(1.23, obj.d1, 0.1);
 369             // Test java.lang.Integer
 370             web.executeScript("obj.setIntegerVal(123)");
 371             assertEquals(123, obj.i0.intValue());
 372             web.executeScript("obj.i1 = 123");
 373             assertEquals(123, obj.i1.intValue());
 374             // Test java.lang.Boolean
 375             web.executeScript("obj.setBooleanVal(true)");
 376             assertEquals(true, obj.b0.booleanValue());
 377             web.executeScript("obj.setBooleanVal(false)");
 378             assertEquals(false, obj.b0.booleanValue());
 379             web.executeScript("obj.b1 = true");
 380             assertEquals(true, obj.b1.booleanValue());
 381             web.executeScript("obj.b1 = false");
 382             assertEquals(false, obj.b1.booleanValue());
 383             // Test java.lang.Character
 384             web.executeScript("obj.setCharacterVal('o')");
 385             assertEquals('o', obj.c0.charValue());
 386             web.executeScript("obj.c1 = '1'");
 387             assertEquals('1', obj.c1.charValue());
 388         });
 389     }
 390 
 391     // JDK-8089842
 392     public static class CharMember {
 393         public char c;
 394     }
 395 
 396     public @Test void testJSStringToJavaCharSpecilization() {
 397         final WebEngine web = getEngine();
 398 
 399         submit(() -> {
 400             CharMember charTest = new CharMember();
 401             bind("charTest", charTest);
 402             // ascii char
 403             web.executeScript("charTest.c = 'o';");
 404             assertEquals('o', charTest.c);
 405             web.executeScript("charTest.c = undefined;");
 406             assertEquals('\0', charTest.c);
 407             web.executeScript("charTest.c = '11111111o';");
 408             assertEquals('1', charTest.c);
 409             web.executeScript("charTest.c = null;");
 410             assertEquals('\0', charTest.c);
 411             web.executeScript("charTest.c = ' ';");
 412             assertEquals(' ', charTest.c);
 413             web.executeScript("charTest.c = '';");
 414             assertEquals('\0', charTest.c);
 415             web.executeScript("charTest.c = 65;");
 416             assertEquals('A', charTest.c);
 417             // unicode
 418             web.executeScript("charTest.c = '\u03A9';");
 419             assertEquals('Ω', charTest.c);
 420         });
 421     }
 422 
 423     public @Test void testBridgeExplicitOverloading() throws InterruptedException {
 424         final WebEngine web = getEngine();
 425 
 426         submit(() -> {
 427             StringBuilder sb = new StringBuilder();
 428             bind("sb", sb);
 429             web.executeScript("sb['append(int)'](123)");
 430             assertEquals("123", sb.toString());
 431             sb.append(' ');
 432             web.executeScript("sb['append(int)'](5.5)");
 433             // Note 5.5 is truncated to int.
 434             assertEquals("123 5", sb.toString());
 435             sb.append(' ');
 436             web.executeScript("sb['append(Object)'](5.5)");
 437             assertEquals("123 5 5.5", sb.toString());
 438             sb.append(' ');
 439             web.executeScript("sb['append(java.lang.String)']('abc')");


< prev index next >