• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.junit;
2 
3 import org.hamcrest.Matcher;
4 import org.hamcrest.MatcherAssert;
5 import org.junit.function.ThrowingRunnable;
6 import org.junit.internal.ArrayComparisonFailure;
7 import org.junit.internal.ExactComparisonCriteria;
8 import org.junit.internal.InexactComparisonCriteria;
9 
10 /**
11  * A set of assertion methods useful for writing tests. Only failed assertions
12  * are recorded. These methods can be used directly:
13  * <code>Assert.assertEquals(...)</code>, however, they read better if they
14  * are referenced through static import:
15  *
16  * <pre>
17  * import static org.junit.Assert.*;
18  *    ...
19  *    assertEquals(...);
20  * </pre>
21  *
22  * @see AssertionError
23  * @since 4.0
24  */
25 public class Assert {
26     /**
27      * Protect constructor since it is a static only class
28      */
Assert()29     protected Assert() {
30     }
31 
32     /**
33      * Asserts that a condition is true. If it isn't it throws an
34      * {@link AssertionError} with the given message.
35      *
36      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
37      * okay)
38      * @param condition condition to be checked
39      */
assertTrue(String message, boolean condition)40     public static void assertTrue(String message, boolean condition) {
41         if (!condition) {
42             fail(message);
43         }
44     }
45 
46     /**
47      * Asserts that a condition is true. If it isn't it throws an
48      * {@link AssertionError} without a message.
49      *
50      * @param condition condition to be checked
51      */
assertTrue(boolean condition)52     public static void assertTrue(boolean condition) {
53         assertTrue(null, condition);
54     }
55 
56     /**
57      * Asserts that a condition is false. If it isn't it throws an
58      * {@link AssertionError} with the given message.
59      *
60      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
61      * okay)
62      * @param condition condition to be checked
63      */
assertFalse(String message, boolean condition)64     public static void assertFalse(String message, boolean condition) {
65         assertTrue(message, !condition);
66     }
67 
68     /**
69      * Asserts that a condition is false. If it isn't it throws an
70      * {@link AssertionError} without a message.
71      *
72      * @param condition condition to be checked
73      */
assertFalse(boolean condition)74     public static void assertFalse(boolean condition) {
75         assertFalse(null, condition);
76     }
77 
78     /**
79      * Fails a test with the given message.
80      *
81      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
82      * okay)
83      * @see AssertionError
84      */
fail(String message)85     public static void fail(String message) {
86         if (message == null) {
87             throw new AssertionError();
88         }
89         throw new AssertionError(message);
90     }
91 
92     /**
93      * Fails a test with no message.
94      */
fail()95     public static void fail() {
96         fail(null);
97     }
98 
99     /**
100      * Asserts that two objects are equal. If they are not, an
101      * {@link AssertionError} is thrown with the given message. If
102      * <code>expected</code> and <code>actual</code> are <code>null</code>,
103      * they are considered equal.
104      *
105      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
106      * okay)
107      * @param expected expected value
108      * @param actual actual value
109      */
assertEquals(String message, Object expected, Object actual)110     public static void assertEquals(String message, Object expected,
111             Object actual) {
112         if (equalsRegardingNull(expected, actual)) {
113             return;
114         }
115         if (expected instanceof String && actual instanceof String) {
116             String cleanMessage = message == null ? "" : message;
117             throw new ComparisonFailure(cleanMessage, (String) expected,
118                     (String) actual);
119         } else {
120             failNotEquals(message, expected, actual);
121         }
122     }
123 
equalsRegardingNull(Object expected, Object actual)124     private static boolean equalsRegardingNull(Object expected, Object actual) {
125         if (expected == null) {
126             return actual == null;
127         }
128 
129         return isEquals(expected, actual);
130     }
131 
isEquals(Object expected, Object actual)132     private static boolean isEquals(Object expected, Object actual) {
133         return expected.equals(actual);
134     }
135 
136     /**
137      * Asserts that two objects are equal. If they are not, an
138      * {@link AssertionError} without a message is thrown. If
139      * <code>expected</code> and <code>actual</code> are <code>null</code>,
140      * they are considered equal.
141      *
142      * @param expected expected value
143      * @param actual the value to check against <code>expected</code>
144      */
assertEquals(Object expected, Object actual)145     public static void assertEquals(Object expected, Object actual) {
146         assertEquals(null, expected, actual);
147     }
148 
149     /**
150      * Asserts that two objects are <b>not</b> equals. If they are, an
151      * {@link AssertionError} is thrown with the given message. If
152      * <code>unexpected</code> and <code>actual</code> are <code>null</code>,
153      * they are considered equal.
154      *
155      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
156      * okay)
157      * @param unexpected unexpected value to check
158      * @param actual the value to check against <code>unexpected</code>
159      */
assertNotEquals(String message, Object unexpected, Object actual)160     public static void assertNotEquals(String message, Object unexpected,
161             Object actual) {
162         if (equalsRegardingNull(unexpected, actual)) {
163             failEquals(message, actual);
164         }
165     }
166 
167     /**
168      * Asserts that two objects are <b>not</b> equals. If they are, an
169      * {@link AssertionError} without a message is thrown. If
170      * <code>unexpected</code> and <code>actual</code> are <code>null</code>,
171      * they are considered equal.
172      *
173      * @param unexpected unexpected value to check
174      * @param actual the value to check against <code>unexpected</code>
175      */
assertNotEquals(Object unexpected, Object actual)176     public static void assertNotEquals(Object unexpected, Object actual) {
177         assertNotEquals(null, unexpected, actual);
178     }
179 
failEquals(String message, Object actual)180     private static void failEquals(String message, Object actual) {
181         String formatted = "Values should be different. ";
182         if (message != null) {
183             formatted = message + ". ";
184         }
185 
186         formatted += "Actual: " + actual;
187         fail(formatted);
188     }
189 
190     /**
191      * Asserts that two longs are <b>not</b> equals. If they are, an
192      * {@link AssertionError} is thrown with the given message.
193      *
194      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
195      * okay)
196      * @param unexpected unexpected value to check
197      * @param actual the value to check against <code>unexpected</code>
198      */
assertNotEquals(String message, long unexpected, long actual)199     public static void assertNotEquals(String message, long unexpected, long actual) {
200         if (unexpected == actual) {
201             failEquals(message, Long.valueOf(actual));
202         }
203     }
204 
205     /**
206      * Asserts that two longs are <b>not</b> equals. If they are, an
207      * {@link AssertionError} without a message is thrown.
208      *
209      * @param unexpected unexpected value to check
210      * @param actual the value to check against <code>unexpected</code>
211      */
assertNotEquals(long unexpected, long actual)212     public static void assertNotEquals(long unexpected, long actual) {
213         assertNotEquals(null, unexpected, actual);
214     }
215 
216     /**
217      * Asserts that two doubles are <b>not</b> equal to within a positive delta.
218      * If they are, an {@link AssertionError} is thrown with the given
219      * message. If the unexpected value is infinity then the delta value is
220      * ignored. NaNs are considered equal:
221      * <code>assertNotEquals(Double.NaN, Double.NaN, *)</code> fails
222      *
223      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
224      * okay)
225      * @param unexpected unexpected value
226      * @param actual the value to check against <code>unexpected</code>
227      * @param delta the maximum delta between <code>unexpected</code> and
228      * <code>actual</code> for which both numbers are still
229      * considered equal.
230      */
assertNotEquals(String message, double unexpected, double actual, double delta)231     public static void assertNotEquals(String message, double unexpected,
232             double actual, double delta) {
233         if (!doubleIsDifferent(unexpected, actual, delta)) {
234             failEquals(message, Double.valueOf(actual));
235         }
236     }
237 
238     /**
239      * Asserts that two doubles are <b>not</b> equal to within a positive delta.
240      * If they are, an {@link AssertionError} is thrown. If the unexpected
241      * value is infinity then the delta value is ignored.NaNs are considered
242      * equal: <code>assertNotEquals(Double.NaN, Double.NaN, *)</code> fails
243      *
244      * @param unexpected unexpected value
245      * @param actual the value to check against <code>unexpected</code>
246      * @param delta the maximum delta between <code>unexpected</code> and
247      * <code>actual</code> for which both numbers are still
248      * considered equal.
249      */
assertNotEquals(double unexpected, double actual, double delta)250     public static void assertNotEquals(double unexpected, double actual, double delta) {
251         assertNotEquals(null, unexpected, actual, delta);
252     }
253 
254     /**
255      * Asserts that two floats are <b>not</b> equal to within a positive delta.
256      * If they are, an {@link AssertionError} is thrown. If the unexpected
257      * value is infinity then the delta value is ignored.NaNs are considered
258      * equal: <code>assertNotEquals(Float.NaN, Float.NaN, *)</code> fails
259      *
260      * @param unexpected unexpected value
261      * @param actual the value to check against <code>unexpected</code>
262      * @param delta the maximum delta between <code>unexpected</code> and
263      * <code>actual</code> for which both numbers are still
264      * considered equal.
265      */
assertNotEquals(float unexpected, float actual, float delta)266     public static void assertNotEquals(float unexpected, float actual, float delta) {
267         assertNotEquals(null, unexpected, actual, delta);
268     }
269 
270     /**
271      * Asserts that two object arrays are equal. If they are not, an
272      * {@link AssertionError} is thrown with the given message. If
273      * <code>expecteds</code> and <code>actuals</code> are <code>null</code>,
274      * they are considered equal.
275      *
276      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
277      * okay)
278      * @param expecteds Object array or array of arrays (multi-dimensional array) with
279      * expected values.
280      * @param actuals Object array or array of arrays (multi-dimensional array) with
281      * actual values
282      */
assertArrayEquals(String message, Object[] expecteds, Object[] actuals)283     public static void assertArrayEquals(String message, Object[] expecteds,
284             Object[] actuals) throws ArrayComparisonFailure {
285         internalArrayEquals(message, expecteds, actuals);
286     }
287 
288     /**
289      * Asserts that two object arrays are equal. If they are not, an
290      * {@link AssertionError} is thrown. If <code>expected</code> and
291      * <code>actual</code> are <code>null</code>, they are considered
292      * equal.
293      *
294      * @param expecteds Object array or array of arrays (multi-dimensional array) with
295      * expected values
296      * @param actuals Object array or array of arrays (multi-dimensional array) with
297      * actual values
298      */
assertArrayEquals(Object[] expecteds, Object[] actuals)299     public static void assertArrayEquals(Object[] expecteds, Object[] actuals) {
300         assertArrayEquals(null, expecteds, actuals);
301     }
302 
303     /**
304      * Asserts that two boolean arrays are equal. If they are not, an
305      * {@link AssertionError} is thrown with the given message. If
306      * <code>expecteds</code> and <code>actuals</code> are <code>null</code>,
307      * they are considered equal.
308      *
309      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
310      * okay)
311      * @param expecteds boolean array with expected values.
312      * @param actuals boolean array with expected values.
313      */
assertArrayEquals(String message, boolean[] expecteds, boolean[] actuals)314     public static void assertArrayEquals(String message, boolean[] expecteds,
315             boolean[] actuals) throws ArrayComparisonFailure {
316         internalArrayEquals(message, expecteds, actuals);
317     }
318 
319     /**
320      * Asserts that two boolean arrays are equal. If they are not, an
321      * {@link AssertionError} is thrown. If <code>expected</code> and
322      * <code>actual</code> are <code>null</code>, they are considered
323      * equal.
324      *
325      * @param expecteds boolean array with expected values.
326      * @param actuals boolean array with expected values.
327      */
assertArrayEquals(boolean[] expecteds, boolean[] actuals)328     public static void assertArrayEquals(boolean[] expecteds, boolean[] actuals) {
329         assertArrayEquals(null, expecteds, actuals);
330     }
331 
332     /**
333      * Asserts that two byte arrays are equal. If they are not, an
334      * {@link AssertionError} is thrown with the given message.
335      *
336      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
337      * okay)
338      * @param expecteds byte array with expected values.
339      * @param actuals byte array with actual values
340      */
assertArrayEquals(String message, byte[] expecteds, byte[] actuals)341     public static void assertArrayEquals(String message, byte[] expecteds,
342             byte[] actuals) throws ArrayComparisonFailure {
343         internalArrayEquals(message, expecteds, actuals);
344     }
345 
346     /**
347      * Asserts that two byte arrays are equal. If they are not, an
348      * {@link AssertionError} is thrown.
349      *
350      * @param expecteds byte array with expected values.
351      * @param actuals byte array with actual values
352      */
assertArrayEquals(byte[] expecteds, byte[] actuals)353     public static void assertArrayEquals(byte[] expecteds, byte[] actuals) {
354         assertArrayEquals(null, expecteds, actuals);
355     }
356 
357     /**
358      * Asserts that two char arrays are equal. If they are not, an
359      * {@link AssertionError} is thrown with the given message.
360      *
361      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
362      * okay)
363      * @param expecteds char array with expected values.
364      * @param actuals char array with actual values
365      */
assertArrayEquals(String message, char[] expecteds, char[] actuals)366     public static void assertArrayEquals(String message, char[] expecteds,
367             char[] actuals) throws ArrayComparisonFailure {
368         internalArrayEquals(message, expecteds, actuals);
369     }
370 
371     /**
372      * Asserts that two char arrays are equal. If they are not, an
373      * {@link AssertionError} is thrown.
374      *
375      * @param expecteds char array with expected values.
376      * @param actuals char array with actual values
377      */
assertArrayEquals(char[] expecteds, char[] actuals)378     public static void assertArrayEquals(char[] expecteds, char[] actuals) {
379         assertArrayEquals(null, expecteds, actuals);
380     }
381 
382     /**
383      * Asserts that two short arrays are equal. If they are not, an
384      * {@link AssertionError} is thrown with the given message.
385      *
386      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
387      * okay)
388      * @param expecteds short array with expected values.
389      * @param actuals short array with actual values
390      */
assertArrayEquals(String message, short[] expecteds, short[] actuals)391     public static void assertArrayEquals(String message, short[] expecteds,
392             short[] actuals) throws ArrayComparisonFailure {
393         internalArrayEquals(message, expecteds, actuals);
394     }
395 
396     /**
397      * Asserts that two short arrays are equal. If they are not, an
398      * {@link AssertionError} is thrown.
399      *
400      * @param expecteds short array with expected values.
401      * @param actuals short array with actual values
402      */
assertArrayEquals(short[] expecteds, short[] actuals)403     public static void assertArrayEquals(short[] expecteds, short[] actuals) {
404         assertArrayEquals(null, expecteds, actuals);
405     }
406 
407     /**
408      * Asserts that two int arrays are equal. If they are not, an
409      * {@link AssertionError} is thrown with the given message.
410      *
411      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
412      * okay)
413      * @param expecteds int array with expected values.
414      * @param actuals int array with actual values
415      */
assertArrayEquals(String message, int[] expecteds, int[] actuals)416     public static void assertArrayEquals(String message, int[] expecteds,
417             int[] actuals) throws ArrayComparisonFailure {
418         internalArrayEquals(message, expecteds, actuals);
419     }
420 
421     /**
422      * Asserts that two int arrays are equal. If they are not, an
423      * {@link AssertionError} is thrown.
424      *
425      * @param expecteds int array with expected values.
426      * @param actuals int array with actual values
427      */
assertArrayEquals(int[] expecteds, int[] actuals)428     public static void assertArrayEquals(int[] expecteds, int[] actuals) {
429         assertArrayEquals(null, expecteds, actuals);
430     }
431 
432     /**
433      * Asserts that two long arrays are equal. If they are not, an
434      * {@link AssertionError} is thrown with the given message.
435      *
436      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
437      * okay)
438      * @param expecteds long array with expected values.
439      * @param actuals long array with actual values
440      */
assertArrayEquals(String message, long[] expecteds, long[] actuals)441     public static void assertArrayEquals(String message, long[] expecteds,
442             long[] actuals) throws ArrayComparisonFailure {
443         internalArrayEquals(message, expecteds, actuals);
444     }
445 
446     /**
447      * Asserts that two long arrays are equal. If they are not, an
448      * {@link AssertionError} is thrown.
449      *
450      * @param expecteds long array with expected values.
451      * @param actuals long array with actual values
452      */
assertArrayEquals(long[] expecteds, long[] actuals)453     public static void assertArrayEquals(long[] expecteds, long[] actuals) {
454         assertArrayEquals(null, expecteds, actuals);
455     }
456 
457     /**
458      * Asserts that two double arrays are equal. If they are not, an
459      * {@link AssertionError} is thrown with the given message.
460      *
461      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
462      * okay)
463      * @param expecteds double array with expected values.
464      * @param actuals double array with actual values
465      * @param delta the maximum delta between <code>expecteds[i]</code> and
466      * <code>actuals[i]</code> for which both numbers are still
467      * considered equal.
468      */
assertArrayEquals(String message, double[] expecteds, double[] actuals, double delta)469     public static void assertArrayEquals(String message, double[] expecteds,
470             double[] actuals, double delta) throws ArrayComparisonFailure {
471         new InexactComparisonCriteria(delta).arrayEquals(message, expecteds, actuals);
472     }
473 
474     /**
475      * Asserts that two double arrays are equal. If they are not, an
476      * {@link AssertionError} is thrown.
477      *
478      * @param expecteds double array with expected values.
479      * @param actuals double array with actual values
480      * @param delta the maximum delta between <code>expecteds[i]</code> and
481      * <code>actuals[i]</code> for which both numbers are still
482      * considered equal.
483      */
assertArrayEquals(double[] expecteds, double[] actuals, double delta)484     public static void assertArrayEquals(double[] expecteds, double[] actuals, double delta) {
485         assertArrayEquals(null, expecteds, actuals, delta);
486     }
487 
488     /**
489      * Asserts that two float arrays are equal. If they are not, an
490      * {@link AssertionError} is thrown with the given message.
491      *
492      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
493      * okay)
494      * @param expecteds float array with expected values.
495      * @param actuals float array with actual values
496      * @param delta the maximum delta between <code>expecteds[i]</code> and
497      * <code>actuals[i]</code> for which both numbers are still
498      * considered equal.
499      */
assertArrayEquals(String message, float[] expecteds, float[] actuals, float delta)500     public static void assertArrayEquals(String message, float[] expecteds,
501             float[] actuals, float delta) throws ArrayComparisonFailure {
502         new InexactComparisonCriteria(delta).arrayEquals(message, expecteds, actuals);
503     }
504 
505     /**
506      * Asserts that two float arrays are equal. If they are not, an
507      * {@link AssertionError} is thrown.
508      *
509      * @param expecteds float array with expected values.
510      * @param actuals float array with actual values
511      * @param delta the maximum delta between <code>expecteds[i]</code> and
512      * <code>actuals[i]</code> for which both numbers are still
513      * considered equal.
514      */
assertArrayEquals(float[] expecteds, float[] actuals, float delta)515     public static void assertArrayEquals(float[] expecteds, float[] actuals, float delta) {
516         assertArrayEquals(null, expecteds, actuals, delta);
517     }
518 
519     /**
520      * Asserts that two object arrays are equal. If they are not, an
521      * {@link AssertionError} is thrown with the given message. If
522      * <code>expecteds</code> and <code>actuals</code> are <code>null</code>,
523      * they are considered equal.
524      *
525      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
526      * okay)
527      * @param expecteds Object array or array of arrays (multi-dimensional array) with
528      * expected values.
529      * @param actuals Object array or array of arrays (multi-dimensional array) with
530      * actual values
531      */
internalArrayEquals(String message, Object expecteds, Object actuals)532     private static void internalArrayEquals(String message, Object expecteds,
533             Object actuals) throws ArrayComparisonFailure {
534         new ExactComparisonCriteria().arrayEquals(message, expecteds, actuals);
535     }
536 
537     /**
538      * Asserts that two doubles are equal to within a positive delta.
539      * If they are not, an {@link AssertionError} is thrown with the given
540      * message. If the expected value is infinity then the delta value is
541      * ignored. NaNs are considered equal:
542      * <code>assertEquals(Double.NaN, Double.NaN, *)</code> passes
543      *
544      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
545      * okay)
546      * @param expected expected value
547      * @param actual the value to check against <code>expected</code>
548      * @param delta the maximum delta between <code>expected</code> and
549      * <code>actual</code> for which both numbers are still
550      * considered equal.
551      */
assertEquals(String message, double expected, double actual, double delta)552     public static void assertEquals(String message, double expected,
553             double actual, double delta) {
554         if (doubleIsDifferent(expected, actual, delta)) {
555             failNotEquals(message, Double.valueOf(expected), Double.valueOf(actual));
556         }
557     }
558 
559     /**
560      * Asserts that two floats are equal to within a positive delta.
561      * If they are not, an {@link AssertionError} is thrown with the given
562      * message. If the expected value is infinity then the delta value is
563      * ignored. NaNs are considered equal:
564      * <code>assertEquals(Float.NaN, Float.NaN, *)</code> passes
565      *
566      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
567      * okay)
568      * @param expected expected value
569      * @param actual the value to check against <code>expected</code>
570      * @param delta the maximum delta between <code>expected</code> and
571      * <code>actual</code> for which both numbers are still
572      * considered equal.
573      */
assertEquals(String message, float expected, float actual, float delta)574     public static void assertEquals(String message, float expected,
575             float actual, float delta) {
576         if (floatIsDifferent(expected, actual, delta)) {
577             failNotEquals(message, Float.valueOf(expected), Float.valueOf(actual));
578         }
579     }
580 
581     /**
582      * Asserts that two floats are <b>not</b> equal to within a positive delta.
583      * If they are, an {@link AssertionError} is thrown with the given
584      * message. If the unexpected value is infinity then the delta value is
585      * ignored. NaNs are considered equal:
586      * <code>assertNotEquals(Float.NaN, Float.NaN, *)</code> fails
587      *
588      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
589      * okay)
590      * @param unexpected unexpected value
591      * @param actual the value to check against <code>unexpected</code>
592      * @param delta the maximum delta between <code>unexpected</code> and
593      * <code>actual</code> for which both numbers are still
594      * considered equal.
595      */
assertNotEquals(String message, float unexpected, float actual, float delta)596     public static void assertNotEquals(String message, float unexpected,
597             float actual, float delta) {
598         if (!floatIsDifferent(unexpected, actual, delta)) {
599             failEquals(message, Float.valueOf(actual));
600         }
601     }
602 
doubleIsDifferent(double d1, double d2, double delta)603     private static boolean doubleIsDifferent(double d1, double d2, double delta) {
604         if (Double.compare(d1, d2) == 0) {
605             return false;
606         }
607         if ((Math.abs(d1 - d2) <= delta)) {
608             return false;
609         }
610 
611         return true;
612     }
613 
floatIsDifferent(float f1, float f2, float delta)614     private static boolean floatIsDifferent(float f1, float f2, float delta) {
615         if (Float.compare(f1, f2) == 0) {
616             return false;
617         }
618         if ((Math.abs(f1 - f2) <= delta)) {
619             return false;
620         }
621 
622         return true;
623     }
624 
625     /**
626      * Asserts that two longs are equal. If they are not, an
627      * {@link AssertionError} is thrown.
628      *
629      * @param expected expected long value.
630      * @param actual actual long value
631      */
assertEquals(long expected, long actual)632     public static void assertEquals(long expected, long actual) {
633         assertEquals(null, expected, actual);
634     }
635 
636     /**
637      * Asserts that two longs are equal. If they are not, an
638      * {@link AssertionError} is thrown with the given message.
639      *
640      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
641      * okay)
642      * @param expected long expected value.
643      * @param actual long actual value
644      */
assertEquals(String message, long expected, long actual)645     public static void assertEquals(String message, long expected, long actual) {
646         if (expected != actual) {
647             failNotEquals(message, Long.valueOf(expected), Long.valueOf(actual));
648         }
649     }
650 
651     /**
652      * @deprecated Use
653      *             <code>assertEquals(double expected, double actual, double delta)</code>
654      *             instead
655      */
656     @Deprecated
assertEquals(double expected, double actual)657     public static void assertEquals(double expected, double actual) {
658         assertEquals(null, expected, actual);
659     }
660 
661     /**
662      * @deprecated Use
663      *             <code>assertEquals(String message, double expected, double actual, double delta)</code>
664      *             instead
665      */
666     @Deprecated
assertEquals(String message, double expected, double actual)667     public static void assertEquals(String message, double expected,
668             double actual) {
669         fail("Use assertEquals(expected, actual, delta) to compare floating-point numbers");
670     }
671 
672     /**
673      * Asserts that two doubles are equal to within a positive delta.
674      * If they are not, an {@link AssertionError} is thrown. If the expected
675      * value is infinity then the delta value is ignored.NaNs are considered
676      * equal: <code>assertEquals(Double.NaN, Double.NaN, *)</code> passes
677      *
678      * @param expected expected value
679      * @param actual the value to check against <code>expected</code>
680      * @param delta the maximum delta between <code>expected</code> and
681      * <code>actual</code> for which both numbers are still
682      * considered equal.
683      */
assertEquals(double expected, double actual, double delta)684     public static void assertEquals(double expected, double actual, double delta) {
685         assertEquals(null, expected, actual, delta);
686     }
687 
688     /**
689      * Asserts that two floats are equal to within a positive delta.
690      * If they are not, an {@link AssertionError} is thrown. If the expected
691      * value is infinity then the delta value is ignored. NaNs are considered
692      * equal: <code>assertEquals(Float.NaN, Float.NaN, *)</code> passes
693      *
694      * @param expected expected value
695      * @param actual the value to check against <code>expected</code>
696      * @param delta the maximum delta between <code>expected</code> and
697      * <code>actual</code> for which both numbers are still
698      * considered equal.
699      */
assertEquals(float expected, float actual, float delta)700     public static void assertEquals(float expected, float actual, float delta) {
701         assertEquals(null, expected, actual, delta);
702     }
703 
704     /**
705      * Asserts that an object isn't null. If it is an {@link AssertionError} is
706      * thrown with the given message.
707      *
708      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
709      * okay)
710      * @param object Object to check or <code>null</code>
711      */
assertNotNull(String message, Object object)712     public static void assertNotNull(String message, Object object) {
713         assertTrue(message, object != null);
714     }
715 
716     /**
717      * Asserts that an object isn't null. If it is an {@link AssertionError} is
718      * thrown.
719      *
720      * @param object Object to check or <code>null</code>
721      */
assertNotNull(Object object)722     public static void assertNotNull(Object object) {
723         assertNotNull(null, object);
724     }
725 
726     /**
727      * Asserts that an object is null. If it is not, an {@link AssertionError}
728      * is thrown with the given message.
729      *
730      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
731      * okay)
732      * @param object Object to check or <code>null</code>
733      */
assertNull(String message, Object object)734     public static void assertNull(String message, Object object) {
735         if (object == null) {
736             return;
737         }
738         failNotNull(message, object);
739     }
740 
741     /**
742      * Asserts that an object is null. If it isn't an {@link AssertionError} is
743      * thrown.
744      *
745      * @param object Object to check or <code>null</code>
746      */
assertNull(Object object)747     public static void assertNull(Object object) {
748         assertNull(null, object);
749     }
750 
failNotNull(String message, Object actual)751     private static void failNotNull(String message, Object actual) {
752         String formatted = "";
753         if (message != null) {
754             formatted = message + " ";
755         }
756         fail(formatted + "expected null, but was:<" + actual + ">");
757     }
758 
759     /**
760      * Asserts that two objects refer to the same object. If they are not, an
761      * {@link AssertionError} is thrown with the given message.
762      *
763      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
764      * okay)
765      * @param expected the expected object
766      * @param actual the object to compare to <code>expected</code>
767      */
assertSame(String message, Object expected, Object actual)768     public static void assertSame(String message, Object expected, Object actual) {
769         if (expected == actual) {
770             return;
771         }
772         failNotSame(message, expected, actual);
773     }
774 
775     /**
776      * Asserts that two objects refer to the same object. If they are not the
777      * same, an {@link AssertionError} without a message is thrown.
778      *
779      * @param expected the expected object
780      * @param actual the object to compare to <code>expected</code>
781      */
assertSame(Object expected, Object actual)782     public static void assertSame(Object expected, Object actual) {
783         assertSame(null, expected, actual);
784     }
785 
786     /**
787      * Asserts that two objects do not refer to the same object. If they do
788      * refer to the same object, an {@link AssertionError} is thrown with the
789      * given message.
790      *
791      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
792      * okay)
793      * @param unexpected the object you don't expect
794      * @param actual the object to compare to <code>unexpected</code>
795      */
assertNotSame(String message, Object unexpected, Object actual)796     public static void assertNotSame(String message, Object unexpected,
797             Object actual) {
798         if (unexpected == actual) {
799             failSame(message);
800         }
801     }
802 
803     /**
804      * Asserts that two objects do not refer to the same object. If they do
805      * refer to the same object, an {@link AssertionError} without a message is
806      * thrown.
807      *
808      * @param unexpected the object you don't expect
809      * @param actual the object to compare to <code>unexpected</code>
810      */
assertNotSame(Object unexpected, Object actual)811     public static void assertNotSame(Object unexpected, Object actual) {
812         assertNotSame(null, unexpected, actual);
813     }
814 
failSame(String message)815     private static void failSame(String message) {
816         String formatted = "";
817         if (message != null) {
818             formatted = message + " ";
819         }
820         fail(formatted + "expected not same");
821     }
822 
failNotSame(String message, Object expected, Object actual)823     private static void failNotSame(String message, Object expected,
824             Object actual) {
825         String formatted = "";
826         if (message != null) {
827             formatted = message + " ";
828         }
829         fail(formatted + "expected same:<" + expected + "> was not:<" + actual
830                 + ">");
831     }
832 
failNotEquals(String message, Object expected, Object actual)833     private static void failNotEquals(String message, Object expected,
834             Object actual) {
835         fail(format(message, expected, actual));
836     }
837 
format(String message, Object expected, Object actual)838     static String format(String message, Object expected, Object actual) {
839         String formatted = "";
840         if (message != null && !"".equals(message)) {
841             formatted = message + " ";
842         }
843         String expectedString = String.valueOf(expected);
844         String actualString = String.valueOf(actual);
845         if (equalsRegardingNull(expectedString, actualString)) {
846             return formatted + "expected: "
847                     + formatClassAndValue(expected, expectedString)
848                     + " but was: " + formatClassAndValue(actual, actualString);
849         } else {
850             return formatted + "expected:<" + expectedString + "> but was:<"
851                     + actualString + ">";
852         }
853     }
854 
formatClass(Class<?> value)855     private static String formatClass(Class<?> value) {
856         String className = value.getCanonicalName();
857         return className == null ? value.getName() : className;
858     }
859 
formatClassAndValue(Object value, String valueString)860     private static String formatClassAndValue(Object value, String valueString) {
861         String className = value == null ? "null" : value.getClass().getName();
862         return className + "<" + valueString + ">";
863     }
864 
865     /**
866      * Asserts that two object arrays are equal. If they are not, an
867      * {@link AssertionError} is thrown with the given message. If
868      * <code>expecteds</code> and <code>actuals</code> are <code>null</code>,
869      * they are considered equal.
870      *
871      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
872      * okay)
873      * @param expecteds Object array or array of arrays (multi-dimensional array) with
874      * expected values.
875      * @param actuals Object array or array of arrays (multi-dimensional array) with
876      * actual values
877      * @deprecated use assertArrayEquals
878      */
879     @Deprecated
assertEquals(String message, Object[] expecteds, Object[] actuals)880     public static void assertEquals(String message, Object[] expecteds,
881             Object[] actuals) {
882         assertArrayEquals(message, expecteds, actuals);
883     }
884 
885     /**
886      * Asserts that two object arrays are equal. If they are not, an
887      * {@link AssertionError} is thrown. If <code>expected</code> and
888      * <code>actual</code> are <code>null</code>, they are considered
889      * equal.
890      *
891      * @param expecteds Object array or array of arrays (multi-dimensional array) with
892      * expected values
893      * @param actuals Object array or array of arrays (multi-dimensional array) with
894      * actual values
895      * @deprecated use assertArrayEquals
896      */
897     @Deprecated
assertEquals(Object[] expecteds, Object[] actuals)898     public static void assertEquals(Object[] expecteds, Object[] actuals) {
899         assertArrayEquals(expecteds, actuals);
900     }
901 
902     /**
903      * Asserts that <code>actual</code> satisfies the condition specified by
904      * <code>matcher</code>. If not, an {@link AssertionError} is thrown with
905      * information about the matcher and failing value. Example:
906      *
907      * <pre>
908      *   assertThat(0, is(1)); // fails:
909      *     // failure message:
910      *     // expected: is &lt;1&gt;
911      *     // got value: &lt;0&gt;
912      *   assertThat(0, is(not(1))) // passes
913      * </pre>
914      *
915      * <code>org.hamcrest.Matcher</code> does not currently document the meaning
916      * of its type parameter <code>T</code>.  This method assumes that a matcher
917      * typed as <code>Matcher&lt;T&gt;</code> can be meaningfully applied only
918      * to values that could be assigned to a variable of type <code>T</code>.
919      *
920      * @param <T> the static type accepted by the matcher (this can flag obvious
921      * compile-time problems such as {@code assertThat(1, is("a"))}
922      * @param actual the computed value being compared
923      * @param matcher an expression, built of {@link Matcher}s, specifying allowed
924      * values
925      * @see org.hamcrest.CoreMatchers
926      * @deprecated use {@code org.hamcrest.MatcherAssert.assertThat()}
927      */
928     @Deprecated
assertThat(T actual, Matcher<? super T> matcher)929     public static <T> void assertThat(T actual, Matcher<? super T> matcher) {
930         assertThat("", actual, matcher);
931     }
932 
933     /**
934      * Asserts that <code>actual</code> satisfies the condition specified by
935      * <code>matcher</code>. If not, an {@link AssertionError} is thrown with
936      * the reason and information about the matcher and failing value. Example:
937      *
938      * <pre>
939      *   assertThat(&quot;Help! Integers don't work&quot;, 0, is(1)); // fails:
940      *     // failure message:
941      *     // Help! Integers don't work
942      *     // expected: is &lt;1&gt;
943      *     // got value: &lt;0&gt;
944      *   assertThat(&quot;Zero is one&quot;, 0, is(not(1))) // passes
945      * </pre>
946      *
947      * <code>org.hamcrest.Matcher</code> does not currently document the meaning
948      * of its type parameter <code>T</code>.  This method assumes that a matcher
949      * typed as <code>Matcher&lt;T&gt;</code> can be meaningfully applied only
950      * to values that could be assigned to a variable of type <code>T</code>.
951      *
952      * @param reason additional information about the error
953      * @param <T> the static type accepted by the matcher (this can flag obvious
954      * compile-time problems such as {@code assertThat(1, is("a"))}
955      * @param actual the computed value being compared
956      * @param matcher an expression, built of {@link Matcher}s, specifying allowed
957      * values
958      * @see org.hamcrest.CoreMatchers
959      * @deprecated use {@code org.hamcrest.MatcherAssert.assertThat()}
960      */
961     @Deprecated
assertThat(String reason, T actual, Matcher<? super T> matcher)962     public static <T> void assertThat(String reason, T actual,
963             Matcher<? super T> matcher) {
964         MatcherAssert.assertThat(reason, actual, matcher);
965     }
966 
967     /**
968      * Asserts that {@code runnable} throws an exception of type {@code expectedThrowable} when
969      * executed. If it does, the exception object is returned. If it does not throw an exception, an
970      * {@link AssertionError} is thrown. If it throws the wrong type of exception, an {@code
971      * AssertionError} is thrown describing the mismatch; the exception that was actually thrown can
972      * be obtained by calling {@link AssertionError#getCause}.
973      *
974      * @param expectedThrowable the expected type of the exception
975      * @param runnable       a function that is expected to throw an exception when executed
976      * @return the exception thrown by {@code runnable}
977      * @since 4.13
978      */
assertThrows(Class<T> expectedThrowable, ThrowingRunnable runnable)979     public static <T extends Throwable> T assertThrows(Class<T> expectedThrowable,
980             ThrowingRunnable runnable) {
981         return assertThrows(null, expectedThrowable, runnable);
982     }
983 
984     /**
985      * Asserts that {@code runnable} throws an exception of type {@code expectedThrowable} when
986      * executed. If it does, the exception object is returned. If it does not throw an exception, an
987      * {@link AssertionError} is thrown. If it throws the wrong type of exception, an {@code
988      * AssertionError} is thrown describing the mismatch; the exception that was actually thrown can
989      * be obtained by calling {@link AssertionError#getCause}.
990      *
991      * @param message the identifying message for the {@link AssertionError} (<code>null</code>
992      * okay)
993      * @param expectedThrowable the expected type of the exception
994      * @param runnable a function that is expected to throw an exception when executed
995      * @return the exception thrown by {@code runnable}
996      * @since 4.13
997      */
assertThrows(String message, Class<T> expectedThrowable, ThrowingRunnable runnable)998     public static <T extends Throwable> T assertThrows(String message, Class<T> expectedThrowable,
999             ThrowingRunnable runnable) {
1000         try {
1001             runnable.run();
1002         } catch (Throwable actualThrown) {
1003             if (expectedThrowable.isInstance(actualThrown)) {
1004                 @SuppressWarnings("unchecked") T retVal = (T) actualThrown;
1005                 return retVal;
1006             } else {
1007                 String expected = formatClass(expectedThrowable);
1008                 Class<? extends Throwable> actualThrowable = actualThrown.getClass();
1009                 String actual = formatClass(actualThrowable);
1010                 if (expected.equals(actual)) {
1011                     // There must be multiple class loaders. Add the identity hash code so the message
1012                     // doesn't say "expected: java.lang.String<my.package.MyException> ..."
1013                     expected += "@" + Integer.toHexString(System.identityHashCode(expectedThrowable));
1014                     actual += "@" + Integer.toHexString(System.identityHashCode(actualThrowable));
1015                 }
1016                 String mismatchMessage = buildPrefix(message)
1017                         + format("unexpected exception type thrown;", expected, actual);
1018 
1019                 // The AssertionError(String, Throwable) ctor is only available on JDK7.
1020                 AssertionError assertionError = new AssertionError(mismatchMessage);
1021                 assertionError.initCause(actualThrown);
1022                 throw assertionError;
1023             }
1024         }
1025         String notThrownMessage = buildPrefix(message) + String
1026                 .format("expected %s to be thrown, but nothing was thrown",
1027                         formatClass(expectedThrowable));
1028         throw new AssertionError(notThrownMessage);
1029     }
1030 
buildPrefix(String message)1031     private static String buildPrefix(String message) {
1032         return message != null && message.length() != 0 ? message + ": " : "";
1033     }
1034 }
1035