package uk.co.acuminous.julez.event.handler;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import static java.util.concurrent.TimeUnit.*;
import uk.co.acuminous.julez.runner.ScenarioRunnerEventFactory;
import uk.co.acuminous.julez.util.ConcurrencyUtils;
public class DurationMonitorTest {
private ScenarioRunnerEventFactory scenarioRunnerEventFactory;
@Before
public void init() {
scenarioRunnerEventFactory = new ScenarioRunnerEventFactory();
}
@Test
public void reportsDurationBeforeStarting() {
assertEquals(0, new DurationMonitor().getDuration());
}
@Test
public void reportsDurationWhileRunning() {
DurationMonitor monitor = new DurationMonitor();
monitor.onEvent(scenarioRunnerEventFactory.begin());
ConcurrencyUtils.sleep(250, MILLISECONDS);
long duration = monitor.getDuration();
assertTrue("Incorrect duration", duration >= 250);
assertTrue("Incorrect duration", monitor.getDuration() < 500);
ConcurrencyUtils.sleep(250, MILLISECONDS);
duration = monitor.getDuration();
assertTrue("Incorrect duration", duration >= 500);
assertTrue("Incorrect duration", monitor.getDuration() < 750);
}
@Test
public void reportsDurationWhenFinished() {
DurationMonitor monitor = new DurationMonitor();
monitor.onEvent(scenarioRunnerEventFactory.begin());
ConcurrencyUtils.sleep(250, MILLISECONDS);
monitor.onEvent(scenarioRunnerEventFactory.end());
long duration = monitor.getDuration();
ConcurrencyUtils.sleep(250, MILLISECONDS);
assertEquals(duration, monitor.getDuration());
}
}