AbstractHtmlDiffMatcher.java

1
package fr.sii.ogham.testing.assertion.hamcrest;
2
3
import java.util.function.Consumer;
4
5
import org.custommonkey.xmlunit.DetailedDiff;
6
import org.custommonkey.xmlunit.Difference;
7
import org.hamcrest.BaseMatcher;
8
import org.hamcrest.Description;
9
import org.junit.ComparisonFailure;
10
import org.w3c.dom.Document;
11
12
import fr.sii.ogham.testing.assertion.OghamAssertions;
13
import fr.sii.ogham.testing.assertion.util.HtmlUtils;
14
15
/**
16
 * Check if the HTML is identical or similar to the expected. The HTML strings are parsed
17
 * into {@link Document}s. Two documents are considered to be "identical" if
18
 * they contain the same elements and attributes in the same order.Two documents are considered to be "similar" if they
19
 * contain the same elements and attributes regardless of order.
20
 * 
21
 * <p>
22
 * This matcher is a {@link ExpectedValueProvider} for knowing the original expected
23
 * value. Thanks to this information, {@link OghamAssertions} will generate a
24
 * {@link ComparisonFailure} with the expected string and actual string in order
25
 * to be able to visualize the differences on sources directly in the IDE.
26
 * 
27
 * <p>
28
 * See {@link HtmlUtils} for more information about "identical"/"similar" HTML.
29
 * 
30
 * @author Aurélien Baudet
31
 *
32
 */
33
public abstract class AbstractHtmlDiffMatcher extends BaseMatcher<String> implements ExpectedValueProvider<String>, ComparisonAwareMatcher {
34
	protected final String expected;
35
	protected final Consumer<String> printer;
36
	protected final String name;
37
	protected DetailedDiff diff;
38
39
	public AbstractHtmlDiffMatcher(String expected, Consumer<String> printer, String name) {
40
		super();
41
		this.expected = expected;
42
		this.printer = printer;
43
		this.name = name;
44
	}
45
46
	@Override
47
	public boolean matches(Object item) {
48
		diff = HtmlUtils.compare(expected, (String) item);
49
		boolean matches = matches(diff);
50 4 1. matches : negated conditional → SURVIVED
2. matches : negated conditional → NO_COVERAGE
3. matches : negated conditional → TIMED_OUT
4. matches : negated conditional → KILLED
		if(!matches) {
51 2 1. matches : removed call to java/util/function/Consumer::accept → NO_COVERAGE
2. matches : removed call to java/util/function/Consumer::accept → KILLED
			printer.accept(comparisonMessage());
52
		}
53 8 1. matches : replaced boolean return with false for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::matches → NO_COVERAGE
2. matches : replaced boolean return with true for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::matches → NO_COVERAGE
3. matches : replaced boolean return with true for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::matches → SURVIVED
4. matches : replaced boolean return with false for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::matches → TIMED_OUT
5. matches : replaced boolean return with true for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::matches → TIMED_OUT
6. matches : replaced boolean return with false for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::matches → KILLED
7. matches : replaced boolean return with false for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::matches → KILLED
8. matches : replaced boolean return with true for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::matches → KILLED
		return matches;
54
	}
55
56
	protected abstract boolean matches(DetailedDiff diff);
57
58
	@Override
59
	public void describeTo(Description description) {
60
		description.appendValue(expected);
61
	}
62
63
	@Override
64
	public String getExpectedValue() {
65 2 1. getExpectedValue : replaced return value with "" for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::getExpectedValue → NO_COVERAGE
2. getExpectedValue : replaced return value with "" for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::getExpectedValue → KILLED
		return expected;
66
	}
67
68
	@Override
69
	public String comparisonMessage() {
70
		StringBuilder sb = new StringBuilder();
71
		sb.append("The two HTML documents are not ").append(name).append(".\n");
72
		sb.append("Here are the differences found:\n");
73
		for(Difference d : diff.getAllDifferences()) {
74
			sb.append("  - ").append(d.toString()).append("\n");
75
		}
76
		sb.append("\n");
77 2 1. comparisonMessage : replaced return value with "" for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::comparisonMessage → NO_COVERAGE
2. comparisonMessage : replaced return value with "" for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::comparisonMessage → KILLED
		return sb.toString();
78
	}
79
}

Mutations

50

1.1
Location : matches
Killed by : oghamtesting.it.assertion.hamcrest.SimilarHtmlMatcherSpec
negated conditional → KILLED

2.2
Location : matches
Killed by : none
negated conditional → SURVIVED

3.3
Location : matches
Killed by : none
negated conditional → TIMED_OUT

4.4
Location : matches
Killed by : none
negated conditional → NO_COVERAGE

51

1.1
Location : matches
Killed by : oghamtesting.it.assertion.hamcrest.SimilarHtmlMatcherSpec
removed call to java/util/function/Consumer::accept → KILLED

2.2
Location : matches
Killed by : none
removed call to java/util/function/Consumer::accept → NO_COVERAGE

53

1.1
Location : matches
Killed by : none
replaced boolean return with false for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::matches → NO_COVERAGE

2.2
Location : matches
Killed by : oghamall.it.email.EmailExtractSubjectTest.subjectExtractedFromTextWithDefaultSubjectShouldSendWithSubjectExtractedFromText(oghamall.it.email.EmailExtractSubjectTest)
replaced boolean return with false for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::matches → KILLED

3.3
Location : matches
Killed by : none
replaced boolean return with false for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::matches → TIMED_OUT

4.4
Location : matches
Killed by : oghamtesting.it.assertion.hamcrest.SimilarHtmlMatcherSpec
replaced boolean return with false for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::matches → KILLED

5.5
Location : matches
Killed by : none
replaced boolean return with true for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::matches → TIMED_OUT

6.6
Location : matches
Killed by : none
replaced boolean return with true for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::matches → NO_COVERAGE

7.7
Location : matches
Killed by : none
replaced boolean return with true for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::matches → SURVIVED

8.8
Location : matches
Killed by : oghamtesting.it.assertion.hamcrest.SimilarHtmlMatcherSpec
replaced boolean return with true for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::matches → KILLED

65

1.1
Location : getExpectedValue
Killed by : oghamtesting.it.assertion.AssertionHelperSpec
replaced return value with "" for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::getExpectedValue → KILLED

2.2
Location : getExpectedValue
Killed by : none
replaced return value with "" for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::getExpectedValue → NO_COVERAGE

77

1.1
Location : comparisonMessage
Killed by : oghamtesting.it.assertion.hamcrest.SimilarHtmlMatcherSpec
replaced return value with "" for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::comparisonMessage → KILLED

2.2
Location : comparisonMessage
Killed by : none
replaced return value with "" for fr/sii/ogham/testing/assertion/hamcrest/AbstractHtmlDiffMatcher::comparisonMessage → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT OGHAM