Skip to content

Commit a485707

Browse files
committed
Simplify
1 parent 62cde5c commit a485707

File tree

1 file changed

+75
-130
lines changed

1 file changed

+75
-130
lines changed

src/main/java/org/junit/ArraysAssert.java

+75-130
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.junit;
22

33
import java.lang.reflect.Array;
4+
import java.util.Arrays;
45

56
import org.junit.internal.ArrayComparisonFailure;
67

@@ -25,16 +26,12 @@ private ArraysAssert() {
2526
*/
2627
public static void assertEquals(String message, final boolean[] expecteds, final boolean[] actuals)
2728
throws ArrayComparisonFailure {
29+
if (Arrays.equals(expecteds, actuals)) {
30+
return; // fast path
31+
}
32+
2833
internalAssertEquals(message, expecteds, actuals,
2934
new ComparisonHelper() {
30-
public int getExpectedArrayLength() {
31-
return expecteds.length;
32-
}
33-
34-
public int getActualArrayLength() {
35-
return actuals.length;
36-
}
37-
3835
public void assertElementEquals(int index) {
3936
Assert.assertEquals(expecteds[index], actuals[index]);
4037
}
@@ -53,16 +50,12 @@ public void assertElementEquals(int index) {
5350
*/
5451
public static void assertEquals(String message, final byte[] expecteds, final byte[] actuals)
5552
throws ArrayComparisonFailure {
53+
if (Arrays.equals(expecteds, actuals)) {
54+
return; // fast path
55+
}
56+
5657
internalAssertEquals(message, expecteds, actuals,
5758
new ComparisonHelper() {
58-
public int getExpectedArrayLength() {
59-
return expecteds.length;
60-
}
61-
62-
public int getActualArrayLength() {
63-
return actuals.length;
64-
}
65-
6659
public void assertElementEquals(int index) {
6760
Assert.assertEquals(expecteds[index], actuals[index]);
6861
}
@@ -81,16 +74,12 @@ public void assertElementEquals(int index) {
8174
*/
8275
public static void assertEquals(String message, final char[] expecteds, final char[] actuals)
8376
throws ArrayComparisonFailure {
77+
if (Arrays.equals(expecteds, actuals)) {
78+
return; // fast path
79+
}
80+
8481
internalAssertEquals(message, expecteds, actuals,
8582
new ComparisonHelper() {
86-
public int getExpectedArrayLength() {
87-
return expecteds.length;
88-
}
89-
90-
public int getActualArrayLength() {
91-
return actuals.length;
92-
}
93-
9483
public void assertElementEquals(int index) {
9584
Assert.assertEquals(expecteds[index], actuals[index]);
9685
}
@@ -108,16 +97,12 @@ public void assertElementEquals(int index) {
10897
* @param actuals short array with expected values
10998
*/
11099
public static void assertEquals(String message, final short[] expecteds, final short[] actuals) {
100+
if (Arrays.equals(expecteds, actuals)) {
101+
return; // fast path
102+
}
103+
111104
internalAssertEquals(message, expecteds, actuals,
112105
new ComparisonHelper() {
113-
public int getExpectedArrayLength() {
114-
return expecteds.length;
115-
}
116-
117-
public int getActualArrayLength() {
118-
return actuals.length;
119-
}
120-
121106
public void assertElementEquals(int index) {
122107
Assert.assertEquals(expecteds[index], actuals[index]);
123108
}
@@ -136,16 +121,12 @@ public void assertElementEquals(int index) {
136121
*/
137122
public static void assertEquals(String message, final int[] expecteds, final int[] actuals)
138123
throws ArrayComparisonFailure {
124+
if (Arrays.equals(expecteds, actuals)) {
125+
return; // fast path
126+
}
127+
139128
internalAssertEquals(message, expecteds, actuals,
140129
new ComparisonHelper() {
141-
public int getExpectedArrayLength() {
142-
return expecteds.length;
143-
}
144-
145-
public int getActualArrayLength() {
146-
return actuals.length;
147-
}
148-
149130
public void assertElementEquals(int index) {
150131
Assert.assertEquals(expecteds[index], actuals[index]);
151132
}
@@ -164,16 +145,12 @@ public void assertElementEquals(int index) {
164145
*/
165146
public static void assertEquals(String message, final long[] expecteds, final long[] actuals)
166147
throws ArrayComparisonFailure {
148+
if (Arrays.equals(expecteds, actuals)) {
149+
return; // fast path
150+
}
151+
167152
internalAssertEquals(message, expecteds, actuals,
168153
new ComparisonHelper() {
169-
public int getExpectedArrayLength() {
170-
return expecteds.length;
171-
}
172-
173-
public int getActualArrayLength() {
174-
return actuals.length;
175-
}
176-
177154
public void assertElementEquals(int index) {
178155
Assert.assertEquals(expecteds[index], actuals[index]);
179156
}
@@ -197,14 +174,6 @@ public static void assertEquals(
197174
String message, final double[] expecteds, final double[] actuals, final double delta) {
198175
internalAssertEquals(message, expecteds, actuals,
199176
new ComparisonHelper() {
200-
public int getExpectedArrayLength() {
201-
return expecteds.length;
202-
}
203-
204-
public int getActualArrayLength() {
205-
return actuals.length;
206-
}
207-
208177
public void assertElementEquals(int index) {
209178
Assert.assertEquals(expecteds[index], actuals[index], delta);
210179
}
@@ -228,14 +197,6 @@ public static void assertEquals(
228197
String message, final float[] expecteds, final float[] actuals, final float delta) {
229198
internalAssertEquals(message, expecteds, actuals,
230199
new ComparisonHelper() {
231-
public int getExpectedArrayLength() {
232-
return expecteds.length;
233-
}
234-
235-
public int getActualArrayLength() {
236-
return actuals.length;
237-
}
238-
239200
public void assertElementEquals(int index) {
240201
Assert.assertEquals(expecteds[index], actuals[index], delta);
241202
}
@@ -253,63 +214,56 @@ public void assertElementEquals(int index) {
253214
* @param actuals object array with expected values
254215
*/
255216
public static void assertDeepEquals(
256-
final String message, final Object[] expecteds, final Object[] actuals) {
257-
internalAssertEquals(message, expecteds, actuals,
258-
new ComparisonHelper() {
259-
public int getExpectedArrayLength() {
260-
return expecteds.length;
261-
}
262-
263-
public int getActualArrayLength() {
264-
return actuals.length;
265-
}
266-
267-
public void assertElementEquals(int index) {
268-
Object expected = expecteds[index];
269-
Object actual = actuals[index];
217+
String message, Object[] expecteds, Object[] actuals) {
218+
if (Arrays.deepEquals(expecteds, actuals)) {
219+
return; // fast path
220+
}
270221

271-
if (isArray(expected) && isArray(actual)) {
272-
try {
273-
assertDeepEqualsViaReflection(message, expected, actual);
274-
} catch (ArrayComparisonFailure e) {
275-
e.addDimension(index);
276-
throw e;
277-
}
278-
} else {
279-
Assert.assertEquals(expected, actual);
280-
}
281-
}
282-
});
222+
internalAssertEquals(message, expecteds, actuals,
223+
new ObjectArrayComparisonHelper(message, expecteds, actuals));
283224
}
225+
284226

285227
private static void assertDeepEqualsViaReflection(
286-
final String message, final Object expecteds, final Object actuals) {
287-
internalAssertEquals(message, expecteds, actuals,
288-
new ComparisonHelper() {
289-
public int getExpectedArrayLength() {
290-
return Array.getLength(expecteds);
291-
}
292-
293-
public int getActualArrayLength() {
294-
return Array.getLength(actuals);
295-
}
228+
String message, Object expecteds, Object actuals) {
229+
if (Arrays.deepEquals(new Object[] { expecteds }, new Object[] { actuals })) {
230+
return; // fast path
231+
}
296232

297-
public void assertElementEquals(int index) {
298-
Object expected = Array.get(expecteds, index);
299-
Object actual = Array.get(actuals, index);
233+
internalAssertEquals(message, expecteds, actuals,
234+
new ObjectArrayComparisonHelper(message, expecteds, actuals));
235+
}
300236

301-
if (isArray(expected) && isArray(actual)) {
302-
try {
303-
assertDeepEqualsViaReflection(message, expected, actual);
304-
} catch (ArrayComparisonFailure e) {
305-
e.addDimension(index);
306-
throw e;
307-
}
308-
} else {
309-
Assert.assertEquals(expected, actual);
310-
}
311-
}
312-
});
237+
/**
238+
* {@link ComparisonHelper} for working with Object arrays.
239+
*/
240+
private static class ObjectArrayComparisonHelper implements ComparisonHelper {
241+
private final String message;
242+
private final Object expecteds;
243+
private final Object actuals;
244+
245+
public ObjectArrayComparisonHelper(
246+
String message, Object expecteds, Object actuals) {
247+
this.message = message;
248+
this.expecteds = expecteds;
249+
this.actuals = actuals;
250+
}
251+
252+
public final void assertElementEquals(int index) {
253+
Object expected = Array.get(expecteds, index);
254+
Object actual = Array.get(actuals, index);
255+
256+
if (isArray(expected) && isArray(actual)) {
257+
try {
258+
assertDeepEqualsViaReflection(message, expected, actual);
259+
} catch (ArrayComparisonFailure e) {
260+
e.addDimension(index);
261+
throw e;
262+
}
263+
} else {
264+
Assert.assertEquals(expected, actual);
265+
}
266+
}
313267
}
314268

315269
private static boolean isArray(Object expected) {
@@ -321,7 +275,7 @@ private static void internalAssertEquals(
321275
String messagePrefix = message == null ? "" : message + ": ";
322276

323277
if (!arraysTriviallyEqual(messagePrefix, expecteds, actuals)) {
324-
assertElementsEqual(messagePrefix, comparisonHelper);
278+
assertElementsEqual(messagePrefix, expecteds, actuals, comparisonHelper);
325279
}
326280
}
327281

@@ -340,9 +294,10 @@ private static boolean arraysTriviallyEqual(String messagePrefix,
340294
}
341295

342296
private static void assertElementsEqual(
343-
String messagePrefix, ComparisonHelper comparisonHelper) {
344-
int actualsLength = comparisonHelper.getActualArrayLength();
345-
int expectedsLength = comparisonHelper.getExpectedArrayLength();
297+
String messagePrefix, Object expecteds, Object actuals,
298+
ComparisonHelper comparisonHelper) {
299+
int actualsLength = Array.getLength(actuals);
300+
int expectedsLength = Array.getLength(expecteds);
346301
if (actualsLength != expectedsLength) {
347302
Assert.fail(messagePrefix + "array lengths differed, expected.length="
348303
+ expectedsLength + " actual.length=" + actualsLength);
@@ -355,7 +310,7 @@ private static void assertElementsEqual(
355310
} catch (ArrayComparisonFailure e) {
356311
/*
357312
* If we get here, the above assertElementEquals() was comparing two arrays.
358-
* Rethrow the exception so the caller can optionally add dimensions.
313+
* Re-throw the exception so the caller can optionally add dimensions.
359314
*/
360315
throw e;
361316
} catch (AssertionError e) {
@@ -368,16 +323,6 @@ private static void assertElementsEqual(
368323
*/
369324
interface ComparisonHelper {
370325

371-
/**
372-
* Gets the length of the array of expected values.
373-
*/
374-
int getExpectedArrayLength();
375-
376-
/**
377-
* Gets the length of the array of actual values.
378-
*/
379-
int getActualArrayLength();
380-
381326
/**
382327
* Asserts that the two elements at the given index are equal.
383328
*/

0 commit comments

Comments
 (0)