Class FxToolkit


  • public final class FxToolkit
    extends java.lang.Object
    Responsible for setup and cleanup of JavaFX fixtures that need the JavaFX thread.

    Overview

    This class methods cover three different kinds of fixtures:

    1. Container fixtures, which are registered as registeredStage.
    2. Content fixtures, which are attached to the registered registeredStage.
    3. Individual fixtures, which do not require a registeredStage.
    Additionally, it keeps an internal context.

    1. Container Fixtures

    They can be registered as registeredStage and provide a top-level container, i.e. Stages.

    The primary stage can be registered as registeredStage using registerPrimaryStage(). This call is mandatory before any other JavaFX fixture can be created.

    Other stages can be registered as registeredStage using registerStage(Supplier<Stage>).

    2. Content Fixtures

    They can be attached to the registeredStage.

    Either constructed by calling an Application.start(), by supplying Scenes, Parents, or by consuming a Stage.

    Use: setupStage(Consumer<Stage>), setupApplication(Class<? extends Application>), setupScene(Supplier<Scene>) or setupSceneRoot(Supplier<Parent>)

    3. Individual Fixtures

    To setup individual Stages, Scenes or Nodes use setupFixture(Runnable) and setupFixture(Callable).

    Internal Context

    Is internally responsible for handle the registered Stage for attachments, handle timeouts, provide the Application for the Toolkit launch and execute the setup in the JavaFX thread. The primary Stage is constructed by the platform.

    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private FxToolkit()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static void cleanupAfterTest​(FxRobot robot, javafx.application.Application application)  
      static void cleanupApplication​(javafx.application.Application application)
      Performs the cleanup of the application.
      static void cleanupInput​(FxRobot robot)
      Runs on the JavaFX Application Thread: Releases remaining mouse and keyboard events.
      static void cleanupStages()
      Runs on the JavaFX Application Thread: Hides all windows returned from JavaVersionAdapter.getWindows() and returns once finished.
      (package private) static void handleCommonRuntimeExceptions​(java.lang.RuntimeException exception)  
      static void hideStage()
      Runs on the JavaFX Application Thread: Hides the registered stage via Window.hide() and returns once finished.
      static boolean isFXApplicationThreadRunning()
      Detects if the JavaFx Application Thread is currently running.
      static javafx.stage.Stage registerPrimaryStage()
      Sets up the PrimaryStageApplication to use in tests, prevents it from shutting down when the last window is closed, and returns the Stage from Application.start(Stage).
      static javafx.stage.Stage registerStage​(java.util.function.Supplier<javafx.stage.Stage> stageSupplier)
      Runs the stageSupplier on the JavaFX Application Thread, registers the supplied stage, and returns that stage.
      static javafx.application.Application setupApplication​(java.lang.Class<? extends javafx.application.Application> applicationClass, java.lang.String... applicationArgs)
      Sets up the given application with its given arguments and returns that application once finished.
      static javafx.application.Application setupApplication​(java.util.function.Supplier<javafx.application.Application> applicationSupplier)
      Sets up the supplied application and returns that application once finished.
      static void setupFixture​(java.lang.Runnable runnable)
      Runs the given runnable on the JavaFX Application Thread and returns once finished.
      static <T> T setupFixture​(java.util.concurrent.Callable<T> callable)
      Runs the given callable on the JavaFX Application Thread and returns once finished.
      static javafx.scene.Scene setupScene​(java.util.function.Supplier<javafx.scene.Scene> sceneSupplier)
      Runs the sceneSupplier on the JavaFX Application Thread, sets the registered stage's scene to the supplied scene, and returns the supplied scene once finished.
      static javafx.scene.Parent setupSceneRoot​(java.util.function.Supplier<javafx.scene.Parent> sceneRootSupplier)
      Runs the sceneRootSupplier on the JavaFX Application Thread, sets the registered stage's scene's root node to the supplied root node, and returns the supplied root node once finished.
      static javafx.stage.Stage setupStage​(java.util.function.Consumer<javafx.stage.Stage> stageConsumer)
      Sets up the registered stage by passing it into the given stageConsumer on the JavaFX Application Thread and returns the stage once finished.
      static void showStage()
      Runs on the JavaFX Application Thread: Shows the registered stage via Stage.show(), moves it to the front via Stage.toFront(), and returns once finished.
      static FxToolkitContext toolkitContext()
      Returns the internal context.
      private static <T> T waitForSetup​(java.util.concurrent.Future<T> future)
      Waits for the given future to be set before returning or times out after FxToolkitContext.getSetupTimeoutInMillis() is reached.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • FxToolkit

        private FxToolkit()
    • Method Detail

      • registerPrimaryStage

        public static javafx.stage.Stage registerPrimaryStage()
                                                       throws java.util.concurrent.TimeoutException
        Sets up the PrimaryStageApplication to use in tests, prevents it from shutting down when the last window is closed, and returns the Stage from Application.start(Stage).
        Throws:
        java.util.concurrent.TimeoutException - if execution is not finished before FxToolkitContext.getLaunchTimeoutInMillis()
      • registerStage

        public static javafx.stage.Stage registerStage​(java.util.function.Supplier<javafx.stage.Stage> stageSupplier)
                                                throws java.util.concurrent.TimeoutException
        Runs the stageSupplier on the JavaFX Application Thread, registers the supplied stage, and returns that stage.
        Throws:
        java.util.concurrent.TimeoutException - if execution is not finished before FxToolkitContext.getSetupTimeoutInMillis()
      • setupStage

        public static javafx.stage.Stage setupStage​(java.util.function.Consumer<javafx.stage.Stage> stageConsumer)
                                             throws java.util.concurrent.TimeoutException
        Sets up the registered stage by passing it into the given stageConsumer on the JavaFX Application Thread and returns the stage once finished.
        Throws:
        java.util.concurrent.TimeoutException - if execution is not finished before FxToolkitContext.getSetupTimeoutInMillis()
      • setupApplication

        public static javafx.application.Application setupApplication​(java.lang.Class<? extends javafx.application.Application> applicationClass,
                                                                      java.lang.String... applicationArgs)
                                                               throws java.util.concurrent.TimeoutException
        Sets up the given application with its given arguments and returns that application once finished.
        Throws:
        java.util.concurrent.TimeoutException - if execution is not finished before FxToolkitContext.getSetupTimeoutInMillis()
      • setupApplication

        public static javafx.application.Application setupApplication​(java.util.function.Supplier<javafx.application.Application> applicationSupplier)
                                                               throws java.util.concurrent.TimeoutException
        Sets up the supplied application and returns that application once finished.
        Throws:
        java.util.concurrent.TimeoutException - if execution is not finished before FxToolkitContext.getSetupTimeoutInMillis()
      • cleanupApplication

        public static void cleanupApplication​(javafx.application.Application application)
                                       throws java.util.concurrent.TimeoutException
        Performs the cleanup of the application. This is done by calling ToolkitService.cleanupApplication(Application) (which usually calls the stop method of the application).
        Parameters:
        application - the application to clean up
        Throws:
        java.util.concurrent.TimeoutException - if cleanup is not finished before FxToolkitContext.getSetupTimeoutInMillis() or the FX Application Thread is not running
      • cleanupAfterTest

        public static void cleanupAfterTest​(FxRobot robot,
                                            javafx.application.Application application)
                                     throws java.util.concurrent.TimeoutException
        Throws:
        java.util.concurrent.TimeoutException
      • setupScene

        public static javafx.scene.Scene setupScene​(java.util.function.Supplier<javafx.scene.Scene> sceneSupplier)
                                             throws java.util.concurrent.TimeoutException
        Runs the sceneSupplier on the JavaFX Application Thread, sets the registered stage's scene to the supplied scene, and returns the supplied scene once finished.
        Throws:
        java.util.concurrent.TimeoutException - if execution is not finished before FxToolkitContext.getSetupTimeoutInMillis()
      • setupSceneRoot

        public static javafx.scene.Parent setupSceneRoot​(java.util.function.Supplier<javafx.scene.Parent> sceneRootSupplier)
                                                  throws java.util.concurrent.TimeoutException
        Runs the sceneRootSupplier on the JavaFX Application Thread, sets the registered stage's scene's root node to the supplied root node, and returns the supplied root node once finished.
        Throws:
        java.util.concurrent.TimeoutException
      • setupFixture

        public static void setupFixture​(java.lang.Runnable runnable)
                                 throws java.util.concurrent.TimeoutException
        Runs the given runnable on the JavaFX Application Thread and returns once finished.
        Throws:
        java.util.concurrent.TimeoutException
      • setupFixture

        public static <T> T setupFixture​(java.util.concurrent.Callable<T> callable)
                                  throws java.util.concurrent.TimeoutException
        Runs the given callable on the JavaFX Application Thread and returns once finished.
        Throws:
        java.util.concurrent.TimeoutException
      • showStage

        public static void showStage()
                              throws java.util.concurrent.TimeoutException
        Runs on the JavaFX Application Thread: Shows the registered stage via Stage.show(), moves it to the front via Stage.toFront(), and returns once finished.
        Throws:
        java.util.concurrent.TimeoutException
      • hideStage

        public static void hideStage()
                              throws java.util.concurrent.TimeoutException
        Runs on the JavaFX Application Thread: Hides the registered stage via Window.hide() and returns once finished.
        Throws:
        java.util.concurrent.TimeoutException
      • cleanupStages

        public static void cleanupStages()
                                  throws java.util.concurrent.TimeoutException
        Runs on the JavaFX Application Thread: Hides all windows returned from JavaVersionAdapter.getWindows() and returns once finished.
        Throws:
        java.util.concurrent.TimeoutException
      • cleanupInput

        public static void cleanupInput​(FxRobot robot)
        Runs on the JavaFX Application Thread: Releases remaining mouse and keyboard events. Not cleaning these events may have side effects on the next UI tests
      • toolkitContext

        public static FxToolkitContext toolkitContext()
        Returns the internal context.
      • waitForSetup

        private static <T> T waitForSetup​(java.util.concurrent.Future<T> future)
                                   throws java.util.concurrent.TimeoutException
        Waits for the given future to be set before returning or times out after FxToolkitContext.getSetupTimeoutInMillis() is reached.
        Throws:
        java.util.concurrent.TimeoutException
      • isFXApplicationThreadRunning

        public static boolean isFXApplicationThreadRunning()
        Detects if the JavaFx Application Thread is currently running.
        Returns:
        true if the FX Application Thread is running, false otherwise
      • handleCommonRuntimeExceptions

        static void handleCommonRuntimeExceptions​(java.lang.RuntimeException exception)