aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/junit/internal/runners/ClassRoadie.java
blob: 1f77d374a5dc781f083ce3808c8da7ad74eb9609 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package org.junit.internal.runners;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;

import org.junit.runner.Description;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunNotifier;
import org.junit.runners.BlockJUnit4ClassRunner;

/**
 * @deprecated Included for backwards compatibility with JUnit 4.4. Will be
 *             removed in the next release. Please use
 *             {@link BlockJUnit4ClassRunner} in place of {@link JUnit4ClassRunner}.
 */
@Deprecated
public
class ClassRoadie {
	private RunNotifier fNotifier;
	private TestClass fTestClass;
	private Description fDescription;
	private final Runnable fRunnable;
	
	public ClassRoadie(RunNotifier notifier, TestClass testClass,
			Description description, Runnable runnable) {
		fNotifier= notifier;
		fTestClass= testClass;
		fDescription= description;
		fRunnable= runnable;
	}

	protected void runUnprotected() {
		fRunnable.run();
	};

	protected void addFailure(Throwable targetException) {
		fNotifier.fireTestFailure(new Failure(fDescription, targetException));
	}

	public void runProtected() {
		try {
			runBefores();
			runUnprotected();
		} catch (FailedBefore e) {
		} finally {
			runAfters();
		}
	}

	private void runBefores() throws FailedBefore {
		try {
			try {
				List<Method> befores= fTestClass.getBefores();
				for (Method before : befores)
					before.invoke(null);
			} catch (InvocationTargetException e) {
				throw e.getTargetException();
			}
		} catch (org.junit.internal.AssumptionViolatedException e) {
			throw new FailedBefore();
		} catch (Throwable e) {
			addFailure(e);
			throw new FailedBefore();
		}
	}

	private void runAfters() {
		List<Method> afters= fTestClass.getAfters();
		for (Method after : afters)
			try {
				after.invoke(null);
			} catch (InvocationTargetException e) {
				addFailure(e.getTargetException());
			} catch (Throwable e) {
				addFailure(e); // Untested, but seems impossible
			}
	}
}