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