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
40
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;
56 }
57 }
58 }
59
60 synchronized public void runFinished(Test test) {
61 fActiveTestDeathCount++;
62 notifyAll();
63 }
64 }