diff --git a/pitest-entry/pom.xml b/pitest-entry/pom.xml index d92a87417..67089b7df 100644 --- a/pitest-entry/pom.xml +++ b/pitest-entry/pom.xml @@ -129,6 +129,13 @@ asm-util ${asm.version} + + + org.apache.commons + commons-text + 1.10.0 + + org.pitest pitest diff --git a/pitest-entry/src/main/java/org/pitest/coverage/export/DefaultCoverageExporter.java b/pitest-entry/src/main/java/org/pitest/coverage/export/DefaultCoverageExporter.java index 300681211..c78d69b52 100644 --- a/pitest-entry/src/main/java/org/pitest/coverage/export/DefaultCoverageExporter.java +++ b/pitest-entry/src/main/java/org/pitest/coverage/export/DefaultCoverageExporter.java @@ -7,11 +7,11 @@ import java.util.Collections; import java.util.List; +import org.apache.commons.text.StringEscapeUtils; import org.pitest.coverage.BlockCoverage; import org.pitest.coverage.CoverageExporter; import org.pitest.mutationtest.engine.Location; import org.pitest.util.ResultOutputStrategy; -import org.pitest.util.StringUtil; import org.pitest.util.Unchecked; /** @@ -48,14 +48,14 @@ private void writeLineCoverage(final BlockCoverage each, final Writer out) { out, ""); write(out, "\n"); final List ts = new ArrayList<>(each.getTests()); Collections.sort(ts); for (final String test : ts) { - write(out, "\n"); + write(out, "\n"); } write(out, "\n"); write(out, "\n"); diff --git a/pitest-entry/src/main/java/org/pitest/mutationtest/report/xml/XMLReportListener.java b/pitest-entry/src/main/java/org/pitest/mutationtest/report/xml/XMLReportListener.java index 0109b3ee4..57280fa72 100644 --- a/pitest-entry/src/main/java/org/pitest/mutationtest/report/xml/XMLReportListener.java +++ b/pitest-entry/src/main/java/org/pitest/mutationtest/report/xml/XMLReportListener.java @@ -35,12 +35,13 @@ import java.util.Arrays; import java.util.List; import java.util.Optional; + +import org.apache.commons.text.StringEscapeUtils; import org.pitest.mutationtest.ClassMutationResults; import org.pitest.mutationtest.MutationResult; import org.pitest.mutationtest.MutationResultListener; import org.pitest.mutationtest.engine.MutationDetails; import org.pitest.util.ResultOutputStrategy; -import org.pitest.util.StringUtil; import org.pitest.util.Unchecked; enum Tag { @@ -101,7 +102,7 @@ private String makeMutationNode(final MutationResult mutation) { } private String clean(final String value) { - return StringUtil.escapeBasicHtmlChars(value); + return StringEscapeUtils.escapeXml11(value); } private String makeNode(final String value, final String attributes, diff --git a/pitest-entry/src/test/java/org/pitest/coverage/export/DefaultCoverageExporterTest.java b/pitest-entry/src/test/java/org/pitest/coverage/export/DefaultCoverageExporterTest.java index 8bc3607c5..ac9b33ad8 100644 --- a/pitest-entry/src/test/java/org/pitest/coverage/export/DefaultCoverageExporterTest.java +++ b/pitest-entry/src/test/java/org/pitest/coverage/export/DefaultCoverageExporterTest.java @@ -83,9 +83,26 @@ public void shouldEscapeSpecialCharsInTestName() { final String actual = this.out.toString(); assertThat(actual).contains( - "\n\n"); + "\n\n"); assertThat(actual).contains( - "\n\n"); + "\n\n"); + } + + @Test + public void escapesQuotesBackTicks() { + final LocationBuilder loc = aLocation().withMethod("method"); + final BlockLocationBuilder block = aBlockLocation().withBlock(42); + final Collection coverage = Arrays.asList( + new BlockCoverage( + block.withLocation(loc.withClass(ClassName.fromString("Foo"))).build(), + Collections.singletonList("`escape this ' quote`")) + ); + + testee.recordCoverage(coverage); + + final String actual = this.out.toString(); + assertThat(actual).contains( + "\n\n"); } } diff --git a/pitest-entry/src/test/java/org/pitest/mutationtest/report/xml/XMLReportListenerTest.java b/pitest-entry/src/test/java/org/pitest/mutationtest/report/xml/XMLReportListenerTest.java index 2137fa204..ac5c4a6d4 100644 --- a/pitest-entry/src/test/java/org/pitest/mutationtest/report/xml/XMLReportListenerTest.java +++ b/pitest-entry/src/test/java/org/pitest/mutationtest/report/xml/XMLReportListenerTest.java @@ -78,7 +78,7 @@ public void shouldEscapeGTAndLTSymbols() { final MutationResult mr = createdKilledMutationWithKillingTestOf(""); this.testee .handleMutationResult(MutationTestResultMother.createClassResults(mr)); - assertThat(this.out.toString()).contains("<foo>"); + assertThat(this.out.toString()).contains("<foo>"); } @Test @@ -86,7 +86,7 @@ public void shouldEscapeNullBytes() { final MutationResult mr = createdKilledMutationWithKillingTestOf("\0 Null-Byte"); this.testee .handleMutationResult(MutationTestResultMother.createClassResults(mr)); - assertThat(this.out.toString()).contains("\\0 Null-Byte"); + assertThat(this.out.toString()).contains(" Null-Byte"); } private MutationResult createdKilledMutationWithKillingTestOf(