package net.jsunit.action;
import junit.framework.TestCase;
public class TestRunnerActionSimultaneousRunBlockingTest extends TestCase {
private BlockingTestRunner runner;
private TestRunnerAction action1;
private TestRunnerAction action2;
protected void setUp() throws Exception {
super.setUp();
runner = new BlockingTestRunner();
action1 = new TestRunnerAction();
action1.setBrowserTestRunner(runner);
action2 = new TestRunnerAction();
action2.setBrowserTestRunner(runner);
}
public void testSimultaneousRequestsAreQueued() throws Exception {
Executor executor1 = new Executor(action1);
executor1.start();
waitTillRunnerIsBlocked(runner);
Executor executor2 = new Executor(action2);
executor2.start();
runner.blocked = false;
waitTillExecutorIsDead(executor1);
waitTillRunnerIsBlocked(runner);
runner.blocked = false;
waitTillExecutorIsDead(executor2);
}
private void waitTillExecutorIsDead(Executor executor) throws InterruptedException {
while (executor.isAlive())
Thread.sleep(10);
}
private void waitTillRunnerIsBlocked(BlockingTestRunner runner) throws InterruptedException {
while (!runner.blocked) {
Thread.sleep(10);
}
}
class Executor extends Thread {
private TestRunnerAction action;
public Executor(TestRunnerAction action) {
this.action = action;
}
public void run() {
try {
action.execute();
} catch (Exception e) {
fail();
}
}
}
}