package junit.extensions;
import junit.framework.*;
/**
* A TestSuite for active Tests. It runs each
* test in a separate thread and waits until all
* threads have terminated.
* -- Aarhus Radisson Scandinavian Center 11th floor
*/
public class ActiveTestSuite extends TestSuite {
private volatile int fActiveTestDeathCount;
public ActiveTestSuite() {
}
public ActiveTestSuite(Class theClass) {
super(theClass);
}
public ActiveTestSuite(String name) {
super (name);
}
public ActiveTestSuite(Class theClass, String name) {
super(theClass, name);
}
public void run(TestResult result) {
fActiveTestDeathCount= 0;
super.run(result);
waitUntilFinished();
}
public void runTest(final Test test, final TestResult result) {
Thread t= new Thread() {
public void run() {
try {
// inlined due to limitation in VA/Java
//ActiveTestSuite.super.runTest(test, result);
test.run(result);
} finally {
ActiveTestSuite.this.runFinished(test);
}
}
};
t.start();
}
synchronized void waitUntilFinished() {
while (fActiveTestDeathCount < testCount()) {
try {
wait();
} catch (InterruptedException e) {
return; // ignore
}
}
}
synchronized public void runFinished(Test test) {
fActiveTestDeathCount++;
notifyAll();
}
}
|