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