carbidecpp22devenv/plugins/org.eclipse.test.source_3.5.0.r20080925/src/org.junit4_4.5.0.v20090423/junitsrc/org/junit/internal/runners/JUnit38ClassRunner.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 org.junit.internal.runners;
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.extensions.TestDecorator;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
     4
import junit.framework.AssertionFailedError;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
     5
import junit.framework.Test;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
     6
import junit.framework.TestCase;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
     7
import junit.framework.TestListener;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
     8
import junit.framework.TestResult;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
     9
import junit.framework.TestSuite;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    10
import org.junit.runner.Describable;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    11
import org.junit.runner.Description;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    12
import org.junit.runner.Runner;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    13
import org.junit.runner.manipulation.Filter;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    14
import org.junit.runner.manipulation.Filterable;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    15
import org.junit.runner.manipulation.NoTestsRemainException;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    16
import org.junit.runner.manipulation.Sortable;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    17
import org.junit.runner.manipulation.Sorter;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    18
import org.junit.runner.notification.Failure;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    19
import org.junit.runner.notification.RunNotifier;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    20
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    21
public class JUnit38ClassRunner extends Runner implements Filterable, Sortable {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    22
	private static final class OldTestClassAdaptingListener implements
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    23
			TestListener {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    24
		private final RunNotifier fNotifier;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    25
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    26
		private OldTestClassAdaptingListener(RunNotifier notifier) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    27
			fNotifier= notifier;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    28
		}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    29
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    30
		public void endTest(Test test) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    31
			fNotifier.fireTestFinished(asDescription(test));
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    32
		}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    33
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    34
		public void startTest(Test test) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    35
			fNotifier.fireTestStarted(asDescription(test));
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    36
		}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    37
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    38
		// Implement junit.framework.TestListener
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    39
		public void addError(Test test, Throwable t) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    40
			Failure failure= new Failure(asDescription(test), t);
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    41
			fNotifier.fireTestFailure(failure);
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    42
		}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    43
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    44
		private Description asDescription(Test test) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    45
			if (test instanceof Describable) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    46
				Describable facade= (Describable) test;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    47
				return facade.getDescription();
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    48
			}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    49
			return Description.createTestDescription(test.getClass(), getName(test));
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
		private String getName(Test test) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    53
			if (test instanceof TestCase)
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    54
				return ((TestCase) test).getName();
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    55
			else
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    56
				return test.toString();
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    57
		}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    58
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    59
		public void addFailure(Test test, AssertionFailedError t) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    60
			addError(test, t);
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    61
		}
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
	private Test fTest;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    65
	
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    66
	public JUnit38ClassRunner(Class<?> klass) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    67
		this(new TestSuite(klass.asSubclass(TestCase.class)));
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    68
	}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    69
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    70
	public JUnit38ClassRunner(Test test) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    71
		super();
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    72
		fTest= test;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    73
	}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    74
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    75
	@Override
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    76
	public void run(RunNotifier notifier) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    77
		TestResult result= new TestResult();
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    78
		result.addListener(createAdaptingListener(notifier));
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    79
		fTest.run(result);
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    80
	}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    81
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    82
	public static TestListener createAdaptingListener(final RunNotifier notifier) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    83
		return new OldTestClassAdaptingListener(notifier);
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    84
	}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    85
	
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    86
	@Override
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    87
	public Description getDescription() {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    88
		return makeDescription(fTest);
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    89
	}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    90
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    91
	private Description makeDescription(Test test) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    92
		if (test instanceof TestCase) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    93
			TestCase tc= (TestCase) test;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    94
			return Description.createTestDescription(tc.getClass(), tc.getName());
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    95
		} else if (test instanceof TestSuite) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    96
			TestSuite ts= (TestSuite) test;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    97
			String name= ts.getName() == null ? "" : ts.getName();
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    98
			Description description= Description.createSuiteDescription(name);
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
    99
			int n= ts.testCount();
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   100
			for (int i= 0; i < n; i++)
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   101
				description.addChild(makeDescription(ts.testAt(i)));
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   102
			return description;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   103
		} else if (test instanceof Describable) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   104
			Describable adapter= (Describable) test;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   105
			return adapter.getDescription();
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   106
		} else if (test instanceof TestDecorator) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   107
			TestDecorator decorator= (TestDecorator) test;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   108
			return makeDescription(decorator.getTest());
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   109
		} else {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   110
			// This is the best we can do in this case
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   111
			return Description.createSuiteDescription(test.getClass());
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   112
		}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   113
	}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   114
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   115
	public void filter(Filter filter) throws NoTestsRemainException {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   116
		if (fTest instanceof Filterable) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   117
			Filterable adapter= (Filterable) fTest;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   118
			adapter.filter(filter);
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   119
		}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   120
	}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   121
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   122
	public void sort(Sorter sorter) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   123
		if (fTest instanceof Sortable) {
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   124
			Sortable adapter= (Sortable) fTest;
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   125
			adapter.sort(sorter);
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   126
		}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   127
	}
3ef299ba838f add files for RCL_2_2
cawthron
parents:
diff changeset
   128
}