carbidecpp22devenv/plugins/org.eclipse.test.source_3.5.0.r20080925/src/org.junit4_4.5.0.v20090423/junitsrc/junit/extensions/ActiveTestSuite.java
author cawthron
Fri, 04 Dec 2009 11:49:54 -0600
changeset 636 3ef299ba838f
permissions -rw-r--r--
add files for RCL_2_2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
636
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
     1
package junit.extensions;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
     2
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
     3
import junit.framework.Test;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
     4
import junit.framework.TestCase;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
     5
import junit.framework.TestResult;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
     6
import junit.framework.TestSuite;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
     7
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
     8
/**
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
     9
 * A TestSuite for active Tests. It runs each
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    10
 * test in a separate thread and waits until all
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    11
 * threads have terminated.
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    12
 * -- Aarhus Radisson Scandinavian Center 11th floor
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    13
 */ 
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    14
public class ActiveTestSuite extends TestSuite {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    15
	private volatile int fActiveTestDeathCount;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    16
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    17
	public ActiveTestSuite() {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    18
	}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    19
		
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    20
	public ActiveTestSuite(Class<? extends TestCase> theClass) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    21
		super(theClass);
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    22
	}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    23
	
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    24
	public ActiveTestSuite(String name) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    25
		super (name);
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    26
	}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    27
	
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    28
	public ActiveTestSuite(Class<? extends TestCase> theClass, String name) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    29
		super(theClass, name);
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    30
	}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    31
	
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    32
	@Override
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    33
	public void run(TestResult result) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    34
		fActiveTestDeathCount= 0;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    35
		super.run(result);
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    36
		waitUntilFinished();
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    37
	}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    38
	
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    39
	@Override
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    40
	public void runTest(final Test test, final TestResult result) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    41
		Thread t= new Thread() {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    42
			@Override
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    43
			public void run() {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    44
				try {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    45
					// inlined due to limitation in VA/Java 
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    46
					//ActiveTestSuite.super.runTest(test, result);
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    47
					test.run(result);
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    48
				} finally {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    49
					ActiveTestSuite.this.runFinished();
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    50
				}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    51
			}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    52
		};
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    53
		t.start();
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    54
	}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    55
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    56
	synchronized void waitUntilFinished() {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    57
		while (fActiveTestDeathCount < testCount()) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    58
			try {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    59
				wait();
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    60
			} catch (InterruptedException e) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    61
				return; // ignore
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    62
			}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    63
		}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    64
	}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    65
	
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    66
	synchronized public void runFinished() {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    67
		fActiveTestDeathCount++;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    68
		notifyAll();
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    69
	}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    70
}