|
1 package junit.extensions; |
|
2 |
|
3 import junit.framework.Test; |
|
4 import junit.framework.TestCase; |
|
5 import junit.framework.TestResult; |
|
6 import 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 */ |
|
14 public 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 } |