| 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); |
| } |
| } |