carbidecpp20devenv/plugins/org.eclipse.test.source_3.3.0.v20080507/src/org.junit4_4.3.1/junitsrc/junit/framework/ComparisonCompactor.java
author cawthron
Wed, 18 Mar 2009 17:21:00 -0500
changeset 1 82d1d1de1a01
permissions -rw-r--r--
import Carbide.c++
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     1
package junit.framework;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     2
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     3
public class ComparisonCompactor {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     4
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     5
	private static final String ELLIPSIS= "...";
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     6
	private static final String DELTA_END= "]";
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     7
	private static final String DELTA_START= "[";
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     8
	
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     9
	private int fContextLength;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    10
	private String fExpected;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    11
	private String fActual;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    12
	private int fPrefix;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    13
	private int fSuffix;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    14
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    15
	public ComparisonCompactor(int contextLength, String expected, String actual) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    16
		fContextLength= contextLength;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    17
		fExpected= expected;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    18
		fActual= actual;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    19
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    20
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    21
	public String compact(String message) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    22
		if (fExpected == null || fActual == null || areStringsEqual())
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    23
			return Assert.format(message, fExpected, fActual);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    24
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    25
		findCommonPrefix();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    26
		findCommonSuffix();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    27
		String expected= compactString(fExpected);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    28
		String actual= compactString(fActual);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    29
		return Assert.format(message, expected, actual);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    30
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    31
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    32
	private String compactString(String source) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    33
		String result= DELTA_START + source.substring(fPrefix, source.length() - fSuffix + 1) + DELTA_END;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    34
		if (fPrefix > 0)
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    35
			result= computeCommonPrefix() + result;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    36
		if (fSuffix > 0)
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    37
			result= result + computeCommonSuffix();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    38
		return result;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    39
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    40
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    41
	private void findCommonPrefix() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    42
		fPrefix= 0;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    43
		int end= Math.min(fExpected.length(), fActual.length());
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    44
		for (; fPrefix < end; fPrefix++) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    45
			if (fExpected.charAt(fPrefix) != fActual.charAt(fPrefix))
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    46
				break;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    47
		}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    48
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    49
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    50
	private void findCommonSuffix() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    51
		int expectedSuffix= fExpected.length() - 1;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    52
		int actualSuffix= fActual.length() - 1;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    53
		for (; actualSuffix >= fPrefix && expectedSuffix >= fPrefix; actualSuffix--, expectedSuffix--) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    54
			if (fExpected.charAt(expectedSuffix) != fActual.charAt(actualSuffix))
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    55
				break;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    56
		}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    57
		fSuffix=  fExpected.length() - expectedSuffix;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    58
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    59
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    60
	private String computeCommonPrefix() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    61
		return (fPrefix > fContextLength ? ELLIPSIS : "") + fExpected.substring(Math.max(0, fPrefix - fContextLength), fPrefix);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    62
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    63
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    64
	private String computeCommonSuffix() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    65
		int end= Math.min(fExpected.length() - fSuffix + 1 + fContextLength, fExpected.length());
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    66
		return fExpected.substring(fExpected.length() - fSuffix + 1, end) + (fExpected.length() - fSuffix + 1 < fExpected.length() - fContextLength ? ELLIPSIS : "");
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    67
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    68
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    69
	private boolean areStringsEqual() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    70
		return fExpected.equals(fActual);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    71
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    72
}