aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Titus Wormer <tituswormer@gmail.com>2022-06-15 12:05:36 +0200
committerLibravatar Titus Wormer <tituswormer@gmail.com>2022-06-15 12:05:36 +0200
commit7d8cce920e74dfe5a24f52fb738035ff7a0390cc (patch)
tree589f806a41ab458c0c76729e0ab69f1dd3e2a15d
parentce7046acd74bba2c3c5cf84613d79eb694d285f8 (diff)
downloadmarkdown-rs-7d8cce920e74dfe5a24f52fb738035ff7a0390cc.tar.gz
markdown-rs-7d8cce920e74dfe5a24f52fb738035ff7a0390cc.tar.bz2
markdown-rs-7d8cce920e74dfe5a24f52fb738035ff7a0390cc.zip
Add tests for character escape
-rw-r--r--tests/character_escape.rs91
1 files changed, 91 insertions, 0 deletions
diff --git a/tests/character_escape.rs b/tests/character_escape.rs
new file mode 100644
index 0000000..5fdc445
--- /dev/null
+++ b/tests/character_escape.rs
@@ -0,0 +1,91 @@
+extern crate micromark;
+use micromark::{micromark, micromark_with_options, CompileOptions};
+
+const DANGER: &CompileOptions = &CompileOptions {
+ allow_dangerous_html: true,
+ allow_dangerous_protocol: true,
+};
+
+#[test]
+fn character_escape() {
+ assert_eq!(
+ micromark(
+ "\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\-\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\\\\\]\\^\\_\\`\\{\\|\\}\\~"
+ ),
+ "<p>!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\\]^_`{|}~</p>",
+ "should support escaped ascii punctuation"
+ );
+
+ assert_eq!(
+ micromark("\\→\\A\\a\\ \\3\\φ\\«"),
+ "<p>\\→\\A\\a\\ \\3\\φ\\«</p>",
+ "should not support other characters after a backslash"
+ );
+
+ assert_eq!(
+ micromark(
+ "\\*not emphasized*\n\\<br/> not a tag\n\\[not a link](/foo)\n\\`not code`\n1\\. not a list\n\\* not a list\n\\# not a heading\n\\[foo]: /url \"not a reference\"\n\\&ouml; not a character entity"
+ ),
+ "<p>*not emphasized*\n&lt;br/&gt; not a tag\n[not a link](/foo)\n`not code`\n1. not a list\n* not a list\n# not a heading\n[foo]: /url &quot;not a reference&quot;\n&amp;ouml; not a character entity</p>",
+ "should escape other constructs"
+ );
+
+ // To do: hard break.
+ // assert_eq!(
+ // micromark("foo\\\nbar"),
+ // "<p>foo<br />\nbar</p>",
+ // "should escape a line break"
+ // );
+
+ // To do: code (text).
+ // assert_eq!(
+ // micromark("`` \\[\\` ``"),
+ // "<p><code>\\[\\`</code></p>",
+ // "should not escape in text code"
+ // );
+
+ assert_eq!(
+ micromark(" \\[\\]"),
+ "<pre><code>\\[\\]\n</code></pre>",
+ "should not escape in indented code"
+ );
+
+ assert_eq!(
+ micromark("<http://example.com?find=\\*>"),
+ "<p><a href=\"http://example.com?find=%5C*\">http://example.com?find=\\*</a></p>",
+ "should not escape in autolink"
+ );
+
+ assert_eq!(
+ micromark_with_options("<a href=\"/bar\\/)\">", DANGER),
+ "<a href=\"/bar\\/)\">",
+ "should not escape in flow html"
+ );
+
+ // To do: link (reference).
+ // assert_eq!(
+ // micromark("[foo](/bar\\* \"ti\\*tle\")"),
+ // "<p><a href=\"/bar*\" title=\"ti*tle\">foo</a></p>",
+ // "should escape in resource and title"
+ // );
+
+ // To do: definition.
+ // assert_eq!(
+ // micromark("[foo]: /bar\\* \"ti\\*tle\"\n\n[foo]"),
+ // "<p><a href=\"/bar*\" title=\"ti*tle\">foo</a></p>",
+ // "should escape in definition resource and title"
+ // );
+
+ assert_eq!(
+ micromark("``` foo\\+bar\nfoo\n```"),
+ "<pre><code class=\"language-foo+bar\">foo\n</code></pre>",
+ "should escape in fenced code info"
+ );
+
+ // // To do: extensions
+ // assert_eq!(
+ // micromark("\\> a", {extensions: [{disable: {null: ["characterEscape"]}}]}),
+ // "<p>\\&gt; a</p>",
+ // "should support turning off character escapes"
+ // );
+}