package junit.framework; /** * Thrown when an assert equals for Strings failed. * * Inspired by a patch from Alex Chaffee mailto:alex@purpletech.com */ public class ComparisonFailure extends AssertionFailedError { private String fExpected; private String fActual; /** * Constructs a comparison failure. * @param message the identifying message or null * @param expected the expected string value * @param actual the actual string value */ public ComparisonFailure (String message, String expected, String actual) { super (message); fExpected= expected; fActual= actual; } /** * Returns "..." in place of common prefix and "..." in * place of common suffix between expected and actual. * * @see java.lang.Throwable#getMessage() */ public String getMessage() { if (fExpected == null || fActual == null) return Assert.format(super.getMessage(), fExpected, fActual); int end= Math.min(fExpected.length(), fActual.length()); int i= 0; for(; i < end; i++) { if (fExpected.charAt(i) != fActual.charAt(i)) break; } int j= fExpected.length()-1; int k= fActual.length()-1; for (; k >= i && j >= i; k--,j--) { if (fExpected.charAt(j) != fActual.charAt(k)) break; } String actual, expected; // equal strings if (j < i && k < i) { expected= fExpected; actual= fActual; } else { expected= fExpected.substring(i, j+1); actual= fActual.substring(i, k+1); if (i <= end && i > 0) { expected= "..."+expected; actual= "..."+actual; } if (j < fExpected.length()-1) expected= expected+"..."; if (k < fActual.length()-1) actual= actual+"..."; } return Assert.format(super.getMessage(), expected, actual); } }