Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RFC] Increase debugability #418

Merged
merged 5 commits into from Aug 23, 2017

Conversation

JordanMartinez
Copy link
Contributor

Somewhat resolves #417.

The commit history needs to be cleaned up a bit, but this might help us track down the issues behind those flaky tests.

Regardless, I can't set the default error handler to automatically show which keys and mouse buttons were pressed since there's no access to FxRobot somehow. The event list makes this somewhat irrelevant, but I think that might be easier to read than the huge number of events.

Also, I think the errorHandler should map the error's message. Otherwise, a person might return the original error and I'm not sure if that rethrows or not.

@JordanMartinez
Copy link
Contributor Author

This shows that sometimes assertThat is being used instead of verifyThat. The former doesn't have error context while the latter does.

@JordanMartinez JordanMartinez changed the title Increase debugability [WIP] Increase debugability Aug 22, 2017
@JordanMartinez
Copy link
Contributor Author

For some reason, my compiler is flagging this line:

// Ambiguous method call. Both
//  verifyThat(Node, Matcher<Node>) in FxAssert and
//  verifyThat(NodeQuery, Matcher<Node>) in FxAssert match
FxAssert.verifyThat(nodeFinder.lookup("#firstId").query(), is(firstIdLabel));

@JordanMartinez
Copy link
Contributor Author

Ready for review.

@JordanMartinez JordanMartinez changed the title [WIP] Increase debugability [RFC] Increase debugability Aug 22, 2017
@brcolow
Copy link
Collaborator

brcolow commented Aug 22, 2017

Alright I will check it out asap. Thanks very much for all the work!

@brcolow
Copy link
Collaborator

brcolow commented Aug 22, 2017

Note to self, example of a failed test with this PR (note debugging info):

org.testfx.cases.acceptance.FxAssertBasicTest > button_has_label FAILED
    java.lang.AssertionError: 
    Expected: Node has text "clicked!"
         but: was <Button[id=button, styleClass=root button]'click me!'>
    Context:
       Keys pressed: []
       Mouse Buttons pressed: []
       Fired events since test began:
          WindowEvent [source = javafx.stage.Stage@75af8ba4, target = javafx.stage.Stage@75af8ba4, eventType = WINDOW_SHOWING, consumed = false]
          WindowEvent [source = javafx.stage.Stage@75af8ba4, target = javafx.stage.Stage@75af8ba4, eventType = WINDOW_SHOWN, consumed = false]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = javafx.scene.Scene@3110c4c6, eventType = MOUSE_ENTERED_TARGET, consumed = false, x = 1.0, y = 15.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 1.0, y = 15.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_ENTERED_TARGET, consumed = false, x = 1.0, y = 15.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 1.0, y = 15.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 3.0, y = 17.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 3.0, y = 17.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 6.0, y = 18.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 6.0, y = 18.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 8.0, y = 20.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 8.0, y = 20.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 11.0, y = 21.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 11.0, y = 21.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 13.0, y = 23.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 13.0, y = 23.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 16.0, y = 24.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 16.0, y = 24.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 18.0, y = 26.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 18.0, y = 26.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 21.0, y = 27.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 21.0, y = 27.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 23.0, y = 29.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 23.0, y = 29.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 26.0, y = 31.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 26.0, y = 31.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 28.0, y = 32.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 28.0, y = 32.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 31.0, y = 34.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 31.0, y = 34.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 33.0, y = 35.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 33.0, y = 35.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 36.0, y = 37.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 36.0, y = 37.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 38.0, y = 38.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 38.0, y = 38.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 41.0, y = 40.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 41.0, y = 40.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 43.0, y = 41.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 43.0, y = 41.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 46.0, y = 43.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 46.0, y = 43.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 49.0, y = 45.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 49.0, y = 45.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 51.0, y = 46.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 51.0, y = 46.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 54.0, y = 48.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 54.0, y = 48.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 56.0, y = 49.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 56.0, y = 49.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 59.0, y = 51.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 59.0, y = 51.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 61.0, y = 52.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 61.0, y = 52.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 64.0, y = 54.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 64.0, y = 54.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 66.0, y = 55.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 66.0, y = 55.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 69.0, y = 57.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 69.0, y = 57.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 71.0, y = 58.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 71.0, y = 58.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 74.0, y = 60.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 74.0, y = 60.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 76.0, y = 62.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 76.0, y = 62.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 79.0, y = 63.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 79.0, y = 63.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 81.0, y = 65.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 81.0, y = 65.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 84.0, y = 66.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 84.0, y = 66.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 86.0, y = 68.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 86.0, y = 68.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 89.0, y = 69.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 89.0, y = 69.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = javafx.scene.Scene@3110c4c6, eventType = MOUSE_EXITED_TARGET, consumed = false, x = 91.0, y = 71.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 91.0, y = 71.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_EXITED_TARGET, consumed = false, x = 91.0, y = 71.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 91.0, y = 71.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = javafx.scene.Scene@3110c4c6, eventType = MOUSE_ENTERED_TARGET, consumed = false, x = 91.0, y = 71.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 91.0, y = 71.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_ENTERED_TARGET, consumed = false, x = 91.0, y = 71.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 91.0, y = 71.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 91.0, y = 71.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 91.0, y = 71.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 94.0, y = 72.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 94.0, y = 72.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 96.0, y = 74.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 96.0, y = 74.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 99.0, y = 76.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 99.0, y = 76.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 101.0, y = 77.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 101.0, y = 77.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 104.0, y = 79.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 104.0, y = 79.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 106.0, y = 80.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 106.0, y = 80.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 109.0, y = 82.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 109.0, y = 82.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 111.0, y = 83.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 111.0, y = 83.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 114.0, y = 85.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 114.0, y = 85.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 116.0, y = 86.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 116.0, y = 86.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 119.0, y = 88.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 119.0, y = 88.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 121.0, y = 89.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 121.0, y = 89.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 124.0, y = 91.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 124.0, y = 91.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 126.0, y = 93.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 126.0, y = 93.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 129.0, y = 94.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 129.0, y = 94.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 131.0, y = 96.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 131.0, y = 96.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 134.0, y = 97.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 134.0, y = 97.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 136.0, y = 99.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 136.0, y = 99.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 139.0, y = 100.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 139.0, y = 100.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 141.0, y = 102.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 141.0, y = 102.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 144.0, y = 103.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 144.0, y = 103.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 146.0, y = 105.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 146.0, y = 105.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 149.0, y = 107.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 149.0, y = 107.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 151.0, y = 108.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 151.0, y = 108.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 154.0, y = 110.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 154.0, y = 110.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 156.0, y = 111.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 156.0, y = 111.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 159.0, y = 113.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 159.0, y = 113.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 161.0, y = 114.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 161.0, y = 114.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 164.0, y = 116.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 164.0, y = 116.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 166.0, y = 117.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 166.0, y = 117.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 169.0, y = 119.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 169.0, y = 119.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 171.0, y = 120.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 171.0, y = 120.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 174.0, y = 122.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 174.0, y = 122.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 177.0, y = 124.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 177.0, y = 124.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 179.0, y = 125.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 179.0, y = 125.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 182.0, y = 127.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 182.0, y = 127.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 184.0, y = 128.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 184.0, y = 128.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 187.0, y = 130.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 187.0, y = 130.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 189.0, y = 131.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 189.0, y = 131.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 192.0, y = 133.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 192.0, y = 133.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 194.0, y = 134.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 194.0, y = 134.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 197.0, y = 136.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 197.0, y = 136.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 199.0, y = 138.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 199.0, y = 138.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 202.0, y = 139.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 202.0, y = 139.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 204.0, y = 141.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 204.0, y = 141.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 207.0, y = 142.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 207.0, y = 142.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 209.0, y = 144.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 209.0, y = 144.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 212.0, y = 145.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 212.0, y = 145.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 214.0, y = 147.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 214.0, y = 147.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 217.0, y = 148.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 217.0, y = 148.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 219.0, y = 150.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 219.0, y = 150.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 222.0, y = 151.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 222.0, y = 151.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 224.0, y = 153.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 224.0, y = 153.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 227.0, y = 155.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 227.0, y = 155.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 229.0, y = 156.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 229.0, y = 156.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 232.0, y = 158.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 232.0, y = 158.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 234.0, y = 159.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 234.0, y = 159.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 237.0, y = 161.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 237.0, y = 161.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 239.0, y = 162.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 239.0, y = 162.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 242.0, y = 164.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 242.0, y = 164.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 244.0, y = 165.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 244.0, y = 165.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 247.0, y = 167.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 247.0, y = 167.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 249.0, y = 169.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 249.0, y = 169.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 252.0, y = 170.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 252.0, y = 170.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 254.0, y = 172.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 254.0, y = 172.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 257.0, y = 173.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 257.0, y = 173.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 259.0, y = 175.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 259.0, y = 175.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 262.0, y = 176.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 262.0, y = 176.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 264.0, y = 178.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 264.0, y = 178.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 267.0, y = 179.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 267.0, y = 179.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 269.0, y = 181.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 269.0, y = 181.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 272.0, y = 182.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 272.0, y = 182.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 274.0, y = 184.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 274.0, y = 184.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 277.0, y = 186.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 277.0, y = 186.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 279.0, y = 187.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 279.0, y = 187.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 282.0, y = 189.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 282.0, y = 189.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Button[id=button, styleClass=root button]'click me!', eventType = MOUSE_MOVED, consumed = false, x = 284.0, y = 190.0, z = 0.0, button = NONE, pickResult = PickResult [node = Button[id=button, styleClass=root button]'click me!', point = Point3D [x = 284.0, y = 190.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Text[text="click me!", x=0.0, y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL_VERTICAL_CENTER, font=Font[name=System Regular, family=System, style=Regular, size=13.0], fontSmoothingType=LCD, fill=0x333333ff], eventType = MOUSE_ENTERED_TARGET, consumed = false, x = 287.0, y = 192.0, z = 0.0, button = NONE, pickResult = PickResult [node = Text[text="click me!", x=0.0, y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL_VERTICAL_CENTER, font=Font[name=System Regular, family=System, style=Regular, size=13.0], fontSmoothingType=LCD, fill=0x333333ff], point = Point3D [x = 14.0, y = -13.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Text[text="click me!", x=0.0, y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL_VERTICAL_CENTER, font=Font[name=System Regular, family=System, style=Regular, size=13.0], fontSmoothingType=LCD, fill=0x333333ff], eventType = MOUSE_MOVED, consumed = false, x = 287.0, y = 192.0, z = 0.0, button = NONE, pickResult = PickResult [node = Text[text="click me!", x=0.0, y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL_VERTICAL_CENTER, font=Font[name=System Regular, family=System, style=Regular, size=13.0], fontSmoothingType=LCD, fill=0x333333ff], point = Point3D [x = 14.0, y = -13.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Text[text="click me!", x=0.0, y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL_VERTICAL_CENTER, font=Font[name=System Regular, family=System, style=Regular, size=13.0], fontSmoothingType=LCD, fill=0x333333ff], eventType = MOUSE_MOVED, consumed = false, x = 289.0, y = 193.0, z = 0.0, button = NONE, pickResult = PickResult [node = Text[text="click me!", x=0.0, y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL_VERTICAL_CENTER, font=Font[name=System Regular, family=System, style=Regular, size=13.0], fontSmoothingType=LCD, fill=0x333333ff], point = Point3D [x = 16.0, y = -12.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Text[text="click me!", x=0.0, y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL_VERTICAL_CENTER, font=Font[name=System Regular, family=System, style=Regular, size=13.0], fontSmoothingType=LCD, fill=0x333333ff], eventType = MOUSE_MOVED, consumed = false, x = 292.0, y = 195.0, z = 0.0, button = NONE, pickResult = PickResult [node = Text[text="click me!", x=0.0, y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL_VERTICAL_CENTER, font=Font[name=System Regular, family=System, style=Regular, size=13.0], fontSmoothingType=LCD, fill=0x333333ff], point = Point3D [x = 19.0, y = -10.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Text[text="click me!", x=0.0, y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL_VERTICAL_CENTER, font=Font[name=System Regular, family=System, style=Regular, size=13.0], fontSmoothingType=LCD, fill=0x333333ff], eventType = MOUSE_MOVED, consumed = false, x = 294.0, y = 196.0, z = 0.0, button = NONE, pickResult = PickResult [node = Text[text="click me!", x=0.0, y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL_VERTICAL_CENTER, font=Font[name=System Regular, family=System, style=Regular, size=13.0], fontSmoothingType=LCD, fill=0x333333ff], point = Point3D [x = 21.0, y = -9.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Text[text="click me!", x=0.0, y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL_VERTICAL_CENTER, font=Font[name=System Regular, family=System, style=Regular, size=13.0], fontSmoothingType=LCD, fill=0x333333ff], eventType = MOUSE_MOVED, consumed = false, x = 297.0, y = 198.0, z = 0.0, button = NONE, pickResult = PickResult [node = Text[text="click me!", x=0.0, y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL_VERTICAL_CENTER, font=Font[name=System Regular, family=System, style=Regular, size=13.0], fontSmoothingType=LCD, fill=0x333333ff], point = Point3D [x = 24.0, y = -7.0, z = 0.0], distance = 746.4101615137755]
          MouseEvent [source = javafx.stage.Stage@75af8ba4, target = Text[text="click me!", x=0.0, y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL_VERTICAL_CENTER, font=Font[name=System Regular, family=System, style=Regular, size=13.0], fontSmoothingType=LCD, fill=0x333333ff], eventType = MOUSE_MOVED, consumed = false, x = 300.0, y = 200.0, z = 0.0, button = NONE, pickResult = PickResult [node = Text[text="click me!", x=0.0, y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL_VERTICAL_CENTER, font=Font[name=System Regular, family=System, style=Regular, size=13.0], fontSmoothingType=LCD, fill=0x333333ff], point = Point3D [x = 27.0, y = -5.0, z = 0.0], distance = 746.4101615137755]
        at org.testfx.api.FxAssert.lambda$informedErrorHandler$1(FxAssert.java:292)
        at org.testfx.api.FxAssert.verifyThatImpl(FxAssert.java:321)
        at org.testfx.api.FxAssert.verifyThatImpl(FxAssert.java:274)
        at org.testfx.api.FxAssert.verifyThat(FxAssert.java:145)
        at org.testfx.cases.acceptance.FxAssertBasicTest.button_has_label(FxAssertBasicTest.java:99)

@JordanMartinez
Copy link
Contributor Author

@brcolow Do you think we should reduce the MouseMoved events? They're the ones that take up the most space on the console. I don't want to address that in this PR, but for a future one perhaps?

@brcolow
Copy link
Collaborator

brcolow commented Aug 23, 2017

I think that a future PR should probably in some way address the notion of where/how the information is printed (currently console stdout) such as json, html, etc. Then the mouse events can for example be hidden by default but expandable if they want to be seen. Also may want to look into Travis CI folding.

@JordanMartinez
Copy link
Contributor Author

The folding idea would be helpful

@brcolow
Copy link
Collaborator

brcolow commented Aug 23, 2017

Really great first step in making TestFX failures provide more useful information. Thanks again.

@brcolow brcolow merged commit 8d281f9 into TestFX:master Aug 23, 2017
@JordanMartinez
Copy link
Contributor Author

As discussed in the Gitter Chat, a few other ideas for improving this work in a future PR are:

  • extract the third argument (FxRobot) in verifyThat into a DebugUtils class. Then, one could write verifyThat(node, matcher, DebugUtils.informedErrorHandler(thisAsFxRobot)
  • in the above DebugUtils class, separate items into functions that can be composed, so that one can quickly add only the things they need to see (e.g. keys pressed, buttons pressed, etc.)
  • change the mapping function to UnaryOperator<String> so that the developer can run additional things within the error handler without forgetting to return a new AssertionError (they may return the original one). Then, the error handler code looks like:
try {
    matcher.match(node);
} catch (AssertionError error) {
    throw`new AssertionError(mapper.apply(error.getMessage));
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Increase debugability of TestFX tests
2 participants