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