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(); } }