Home | History | Annotate | Download | only in model
      1 // Copyright 2010 Google Inc. All Rights Reserved.
      2 
      3 package org.junit.runners.model;
      4 
      5 import java.util.ArrayList;
      6 import java.util.Collections;
      7 import java.util.List;
      8 
      9 /**
     10  * Collects multiple {@code Throwable}s into one exception.
     11  */
     12 public class MultipleFailureException extends Exception {
     13 	private static final long serialVersionUID= 1L;
     14 
     15 	private final List<Throwable> fErrors;
     16 
     17 	public MultipleFailureException(List<Throwable> errors) {
     18 		fErrors= new ArrayList<Throwable>(errors);
     19 	}
     20 
     21 	public List<Throwable> getFailures() {
     22 		return Collections.unmodifiableList(fErrors);
     23 	}
     24 
     25 	@Override
     26 	public String getMessage() {
     27 		StringBuilder sb = new StringBuilder(
     28 				String.format("There were %d errors:", fErrors.size()));
     29 		for (Throwable e : fErrors) {
     30 			sb.append(String.format("\n  %s(%s)", e.getClass().getName(), e.getMessage()));
     31 		}
     32 		return sb.toString();
     33 	}
     34 
     35 	/**
     36 	 * Asserts that a list of throwables is empty. If it isn't empty,
     37 	 * will throw {@link MultipleFailureException} (if there are
     38 	 * multiple throwables in the list) or the first element in the list
     39 	 * (if there is only one element).
     40 	 *
     41 	 * @param errors list to check
     42 	 * @throws Throwable if the list is not empty
     43 	 */
     44 	@SuppressWarnings("deprecation")
     45 	public static void assertEmpty(List<Throwable> errors) throws Throwable {
     46 		if (errors.isEmpty())
     47 			return;
     48 		if (errors.size() == 1)
     49 			throw errors.get(0);
     50 
     51 		/*
     52 		 * Many places in the code are documented to throw
     53 		 * org.junit.internal.runners.model.MultipleFailureException.
     54 		 * That class now extends this one, so we throw the internal
     55 		 * exception in case developers have tests that catch
     56 		 * MultipleFailureException.
     57 		 */
     58 		throw new org.junit.internal.runners.model.MultipleFailureException(errors);
     59 	}
     60 }
     61