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();
}
}
}