• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
ActiveTestSuite()14 	public ActiveTestSuite() {
15 	}
16 
ActiveTestSuite(Class theClass)17 	public ActiveTestSuite(Class theClass) {
18 		super(theClass);
19 	}
20 
ActiveTestSuite(String name)21 	public ActiveTestSuite(String name) {
22 		super (name);
23 	}
24 
ActiveTestSuite(Class theClass, String name)25 	public ActiveTestSuite(Class theClass, String name) {
26 		super(theClass, name);
27 	}
28 
run(TestResult result)29 	public void run(TestResult result) {
30 		fActiveTestDeathCount= 0;
31 		super.run(result);
32 		waitUntilFinished();
33 	}
34 
runTest(final Test test, final TestResult result)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 
waitUntilFinished()50 	synchronized void waitUntilFinished() {
51 		while (fActiveTestDeathCount < testCount()) {
52 			try {
53 				wait();
54 			} catch (InterruptedException e) {
55 				return; // ignore
56 			}
57 		}
58 	}
59 
runFinished(Test test)60 	synchronized public void runFinished(Test test) {
61 		fActiveTestDeathCount++;
62 		notifyAll();
63 	}
64 }
65