1336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beustpackage org.testng;
2336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
3ef7064006d0cd629cc23efe99da7709a925dd85bCédric Beustimport static org.testng.internal.EclipseInterface.ASSERT_LEFT;
4ef7064006d0cd629cc23efe99da7709a925dd85bCédric Beustimport static org.testng.internal.EclipseInterface.ASSERT_LEFT2;
5ef7064006d0cd629cc23efe99da7709a925dd85bCédric Beustimport static org.testng.internal.EclipseInterface.ASSERT_MIDDLE;
6ef7064006d0cd629cc23efe99da7709a925dd85bCédric Beustimport static org.testng.internal.EclipseInterface.ASSERT_RIGHT;
7ef7064006d0cd629cc23efe99da7709a925dd85bCédric Beust
80a050892401fb27d1c7629e37fe9c8796ea5a349Cédric Beustimport org.testng.collections.Lists;
90a050892401fb27d1c7629e37fe9c8796ea5a349Cédric Beust
10ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.comimport java.lang.reflect.Array;
11336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beustimport java.util.Arrays;
12336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beustimport java.util.Collection;
13336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beustimport java.util.Iterator;
14df28a347d6555ded78c82e7b994054da3d1cb0f2Cédric Beustimport java.util.List;
1599b4d6c265461884836106022c6ed4d22b822a13Cédric Beustimport java.util.Map;
1699b4d6c265461884836106022c6ed4d22b822a13Cédric Beustimport java.util.Set;
17336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
18336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
19336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust/**
20336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust * Assertion tool class. Presents assertion methods with a more natural parameter order.
21336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust * The order is always <B>actualValue</B>, <B>expectedValue</B> [, message].
22336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust *
23336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust * @author <a href='mailto:the_mindstorm@evolva.ro'>Alexandru Popescu</a>
24336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust */
25336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beustpublic class Assert {
260f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
27336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
28336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   * Protect constructor since it is a static only class
29336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
30336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  protected Assert() {
31d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel    // hide constructor
32336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
330f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
34336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
350f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * Asserts that a condition is true. If it isn't,
36cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError, with the given message, is thrown.
370f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param condition the condition to evaluate
380f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
39336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
40ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertTrue(boolean condition, String message) {
41336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    if(!condition) {
420cd523e46e71bb9a1340432eb43c521cadf3dc71Ryan Schmitt      failNotEquals(condition, Boolean.TRUE, message);
43336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
44336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
450f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
46336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
470f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * Asserts that a condition is true. If it isn't,
48cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError is thrown.
490f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param condition the condition to evaluate
50336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
51336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertTrue(boolean condition) {
52336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertTrue(condition, null);
53336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
540f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
55336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
560f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * Asserts that a condition is false. If it isn't,
57cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError, with the given message, is thrown.
580f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param condition the condition to evaluate
590f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
60336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
61ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertFalse(boolean condition, String message) {
62bfc892e5a2c109c04331620f6a838d3742927018the.mindstorm    if(condition) {
630cd523e46e71bb9a1340432eb43c521cadf3dc71Ryan Schmitt      failNotEquals(condition, Boolean.FALSE, message); // TESTNG-81
64bfc892e5a2c109c04331620f6a838d3742927018the.mindstorm    }
65336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
660f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
67336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
680f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * Asserts that a condition is false. If it isn't,
69cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError is thrown.
700f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param condition the condition to evaluate
71336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
72336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertFalse(boolean condition) {
73336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertFalse(condition, null);
74336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
750f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
76336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
77336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   * Fails a test with the given message and wrapping the original exception.
780f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   *
79d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param message the assertion error message
80d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param realCause the original exception
81336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
82ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void fail(String message, Throwable realCause) {
83336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    AssertionError ae = new AssertionError(message);
84336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    ae.initCause(realCause);
850f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
86336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    throw ae;
87336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
880f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
89336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
90336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   * Fails a test with the given message.
910f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
92336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
93ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void fail(String message) {
94336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    throw new AssertionError(message);
95336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
960f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
97336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
98336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   * Fails a test with no message.
99336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
100336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void fail() {
101336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    fail(null);
102336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
1030f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
104336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
105cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two objects are equal. If they are not,
106cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError, with the given message, is thrown.
1070f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
1080f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
1090f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
110336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
111ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertEquals(Object actual, Object expected, String message) {
112f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk    if (expected != null && expected.getClass().isArray()) {
113f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk       assertArrayEquals(actual, expected, message);
11418788dcf8b825f4e62e3a25bd9530786172a16ecDennis Byrne       return;
115336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
116f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk    assertEqualsImpl(actual, expected, message);
11766373cdcb2afab8a66727b51de95241f47464c36Andrew Barchuk  }
11866373cdcb2afab8a66727b51de95241f47464c36Andrew Barchuk
11966373cdcb2afab8a66727b51de95241f47464c36Andrew Barchuk  /**
120f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk   * Differs from {@link #assertEquals(Object, Object, String)} by not taking arrays into
121f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk   * special consideration hence comparing them by reference. Intended to be called directly
122f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk   * to test equality of collections content.
12366373cdcb2afab8a66727b51de95241f47464c36Andrew Barchuk   */
124f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk  private static void assertEqualsImpl(Object actual, Object expected,
125f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk          String message) {
126f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk      if((expected == null) && (actual == null)) {
127f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk        return;
128f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk      }
129f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk      if(expected == null ^ actual == null) {
130f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk        failNotEquals(actual, expected, message);
131f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk      }
132f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk      if (expected.equals(actual) && actual.equals(expected)) {
133f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk        return;
134f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk      }
135f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk      failNotEquals(actual, expected, message);
136f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk    }
13766373cdcb2afab8a66727b51de95241f47464c36Andrew Barchuk
138ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  private static void assertArrayEquals(Object actual, Object expected, String message) {
13966373cdcb2afab8a66727b51de95241f47464c36Andrew Barchuk    if (expected == actual) {
14066373cdcb2afab8a66727b51de95241f47464c36Andrew Barchuk      return;
14166373cdcb2afab8a66727b51de95241f47464c36Andrew Barchuk    }
14266373cdcb2afab8a66727b51de95241f47464c36Andrew Barchuk    if (null == expected) {
14366373cdcb2afab8a66727b51de95241f47464c36Andrew Barchuk      fail("expected a null array, but not null found. " + message);
14466373cdcb2afab8a66727b51de95241f47464c36Andrew Barchuk    }
14566373cdcb2afab8a66727b51de95241f47464c36Andrew Barchuk    if (null == actual) {
14666373cdcb2afab8a66727b51de95241f47464c36Andrew Barchuk      fail("expected not null array, but null found. " + message);
14766373cdcb2afab8a66727b51de95241f47464c36Andrew Barchuk    }
148ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com    //is called only when expected is an array
149ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com    if (actual.getClass().isArray()) {
150ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com      int expectedLength = Array.getLength(expected);
151ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com      if (expectedLength == Array.getLength(actual)) {
152ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com         for (int i = 0 ; i < expectedLength ; i++) {
153ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com            Object _actual = Array.get(actual, i);
154ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com            Object _expected = Array.get(expected, i);
155ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com            try {
156ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com               assertEquals(_actual, _expected);
157ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com            } catch (AssertionError ae) {
1580f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin               failNotEquals(actual, expected, message == null ? "" : message
15956f1a1d9b5ae81dced70093f2f4120dfaa774e5eYossi Farjoun                        + " (values at index " + i + " are not the same)");
160ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com            }
161ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com         }
162ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com         //array values matched
163ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com         return;
164ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com      } else {
1650f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin         failNotEquals(Array.getLength(actual), expectedLength, message == null ? "" : message
166ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com                  + " (Array lengths are not the same)");
167ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com      }
168ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com    }
169ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com    failNotEquals(actual, expected, message);
170ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com  }
171ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com
172f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk  /**
173cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two objects are equal. If they are not,
174336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   * an AssertionError is thrown.
1750f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
1760f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
177336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
178336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertEquals(Object actual, Object expected) {
179336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertEquals(actual, expected, null);
180336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
1810f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
182336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
183cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two Strings are equal. If they are not,
184cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError, with the given message, is thrown.
1850f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
1860f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
1870f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
188336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
189ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertEquals(String actual, String expected, String message) {
190336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertEquals((Object) actual, (Object) expected, message);
191336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
1920f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
193336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
194cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two Strings are equal. If they are not,
195cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError is thrown.
1960f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
1970f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
198336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
199336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertEquals(String actual, String expected) {
200336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertEquals(actual, expected, null);
201336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
2020f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
203336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
204cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two doubles are equal concerning a delta.  If they are not,
205cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError, with the given message, is thrown.  If the expected
206336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   * value is infinity then the delta value is ignored.
2070f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
2080f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
2092553c6b812f3291c35010b75d2126a34f80947feMarius Volkhart   * @param delta the absolute tolerable difference between the actual and expected values
2100f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
211336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
212ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertEquals(double actual, double expected, double delta, String message) {
213336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    // handle infinity specially since subtracting to infinite values gives NaN and the
214336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    // the following test fails
215336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    if(Double.isInfinite(expected)) {
216336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      if(!(expected == actual)) {
2170cd523e46e71bb9a1340432eb43c521cadf3dc71Ryan Schmitt        failNotEquals(actual, expected, message);
218336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      }
219336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
2208ed18e3b37fa333a844f07e1e9c2caea8c33571bJulien Herr    else if (Double.isNaN(expected)) {
2218ed18e3b37fa333a844f07e1e9c2caea8c33571bJulien Herr      if (!Double.isNaN(actual)) {
2228ed18e3b37fa333a844f07e1e9c2caea8c33571bJulien Herr        failNotEquals(actual, expected, message);
2238ed18e3b37fa333a844f07e1e9c2caea8c33571bJulien Herr      }
2248ed18e3b37fa333a844f07e1e9c2caea8c33571bJulien Herr    }
2258ed18e3b37fa333a844f07e1e9c2caea8c33571bJulien Herr    else if(!(Math.abs(expected - actual) <= delta)) {
2260cd523e46e71bb9a1340432eb43c521cadf3dc71Ryan Schmitt      failNotEquals(actual, expected, message);
227336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
228336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
2290f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
230336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
231cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two doubles are equal concerning a delta. If they are not,
2320f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * an AssertionError is thrown. If the expected value is infinity then the
2330f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * delta value is ignored.
2340f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
2350f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
2362553c6b812f3291c35010b75d2126a34f80947feMarius Volkhart   * @param delta the absolute tolerable difference between the actual and expected values
237336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
238336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertEquals(double actual, double expected, double delta) {
239336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertEquals(actual, expected, delta, null);
240336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
2410f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
242336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
243cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two floats are equal concerning a delta. If they are not,
244cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError, with the given message, is thrown.  If the expected
245336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   * value is infinity then the delta value is ignored.
2460f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
2470f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
2482553c6b812f3291c35010b75d2126a34f80947feMarius Volkhart   * @param delta the absolute tolerable difference between the actual and expected values
2490f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
250336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
251ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertEquals(float actual, float expected, float delta, String message) {
252336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    // handle infinity specially since subtracting to infinite values gives NaN and the
253336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    // the following test fails
254336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    if(Float.isInfinite(expected)) {
255336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      if(!(expected == actual)) {
2560cd523e46e71bb9a1340432eb43c521cadf3dc71Ryan Schmitt        failNotEquals(actual, expected, message);
257336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      }
258336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
259336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    else if(!(Math.abs(expected - actual) <= delta)) {
2600cd523e46e71bb9a1340432eb43c521cadf3dc71Ryan Schmitt      failNotEquals(actual, expected, message);
261336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
262336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
2630f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
264336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
265cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two floats are equal concerning a delta. If they are not,
266cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError is thrown. If the expected
267336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   * value is infinity then the delta value is ignored.
2680f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
2690f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
2702553c6b812f3291c35010b75d2126a34f80947feMarius Volkhart   * @param delta the absolute tolerable difference between the actual and expected values
271336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
272336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertEquals(float actual, float expected, float delta) {
273336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertEquals(actual, expected, delta, null);
274336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
2750f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
276336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
277cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two longs are equal. If they are not,
278cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError, with the given message, is thrown.
2790f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
2800f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
2810f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
282336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
283ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertEquals(long actual, long expected, String message) {
2840b2ac5eab08098da2c2b63d4a3f87ba72ad5d6a1nullin    assertEquals(Long.valueOf(actual), Long.valueOf(expected), message);
285336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
2860f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
287336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
288cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two longs are equal. If they are not,
289cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError is thrown.
2900f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
2910f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
292336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
293336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertEquals(long actual, long expected) {
294336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertEquals(actual, expected, null);
295336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
2960f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
297336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
298cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two booleans are equal. If they are not,
299cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError, with the given message, is thrown.
3000f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
3010f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
3020f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
303336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
304ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertEquals(boolean actual, boolean expected, String message) {
305944fc31cd4bdcaa04baf0d025d67395c6b378a9fgkorland    assertEquals( Boolean.valueOf(actual), Boolean.valueOf(expected), message);
306336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
3070f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
308336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
309cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two booleans are equal. If they are not,
310cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError is thrown.
3110f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
3120f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
313336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
314336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertEquals(boolean actual, boolean expected) {
315336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertEquals(actual, expected, null);
316336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
3170f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
318336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
319cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two bytes are equal. If they are not,
320cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError, with the given message, is thrown.
3210f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
3220f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
3230f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
324336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
325ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertEquals(byte actual, byte expected, String message) {
3260b2ac5eab08098da2c2b63d4a3f87ba72ad5d6a1nullin    assertEquals(Byte.valueOf(actual), Byte.valueOf(expected), message);
327336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
3280f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
329336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
330cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two bytes are equal. If they are not,
331cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError is thrown.
3320f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
3330f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
334336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
335336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertEquals(byte actual, byte expected) {
336336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertEquals(actual, expected, null);
337336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
3380f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
339336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
340cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two chars are equal. If they are not,
341cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionFailedError, with the given message, is thrown.
3420f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
3430f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
3440f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
345336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
346ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertEquals(char actual, char expected, String message) {
3470b2ac5eab08098da2c2b63d4a3f87ba72ad5d6a1nullin    assertEquals(Character.valueOf(actual), Character.valueOf(expected), message);
348336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
3490f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
350336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
351cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two chars are equal. If they are not,
352cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError is thrown.
3530f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
3540f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
355336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
356336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertEquals(char actual, char expected) {
357336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertEquals(actual, expected, null);
358336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
3590f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
360336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
361cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two shorts are equal. If they are not,
362cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionFailedError, with the given message, is thrown.
3630f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
3640f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
3650f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
366336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
367ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertEquals(short actual, short expected, String message) {
3680b2ac5eab08098da2c2b63d4a3f87ba72ad5d6a1nullin    assertEquals(Short.valueOf(actual), Short.valueOf(expected), message);
369336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
3700f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
371336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
372cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two shorts are equal. If they are not,
373cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError is thrown.
3740f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
3750f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
376d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   */
377336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertEquals(short actual, short expected) {
378336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertEquals(actual, expected, null);
379336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
3800f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
381336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
382cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two ints are equal. If they are not,
383cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionFailedError, with the given message, is thrown.
3840f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
3850f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
3860f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
387336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
388ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertEquals(int actual,  int expected, String message) {
3890b2ac5eab08098da2c2b63d4a3f87ba72ad5d6a1nullin    assertEquals(Integer.valueOf(actual), Integer.valueOf(expected), message);
390336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
3910f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
392336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
393cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two ints are equal. If they are not,
394cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError is thrown.
3950f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
3960f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
397d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   */
398336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertEquals(int actual, int expected) {
399336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertEquals(actual, expected, null);
400336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
4010f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
402336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
403cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that an object isn't null. If it is,
404cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError is thrown.
405d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param object the assertion object
406336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
407336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertNotNull(Object object) {
408336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertNotNull(object, null);
409336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
4100f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
411336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
412cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that an object isn't null. If it is,
413cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionFailedError, with the given message, is thrown.
414d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param object the assertion object
4150f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
416336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
417ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertNotNull(Object object, String message) {
4188b53feff3f7c40fccf41e8fa15f09f8df12e7a74Cédric Beust    if (object == null) {
4198b53feff3f7c40fccf41e8fa15f09f8df12e7a74Cédric Beust      String formatted = "";
4208b53feff3f7c40fccf41e8fa15f09f8df12e7a74Cédric Beust      if(message != null) {
4218b53feff3f7c40fccf41e8fa15f09f8df12e7a74Cédric Beust        formatted = message + " ";
4228b53feff3f7c40fccf41e8fa15f09f8df12e7a74Cédric Beust      }
4238b53feff3f7c40fccf41e8fa15f09f8df12e7a74Cédric Beust      fail(formatted + "expected object to not be null");
4248b53feff3f7c40fccf41e8fa15f09f8df12e7a74Cédric Beust    }
425336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertTrue(object != null, message);
426336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
4270f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
428336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
429ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com   * Asserts that an object is null. If it is not,
430cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError, with the given message, is thrown.
431d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param object the assertion object
432336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
433336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertNull(Object object) {
434336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertNull(object, null);
435336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
4360f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
437336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
438ff94a1bdd8cd6d261383856735ca2ee898545ddbnalin.makar@gmail.com   * Asserts that an object is null. If it is not,
439cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionFailedError, with the given message, is thrown.
4400f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param object the assertion object
4410f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
442336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
443ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertNull(Object object, String message) {
4448b53feff3f7c40fccf41e8fa15f09f8df12e7a74Cédric Beust    if (object != null) {
4458b53feff3f7c40fccf41e8fa15f09f8df12e7a74Cédric Beust      failNotSame(object, null, message);
4468b53feff3f7c40fccf41e8fa15f09f8df12e7a74Cédric Beust    }
447336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
4480f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
449336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
450cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two objects refer to the same object. If they do not,
451cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionFailedError, with the given message, is thrown.
4520f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
4530f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
4540f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
455336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
456ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertSame(Object actual, Object expected, String message) {
457336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    if(expected == actual) {
458336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      return;
459336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
460336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    failNotSame(actual, expected, message);
461336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
4620f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
463336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
464cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two objects refer to the same object. If they do not,
465cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError is thrown.
4660f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
4670f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
468336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
469336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertSame(Object actual, Object expected) {
470336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertSame(actual, expected, null);
471336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
4720f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
473336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
474cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two objects do not refer to the same objects. If they do,
475cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError, with the given message, is thrown.
4760f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
4770f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
4780f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param message the assertion error message
479336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
480ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertNotSame(Object actual, Object expected, String message) {
481336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    if(expected == actual) {
482336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      failSame(actual, expected, message);
483336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
484336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
4850f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
486336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
487cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two objects do not refer to the same object. If they do,
488cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError is thrown.
4890f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param actual the actual value
4900f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   * @param expected the expected value
491336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
492336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertNotSame(Object actual, Object expected) {
493336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertNotSame(actual, expected, null);
494336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
4950f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
496ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static private void failSame(Object actual, Object expected, String message) {
497336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    String formatted = "";
498336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    if(message != null) {
499336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      formatted = message + " ";
500336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
501ef7064006d0cd629cc23efe99da7709a925dd85bCédric Beust    fail(formatted + ASSERT_LEFT2 + expected + ASSERT_MIDDLE + actual + ASSERT_RIGHT);
502336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
5030f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
504ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static private void failNotSame(Object actual, Object expected, String message) {
505336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    String formatted = "";
506336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    if(message != null) {
507336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      formatted = message + " ";
508336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
509ef7064006d0cd629cc23efe99da7709a925dd85bCédric Beust    fail(formatted + ASSERT_LEFT + expected + ASSERT_MIDDLE + actual + ASSERT_RIGHT);
510336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
5110f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
512ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static private void failNotEquals(Object actual , Object expected, String message ) {
513336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    fail(format(actual, expected, message));
514336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
5150f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
516ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static String format(Object actual, Object expected, String message) {
517336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    String formatted = "";
518336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    if (null != message) {
519336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      formatted = message + " ";
520336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
5210f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
522ef7064006d0cd629cc23efe99da7709a925dd85bCédric Beust    return formatted + ASSERT_LEFT + expected + ASSERT_MIDDLE + actual + ASSERT_RIGHT;
523336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
5240f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
525d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel  /**
526cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two collections contain the same elements in the same order. If they do not,
527cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError is thrown.
528d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   *
529d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param actual the actual value
530d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param expected the expected value
531d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   */
532a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie  static public void assertEquals(Collection<?> actual, Collection<?> expected) {
533336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertEquals(actual, expected, null);
534336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
5350f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
536d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel  /**
537cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two collections contain the same elements in the same order. If they do not,
538cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError, with the given message, is thrown.
539d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param actual the actual value
540d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param expected the expected value
541d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param message the assertion error message
542d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   */
543a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie  static public void assertEquals(Collection<?> actual, Collection<?> expected, String message) {
5440f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    if(actual == expected) {
5450f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      return;
5460f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    }
5470f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
548c3eb93c68f9e54788c4e3062166f29f0736d1e7fnullin    if (actual == null || expected == null) {
5490f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      if (message != null) {
5500f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin        fail(message);
5510f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      } else {
5520f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin        fail("Collections not equal: expected: " + expected + " and actual: " + actual);
5530f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      }
554ec2bfe438f271c1c566f5813b588634dcb12915bthe.mindstorm    }
5550f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
556cf3d12f5e97b3097992651f357845fe0b7b9f814Michael Diamond    assertEquals(actual.size(), expected.size(), (message == null ? "" : message + ": ") + "lists don't have the same size");
5570f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
558a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    Iterator<?> actIt = actual.iterator();
559a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    Iterator<?> expIt = expected.iterator();
560336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    int i = -1;
561336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    while(actIt.hasNext() && expIt.hasNext()) {
562336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      i++;
563336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      Object e = expIt.next();
564336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      Object a = actIt.next();
5656aee73d5eddf6ebd01c93a2f30b532cb68ef04c4Cédric Beust      String explanation = "Lists differ at element [" + i + "]: " + e + " != " + a;
5666aee73d5eddf6ebd01c93a2f30b532cb68ef04c4Cédric Beust      String errorMessage = message == null ? explanation : message + ": " + explanation;
5670f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
568f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk      assertEqualsImpl(a, e, errorMessage);
569336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
570336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
571a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
572a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie  /** Asserts that two iterators return the same elements in the same order. If they do not,
573a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   * an AssertionError is thrown.
574a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   * Please note that this assert iterates over the elements and modifies the state of the iterators.
575a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   * @param actual the actual value
576a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   * @param expected the expected value
577a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   */
578a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie  static public void assertEquals(Iterator<?> actual, Iterator<?> expected) {
579a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    assertEquals(actual, expected, null);
580a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie  }
581a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
582a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie  /** Asserts that two iterators return the same elements in the same order. If they do not,
583a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   * an AssertionError, with the given message, is thrown.
584a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   * Please note that this assert iterates over the elements and modifies the state of the iterators.
585a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   * @param actual the actual value
586a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   * @param expected the expected value
587a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   * @param message the assertion error message
588a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   */
589a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie  static public void assertEquals(Iterator<?> actual, Iterator<?> expected, String message) {
590a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    if(actual == expected) {
591a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      return;
592a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    }
593a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
594a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    if(actual == null || expected == null) {
595a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      if(message != null) {
596a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie        fail(message);
597a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      } else {
598a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie        fail("Iterators not equal: expected: " + expected + " and actual: " + actual);
599a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      }
600a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    }
601a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
602a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    int i = -1;
603a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    while(actual.hasNext() && expected.hasNext()) {
604a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
605a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      i++;
606a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      Object e = expected.next();
607a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      Object a = actual.next();
608a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      String explanation = "Iterators differ at element [" + i + "]: " + e + " != " + a;
609a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      String errorMessage = message == null ? explanation : message + ": " + explanation;
610a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
611f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk      assertEqualsImpl(a, e, errorMessage);
612a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
613a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    }
614a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
615a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    if(actual.hasNext()) {
616a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
617a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      String explanation = "Actual iterator returned more elements than the expected iterator.";
618a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      String errorMessage = message == null ? explanation : message + ": " + explanation;
619a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      fail(errorMessage);
620a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
621a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    } else if(expected.hasNext()) {
622a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
623a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      String explanation = "Expected iterator returned more elements than the actual iterator.";
624a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      String errorMessage = message == null ? explanation : message + ": " + explanation;
625a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      fail(errorMessage);
626a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
627a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    }
628a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
629a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie  }
630a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
631a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie  /** Asserts that two iterables return iterators with the same elements in the same order. If they do not,
632a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   * an AssertionError is thrown.
633a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   * @param actual the actual value
634a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   * @param expected the expected value
635a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   */
636a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie  static public void assertEquals(Iterable<?> actual, Iterable<?> expected) {
637a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    assertEquals(actual, expected, null);
638a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie  }
639a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
640a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie  /** Asserts that two iterables return iterators with the same elements in the same order. If they do not,
641a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   * an AssertionError, with the given message, is thrown.
642a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   * @param actual the actual value
643a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   * @param expected the expected value
644a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   * @param message the assertion error message
645a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie   */
646a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie  static public void assertEquals(Iterable<?> actual, Iterable<?> expected, String message) {
647a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    if(actual == expected) {
648a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      return;
649a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    }
650a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
651a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    if(actual == null || expected == null) {
652a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      if(message != null) {
653a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie        fail(message);
654a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      } else {
655a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie        fail("Iterables not equal: expected: " + expected + " and actual: " + actual);
656a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie      }
657a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    }
658a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
659a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    Iterator<?> actIt = actual.iterator();
660a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    Iterator<?> expIt = expected.iterator();
661a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
662a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    assertEquals(actIt, expIt, message);
663a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie  }
664a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
665a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
666a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie
6670f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
668d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel  /**
669cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two arrays contain the same elements in the same order. If they do not,
670cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError, with the given message, is thrown.
671d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param actual the actual value
672d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param expected the expected value
673d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param message the assertion error message
674d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   */
675ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertEquals(Object[] actual, Object[] expected, String message) {
6760f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    if(actual == expected) {
6770f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      return;
6780f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    }
6790f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
680336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    if ((actual == null && expected != null) || (actual != null && expected == null)) {
6810f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      if (message != null) {
6820f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin        fail(message);
6830f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      } else {
6840f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin        fail("Arrays not equal: " + Arrays.toString(expected) + " and " + Arrays.toString(actual));
6850f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      }
686336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
687336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertEquals(Arrays.asList(actual), Arrays.asList(expected), message);
688336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
6890f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
690336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
691cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two arrays contain the same elements in no particular order. If they do not,
692cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError, with the given message, is thrown.
693d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param actual the actual value
694d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param expected the expected value
695d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param message the assertion error message
696336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
697ca97550ae192637ee28884dc17a7ec49893ef7f0nullin  static public void assertEqualsNoOrder(Object[] actual, Object[] expected, String message) {
6980f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    if(actual == expected) {
6990f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      return;
7000f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    }
7010f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
702336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    if ((actual == null && expected != null) || (actual != null && expected == null)) {
7034e1945226769fae14d6fe84adbb8643a19401c50Cédric Beust      failAssertNoEqual(
7040b2ac5eab08098da2c2b63d4a3f87ba72ad5d6a1nullin          "Arrays not equal: " + Arrays.toString(expected) + " and " + Arrays.toString(actual),
7057b159778e8a1db527c9a62e77bca9ec4370efd1bCédric Beust          message);
7067b159778e8a1db527c9a62e77bca9ec4370efd1bCédric Beust    }
7070f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
7087b159778e8a1db527c9a62e77bca9ec4370efd1bCédric Beust    if (actual.length != expected.length) {
7094e1945226769fae14d6fe84adbb8643a19401c50Cédric Beust      failAssertNoEqual(
7107b159778e8a1db527c9a62e77bca9ec4370efd1bCédric Beust          "Arrays do not have the same size:" + actual.length + " != " + expected.length,
7117b159778e8a1db527c9a62e77bca9ec4370efd1bCédric Beust          message);
712336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
7130f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
714a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie    List<Object> actualCollection = Lists.newArrayList();
715336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    for (Object a : actual) {
716336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      actualCollection.add(a);
717336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
7187b159778e8a1db527c9a62e77bca9ec4370efd1bCédric Beust    for (Object o : expected) {
7197b159778e8a1db527c9a62e77bca9ec4370efd1bCédric Beust      actualCollection.remove(o);
720336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
7217b159778e8a1db527c9a62e77bca9ec4370efd1bCédric Beust    if (actualCollection.size() != 0) {
7224e1945226769fae14d6fe84adbb8643a19401c50Cédric Beust      failAssertNoEqual(
7230b2ac5eab08098da2c2b63d4a3f87ba72ad5d6a1nullin          "Arrays not equal: " + Arrays.toString(expected) + " and " + Arrays.toString(actual),
7247b159778e8a1db527c9a62e77bca9ec4370efd1bCédric Beust          message);
7257b159778e8a1db527c9a62e77bca9ec4370efd1bCédric Beust    }
7267b159778e8a1db527c9a62e77bca9ec4370efd1bCédric Beust  }
7270f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
7284e1945226769fae14d6fe84adbb8643a19401c50Cédric Beust  private static void failAssertNoEqual(String defaultMessage, String message) {
7290f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    if (message != null) {
7300f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      fail(message);
7310f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    } else {
7320f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      fail(defaultMessage);
7330f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    }
734336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
7350f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
736d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel  /**
737cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two arrays contain the same elements in the same order. If they do not,
738cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError is thrown.
739d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   *
740d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param actual the actual value
741d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param expected the expected value
742d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   */
743336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertEquals(Object[] actual, Object[] expected) {
744336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertEquals(actual, expected, null);
745336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
7460f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
747336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
748cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * Asserts that two arrays contain the same elements in no particular order. If they do not,
749cc1807f99344965f0aacd31bcceba6228b3ba66acquezel   * an AssertionError is thrown.
750d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param actual the actual value
751d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel   * @param expected the expected value
752336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
753336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  static public void assertEqualsNoOrder(Object[] actual, Object[] expected) {
754336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    assertEqualsNoOrder(actual, expected, null);
755336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
7560f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
757d0dbf55fe75ed796ea84bebcdf871823a5e56401cquezel  /**
75899b4d6c265461884836106022c6ed4d22b822a13Cédric Beust   * Asserts that two sets are equal.
75999b4d6c265461884836106022c6ed4d22b822a13Cédric Beust   */
760a024bfe2679a6ea9250707755b88ca946bd4f68dArcadie  static public void assertEquals(Set<?> actual, Set<?> expected) {
761ae70b4fcbe7b5c52ad3ea57e2f5d64c60dfe4e8bTim wu    assertEquals(actual, expected, null);
76299b4d6c265461884836106022c6ed4d22b822a13Cédric Beust  }
763ae70b4fcbe7b5c52ad3ea57e2f5d64c60dfe4e8bTim wu
764ae70b4fcbe7b5c52ad3ea57e2f5d64c60dfe4e8bTim wu	/**
765ae70b4fcbe7b5c52ad3ea57e2f5d64c60dfe4e8bTim wu	 * Assert set equals
766ae70b4fcbe7b5c52ad3ea57e2f5d64c60dfe4e8bTim wu	 */
767f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust  static public void assertEquals(Set<?> actual, Set<?> expected, String message) {
768f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust    if (actual == expected) {
769f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust      return;
770f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust    }
771f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust
772f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust    if (actual == null || expected == null) {
773f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust      // Keep the back compatible
774f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust      if (message == null) {
775f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust        fail("Sets not equal: expected: " + expected + " and actual: " + actual);
776f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust      } else {
777f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust        failNotEquals(actual, expected, message);
778f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust      }
779f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust    }
780f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust
781f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust    if (!actual.equals(expected)) {
782f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust      if (message == null) {
783f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust        fail("Sets differ: expected " + expected + " but got " + actual);
784f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust      } else {
785f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust        failNotEquals(actual, expected, message);
786f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust      }
787f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust    }
788f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust  }
78999b4d6c265461884836106022c6ed4d22b822a13Cédric Beust
79099b4d6c265461884836106022c6ed4d22b822a13Cédric Beust  /**
79199b4d6c265461884836106022c6ed4d22b822a13Cédric Beust   * Asserts that two maps are equal.
79299b4d6c265461884836106022c6ed4d22b822a13Cédric Beust   */
793f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust  static public void assertEquals(Map<?, ?> actual, Map<?, ?> expected) {
79401aee4295cca15a5c5818c4641bfcafb6a937773Cédric Beust    if (actual == expected) {
7950f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      return;
7960f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    }
79772896ac3e38b52b02318812cec41a5c839497185nullin
79872896ac3e38b52b02318812cec41a5c839497185nullin    if (actual == null || expected == null) {
799194335baab15fd7f87d228d1ad6000aef2132f9enullin      fail("Maps not equal: expected: " + expected + " and actual: " + actual);
80099b4d6c265461884836106022c6ed4d22b822a13Cédric Beust    }
80199b4d6c265461884836106022c6ed4d22b822a13Cédric Beust
80253754e6d8691085a65d0fd70f160c1a4e2986d9eCédric Beust    if (actual.size() != expected.size()) {
80353754e6d8691085a65d0fd70f160c1a4e2986d9eCédric Beust      fail("Maps do not have the same size:" + actual.size() + " != " + expected.size());
80453754e6d8691085a65d0fd70f160c1a4e2986d9eCédric Beust    }
80553754e6d8691085a65d0fd70f160c1a4e2986d9eCédric Beust
806f9384b2cb7498bfc5b75760e2f7221af58ffd825Cédric Beust    Set<?> entrySet = actual.entrySet();
807d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt    for (Object anEntrySet : entrySet) {
808d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt      Map.Entry<?, ?> entry = (Map.Entry<?, ?>) anEntrySet;
80901aee4295cca15a5c5818c4641bfcafb6a937773Cédric Beust      Object key = entry.getKey();
81001aee4295cca15a5c5818c4641bfcafb6a937773Cédric Beust      Object value = entry.getValue();
81101aee4295cca15a5c5818c4641bfcafb6a937773Cédric Beust      Object expectedValue = expected.get(key);
812f909a84122e29fbf3096821cc69080a202d57fc2Andrew Barchuk      assertEqualsImpl(value, expectedValue, "Maps do not match for key:" + key + " actual:" + value
813d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt              + " expected:" + expectedValue);
81472896ac3e38b52b02318812cec41a5c839497185nullin    }
81501aee4295cca15a5c5818c4641bfcafb6a937773Cédric Beust
81672896ac3e38b52b02318812cec41a5c839497185nullin  }
81772896ac3e38b52b02318812cec41a5c839497185nullin
8186810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  /////
8196810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  // assertNotEquals
8206810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  //
8216810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8226810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  public static void assertNotEquals(Object actual1, Object actual2, String message) {
8236810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    boolean fail = false;
8246810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    try {
8256810cca1b8290a39259989823f6c0a3533a9973dCédric Beust      Assert.assertEquals(actual1, actual2);
8266810cca1b8290a39259989823f6c0a3533a9973dCédric Beust      fail = true;
8276810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    } catch (AssertionError e) {
8286810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    }
8296810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8306810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    if (fail) {
8316810cca1b8290a39259989823f6c0a3533a9973dCédric Beust      Assert.fail(message);
8326810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    }
8336810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
8346810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8356810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  public static void assertNotEquals(Object actual1, Object actual2) {
8366810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals(actual1, actual2, null);
8376810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
8386810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8396810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static void assertNotEquals(String actual1, String actual2, String message) {
8406810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals((Object) actual1, (Object) actual2, message);
8416810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
8426810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8436810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static void assertNotEquals(String actual1, String actual2) {
8446810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals(actual1, actual2, null);
8456810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
8466810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8476810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static void assertNotEquals(long actual1, long actual2, String message) {
8486810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals(Long.valueOf(actual1), Long.valueOf(actual2), message);
8496810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
8506810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8516810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static void assertNotEquals(long actual1, long actual2) {
8526810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals(actual1, actual2, null);
8536810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
8546810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8556810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static void assertNotEquals(boolean actual1, boolean actual2, String message) {
8566810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals(Boolean.valueOf(actual1), Boolean.valueOf(actual2), message);
8576810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
8586810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8596810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static void assertNotEquals(boolean actual1, boolean actual2) {
8606810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals(actual1, actual2, null);
8616810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
8626810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8636810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static void assertNotEquals(byte actual1, byte actual2, String message) {
8646810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals(Byte.valueOf(actual1), Byte.valueOf(actual2), message);
8656810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
8666810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8676810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static void assertNotEquals(byte actual1, byte actual2) {
8686810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals(actual1, actual2, null);
8696810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
8706810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8716810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static void assertNotEquals(char actual1, char actual2, String message) {
8726810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals(Character.valueOf(actual1), Character.valueOf(actual2), message);
8736810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
8746810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8756810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static void assertNotEquals(char actual1, char actual2) {
8766810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals(actual1, actual2, null);
8776810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
8786810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8796810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static void assertNotEquals(short actual1, short actual2, String message) {
8806810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals(Short.valueOf(actual1), Short.valueOf(actual2), message);
8816810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
8826810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8836810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static void assertNotEquals(short actual1, short actual2) {
8846810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals(actual1, actual2, null);
8856810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
8866810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8876810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static void assertNotEquals(int actual1, int actual2, String message) {
8886810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals(Integer.valueOf(actual1), Integer.valueOf(actual2), message);
8896810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
8906810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8916810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static void assertNotEquals(int actual1, int actual2) {
8926810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals(actual1, actual2, null);
8936810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
8946810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
8956810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static public void assertNotEquals(float actual1, float actual2, float delta, String message) {
8966810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    boolean fail = false;
8976810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    try {
8986810cca1b8290a39259989823f6c0a3533a9973dCédric Beust      Assert.assertEquals(actual1, actual2, delta, message);
8996810cca1b8290a39259989823f6c0a3533a9973dCédric Beust      fail = true;
9006810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    } catch (AssertionError e) {
9016810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
9026810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    }
9036810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
9046810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    if (fail) {
9056810cca1b8290a39259989823f6c0a3533a9973dCédric Beust      Assert.fail(message);
9066810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    }
9076810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
9086810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
9096810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static public void assertNotEquals(float actual1, float actual2, float delta) {
9106810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals(actual1, actual2, delta, null);
9116810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
9126810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
9136810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static public void assertNotEquals(double actual1, double actual2, double delta, String message) {
9146810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    boolean fail = false;
9156810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    try {
9166810cca1b8290a39259989823f6c0a3533a9973dCédric Beust      Assert.assertEquals(actual1, actual2, delta, message);
9176810cca1b8290a39259989823f6c0a3533a9973dCédric Beust      fail = true;
9186810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    } catch (AssertionError e) {
9196810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
9206810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    }
9216810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
9226810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    if (fail) {
9236810cca1b8290a39259989823f6c0a3533a9973dCédric Beust      Assert.fail(message);
9246810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    }
9256810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
9266810cca1b8290a39259989823f6c0a3533a9973dCédric Beust
9276810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  static public void assertNotEquals(double actual1, double actual2, double delta) {
9286810cca1b8290a39259989823f6c0a3533a9973dCédric Beust    assertNotEquals(actual1, actual2, delta, null);
9296810cca1b8290a39259989823f6c0a3533a9973dCédric Beust  }
93036b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt
93136b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt  /**
93236b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   * This interface facilitates the use of {@link #expectThrows} from Java 8. It allows
93336b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   * method references to both void and non-void methods to be passed directly into
93436b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   * expectThrows without wrapping, even if they declare checked exceptions.
93536b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   * <p/>
93636b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   * This interface is not meant to be implemented directly.
93736b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   */
93836b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt  public interface ThrowingRunnable {
93936b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt    void run() throws Throwable;
94036b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt  }
94136b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt
94236b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt  /**
94336b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   * Asserts that {@code runnable} throws an exception when invoked. If it does not, an
94436b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   * {@link AssertionError} is thrown.
94536b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   *
94636b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   * @param runnable A function that is expected to throw an exception when invoked
947130765a2fe93ec5efa12251ac8e85a015d52683aRyan Schmitt   * @since 6.9.5
94836b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   */
94936b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt  public static void assertThrows(ThrowingRunnable runnable) {
950367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt    assertThrows(Throwable.class, runnable);
95136b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt  }
95236b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt
95336b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt  /**
95436b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   * Asserts that {@code runnable} throws an exception of type {@code throwableClass} when
955367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt   * executed. If it does not throw an exception, an {@link AssertionError} is thrown. If it
956367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt   * throws the wrong type of exception, an {@code AssertionError} is thrown describing the
957367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt   * mismatch; the exception that was actually thrown can be obtained by calling {@link
958367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt   * AssertionError#getCause}.
959367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt   *
960367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt   * @param throwableClass the expected type of the exception
961367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt   * @param runnable       A function that is expected to throw an exception when invoked
962130765a2fe93ec5efa12251ac8e85a015d52683aRyan Schmitt   * @since 6.9.5
963367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt   */
964367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt  @SuppressWarnings("ThrowableResultOfMethodCallIgnored")
965367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt  public static <T extends Throwable> void assertThrows(Class<T> throwableClass, ThrowingRunnable runnable) {
966367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt    expectThrows(throwableClass, runnable);
967367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt  }
968367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt
969367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt  /**
970367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt   * Asserts that {@code runnable} throws an exception of type {@code throwableClass} when
971367e4ad6481e0b9eb81c455e893c25add5004628Ryan Schmitt   * executed and returns the exception. If {@code runnable} does not throw an exception, an
97236b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   * {@link AssertionError} is thrown. If it throws the wrong type of exception, an {@code
97336b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   * AssertionError} is thrown describing the mismatch; the exception that was actually thrown can
97436b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   * be obtained by calling {@link AssertionError#getCause}.
97536b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   *
97636b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   * @param throwableClass the expected type of the exception
97736b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   * @param runnable       A function that is expected to throw an exception when invoked
97836b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   * @return The exception thrown by {@code runnable}
979130765a2fe93ec5efa12251ac8e85a015d52683aRyan Schmitt   * @since 6.9.5
98036b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt   */
98136b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt  public static <T extends Throwable> T expectThrows(Class<T> throwableClass, ThrowingRunnable runnable) {
98236b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt    try {
98336b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt      runnable.run();
98436b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt    } catch (Throwable t) {
98536b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt      if (throwableClass.isInstance(t)) {
98636b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt        return throwableClass.cast(t);
98736b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt      } else {
98836b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt        String mismatchMessage = String.format("Expected %s to be thrown, but %s was thrown",
98936b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt                throwableClass.getSimpleName(), t.getClass().getSimpleName());
99036b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt
99136b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt        throw new AssertionError(mismatchMessage, t);
99236b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt      }
99336b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt    }
99436b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt    String message = String.format("Expected %s to be thrown, but nothing was thrown",
99536b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt            throwableClass.getSimpleName());
99636b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt    throw new AssertionError(message);
99736b6a2b5b43b8ff5adf7fe43acb5b41dd7049d94Ryan Schmitt  }
998336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust}
999