Home | History | Annotate | Download | only in framework
      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 (at) 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 }
     69