modules/graphics/src/test/java/test/javafx/concurrent/ServiceLifecycleTest.java

Print this page
rev 9250 : 8134762: Refactor Javafx graphics module tests for clear separation of tests
Reviewed-by:

*** 21,44 **** * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ ! package javafx.concurrent; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; ! import javafx.concurrent.mocks.MythicalEvent; ! import javafx.concurrent.mocks.SimpleTask; import javafx.event.Event; import javafx.event.EventHandler; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import org.junit.After; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; --- 21,52 ---- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ ! package test.javafx.concurrent; + import com.sun.org.apache.xerces.internal.util.DOMUtil; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; ! import test.javafx.concurrent.mocks.MythicalEvent; ! import test.javafx.concurrent.mocks.SimpleTask; import javafx.event.Event; import javafx.event.EventHandler; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; + import javafx.concurrent.Service; + import javafx.concurrent.ServiceShim; + import javafx.concurrent.Task; + import javafx.concurrent.TaskShim; + import javafx.concurrent.Worker; + import javafx.concurrent.WorkerStateEvent; + import javafx.event.EventType; import org.junit.After; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull;
*** 63,73 **** */ protected ManualTask task; @Override protected TestServiceFactory setupServiceFactory() { return new TestServiceFactory() { ! @Override protected AbstractTask createTestTask() { return task = new ManualTask(); } }; } --- 71,81 ---- */ protected ManualTask task; @Override protected TestServiceFactory setupServiceFactory() { return new TestServiceFactory() { ! @Override public AbstractTask createTestTask() { return task = new ManualTask(); } }; }
*** 1480,1490 **** @Test public void canInvokeSettersOnRandomThread() { RandomThread random = new RandomThread(() -> { DoNothingService s = null; try { s = new DoNothingService(); ! s.setEventHandler(WorkerStateEvent.ANY, event -> { }); s.setOnCancelled(event -> { }); s.setOnFailed(event -> { }); --- 1488,1498 ---- @Test public void canInvokeSettersOnRandomThread() { RandomThread random = new RandomThread(() -> { DoNothingService s = null; try { s = new DoNothingService(); ! ServiceShim.setEventHandler(s, WorkerStateEvent.ANY, event -> { }); s.setOnCancelled(event -> { }); s.setOnFailed(event -> { });
*** 1528,1538 **** }); } @Test (expected = IllegalStateException.class) public void cannotInvokeSettersOnRandomThreadAfterStart_1() throws Throwable { ! assertThrowsException(s -> s.setEventHandler(WorkerStateEvent.ANY, event -> { })); } @Test (expected = IllegalStateException.class) public void cannotInvokeSettersOnRandomThreadAfterStart_2() throws Throwable { --- 1536,1547 ---- }); } @Test (expected = IllegalStateException.class) public void cannotInvokeSettersOnRandomThreadAfterStart_1() throws Throwable { ! assertThrowsException(s -> ! ServiceShim.setEventHandler(s, WorkerStateEvent.ANY, event -> { })); } @Test (expected = IllegalStateException.class) public void cannotInvokeSettersOnRandomThreadAfterStart_2() throws Throwable {
*** 1852,1862 **** /** * A service which does absolutely nothing and isn't hardwired to believe that * the test thread is the FX thread (unlike the other services in these tests) */ ! private static final class DoNothingService extends Service { private Thread pretendFXThread; private ConcurrentLinkedQueue<Runnable> eventQueue = new ConcurrentLinkedQueue<>(); private volatile boolean shutdown = false; public DoNothingService() { --- 1861,1871 ---- /** * A service which does absolutely nothing and isn't hardwired to believe that * the test thread is the FX thread (unlike the other services in these tests) */ ! private static final class DoNothingService extends ServiceShim { private Thread pretendFXThread; private ConcurrentLinkedQueue<Runnable> eventQueue = new ConcurrentLinkedQueue<>(); private volatile boolean shutdown = false; public DoNothingService() {
*** 1869,1895 **** void shutdown() { shutdown = true; } @Override protected Task createTask() { ! return new Task() { @Override protected Object call() throws Exception { return null; } ! @Override boolean isFxApplicationThread() { return Thread.currentThread() == pretendFXThread; } @Override ! void runLater(Runnable r) { DoNothingService.this.runLater(r); } }; } ! @Override void runLater(Runnable r) { eventQueue.add(r); if (pretendFXThread == null) { pretendFXThread = new Thread() { @Override public void run() { while (!shutdown) { --- 1878,1904 ---- void shutdown() { shutdown = true; } @Override protected Task createTask() { ! return new TaskShim() { @Override protected Object call() throws Exception { return null; } ! @Override public boolean isFxApplicationThread() { return Thread.currentThread() == pretendFXThread; } @Override ! public void runLater(Runnable r) { DoNothingService.this.runLater(r); } }; } ! @Override public void runLater(Runnable r) { eventQueue.add(r); if (pretendFXThread == null) { pretendFXThread = new Thread() { @Override public void run() { while (!shutdown) {
*** 1902,1912 **** }; pretendFXThread.start(); } } ! @Override boolean isFxApplicationThread() { return Thread.currentThread() == pretendFXThread; } } /*************************************************************************** --- 1911,1921 ---- }; pretendFXThread.start(); } } ! @Override public boolean isFxApplicationThread() { return Thread.currentThread() == pretendFXThread; } } /***************************************************************************
*** 1917,1953 **** **************************************************************************/ @Test public void eventFiredOnSubclassWorks() { final AtomicBoolean result = new AtomicBoolean(false); TestServiceFactory factory = new TestServiceFactory() { ! @Override protected AbstractTask createTestTask() { return new SimpleTask(); } ! @Override protected Service<String> createService() { MythicalService svc = new MythicalService(); svc.setHandler(mythicalEvent -> result.set(true)); ! svc.fireEvent(new MythicalEvent()); return svc; } }; Service<String> svc = factory.createService(); svc.start(); assertTrue(result.get()); } ! private static final class MythicalService extends Service<String> { public void setHandler(EventHandler<MythicalEvent> h) { ! super.setEventHandler(MythicalEvent.ANY, h); } @Override protected Task<String> createTask() { return new SimpleTask(); } ! @Override void checkThread() { } ! @Override void runLater(Runnable r) { r.run(); } } } --- 1926,1962 ---- **************************************************************************/ @Test public void eventFiredOnSubclassWorks() { final AtomicBoolean result = new AtomicBoolean(false); TestServiceFactory factory = new TestServiceFactory() { ! @Override public AbstractTask createTestTask() { return new SimpleTask(); } ! @Override public Service<String> createService() { MythicalService svc = new MythicalService(); svc.setHandler(mythicalEvent -> result.set(true)); ! ServiceShim.fireEvent(svc, new MythicalEvent()); return svc; } }; Service<String> svc = factory.createService(); svc.start(); assertTrue(result.get()); } ! private static final class MythicalService extends ServiceShim<String> { public void setHandler(EventHandler<MythicalEvent> h) { ! ServiceShim.setEventHandler(this, MythicalEvent.ANY, h); } @Override protected Task<String> createTask() { return new SimpleTask(); } ! @Override public void checkThread() { } ! @Override public void runLater(Runnable r) { r.run(); } } }