01: package org.junit.internal.requests;
02:
03: import java.lang.reflect.InvocationTargetException;
04: import java.util.Arrays;
05: import java.util.List;
06:
07: import org.junit.internal.runners.CompositeRunner;
08: import org.junit.internal.runners.ErrorReportingRunner;
09: import org.junit.internal.runners.InitializationError;
10: import org.junit.runner.Description;
11: import org.junit.runner.Request;
12: import org.junit.runner.Runner;
13:
14: public class ErrorReportingRequest extends Request {
15:
16: private final Class<?> fClass;
17: private final Throwable fCause;
18:
19: public ErrorReportingRequest(Class<?> klass, Throwable cause) {
20: fClass = klass;
21: fCause = cause;
22: }
23:
24: @Override
25: public Runner getRunner() {
26: List<Throwable> goofs = getCauses(fCause);
27: CompositeRunner runner = new CompositeRunner(fClass.getName());
28: for (int i = 0; i < goofs.size(); i++) {
29: final Description description = Description
30: .createTestDescription(fClass,
31: "initializationError" + i);
32: final Throwable throwable = goofs.get(i);
33: runner
34: .add(new ErrorReportingRunner(description,
35: throwable));
36: }
37: return runner;
38: }
39:
40: private List<Throwable> getCauses(Throwable cause) {
41: if (cause instanceof InvocationTargetException)
42: return getCauses(cause.getCause());
43: if (cause instanceof InitializationError)
44: return ((InitializationError) cause).getCauses();
45: return Arrays.asList(cause);
46: }
47: }
|