junit.framework.ComparisonCompactor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dragome-js-jre Show documentation
Show all versions of dragome-js-jre Show documentation
Dragome SDK module: js-jre
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 + 1 + fContextLength, fExpected.length());
return fExpected.substring(fExpected.length() - fSuffix + 1, end) + (fExpected.length() - fSuffix + 1 < fExpected.length() - fContextLength ? ELLIPSIS : "");
}
private boolean areStringsEqual()
{
return fExpected.equals(fActual);
}
}