OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / libcore / junit / src / main / java / junit / extensions / ActiveTestSuite.java
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 }