carbidecpp20devenv/plugins/org.eclipse.test.source_3.3.0.v20080507/src/org.junit4_4.3.1/junitsrc/org/junit/runner/JUnitCore.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 org.junit.runner;
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.List;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     5
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     6
import junit.runner.Version;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     7
import org.junit.internal.runners.OldTestClassRunner;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     8
import org.junit.internal.runners.TextListener;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     9
import org.junit.runner.notification.Failure;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    10
import org.junit.runner.notification.RunListener;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    11
import org.junit.runner.notification.RunNotifier;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    12
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    13
/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    14
 * <code>JUnitCore</code> is a facade for running tests. It supports running JUnit 4 tests, 
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    15
 * JUnit 3.8.x tests, and mixtures. To run tests from the command line, run 
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    16
 * <code>java org.junit.runner.JUnitCore TestClass1 TestClass2 ...</code>.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    17
 * For one-shot test runs, use the static method {@link #runClasses(Class[])}. 
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    18
 * If you want to add special listeners,
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    19
 * create an instance of {@link org.junit.runner.JUnitCore} first and use it to run the tests.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    20
 * 
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    21
 * @see org.junit.runner.Result
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    22
 * @see org.junit.runner.notification.RunListener
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    23
 * @see org.junit.runner.Request
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    24
 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    25
public class JUnitCore {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    26
	
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    27
	private RunNotifier fNotifier;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    28
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    29
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    30
	 * Create a new <code>JUnitCore</code> to run tests.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    31
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    32
	public JUnitCore() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    33
		fNotifier= new RunNotifier();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    34
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    35
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    36
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    37
	 * Run the tests contained in the classes named in the <code>args</code>.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    38
	 * If all tests run successfully, exit with a status of 0. Otherwise exit with a status of 1.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    39
	 * Write feedback while tests are running and write
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    40
	 * stack traces for all failed tests after the tests all complete.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    41
	 * @param args names of classes in which to find tests to run
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    42
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    43
	public static void main(String... args) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    44
		Result result= new JUnitCore().runMain(args);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    45
		killAllThreads(result);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    46
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    47
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    48
	private static void killAllThreads(Result result) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    49
		System.exit(result.wasSuccessful() ? 0 : 1);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    50
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    51
	
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    52
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    53
	 * Run the tests contained in <code>classes</code>. Write feedback while the tests
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    54
	 * are running and write stack traces for all failed tests after all tests complete. This is
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    55
	 * similar to {@link #main(String[])}, but intended to be used programmatically.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    56
	 * @param classes Classes in which to find tests
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    57
	 * @return a {@link Result} describing the details of the test run and the failed tests.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    58
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    59
	public static Result runClasses(Class<?>... classes) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    60
		return new JUnitCore().run(classes);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    61
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    62
	
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    63
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    64
	 * Do not use. Testing purposes only.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    65
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    66
	public Result runMain(String... args) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    67
		System.out.println("JUnit version " + Version.id());
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    68
		List<Class<?>> classes= new ArrayList<Class<?>>();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    69
		List<Failure> missingClasses= new ArrayList<Failure>();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    70
		for (String each : args)
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    71
			try {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    72
				classes.add(Class.forName(each));
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    73
			} catch (ClassNotFoundException e) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    74
				System.out.println("Could not find class: " + each);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    75
				Description description= Description.createSuiteDescription(each);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    76
				Failure failure= new Failure(description, e);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    77
				missingClasses.add(failure);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    78
			}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    79
		RunListener listener= new TextListener();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    80
		addListener(listener);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    81
		Result result= run(classes.toArray(new Class[0]));
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    82
		for (Failure each : missingClasses)
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    83
			result.getFailures().add(each);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    84
		return result;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    85
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    86
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    87
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    88
	 * @return the version number of this release
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    89
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    90
	public String getVersion() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    91
		return Version.id();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    92
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    93
	
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    94
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    95
	 * Run all the tests in <code>classes</code>.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    96
	 * @param classes the classes containing tests
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    97
	 * @return a {@link Result} describing the details of the test run and the failed tests.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    98
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    99
	public Result run(Class<?>... classes) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   100
		return run(Request.classes("All", classes));
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
	 * Run all the tests contained in <code>request</code>.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   105
	 * @param request the request describing tests
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   106
	 * @return a {@link Result} describing the details of the test run and the failed tests.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   107
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   108
	public Result run(Request request) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   109
		return run(request.getRunner());
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   110
	}
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
	 * Run all the tests contained in JUnit 3.8.x <code>test</code>. Here for backward compatibility.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   114
	 * @param test the old-style test
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   115
	 * @return a {@link Result} describing the details of the test run and the failed tests.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   116
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   117
	public Result run(junit.framework.Test test) { 
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   118
		return run(new OldTestClassRunner(test));
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   119
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   120
	
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   121
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   122
	 * Do not use. Testing purposes only.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   123
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   124
	public Result run(Runner runner) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   125
		Result result= new Result();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   126
		RunListener listener= result.createListener();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   127
		addFirstListener(listener);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   128
		try {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   129
			fNotifier.fireTestRunStarted(runner.getDescription());
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   130
			runner.run(fNotifier);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   131
			fNotifier.fireTestRunFinished(result);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   132
		} finally {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   133
			removeListener(listener);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   134
		}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   135
		return result;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   136
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   137
	
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   138
	private void addFirstListener(RunListener listener) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   139
		fNotifier.addFirstListener(listener);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   140
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   141
	
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   142
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   143
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   144
	 * Add a listener to be notified as the tests run.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   145
	 * @param listener the listener to add
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   146
	 * @see org.junit.runner.notification.RunListener
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   147
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   148
	public void addListener(RunListener listener) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   149
		fNotifier.addListener(listener);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   150
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   151
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   152
	/**
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   153
	 * Remove a listener.
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   154
	 * @param listener the listener to remove
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   155
	 */
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   156
	public void removeListener(RunListener listener) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   157
		fNotifier.removeListener(listener);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   158
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
   159
}