carbidecpp20devenv/plugins/org.eclipse.test.source_3.3.0.v20080507/src/org.junit4_4.3.1/junitsrc/junit/framework/TestResult.java
author cawthron
Wed, 18 Mar 2009 17:21:00 -0500
changeset 1 82d1d1de1a01
permissions -rw-r--r--
import Carbide.c++
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     1
package junit.framework;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     2
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     3
import java.util.ArrayList;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     4
import java.util.Collections;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     5
import java.util.Enumeration;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     6
import java.util.List;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     7
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     8
/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     9
 * A <code>TestResult</code> collects the results of executing
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    10
 * a test case. It is an instance of the Collecting Parameter pattern.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    11
 * The test framework distinguishes between <i>failures</i> and <i>errors</i>.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    12
 * A failure is anticipated and checked for with assertions. Errors are
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    13
 * unanticipated problems like an {@link ArrayIndexOutOfBoundsException}.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    14
 *
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    15
 * @see Test
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    16
 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    17
public class TestResult extends Object {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    18
	protected List<TestFailure> fFailures;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    19
	protected List<TestFailure> fErrors;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    20
	protected List<TestListener> fListeners;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    21
	protected int fRunTests;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    22
	private boolean fStop;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    23
	
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    24
	public TestResult() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    25
		fFailures= new ArrayList<TestFailure>();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    26
		fErrors= new ArrayList<TestFailure>();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    27
		fListeners= new ArrayList<TestListener>();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    28
		fRunTests= 0;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    29
		fStop= false;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    30
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    31
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    32
	 * Adds an error to the list of errors. The passed in exception
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    33
	 * caused the error.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    34
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    35
	public synchronized void addError(Test test, Throwable t) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    36
		fErrors.add(new TestFailure(test, t));
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    37
		for (TestListener each : cloneListeners())
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    38
			each.addError(test, t);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    39
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    40
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    41
	 * Adds a failure to the list of failures. The passed in exception
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    42
	 * caused the failure.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    43
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    44
	public synchronized void addFailure(Test test, AssertionFailedError t) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    45
		fFailures.add(new TestFailure(test, t));
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    46
		for (TestListener each : cloneListeners())
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    47
			each.addFailure(test, t);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    48
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    49
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    50
	 * Registers a TestListener
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    51
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    52
	public synchronized void addListener(TestListener listener) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    53
		fListeners.add(listener);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    54
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    55
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    56
	 * Unregisters a TestListener
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    57
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    58
	public synchronized void removeListener(TestListener listener) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    59
		fListeners.remove(listener);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    60
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    61
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    62
	 * Returns a copy of the listeners.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    63
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    64
	private synchronized List<TestListener> cloneListeners() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    65
		List<TestListener> result= new ArrayList<TestListener>();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    66
		result.addAll(fListeners);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    67
		return result;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    68
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    69
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    70
	 * Informs the result that a test was completed.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    71
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    72
	public void endTest(Test test) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    73
		for (TestListener each : cloneListeners())
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    74
			each.endTest(test);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    75
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    76
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    77
	 * Gets the number of detected errors.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    78
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    79
	public synchronized int errorCount() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    80
		return fErrors.size();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    81
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    82
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    83
	 * Returns an Enumeration for the errors
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    84
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    85
	public synchronized Enumeration<TestFailure> errors() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    86
		return Collections.enumeration(fErrors);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    87
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    88
	
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    89
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    90
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    91
	 * Gets the number of detected failures.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    92
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    93
	public synchronized int failureCount() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    94
		return fFailures.size();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    95
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    96
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    97
	 * Returns an Enumeration for the failures
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    98
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    99
	public synchronized Enumeration<TestFailure> failures() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   100
		return Collections.enumeration(fFailures);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   101
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   102
	
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   103
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   104
	 * Runs a TestCase.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   105
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   106
	protected void run(final TestCase test) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   107
		startTest(test);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   108
		Protectable p= new Protectable() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   109
			public void protect() throws Throwable {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   110
				test.runBare();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   111
			}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   112
		};
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   113
		runProtected(test, p);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   114
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   115
		endTest(test);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   116
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   117
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   118
	 * Gets the number of run tests.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   119
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   120
	public synchronized int runCount() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   121
		return fRunTests;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   122
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   123
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   124
	 * Runs a TestCase.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   125
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   126
	public void runProtected(final Test test, Protectable p) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   127
		try {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   128
			p.protect();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   129
		} 
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   130
		catch (AssertionFailedError e) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   131
			addFailure(test, e);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   132
		}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   133
		catch (ThreadDeath e) { // don't catch ThreadDeath by accident
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   134
			throw e;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   135
		}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   136
		catch (Throwable e) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   137
			addError(test, e);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   138
		}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   139
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   140
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   141
	 * Checks whether the test run should stop
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   142
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   143
	public synchronized boolean shouldStop() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   144
		return fStop;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   145
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   146
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   147
	 * Informs the result that a test will be started.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   148
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   149
	public void startTest(Test test) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   150
		final int count= test.countTestCases();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   151
		synchronized(this) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   152
			fRunTests+= count;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   153
		}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   154
		for (TestListener each : cloneListeners())
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   155
			each.startTest(test);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   156
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   157
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   158
	 * Marks that the test run should stop.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   159
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   160
	public synchronized void stop() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   161
		fStop= true;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   162
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   163
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   164
	 * Returns whether the entire test was successful or not.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   165
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   166
	public synchronized boolean wasSuccessful() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   167
		return failureCount() == 0 && errorCount() == 0;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   168
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   169
}