aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-11-21 12:01:36 +0000
committerMichael Williamson <mike@zwobble.org>2015-11-21 12:01:36 +0000
commit9f294b76b8b7e5c7eb9bc0a3dff82ba083a4d783 (patch)
tree62e57ea03e3d5e8c446244b032a6b1df0aa2c30d /src
parent9604bf821f926e9fc653705ec78093ccb19d1195 (diff)
Escape string literals
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonWriter.java7
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java7
2 files changed, 12 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonWriter.java b/src/main/java/org/zwobble/couscous/backends/python/PythonWriter.java
index da7445c..9112381 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonWriter.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonWriter.java
@@ -19,7 +19,12 @@ public class PythonWriter {
public void writeStringLiteral(String value) {
builder.append("\"");
- builder.append(value);
+ builder.append(value
+ .replace("\\", "\\\\")
+ .replace("\"", "\\\"")
+ .replace("\n", "\\n")
+ .replace("\r", "\\r")
+ .replace("\t", "\\t"));
builder.append("\"");
}
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java
index 9271d85..9411d3e 100644
--- a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java
@@ -36,10 +36,15 @@ public class PythonSerializerTests {
@Test
public void stringsAreNotBoxed() {
- // TODO: escaping
String output = serialize(pythonStringLiteral("blah"));
assertEquals("\"blah\"", output);
}
+
+ @Test
+ public void stringsAreEscaped() {
+ String output = serialize(pythonStringLiteral("\"\n\r\t\\"));
+ assertEquals("\"\\\"\\n\\r\\t\\\\\"", output);
+ }
@Test
public void booleansAreNotBoxed() {