Merge pull request #1073 from jaferkhan

* pr/1073:
  Polish "Encode usual XML reserved characters"
  Encode usual XML reserved characters

Closes gh-1073
This commit is contained in:
Stephane Nicoll 2020-11-17 13:59:46 +01:00
commit 43d790879f
2 changed files with 43 additions and 2 deletions

View File

@ -486,7 +486,7 @@ public class MavenBuildWriter {
private void writeSingleElement(IndentingWriter writer, String name, String text) {
if (text != null) {
writer.print(String.format("<%s>", name));
writer.print(text);
writer.print(encodeText(text));
writer.println(String.format("</%s>", name));
}
}
@ -516,4 +516,31 @@ public class MavenBuildWriter {
}
}
private String encodeText(String text) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
char character = text.charAt(i);
switch (character) {
case '\'':
sb.append("&apos;");
break;
case '\"':
sb.append("&quot;");
break;
case '<':
sb.append("&lt;");
break;
case '>':
sb.append("&gt;");
break;
case '&':
sb.append("&amp;");
break;
default:
sb.append(character);
}
}
return sb.toString();
}
}

View File

@ -817,11 +817,25 @@ class MavenBuildWriterTests {
});
}
@Test
void pomWithReservedCharacters() {
MavenBuild build = new MavenBuild();
build.settings().coordinates("com.example.demo", "demo").name("<demo project>")
.description("A \"demo\" project for 'developers' & 'testers'");
String pom = writePom(build);
assertThat(pom).contains("<name>&lt;demo project&gt;</name>").contains(
"<description>A &quot;demo&quot; project for &apos;developers&apos; &amp; &apos;testers&apos;</description>");
}
private void generatePom(MavenBuild mavenBuild, Consumer<NodeAssert> consumer) {
consumer.accept(new NodeAssert(writePom(mavenBuild)));
}
private String writePom(MavenBuild mavenBuild) {
MavenBuildWriter writer = new MavenBuildWriter();
StringWriter out = new StringWriter();
writer.writeTo(new IndentingWriter(out), mavenBuild);
consumer.accept(new NodeAssert(out.toString()));
return out.toString();
}
}