View Javadoc

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  }