diff options
Diffstat (limited to 'tests/021-string2/src/junit/framework/ComparisonFailure.java')
-rw-r--r-- | tests/021-string2/src/junit/framework/ComparisonFailure.java | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tests/021-string2/src/junit/framework/ComparisonFailure.java b/tests/021-string2/src/junit/framework/ComparisonFailure.java new file mode 100644 index 0000000..0cb2cee --- /dev/null +++ b/tests/021-string2/src/junit/framework/ComparisonFailure.java @@ -0,0 +1,68 @@ +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); + } +} |