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')");
|