1b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpackage org.junit.internal;
2b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot
3b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.util.ArrayList;
4b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.util.List;
5b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot
6b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.Assert;
7b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot
8b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot/**
9b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * Thrown when two array elements differ
10b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @see Assert#assertArrayEquals(String, Object[], Object[])
11b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot */
12b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpublic class ArrayComparisonFailure extends AssertionError {
13b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot
14b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	private static final long serialVersionUID= 1L;
15b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot
16b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	private List<Integer> fIndices= new ArrayList<Integer>();
17b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	private final String fMessage;
18b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	private final AssertionError fCause;
19b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot
20b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	/**
21b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	 * Construct a new <code>ArrayComparisonFailure</code> with an error text and the array's
22b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	 * dimension that was not equal
23b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	 * @param cause the exception that caused the array's content to fail the assertion test
24b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	 * @param index the array position of the objects that are not equal.
25b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	 * @see Assert#assertArrayEquals(String, Object[], Object[])
26b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	 */
27b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	public ArrayComparisonFailure(String message, AssertionError cause, int index) {
28b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot		fMessage= message;
29b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot		fCause= cause;
30b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot		addDimension(index);
31b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	}
32b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot
33b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	public void addDimension(int index) {
34b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot		fIndices.add(0, index);
35b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	}
36b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot
37b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	@Override
38b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	public String getMessage() {
39b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot		StringBuilder builder= new StringBuilder();
40b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot		if (fMessage != null)
41b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot			builder.append(fMessage);
42b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot		builder.append("arrays first differed at element ");
43b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot		for (int each : fIndices) {
44b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot			builder.append("[");
45b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot			builder.append(each);
46b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot			builder.append("]");
47b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot		}
48b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot		builder.append("; ");
49b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot		builder.append(fCause.getMessage());
50b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot		return builder.toString();
51b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	}
52b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot
53b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	/**
54b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	 * {@inheritDoc}
55b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	 */
56b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	@Override public String toString() {
57b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot		return getMessage();
58b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	}
59b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot}
60