@@ -0,0 +1,1547 @@
+package moe.tristan.easyfxml.util;%0A%0Aimport javafx.application.Platform;%0Aimport moe.tristan.easyfxml.spring.SpringContext;%0Aimport org.junit.Before;%0Aimport org.junit.Test;%0Aimport org.junit.runner.RunWith;%0Aimport org.springframework.test.context.ContextConfiguration;%0Aimport org.springframework.test.context.junit4.SpringRunner;%0Aimport org.testfx.framework.junit.ApplicationTest;%0A%0Aimport java.util.concurrent.CompletableFuture;%0Aimport java.util.concurrent.ExecutionException;%0A%0Aimport static org.assertj.core.api.Assertions.assertThat;%0A%0A@ContextConfiguration(classes = SpringContext.class)%0A@RunWith(SpringRunner.class)%0Apublic class FxAsyncTest extends ApplicationTest %7B%0A%0A    private Thread fxThread = null;%0A%0A    @Before%0A    public void setUp() throws ExecutionException, InterruptedException %7B%0A        final CompletableFuture%3CThread%3E fxThreadFetch = new CompletableFuture%3C%3E();%0A        Platform.runLater(() -%3E fxThreadFetch.complete(Thread.currentThread()));%0A        fxThread =fxThreadFetch.get();%0A    %7D%0A%0A    @Test%0A    public void doOnFxThread() throws ExecutionException, InterruptedException %7B%0A        FxAsync.doOnFxThread(%0A            fxThread,%0A            expected -%3E assertThat(Thread.currentThread()).isEqualTo(expected)%0A        ).toCompletableFuture().get();%0A    %7D%0A%0A    @Test%0A    public void computeOnFxThread() throws ExecutionException, InterruptedException %7B%0A        FxAsync.computeOnFxThread(%0A            fxThread,%0A            expected -%3E assertThat(Thread.currentThread()).isEqualTo(expected)%0A        ).toCompletableFuture().get();%0A    %7D%0A%7D%0A

Add rudimentary testing of FxAsync class.