1b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot/** 2b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 3b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot */ 4b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpackage org.junit.experimental.theories.internal; 5b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 6b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.util.Arrays; 7b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.util.Collection; 8b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.util.Iterator; 9b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 10b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 11b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpublic class ParameterizedAssertionError extends RuntimeException { 12b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private static final long serialVersionUID = 1L; 13b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 14b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public ParameterizedAssertionError(Throwable targetException, 15b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot String methodName, Object... params) { 16b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot super(String.format("%s(%s)", methodName, join(", ", params)), 17b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot targetException); 18b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 19b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 20b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot @Override public boolean equals(Object obj) { 21b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return toString().equals(obj.toString()); 22b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 23b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 24b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public static String join(String delimiter, Object... params) { 25b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return join(delimiter, Arrays.asList(params)); 26b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 27b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 28b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public static String join(String delimiter, 29b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot Collection<Object> values) { 30b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot StringBuffer buffer = new StringBuffer(); 31b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot Iterator<Object> iter = values.iterator(); 32b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot while (iter.hasNext()) { 33b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot Object next = iter.next(); 34b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot buffer.append(stringValueOf(next)); 35b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot if (iter.hasNext()) { 36b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot buffer.append(delimiter); 37b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 38b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 39b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return buffer.toString(); 40b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 41b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 42b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private static String stringValueOf(Object next) { 43b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot try { 44b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return String.valueOf(next); 45b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } catch (Throwable e) { 46b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return "[toString failed]"; 47b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 48b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 49b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot}