@Test public void executeTest() { List<TestRunnable> runnables = getRunnableList(); Iterator<TestRunnable> it = runnables.iterator(); while (it.hasNext()) { scheduler.execute(it.next()); } // all should run now assertEquals(TEST_QTY, scheduler.tick(Clock.lastKnownTimeMillis())); it = runnables.iterator(); while (it.hasNext()) { assertEquals(1, it.next().getRunCount()); } // verify no more run after a second tick assertEquals(scheduler.tick(), 0); it = runnables.iterator(); while (it.hasNext()) { assertEquals(1, it.next().getRunCount()); } }
@Test public void tickHandlesRuntimeExceptionTest() { RuntimeException failure = new SuppressedStackRuntimeException(); final AtomicReference<Throwable> handledException = new AtomicReference<>(null); scheduler.execute(new TestRuntimeFailureRunnable(failure)); int runCount = scheduler.tick(new ExceptionHandler() { @Override public void handleException(Throwable thrown) { handledException.set(thrown); } }); assertEquals(1, runCount); assertTrue(handledException.get() == failure); }
@Test public void advanceHandlesRuntimeExceptionTest() { RuntimeException failure = new SuppressedStackRuntimeException(); final AtomicReference<Throwable> handledException = new AtomicReference<>(null); scheduler.execute(new TestRuntimeFailureRunnable(failure)); int runCount = scheduler.advance(10, new ExceptionHandler() { @Override public void handleException(Throwable thrown) { handledException.set(thrown); } }); assertEquals(1, runCount); assertTrue(handledException.get() == failure); }
@Test public void clearTasksTest() { assertTrue(scheduler.clearTasks().isEmpty()); TestRunnable executeTask = new TestRunnable(); TestRunnable scheduleTask = new TestRunnable(); scheduler.execute(executeTask); scheduler.schedule(scheduleTask, 1); List<Runnable> result = scheduler.clearTasks(); assertEquals(2, result.size()); assertTrue(result.contains(executeTask)); assertTrue(result.contains(scheduleTask)); } }
@Test public void advanceWithoutHandlerThrowsRuntimeExceptionTest() { RuntimeException failure = new SuppressedStackRuntimeException(); scheduler.execute(new TestRuntimeFailureRunnable(failure)); try { scheduler.advance(10); fail("Exception should have thrown"); } catch (Exception e) { assertTrue(e == failure); } }
@Test public void tickWithoutHandlerThrowsRuntimeExceptionTest() { RuntimeException failure = new SuppressedStackRuntimeException(); scheduler.execute(new TestRuntimeFailureRunnable(failure)); try { scheduler.tick(); fail("Exception should have thrown"); } catch (Exception e) { assertTrue(e == failure); } }
@Test public void getDelayTillNextTaskTest() { assertEquals(Long.MAX_VALUE, scheduler.getDelayTillNextTask()); scheduler.schedule(DoNothingRunnable.instance(), 1); assertEquals(1, scheduler.getDelayTillNextTask()); scheduler.execute(DoNothingRunnable.instance()); assertEquals(0, scheduler.getDelayTillNextTask()); }
@Test public void hasTaskReadyToRunTest() { assertFalse(scheduler.hasTaskReadyToRun()); scheduler.schedule(DoNothingRunnable.instance(), 1); assertFalse(scheduler.hasTaskReadyToRun()); scheduler.execute(DoNothingRunnable.instance()); assertTrue(scheduler.hasTaskReadyToRun()); }
@Test public void scheduleRunnableTest() { long scheduleDelay = 1000 * 10; TestRunnable executeRun = new TestRunnable(); TestRunnable scheduleRun = new TestRunnable(); scheduler.schedule(scheduleRun, scheduleDelay); scheduler.execute(executeRun); assertEquals(1, scheduler.tick()); assertEquals(1, executeRun.getRunCount()); // should have run assertEquals(0, scheduleRun.getRunCount()); // should NOT have run yet assertEquals(1, scheduler.advance(scheduleDelay)); assertEquals(1, executeRun.getRunCount()); // should NOT have run again assertEquals(1, scheduleRun.getRunCount()); // should have run assertEquals(scheduler.advance(scheduleDelay), 0); // should not execute anything assertEquals(1, executeRun.getRunCount()); // should NOT have run again assertEquals(1, scheduleRun.getRunCount()); // should NOT have run again }