mirror of
https://gitee.com/dcren/initializr.git
synced 2025-04-05 17:38:06 +08:00
Polish "Encode usual XML reserved characters"
See gh-1073
This commit is contained in:
parent
0cdf11e467
commit
ac9da18440
@ -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("</%s>", 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -818,38 +818,24 @@ class MavenBuildWriterTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void pomWithEscapedCharacters() {
|
||||
void pomWithReservedCharacters() {
|
||||
MavenBuild build = new MavenBuild();
|
||||
build.settings().coordinates("com.example.demo", "demo").name("<demo project>")
|
||||
.description("A \"demo\" project for 'developers' & 'testers'");
|
||||
|
||||
generatePomString(build, (pomString) -> {
|
||||
String separator = System.lineSeparator();
|
||||
assertThat(pomString).isEqualTo("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + separator
|
||||
+ "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
|
||||
+ separator
|
||||
+ " xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">"
|
||||
+ separator + " <modelVersion>4.0.0</modelVersion>" + separator
|
||||
+ " <groupId>com.example.demo</groupId>" + separator + " <artifactId>demo</artifactId>"
|
||||
+ separator + " <version>0.0.1-SNAPSHOT</version>" + separator
|
||||
+ " <name><demo project></name>" + separator
|
||||
+ " <description>A "demo" project for 'developers' & 'testers'</description>"
|
||||
+ separator + separator + "</project>" + separator);
|
||||
});
|
||||
String pom = writePom(build);
|
||||
assertThat(pom).contains("<name><demo project></name>").contains(
|
||||
"<description>A "demo" project for 'developers' & 'testers'</description>");
|
||||
}
|
||||
|
||||
private void generatePom(MavenBuild mavenBuild, Consumer<NodeAssert> 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<String> 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user