use of com.b3dgs.lionengine.graphic.Screen in project lionengine by b3dgs.
the class LoaderTest method testScreenInterrupted.
/**
* Test interrupted.
*/
@Test
void testScreenInterrupted() {
ScreenMock.setScreenWait(true);
try {
final AtomicReference<Throwable> exception = new AtomicReference<>();
final Semaphore semaphore = new Semaphore(0);
final Thread thread = new Thread() {
@Override
public void run() {
final Screen screen = Graphics.createScreen(CONFIG);
screen.start();
screen.awaitReady();
}
};
thread.setUncaughtExceptionHandler((t, throwable) -> {
exception.set(throwable);
semaphore.release();
});
thread.start();
UtilTests.pause(ScreenMock.READY_TIMEOUT / 2);
thread.interrupt();
assertTimeout(ScreenMock.READY_TIMEOUT * 2, semaphore::acquire);
assertEquals(LionEngineException.class.getName() + ": Unable to get screen ready !", exception.get().toString());
} finally {
ScreenMock.setScreenWait(false);
}
}
use of com.b3dgs.lionengine.graphic.Screen in project lionengine by b3dgs.
the class LoaderTest method testInterruptedUnchecked.
/**
* Test interrupted unchecked exception.
*/
@Test
void testInterruptedUnchecked() {
Graphics.setFactoryGraphic(new FactoryGraphicMock() {
@Override
public Screen createScreen(Config config) {
return null;
}
});
final AtomicReference<Throwable> exception = new AtomicReference<>();
final Semaphore semaphore = new Semaphore(0);
final Thread thread = new Thread() {
@Override
public void run() {
final TaskFuture future = Loader.start(CONFIG, SequenceInterruptMock.class);
future.await();
}
};
thread.setUncaughtExceptionHandler((t, throwable) -> {
exception.set(throwable);
semaphore.release();
});
Verbose.info("*********************************** EXPECTED VERBOSE ***********************************");
thread.start();
assertTimeout(SequenceInterruptMock.PAUSE_MILLI * 2L, semaphore::acquire);
assertTrue(exception.get().getCause() instanceof NullPointerException);
Verbose.info("****************************************************************************************");
Graphics.setFactoryGraphic(new FactoryGraphicMock());
}
use of com.b3dgs.lionengine.graphic.Screen in project lionengine by b3dgs.
the class Loader method handle.
/**
* Handle the sequence with its screen until no more sequence to run.
*
* @param config The configuration used.
* @param sequenceClass The the next sequence to start.
* @param arguments The sequence arguments list if needed by its constructor.
* @throws LionEngineException If an exception occurred.
*/
private static void handle(Config config, Class<? extends Sequencable> sequenceClass, Object... arguments) {
final Screen screen = Graphics.createScreen(config);
try {
screen.start();
screen.awaitReady();
final Context context = new ContextWrapper(screen);
Sequencable nextSequence = UtilSequence.create(sequenceClass, context, arguments);
while (nextSequence != null) {
final Sequencable sequence = nextSequence;
final String sequenceName = sequence.getClass().getName();
Verbose.info(SEQUENCE_START, sequenceName);
sequence.start(screen);
Verbose.info(SEQUENCE_END, sequenceName);
nextSequence = sequence.getNextSequence();
sequence.onTerminated(nextSequence != null);
}
} finally {
screen.dispose();
config.getDevices().forEach(InputDevice::close);
}
}
use of com.b3dgs.lionengine.graphic.Screen in project lionengine by b3dgs.
the class LoopExtrapolatedTest method testNoSyncFullscreen.
/**
* Test without sync full screen.
*/
@Test
void testNoSyncFullscreen() {
ScreenMock.setScreenWait(false);
final Screen screen = new ScreenMock(new Config(new Resolution(320, 240, 0), 16, false));
loop.notifyRateChanged(50);
final Thread thread = getTask(screen);
thread.start();
assertTimeout(1000L, thread::join);
assertEquals(maxTick.get(), tick.get());
assertEquals(tick.get(), rendered.get());
assertTrue(extrapolation.get().doubleValue() > 0, String.valueOf(extrapolation.get()));
final int expectedRate = screen.getConfig().getOutput().getRate();
assertTrue(computed.get() > expectedRate, String.valueOf(computed.get()));
}
use of com.b3dgs.lionengine.graphic.Screen in project lionengine by b3dgs.
the class LoopExtrapolatedTest method testUnready.
/**
* Test with not ready screen.
*/
@Test
void testUnready() {
ScreenMock.setScreenWait(true);
try {
final Screen screen = new ScreenMock(new Config(new Resolution(320, 240, 50), 16, true));
final Thread thread = getTask(screen);
thread.start();
assertTimeout(1000L, latch::await);
loop.stop();
assertTimeout(1000L, thread::join);
assertEquals(0, tick.get());
assertEquals(0, rendered.get());
assertNull(extrapolation.get());
assertEquals(-1, computed.get());
} finally {
ScreenMock.setScreenWait(false);
}
}
Aggregations