aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/junit/internal/runners/statements/RunAfters.java
blob: 475ec72616849034b5e1a92fc67eb5ae919cdff2 (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
/**
 * 
 */
package org.junit.internal.runners.statements;

import java.util.ArrayList;
import java.util.List;

import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.MultipleFailureException;
import org.junit.runners.model.Statement;

public class RunAfters extends Statement {
	private final Statement fNext;

	private final Object fTarget;

	private final List<FrameworkMethod> fAfters;
	
	public RunAfters(Statement next, List<FrameworkMethod> afters, Object target) {
		fNext= next;
		fAfters= afters;
		fTarget= target;
	}

	@Override
	public void evaluate() throws Throwable {
		List<Throwable> errors = new ArrayList<Throwable>();
		try {
			fNext.evaluate();
		} catch (Throwable e) {
			errors.add(e);
		} finally {
			for (FrameworkMethod each : fAfters)
				try {
					each.invokeExplosively(fTarget);
				} catch (Throwable e) {
					errors.add(e);
				}
		}
		MultipleFailureException.assertEmpty(errors);
	}
}