package uk.co.acuminous.julez.runner;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
import uk.co.acuminous.julez.event.Event;
import uk.co.acuminous.julez.event.filter.EventDataFilter;
import uk.co.acuminous.julez.event.filter.EventFilter;
import uk.co.acuminous.julez.scenario.source.ScenarioHopper;
import uk.co.acuminous.julez.test.TestEventRepository;
public class MultiConcurrentScenarioRunnerTest {
private TestEventRepository repository;
private ConcurrentScenarioRunner runner1;
private ConcurrentScenarioRunner runner2;
private MultiConcurrentScenarioRunner multiRunner;
@Before
public void init() {
repository = new TestEventRepository();
runner1 = new ConcurrentScenarioRunner().queue(new ScenarioHopper());
runner2 = new ConcurrentScenarioRunner().queue(new ScenarioHopper());
multiRunner = new MultiConcurrentScenarioRunner(runner1, runner2);
}
@Test
public void startsAllRunners() {
EventFilter filter = new EventDataFilter().filterEventsWhere(Event.TYPE).matches(ScenarioRunnerEvent.BEGIN).register(repository);
runner1.register(filter);
runner2.register(filter);
multiRunner.go();
assertEquals(2, repository.count());
}
@Test
public void waitsForAllRunnersToFinish() {
EventFilter filter = new EventDataFilter().filterEventsWhere(Event.TYPE).matches(ScenarioRunnerEvent.END).register(repository);
runner1.register(filter);
runner2.register(filter);
multiRunner.go();
assertEquals(2, repository.count());
}
@Test
public void raisesBeginEvent() {
multiRunner.register(repository).go();
assertEquals(ScenarioRunnerEvent.BEGIN, repository.first().getType());
}
@Test
public void raisesEndEvent() {
multiRunner.register(repository).go();
assertEquals(ScenarioRunnerEvent.END, repository.last().getType());
}
}