Open Source Repository

Home /junit/junit-4.10 | Repository Home


junit/framework/ComparisonCompactor.java
package junit.framework;

public class ComparisonCompactor {

  private static final String ELLIPSIS= "...";
  private static final String DELTA_END= "]";
  private static final String DELTA_START= "[";
  
  private int fContextLength;
  private String fExpected;
  private String fActual;
  private int fPrefix;
  private int fSuffix;

  public ComparisonCompactor(int contextLength, String expected, String actual) {
    fContextLength= contextLength;
    fExpected= expected;
    fActual= actual;
  }

  public String compact(String message) {
    if (fExpected == null || fActual == null || areStringsEqual())
      return Assert.format(message, fExpected, fActual);

    findCommonPrefix();
    findCommonSuffix();
    String expected= compactString(fExpected);
    String actual= compactString(fActual);
    return Assert.format(message, expected, actual);
  }

  private String compactString(String source) {
    String result= DELTA_START + source.substring(fPrefix, source.length() - fSuffix + 1+ DELTA_END;
    if (fPrefix > 0)
      result= computeCommonPrefix() + result;
    if (fSuffix > 0)
      result= result + computeCommonSuffix();
    return result;
  }

  private void findCommonPrefix() {
    fPrefix= 0;
    int end= Math.min(fExpected.length(), fActual.length());
    for (; fPrefix < end; fPrefix++) {
      if (fExpected.charAt(fPrefix!= fActual.charAt(fPrefix))
        break;
    }
  }

  private void findCommonSuffix() {
    int expectedSuffix= fExpected.length() 1;
    int actualSuffix= fActual.length() 1;
    for (; actualSuffix >= fPrefix && expectedSuffix >= fPrefix; actualSuffix--, expectedSuffix--) {
      if (fExpected.charAt(expectedSuffix!= fActual.charAt(actualSuffix))
        break;
    }
    fSuffix=  fExpected.length() - expectedSuffix;
  }

  private String computeCommonPrefix() {
    return (fPrefix > fContextLength ? ELLIPSIS : ""+ fExpected.substring(Math.max(0, fPrefix - fContextLength), fPrefix);
  }

  private String computeCommonSuffix() {
    int end= Math.min(fExpected.length() - fSuffix + + fContextLength, fExpected.length());
    return fExpected.substring(fExpected.length() - fSuffix + 1, end(fExpected.length() - fSuffix + < fExpected.length() - fContextLength ? ELLIPSIS : "");
  }

  private boolean areStringsEqual() {
    return fExpected.equals(fActual);
  }
}