package hudson.plugins.fitnesse;
import org.junit.Assert;
import org.junit.Test;
public class RunnerWithTimeOutTest {
private RunnerWithTimeOut runner;
private boolean wasRun;
@Test
public void startedRunnerShouldRunRunnable() throws Exception {
wasRun = false;
Runnable runnable = new Runnable() {
public void run() {
wasRun = true;
}
};
runner = new RunnerWithTimeOut(1000);
runner.run(runnable);
Assert.assertTrue(wasRun);
}
@Test(expected=InterruptedException.class)
public void startedRunnerShouldThrowExceptionAfterTimeout() throws Exception {
runner = new RunnerWithTimeOut(100);
runner.run(new Runnable() {
public void run() {
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
// swallow
}
}
});
}
@Test
public void resettingRunnerShouldRestartTimeOutCountdown() throws Exception {
runner = new RunnerWithTimeOut(600);
final Resettable resettable = runner;
runner.run(new Runnable() {
public void run() {
try {
Thread.sleep(200);
resettable.reset();
Thread.sleep(300);
resettable.reset();
Thread.sleep(400);
} catch (InterruptedException e) {
// swallow
}
}
});
}
private boolean eventWasFired;
@Test
public void resettingRunnerWithResetEventShouldFireResetEvent() throws Exception {
eventWasFired = false;
runner = new RunnerWithTimeOut(100);
final Resettable resettable = runner;
runner.run(new Runnable() {
public void run() {
resettable.reset();
}
}, new ResetEvent() {
public void onReset() {
eventWasFired = true;
}
});
Assert.assertTrue(eventWasFired);
}
}