aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/junit/internal/ComparisonCriteria.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/junit/internal/ComparisonCriteria.java')
-rw-r--r--src/main/java/org/junit/internal/ComparisonCriteria.java89
1 files changed, 20 insertions, 69 deletions
diff --git a/src/main/java/org/junit/internal/ComparisonCriteria.java b/src/main/java/org/junit/internal/ComparisonCriteria.java
index ed1c674..e6d49a4 100644
--- a/src/main/java/org/junit/internal/ComparisonCriteria.java
+++ b/src/main/java/org/junit/internal/ComparisonCriteria.java
@@ -25,11 +25,6 @@ public abstract class ComparisonCriteria {
*/
public void arrayEquals(String message, Object expecteds, Object actuals)
throws ArrayComparisonFailure {
- arrayEquals(message, expecteds, actuals, true);
- }
-
- private void arrayEquals(String message, Object expecteds, Object actuals, boolean outer)
- throws ArrayComparisonFailure {
if (expecteds == actuals
|| Arrays.deepEquals(new Object[] {expecteds}, new Object[] {actuals})) {
// The reflection-based loop below is potentially very slow, especially for primitive
@@ -39,37 +34,19 @@ public abstract class ComparisonCriteria {
}
String header = message == null ? "" : message + ": ";
- // Only include the user-provided message in the outer exception.
- String exceptionMessage = outer ? header : "";
-
- if (expecteds == null) {
- Assert.fail(exceptionMessage + "expected array was null");
- }
- if (actuals == null) {
- Assert.fail(exceptionMessage + "actual array was null");
- }
-
- int actualsLength = Array.getLength(actuals);
- int expectedsLength = Array.getLength(expecteds);
- if (actualsLength != expectedsLength) {
- header += "array lengths differed, expected.length="
- + expectedsLength + " actual.length=" + actualsLength + "; ";
- }
- int prefixLength = Math.min(actualsLength, expectedsLength);
+ int expectedsLength = assertArraysAreSameLength(expecteds,
+ actuals, header);
- for (int i = 0; i < prefixLength; i++) {
+ for (int i = 0; i < expectedsLength; i++) {
Object expected = Array.get(expecteds, i);
Object actual = Array.get(actuals, i);
if (isArray(expected) && isArray(actual)) {
try {
- arrayEquals(message, expected, actual, false);
+ arrayEquals(message, expected, actual);
} catch (ArrayComparisonFailure e) {
e.addDimension(i);
throw e;
- } catch (AssertionError e) {
- // Array lengths differed.
- throw new ArrayComparisonFailure(header, e, i);
}
} else {
try {
@@ -79,53 +56,27 @@ public abstract class ComparisonCriteria {
}
}
}
-
- if (actualsLength != expectedsLength) {
- Object expected = getToStringableArrayElement(expecteds, expectedsLength, prefixLength);
- Object actual = getToStringableArrayElement(actuals, actualsLength, prefixLength);
- try {
- Assert.assertEquals(expected, actual);
- } catch (AssertionError e) {
- throw new ArrayComparisonFailure(header, e, prefixLength);
- }
- }
}
- private static final Object END_OF_ARRAY_SENTINEL = objectWithToString("end of array");
-
- private Object getToStringableArrayElement(Object array, int length, int index) {
- if (index < length) {
- Object element = Array.get(array, index);
- if (isArray(element)) {
- return objectWithToString(componentTypeName(element.getClass()) + "[" + Array.getLength(element) + "]");
- } else {
- return element;
- }
- } else {
- return END_OF_ARRAY_SENTINEL;
- }
- }
-
- private static Object objectWithToString(final String string) {
- return new Object() {
- @Override
- public String toString() {
- return string;
- }
- };
+ private boolean isArray(Object expected) {
+ return expected != null && expected.getClass().isArray();
}
- private String componentTypeName(Class<?> arrayClass) {
- Class<?> componentType = arrayClass.getComponentType();
- if (componentType.isArray()) {
- return componentTypeName(componentType) + "[]";
- } else {
- return componentType.getName();
+ private int assertArraysAreSameLength(Object expecteds,
+ Object actuals, String header) {
+ if (expecteds == null) {
+ Assert.fail(header + "expected array was null");
}
- }
-
- private boolean isArray(Object expected) {
- return expected != null && expected.getClass().isArray();
+ if (actuals == null) {
+ Assert.fail(header + "actual array was null");
+ }
+ int actualsLength = Array.getLength(actuals);
+ int expectedsLength = Array.getLength(expecteds);
+ if (actualsLength != expectedsLength) {
+ Assert.fail(header + "array lengths differed, expected.length="
+ + expectedsLength + " actual.length=" + actualsLength);
+ }
+ return expectedsLength;
}
protected abstract void assertElementsEqual(Object expected, Object actual);