1b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpackage org.junit.internal.runners; 2b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 3b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.lang.reflect.InvocationTargetException; 4b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.util.Arrays; 5b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.util.List; 6b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 7b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runner.Description; 8b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runner.Runner; 9b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runner.notification.Failure; 10b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runner.notification.RunNotifier; 11b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runners.model.InitializationError; 12b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 13b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpublic class ErrorReportingRunner extends Runner { 14b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private final List<Throwable> fCauses; 15b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 16b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private final Class<?> fTestClass; 17b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 18b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public ErrorReportingRunner(Class<?> testClass, Throwable cause) { 19b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot fTestClass= testClass; 20b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot fCauses= getCauses(cause); 21b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 22b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 23b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot @Override 24b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public Description getDescription() { 25b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot Description description= Description.createSuiteDescription(fTestClass); 26b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot for (Throwable each : fCauses) 27b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot description.addChild(describeCause(each)); 28b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return description; 29b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 30b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 31b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot @Override 32b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public void run(RunNotifier notifier) { 33b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot for (Throwable each : fCauses) 34b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot runCause(each, notifier); 35b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 36b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 37b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot @SuppressWarnings("deprecation") 38b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private List<Throwable> getCauses(Throwable cause) { 39b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot if (cause instanceof InvocationTargetException) 40b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return getCauses(cause.getCause()); 41b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot if (cause instanceof InitializationError) 42b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return ((InitializationError) cause).getCauses(); 43b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot if (cause instanceof org.junit.internal.runners.InitializationError) 44b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return ((org.junit.internal.runners.InitializationError) cause) 45b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot .getCauses(); 46b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return Arrays.asList(cause); 47b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 48b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 49b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private Description describeCause(Throwable child) { 50b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return Description.createTestDescription(fTestClass, 51b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot "initializationError"); 52b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 53b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 54b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private void runCause(Throwable child, RunNotifier notifier) { 55b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot Description description= describeCause(child); 56b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot notifier.fireTestStarted(description); 57b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot notifier.fireTestFailure(new Failure(description, child)); 58b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot notifier.fireTestFinished(description); 59b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 60b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot}