ComparisonCompactor.java revision 58a8b0aba2dec5695628a2bf25a3fae42c2c3533
158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotpackage junit.framework; 258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotpublic class ComparisonCompactor { 458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private static final String ELLIPSIS= "..."; 658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private static final String DELTA_END= "]"; 758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private static final String DELTA_START= "["; 858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private int fContextLength; 1058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private String fExpected; 1158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private String fActual; 1258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private int fPrefix; 1358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private int fSuffix; 1458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 1558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public ComparisonCompactor(int contextLength, String expected, String actual) { 1658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot fContextLength= contextLength; 1758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot fExpected= expected; 1858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot fActual= actual; 1958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 2058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 2158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public String compact(String message) { 2258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (fExpected == null || fActual == null || areStringsEqual()) 2358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return Assert.format(message, fExpected, fActual); 2458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 2558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot findCommonPrefix(); 2658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot findCommonSuffix(); 2758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot String expected= compactString(fExpected); 2858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot String actual= compactString(fActual); 2958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return Assert.format(message, expected, actual); 3058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 3158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 3258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private String compactString(String source) { 3358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot String result= DELTA_START + source.substring(fPrefix, source.length() - fSuffix + 1) + DELTA_END; 3458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (fPrefix > 0) 3558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot result= computeCommonPrefix() + result; 3658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (fSuffix > 0) 3758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot result= result + computeCommonSuffix(); 3858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return result; 3958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 4058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 4158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private void findCommonPrefix() { 4258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot fPrefix= 0; 4358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot int end= Math.min(fExpected.length(), fActual.length()); 4458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot for (; fPrefix < end; fPrefix++) { 4558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (fExpected.charAt(fPrefix) != fActual.charAt(fPrefix)) 4658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot break; 4758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 4858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 4958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 5058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private void findCommonSuffix() { 5158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot int expectedSuffix= fExpected.length() - 1; 5258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot int actualSuffix= fActual.length() - 1; 5358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot for (; actualSuffix >= fPrefix && expectedSuffix >= fPrefix; actualSuffix--, expectedSuffix--) { 5458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (fExpected.charAt(expectedSuffix) != fActual.charAt(actualSuffix)) 5558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot break; 5658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 5758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot fSuffix= fExpected.length() - expectedSuffix; 5858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 5958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 6058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private String computeCommonPrefix() { 6158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return (fPrefix > fContextLength ? ELLIPSIS : "") + fExpected.substring(Math.max(0, fPrefix - fContextLength), fPrefix); 6258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 6358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 6458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private String computeCommonSuffix() { 6558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot int end= Math.min(fExpected.length() - fSuffix + 1 + fContextLength, fExpected.length()); 6658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return fExpected.substring(fExpected.length() - fSuffix + 1, end) + (fExpected.length() - fSuffix + 1 < fExpected.length() - fContextLength ? ELLIPSIS : ""); 6758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 6858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 6958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private boolean areStringsEqual() { 7058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return fExpected.equals(fActual); 7158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 7258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot} 73