diff options
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java | 10 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java | 11 |
2 files changed, 19 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java index 668cd75..ec8d70b 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java @@ -648,9 +648,15 @@ public class RustWriter implements AutoCloseable { } private void writeStringLiteral(RustStringLiteral stringLiteral) throws IOException { - // TODO: handle escaping this.writer.write("\""); - this.writer.write(stringLiteral.value()); + this.writer.write( + stringLiteral.value() + .replace("\\", "\\\\") + .replace("\n", "\\n") + .replace("\r", "\\r") + .replace("\t", "\\t") + .replace("\0", "\\0") + ); this.writer.write("\""); } diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java index 56d6d87..7272eea 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java @@ -812,6 +812,17 @@ public class RustWriterTests { assertThat(string, equalTo("\"hello\"")); } + @Test + public void stringLiteralWithSpecialCharacters() throws IOException { + var rust = RustStringLiteral.arbitrary() + .withValue("\n\r\t\\\0") + .build(); + + var string = write(writer -> writer.writeTopLevelExpression(rust)); + + assertThat(string, equalTo("\"\\n\\r\\t\\\\\\0\"")); + } + // === Struct expressions === @Test |
