carbidecpp20devenv/plugins/org.eclipse.test.source_3.3.0.v20080507/src/org.junit4_4.3.1/junitsrc/junit/extensions/ActiveTestSuite.java
changeset 1 82d1d1de1a01
equal deleted inserted replaced
-1:000000000000 1:82d1d1de1a01
       
     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 }