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}