From 2e62775860d72c053a90e03081b970496e34b74b Mon Sep 17 00:00:00 2001 From: Josh Taylor Date: Tue, 30 Aug 2022 23:12:55 +0800 Subject: [PATCH] Add escape for \' (#81) --- minijinja/src/utils.rs | 2 +- minijinja/tests/inputs/escape.txt | 8 ++++ minijinja/tests/parser-inputs/escape.txt | 3 ++ .../test_parser__parser@escape.txt.snap | 44 +++++++++++++++++++ .../test_templates__vm@escape.txt.snap | 10 +++++ 5 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 minijinja/tests/inputs/escape.txt create mode 100644 minijinja/tests/parser-inputs/escape.txt create mode 100644 minijinja/tests/snapshots/test_parser__parser@escape.txt.snap create mode 100644 minijinja/tests/snapshots/test_templates__vm@escape.txt.snap diff --git a/minijinja/src/utils.rs b/minijinja/src/utils.rs index 4490da76..10fa68ac 100644 --- a/minijinja/src/utils.rs +++ b/minijinja/src/utils.rs @@ -102,7 +102,7 @@ impl Unescaper { match char_iter.next() { None => return Err(ErrorKind::BadEscape.into()), Some(d) => match d { - '"' | '\\' | '/' => self.push_char(d)?, + '"' | '\\' | '/' | '\'' => self.push_char(d)?, 'b' => self.push_char('\x08')?, 'f' => self.push_char('\x0C')?, 'n' => self.push_char('\n')?, diff --git a/minijinja/tests/inputs/escape.txt b/minijinja/tests/inputs/escape.txt new file mode 100644 index 00000000..c151a0ae --- /dev/null +++ b/minijinja/tests/inputs/escape.txt @@ -0,0 +1,8 @@ +{ + "x": "hello" +} +--- +{{'\'' ~ 'foo'}} +{{'\'' ~ x ~ '\''}} +{{"\'" ~ x ~ '\''}} +{{"\'" ~ x ~ '\''}} \ No newline at end of file diff --git a/minijinja/tests/parser-inputs/escape.txt b/minijinja/tests/parser-inputs/escape.txt new file mode 100644 index 00000000..ca35ce06 --- /dev/null +++ b/minijinja/tests/parser-inputs/escape.txt @@ -0,0 +1,3 @@ +{{'\'' ~ 'foo'}} +{{'\'' ~ "foo"}} +{{"\'"}} \ No newline at end of file diff --git a/minijinja/tests/snapshots/test_parser__parser@escape.txt.snap b/minijinja/tests/snapshots/test_parser__parser@escape.txt.snap new file mode 100644 index 00000000..5146cd91 --- /dev/null +++ b/minijinja/tests/snapshots/test_parser__parser@escape.txt.snap @@ -0,0 +1,44 @@ +--- +source: minijinja/tests/test_parser.rs +expression: "&ast" +input_file: minijinja/tests/parser-inputs/escape.txt +--- +Ok( + Template { + children: [ + EmitExpr { + expr: BinOp { + op: Concat, + left: Const { + value: "'", + } @ 1:2-1:6, + right: Const { + value: "foo", + } @ 1:9-1:14, + } @ 1:0-1:14, + } @ 1:0-1:14, + EmitRaw { + raw: "\n", + } @ 1:16-2:0, + EmitExpr { + expr: BinOp { + op: Concat, + left: Const { + value: "'", + } @ 2:2-2:6, + right: Const { + value: "foo", + } @ 2:9-2:14, + } @ 2:0-2:14, + } @ 2:0-2:14, + EmitRaw { + raw: "\n", + } @ 2:16-3:0, + EmitExpr { + expr: Const { + value: "'", + } @ 3:2-3:6, + } @ 3:0-3:6, + ], + } @ 0:0-3:8, +) diff --git a/minijinja/tests/snapshots/test_templates__vm@escape.txt.snap b/minijinja/tests/snapshots/test_templates__vm@escape.txt.snap new file mode 100644 index 00000000..f937a97f --- /dev/null +++ b/minijinja/tests/snapshots/test_templates__vm@escape.txt.snap @@ -0,0 +1,10 @@ +--- +source: minijinja/tests/test_templates.rs +expression: "&rendered" +input_file: minijinja/tests/inputs/escape.txt +--- +'foo +'hello' +'hello' +'hello' +