| package org.junit.internal; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.junit.Assert; |
| |
| /** |
| * Thrown when two array elements differ |
| * |
| * @see Assert#assertArrayEquals(String, Object[], Object[]) |
| */ |
| public class ArrayComparisonFailure extends AssertionError { |
| |
| private static final long serialVersionUID = 1L; |
| |
| /* |
| * We have to use the f prefix until the next major release to ensure |
| * serialization compatibility. |
| * See https://github.com/junit-team/junit4/issues/976 |
| */ |
| private final List<Integer> fIndices = new ArrayList<Integer>(); |
| private final String fMessage; |
| private final AssertionError fCause; |
| |
| /** |
| * Construct a new <code>ArrayComparisonFailure</code> with an error text and the array's |
| * dimension that was not equal |
| * |
| * @param cause the exception that caused the array's content to fail the assertion test |
| * @param index the array position of the objects that are not equal. |
| * @see Assert#assertArrayEquals(String, Object[], Object[]) |
| */ |
| public ArrayComparisonFailure(String message, AssertionError cause, int index) { |
| this.fMessage = message; |
| this.fCause = cause; |
| initCause(fCause); |
| addDimension(index); |
| } |
| |
| public void addDimension(int index) { |
| fIndices.add(0, index); |
| } |
| |
| @Override |
| public synchronized Throwable getCause() { |
| return super.getCause() == null ? fCause : super.getCause(); |
| } |
| |
| @Override |
| public String getMessage() { |
| StringBuilder sb = new StringBuilder(); |
| if (fMessage != null) { |
| sb.append(fMessage); |
| } |
| sb.append("arrays first differed at element "); |
| for (int each : fIndices) { |
| sb.append("["); |
| sb.append(each); |
| sb.append("]"); |
| } |
| sb.append("; "); |
| sb.append(getCause().getMessage()); |
| return sb.toString(); |
| } |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public String toString() { |
| return getMessage(); |
| } |
| } |