1
1
package org .junit ;
2
2
3
3
import java .lang .reflect .Array ;
4
+ import java .util .Arrays ;
4
5
5
6
import org .junit .internal .ArrayComparisonFailure ;
6
7
@@ -25,16 +26,12 @@ private ArraysAssert() {
25
26
*/
26
27
public static void assertEquals (String message , final boolean [] expecteds , final boolean [] actuals )
27
28
throws ArrayComparisonFailure {
29
+ if (Arrays .equals (expecteds , actuals )) {
30
+ return ; // fast path
31
+ }
32
+
28
33
internalAssertEquals (message , expecteds , actuals ,
29
34
new ComparisonHelper () {
30
- public int getExpectedArrayLength () {
31
- return expecteds .length ;
32
- }
33
-
34
- public int getActualArrayLength () {
35
- return actuals .length ;
36
- }
37
-
38
35
public void assertElementEquals (int index ) {
39
36
Assert .assertEquals (expecteds [index ], actuals [index ]);
40
37
}
@@ -53,16 +50,12 @@ public void assertElementEquals(int index) {
53
50
*/
54
51
public static void assertEquals (String message , final byte [] expecteds , final byte [] actuals )
55
52
throws ArrayComparisonFailure {
53
+ if (Arrays .equals (expecteds , actuals )) {
54
+ return ; // fast path
55
+ }
56
+
56
57
internalAssertEquals (message , expecteds , actuals ,
57
58
new ComparisonHelper () {
58
- public int getExpectedArrayLength () {
59
- return expecteds .length ;
60
- }
61
-
62
- public int getActualArrayLength () {
63
- return actuals .length ;
64
- }
65
-
66
59
public void assertElementEquals (int index ) {
67
60
Assert .assertEquals (expecteds [index ], actuals [index ]);
68
61
}
@@ -81,16 +74,12 @@ public void assertElementEquals(int index) {
81
74
*/
82
75
public static void assertEquals (String message , final char [] expecteds , final char [] actuals )
83
76
throws ArrayComparisonFailure {
77
+ if (Arrays .equals (expecteds , actuals )) {
78
+ return ; // fast path
79
+ }
80
+
84
81
internalAssertEquals (message , expecteds , actuals ,
85
82
new ComparisonHelper () {
86
- public int getExpectedArrayLength () {
87
- return expecteds .length ;
88
- }
89
-
90
- public int getActualArrayLength () {
91
- return actuals .length ;
92
- }
93
-
94
83
public void assertElementEquals (int index ) {
95
84
Assert .assertEquals (expecteds [index ], actuals [index ]);
96
85
}
@@ -108,16 +97,12 @@ public void assertElementEquals(int index) {
108
97
* @param actuals short array with expected values
109
98
*/
110
99
public static void assertEquals (String message , final short [] expecteds , final short [] actuals ) {
100
+ if (Arrays .equals (expecteds , actuals )) {
101
+ return ; // fast path
102
+ }
103
+
111
104
internalAssertEquals (message , expecteds , actuals ,
112
105
new ComparisonHelper () {
113
- public int getExpectedArrayLength () {
114
- return expecteds .length ;
115
- }
116
-
117
- public int getActualArrayLength () {
118
- return actuals .length ;
119
- }
120
-
121
106
public void assertElementEquals (int index ) {
122
107
Assert .assertEquals (expecteds [index ], actuals [index ]);
123
108
}
@@ -136,16 +121,12 @@ public void assertElementEquals(int index) {
136
121
*/
137
122
public static void assertEquals (String message , final int [] expecteds , final int [] actuals )
138
123
throws ArrayComparisonFailure {
124
+ if (Arrays .equals (expecteds , actuals )) {
125
+ return ; // fast path
126
+ }
127
+
139
128
internalAssertEquals (message , expecteds , actuals ,
140
129
new ComparisonHelper () {
141
- public int getExpectedArrayLength () {
142
- return expecteds .length ;
143
- }
144
-
145
- public int getActualArrayLength () {
146
- return actuals .length ;
147
- }
148
-
149
130
public void assertElementEquals (int index ) {
150
131
Assert .assertEquals (expecteds [index ], actuals [index ]);
151
132
}
@@ -164,16 +145,12 @@ public void assertElementEquals(int index) {
164
145
*/
165
146
public static void assertEquals (String message , final long [] expecteds , final long [] actuals )
166
147
throws ArrayComparisonFailure {
148
+ if (Arrays .equals (expecteds , actuals )) {
149
+ return ; // fast path
150
+ }
151
+
167
152
internalAssertEquals (message , expecteds , actuals ,
168
153
new ComparisonHelper () {
169
- public int getExpectedArrayLength () {
170
- return expecteds .length ;
171
- }
172
-
173
- public int getActualArrayLength () {
174
- return actuals .length ;
175
- }
176
-
177
154
public void assertElementEquals (int index ) {
178
155
Assert .assertEquals (expecteds [index ], actuals [index ]);
179
156
}
@@ -197,14 +174,6 @@ public static void assertEquals(
197
174
String message , final double [] expecteds , final double [] actuals , final double delta ) {
198
175
internalAssertEquals (message , expecteds , actuals ,
199
176
new ComparisonHelper () {
200
- public int getExpectedArrayLength () {
201
- return expecteds .length ;
202
- }
203
-
204
- public int getActualArrayLength () {
205
- return actuals .length ;
206
- }
207
-
208
177
public void assertElementEquals (int index ) {
209
178
Assert .assertEquals (expecteds [index ], actuals [index ], delta );
210
179
}
@@ -228,14 +197,6 @@ public static void assertEquals(
228
197
String message , final float [] expecteds , final float [] actuals , final float delta ) {
229
198
internalAssertEquals (message , expecteds , actuals ,
230
199
new ComparisonHelper () {
231
- public int getExpectedArrayLength () {
232
- return expecteds .length ;
233
- }
234
-
235
- public int getActualArrayLength () {
236
- return actuals .length ;
237
- }
238
-
239
200
public void assertElementEquals (int index ) {
240
201
Assert .assertEquals (expecteds [index ], actuals [index ], delta );
241
202
}
@@ -253,63 +214,56 @@ public void assertElementEquals(int index) {
253
214
* @param actuals object array with expected values
254
215
*/
255
216
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
+ }
270
221
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 ));
283
224
}
225
+
284
226
285
227
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
+ }
296
232
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
+ }
300
236
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
+ }
313
267
}
314
268
315
269
private static boolean isArray (Object expected ) {
@@ -321,7 +275,7 @@ private static void internalAssertEquals(
321
275
String messagePrefix = message == null ? "" : message + ": " ;
322
276
323
277
if (!arraysTriviallyEqual (messagePrefix , expecteds , actuals )) {
324
- assertElementsEqual (messagePrefix , comparisonHelper );
278
+ assertElementsEqual (messagePrefix , expecteds , actuals , comparisonHelper );
325
279
}
326
280
}
327
281
@@ -340,9 +294,10 @@ private static boolean arraysTriviallyEqual(String messagePrefix,
340
294
}
341
295
342
296
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 );
346
301
if (actualsLength != expectedsLength ) {
347
302
Assert .fail (messagePrefix + "array lengths differed, expected.length="
348
303
+ expectedsLength + " actual.length=" + actualsLength );
@@ -355,7 +310,7 @@ private static void assertElementsEqual(
355
310
} catch (ArrayComparisonFailure e ) {
356
311
/*
357
312
* 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.
359
314
*/
360
315
throw e ;
361
316
} catch (AssertionError e ) {
@@ -368,16 +323,6 @@ private static void assertElementsEqual(
368
323
*/
369
324
interface ComparisonHelper {
370
325
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
-
381
326
/**
382
327
* Asserts that the two elements at the given index are equal.
383
328
*/
0 commit comments