1package junit.extensions; 2 3import junit.framework.Test; 4import junit.framework.TestCase; 5import junit.framework.TestResult; 6import junit.framework.TestSuite; 7 8/** 9 * A TestSuite for active Tests. It runs each 10 * test in a separate thread and waits until all 11 * threads have terminated. 12 * -- Aarhus Radisson Scandinavian Center 11th floor 13 */ 14public class ActiveTestSuite extends TestSuite { 15 private volatile int fActiveTestDeathCount; 16 17 public ActiveTestSuite() { 18 } 19 20 public ActiveTestSuite(Class<? extends TestCase> theClass) { 21 super(theClass); 22 } 23 24 public ActiveTestSuite(String name) { 25 super (name); 26 } 27 28 public ActiveTestSuite(Class<? extends TestCase> theClass, String name) { 29 super(theClass, name); 30 } 31 32 @Override 33 public void run(TestResult result) { 34 fActiveTestDeathCount= 0; 35 super.run(result); 36 waitUntilFinished(); 37 } 38 39 @Override 40 public void runTest(final Test test, final TestResult result) { 41 Thread t= new Thread() { 42 @Override 43 public void run() { 44 try { 45 // inlined due to limitation in VA/Java 46 //ActiveTestSuite.super.runTest(test, result); 47 test.run(result); 48 } finally { 49 ActiveTestSuite.this.runFinished(); 50 } 51 } 52 }; 53 t.start(); 54 } 55 56 synchronized void waitUntilFinished() { 57 while (fActiveTestDeathCount < testCount()) { 58 try { 59 wait(); 60 } catch (InterruptedException e) { 61 return; // ignore 62 } 63 } 64 } 65 66 synchronized public void runFinished() { 67 fActiveTestDeathCount++; 68 notifyAll(); 69 } 70}