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();
}
}