@Test public void sequentialExecutorShouldExecuteTasksAccordingToDependencies() { TaskBuilder builder = new TaskBuilder(); Runnables.TimedRunnable t1 = Runnables.timedRunnable(10); Runnables.TimedRunnable t2 = Runnables.timedRunnable(10); Runnables.TimedRunnable t3 = Runnables.timedRunnable(10); Task a = builder.justRun(t1); Task b = builder.run(t2).after(a); Task c = builder.run(t3).after(a); Task seq = builder.sequence(a, b, c); new SequentialTaskExecutor().execute(seq); assertTrue(t1.getTime() < t2.getTime()); assertTrue(t2.getTime() < t3.getTime()); for (Runnables.TimedRunnable tr : Arrays.asList(t1, t2, t3)) { assertEquals(1, tr.callCount()); } }