From ac9da18440518f8d2323b848404084d349ab0fd9 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Tue, 17 Nov 2020 13:56:41 +0100 Subject: [PATCH] Polish "Encode usual XML reserved characters" See gh-1073 --- .../buildsystem/maven/MavenBuildWriter.java | 25 ++++++++--------- .../maven/MavenBuildWriterTests.java | 28 +++++-------------- 2 files changed, 19 insertions(+), 34 deletions(-) diff --git a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriter.java b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriter.java index 85357875..5803ecfe 100644 --- a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriter.java +++ b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriter.java @@ -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(escapeString(text)); + writer.print(encodeText(text)); writer.println(String.format("", name)); } } @@ -516,32 +516,31 @@ public class MavenBuildWriter { } } - private String escapeString(String inputString) { - StringBuilder stringBuilder = new StringBuilder(); - for (int i = 0; i < inputString.length(); i++) { - char character = inputString.charAt(i); + 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 '\'': - stringBuilder.append("'"); + sb.append("'"); break; case '\"': - stringBuilder.append("""); + sb.append("""); break; case '<': - stringBuilder.append("<"); + sb.append("<"); break; case '>': - stringBuilder.append(">"); + sb.append(">"); break; case '&': - stringBuilder.append("&"); + sb.append("&"); break; default: - stringBuilder.append(character); + sb.append(character); } } - - return stringBuilder.toString(); + return sb.toString(); } } diff --git a/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriterTests.java b/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriterTests.java index 2429d136..eb17630c 100644 --- a/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriterTests.java +++ b/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriterTests.java @@ -818,38 +818,24 @@ class MavenBuildWriterTests { } @Test - void pomWithEscapedCharacters() { + void pomWithReservedCharacters() { MavenBuild build = new MavenBuild(); build.settings().coordinates("com.example.demo", "demo").name("") .description("A \"demo\" project for 'developers' & 'testers'"); - - generatePomString(build, (pomString) -> { - String separator = System.lineSeparator(); - assertThat(pomString).isEqualTo("" + separator - + "" - + separator + " 4.0.0" + separator - + " com.example.demo" + separator + " demo" - + separator + " 0.0.1-SNAPSHOT" + separator - + " <demo project>" + separator - + " A "demo" project for 'developers' & 'testers'" - + separator + separator + "" + separator); - }); + String pom = writePom(build); + assertThat(pom).contains("<demo project>").contains( + "A "demo" project for 'developers' & 'testers'"); } private void generatePom(MavenBuild mavenBuild, Consumer consumer) { - MavenBuildWriter writer = new MavenBuildWriter(); - StringWriter out = new StringWriter(); - writer.writeTo(new IndentingWriter(out), mavenBuild); - consumer.accept(new NodeAssert(out.toString())); + consumer.accept(new NodeAssert(writePom(mavenBuild))); } - private void generatePomString(MavenBuild mavenBuild, Consumer consumer) { + private String writePom(MavenBuild mavenBuild) { MavenBuildWriter writer = new MavenBuildWriter(); StringWriter out = new StringWriter(); writer.writeTo(new IndentingWriter(out), mavenBuild); - consumer.accept(out.toString()); + return out.toString(); } }