1b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot/** 2b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 3b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot */ 4b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpackage org.junit.internal.runners.statements; 5b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 6b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.util.ArrayList; 7b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.util.List; 8b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 9b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runners.model.FrameworkMethod; 10b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runners.model.MultipleFailureException; 11b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runners.model.Statement; 12b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 13b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpublic class RunAfters extends Statement { 14b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private final Statement fNext; 15b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 16b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private final Object fTarget; 17b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 18b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private final List<FrameworkMethod> fAfters; 19b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 20b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public RunAfters(Statement next, List<FrameworkMethod> afters, Object target) { 21b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot fNext= next; 22b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot fAfters= afters; 23b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot fTarget= target; 24b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 25b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 26b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot @Override 27b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public void evaluate() throws Throwable { 28b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot List<Throwable> errors = new ArrayList<Throwable>(); 29b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot try { 30b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot fNext.evaluate(); 31b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } catch (Throwable e) { 32b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot errors.add(e); 33b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } finally { 34b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot for (FrameworkMethod each : fAfters) 35b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot try { 36b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot each.invokeExplosively(fTarget); 37b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } catch (Throwable e) { 38b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot errors.add(e); 39b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 40b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 41b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot MultipleFailureException.assertEmpty(errors); 42b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 43b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot}