• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 	 */
ComparisonFailure(String message, String expected, String actual)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 	 */
getMessage()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 }
69