1 package junit.framework;
2
3 /**
4 * Thrown when an assert equals for Strings failed.
5 *
6 * Inspired by a patch from Alex Chaffee mailto:alex@purpletech.com
7 */
8 public class ComparisonFailure extends AssertionFailedError {
9 private String fExpected;
10 private String fActual;
11
12 /**
13 * Constructs a comparison failure.
14 * @param message the identifying message or null
15 * @param expected the expected string value
16 * @param actual the actual string value
17 */
18 public ComparisonFailure (String message, String expected, String actual) {
|
19 super (message);
20 fExpected= expected;
21 fActual= actual;
22 }
|
23
24 /**
25 * Returns "..." in place of common prefix and "..." in
26 * place of common suffix between expected and actual.
27 *
28 * @see java.lang.Throwable#getMessage()
29 */
30 public String getMessage() {
|
31 if (fExpected == null || fActual == null)
32 return Assert.format(super.getMessage(), fExpected, fActual);
|
33
|
34 int end= Math.min(fExpected.length(), fActual.length());
|
35
|
36 int i= 0;
37 for(; i < end; i++) {
38 if (fExpected.charAt(i) != fActual.charAt(i))
39 break;
|
40 }
|
41 int j= fExpected.length()-1;
42 int k= fActual.length()-1;
43 for (; k >= i && j >= i; k--,j--) {
44 if (fExpected.charAt(j) != fActual.charAt(k))
45 break;
|
46 }
47 String actual, expected;
48
49 // equal strings
|
50 if (j < i && k < i) {
51 expected= fExpected;
52 actual= fActual;
|
53 } else {
|
54 expected= fExpected.substring(i, j+1);
55 actual= fActual.substring(i, k+1);
56 if (i <= end && i > 0) {
57 expected= "..."+expected;
58 actual= "..."+actual;
|
59 }
60
|
61 if (j < fExpected.length()-1)
62 expected= expected+"...";
63 if (k < fActual.length()-1)
64 actual= actual+"...";
|
65 }
|
66 return Assert.format(super.getMessage(), expected, actual);
|
67 }
68 } |