/**
  * Returns an {@link EventSynchronizer} for the specified {@link EventType}. The {@link
  * EventSynchronizer} is automatically registered on the {@link Scene}. Therefore, you only have
  * to fire the event and call {@link EventSynchronizer#await()} after that to wait for the event
  * processing.
  *
  * <p>For example, the following snippet waits for the processing of a MOUSE_PRESSED event to
  * finish:
  *
  * <pre>
  * // simulate mouse press
  * Robot robot = new Robot();
  * EventSynchronizer<MouseEvent> es = fxNonApplicationThreadRule.getEventSynchronizer(MouseEvent.MOUSE_PRESSED);
  * robot.mousePress(InputEvent.BUTTON1_MASK);
  * es.await();
  * </pre>
  *
  * Convenience methods are provided for standard interactions:
  *
  * <ul>
  *   <li>{@link #keyPress(Robot, int)}
  *   <li>{@link #keyRelease(Robot, int)}
  *   <li>{@link #mousePress(Robot, int)}
  *   <li>{@link #mouseRelease(Robot, int)}
  *   <li>{@link #mouseDrag(Robot, int, int)}
  *   <li>{@link #moveTo(Robot, Node, double, double)}
  * </ul>
  *
  * @param type
  * @return An {@link EventSynchronizer} that is registered for the specified {@link EventType} on
  *     the {@link Scene}.
  */
 @SuppressWarnings("unchecked")
 public <T extends Event> EventSynchronizer<T> getEventSynchronizer(EventType<T> type) {
   if (!eventSynchronizers.containsKey(type)) {
     eventSynchronizers.put(type, new EventSynchronizer<T>(scene, type));
   }
   EventSynchronizer<T> eventSynchronizer = (EventSynchronizer<T>) eventSynchronizers.get(type);
   eventSynchronizer.register();
   return eventSynchronizer;
 }
 public void moveTo(Robot robot, Node visual, double localX, double localY)
     throws InterruptedException {
   Point2D localToScene = visual.localToScene(localX, localY);
   double x = scene.getWindow().getX() + localToScene.getX();
   double y = scene.getWindow().getY() + localToScene.getY();
   EventSynchronizer<MouseEvent> synchronizer =
       new EventSynchronizer<MouseEvent>(visual, MouseEvent.MOUSE_ENTERED);
   synchronizer.register();
   robot.mouseMove((int) x, (int) y);
   synchronizer.await();
 }