158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotpackage junit.framework;
258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot/**
458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Thrown when an assert equals for Strings failed.
558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot *
658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Inspired by a patch from Alex Chaffee mailto:alex@purpletech.com
758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */
858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotpublic class ComparisonFailure extends AssertionFailedError {
958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	private static final int MAX_CONTEXT_LENGTH= 20;
1058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	private static final long serialVersionUID= 1L;
1158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
1258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	private String fExpected;
1358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	private String fActual;
1458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
1558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	/**
1658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	 * Constructs a comparison failure.
1758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	 * @param message the identifying message or null
1858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	 * @param expected the expected string value
1958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	 * @param actual the actual string value
2058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	 */
2158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public ComparisonFailure (String message, String expected, String actual) {
2258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		super (message);
2358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		fExpected= expected;
2458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		fActual= actual;
2558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	}
2658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
2758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	/**
2858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	 * Returns "..." in place of common prefix and "..." in
2958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	 * place of common suffix between expected and actual.
3058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	 *
31b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	 * @see Throwable#getMessage()
3258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	 */
33b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot	@Override
3458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public String getMessage() {
3558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		return new ComparisonCompactor(MAX_CONTEXT_LENGTH, fExpected, fActual).compact(super.getMessage());
3658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	}
3758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
3858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	/**
3958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	 * Gets the actual string value
4058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	 * @return the actual string value
4158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	 */
4258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public String getActual() {
4358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		return fActual;
4458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	}
4558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	/**
4658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	 * Gets the expected string value
4758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	 * @return the expected string value
4858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	 */
4958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public String getExpected() {
5058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		return fExpected;
5158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	}
5258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot}