On Fri, 31 Jan 2025 23:28:09 GMT, Andy Goryachev <ango...@openjdk.org> wrote:
>> Created a test that validates various Nodes can be initialized in a >> background thread. > > Andy Goryachev has updated the pull request incrementally with one additional > commit since the last revision: > > better name I left a couple comments. Regarding the tooltip issue, I was able to make it fail reliably by doing two things: 1. When not on the FX app thread, create a new tooltip rather than using the one created in the generator 2. When on the FX app thread, alternate between moving the mouse onto / off of the control Like this: AtomicBoolean overTooltip = new AtomicBoolean(false); test(() -> { Tooltip t = new Tooltip("this is a tooltip"); t.setShowDelay(Duration.ZERO); t.setHideDelay(Duration.ZERO); Label c = new Label("testing tooltip"); c.setSkin(new LabelSkin(c)); c.setTooltip(t); c.setId("Tooltip"); return c; }, (c) -> { Tooltip t; if (Platform.isFxApplicationThread()) { t = c.getTooltip(); } else { t = new Tooltip("this is a tooltip"); } t.isShowing(); t.setGraphic(new Label("yo!")); if (Platform.isFxApplicationThread()) { boolean isOverTooltip = overTooltip.get(); Point2D p = isOverTooltip ? c.localToScreen(c.getWidth() + 5.0, c.getHeight() + 5.0) : c.localToScreen(c.getWidth() / 2.0, c.getHeight() / 2.0); robot.mouseMove(p); overTooltip.set(!isOverTooltip); } }); Feel free to use / adapt / whatever this suggestion. tests/system/src/test/java/test/robot/javafx/scene/NodeInitializationStressTest.java line 158: > 156: private static final AtomicLong seq = new AtomicLong(); > 157: private static final AtomicBoolean failed = new AtomicBoolean(); > 158: // for debugging purposes: setting this to false will skip working > tests That should be "setting this to _true_ will skip..." tests/system/src/test/java/test/robot/javafx/scene/NodeInitializationStressTest.java line 671: > 669: return c; > 670: }, (c) -> { > 671: Tooltip t = c.getTooltip(); For the background thread, construct a new object. tests/system/src/test/java/test/robot/javafx/scene/NodeInitializationStressTest.java line 675: > 673: t.setGraphic(new Label("yo!")); > 674: if (Platform.isFxApplicationThread()) { > 675: Point2D p = c.localToScreen(c.getWidth() / 2.0, > c.getHeight() / 2.0); In order to reliably reproduce it with the manual test, I had to move the mouse off and on the tooltip (so the tooltip is shown / hidden repeatedly). You can do that here by alternately moving the mouse to the center (as you've done here) and outside the window. ------------- PR Review: https://git.openjdk.org/jfx/pull/1690#pullrequestreview-2590460238 PR Review Comment: https://git.openjdk.org/jfx/pull/1690#discussion_r1939696702 PR Review Comment: https://git.openjdk.org/jfx/pull/1690#discussion_r1939738534 PR Review Comment: https://git.openjdk.org/jfx/pull/1690#discussion_r1939744593