1. package junit.framework;
  2. /**
  3. * Thrown when an assert equals for Strings failed.
  4. *
  5. * Inspired by a patch from Alex Chaffee mailto:alex@purpletech.com
  6. */
  7. public class ComparisonFailure extends AssertionFailedError {
  8. private String fExpected;
  9. private String fActual;
  10. /**
  11. * Constructs a comparison failure.
  12. * @param message the identifying message or null
  13. * @param expected the expected string value
  14. * @param actual the actual string value
  15. */
  16. public ComparisonFailure (String message, String expected, String actual) {
  17. super (message);
  18. fExpected= expected;
  19. fActual= actual;
  20. }
  21. /**
  22. * Returns "..." in place of common prefix and "..." in
  23. * place of common suffix between expected and actual.
  24. *
  25. * @see java.lang.Throwable#getMessage()
  26. */
  27. public String getMessage() {
  28. if (fExpected == null || fActual == null)
  29. return Assert.format(super.getMessage(), fExpected, fActual);
  30. int end= Math.min(fExpected.length(), fActual.length());
  31. int i= 0;
  32. for(; i < end; i++) {
  33. if (fExpected.charAt(i) != fActual.charAt(i))
  34. break;
  35. }
  36. int j= fExpected.length()-1;
  37. int k= fActual.length()-1;
  38. for (; k >= i && j >= i; k--,j--) {
  39. if (fExpected.charAt(j) != fActual.charAt(k))
  40. break;
  41. }
  42. String actual, expected;
  43. // equal strings
  44. if (j < i && k < i) {
  45. expected= fExpected;
  46. actual= fActual;
  47. } else {
  48. expected= fExpected.substring(i, j+1);
  49. actual= fActual.substring(i, k+1);
  50. if (i <= end && i > 0) {
  51. expected= "..."+expected;
  52. actual= "..."+actual;
  53. }
  54. if (j < fExpected.length()-1)
  55. expected= expected+"...";
  56. if (k < fActual.length()-1)
  57. actual= actual+"...";
  58. }
  59. return Assert.format(super.getMessage(), expected, actual);
  60. }
  61. }