aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorLibravatar Titus Wormer <tituswormer@gmail.com>2022-08-26 13:29:10 +0200
committerLibravatar Titus Wormer <tituswormer@gmail.com>2022-08-26 13:29:40 +0200
commit670f1d82e01ea2394b21d7d1857f41bdc67b3fce (patch)
treed38fd96745b443dc5ece52c771fa5e39653937c4 /tests
parentf41688c067be261279804b8ab3e04cd5d67f492f (diff)
downloadmarkdown-rs-670f1d82e01ea2394b21d7d1857f41bdc67b3fce.tar.gz
markdown-rs-670f1d82e01ea2394b21d7d1857f41bdc67b3fce.tar.bz2
markdown-rs-670f1d82e01ea2394b21d7d1857f41bdc67b3fce.zip
Add support for math (flow)
Diffstat (limited to '')
-rw-r--r--tests/math_flow.rs250
-rw-r--r--tests/math_text.rs54
2 files changed, 274 insertions, 30 deletions
diff --git a/tests/math_flow.rs b/tests/math_flow.rs
new file mode 100644
index 0000000..5d161f6
--- /dev/null
+++ b/tests/math_flow.rs
@@ -0,0 +1,250 @@
+extern crate micromark;
+use micromark::{micromark, micromark_with_options, Constructs, Options};
+use pretty_assertions::assert_eq;
+
+#[test]
+fn math_flow() {
+ let math = Options {
+ constructs: Constructs {
+ math_text: true,
+ math_flow: true,
+ ..Constructs::default()
+ },
+ ..Options::default()
+ };
+
+ assert_eq!(
+ micromark("$$\na\n$$"),
+ "<p>$$\na\n$$</p>",
+ "should not support math (flow) by default"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$\na\n$$", &math),
+ "<pre><code class=\"language-math math-display\">a\n</code></pre>",
+ "should support math (flow) if enabled"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$\n<\n >\n$$", &math),
+ "<pre><code class=\"language-math math-display\">&lt;\n &gt;\n</code></pre>",
+ "should support math (flow)"
+ );
+
+ assert_eq!(
+ micromark_with_options("$\nfoo\n$", &math),
+ "<p><code class=\"language-math math-inline\">foo</code></p>",
+ "should not support math (flow) w/ less than two markers"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$$\naaa\n$$\n$$$$", &math),
+ "<pre><code class=\"language-math math-display\">aaa\n$$\n</code></pre>",
+ "should support a closing sequence longer, but not shorter than, the opening"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$", &math),
+ "<pre><code class=\"language-math math-display\"></code></pre>\n",
+ "should support an eof right after an opening sequence"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$$\n\n$$\naaa\n", &math),
+ "<pre><code class=\"language-math math-display\">\n$$\naaa\n</code></pre>\n",
+ "should support an eof somewhere in content"
+ );
+
+ assert_eq!(
+ micromark_with_options("> $$\n> aaa\n\nbbb", &math),
+ "<blockquote>\n<pre><code class=\"language-math math-display\">aaa\n</code></pre>\n</blockquote>\n<p>bbb</p>",
+ "should support no closing sequence in a block quote"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$\n\n \n$$", &math),
+ "<pre><code class=\"language-math math-display\">\n \n</code></pre>",
+ "should support blank lines in math (flow)"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$\n$$", &math),
+ "<pre><code class=\"language-math math-display\"></code></pre>",
+ "should support empty math (flow)"
+ );
+
+ assert_eq!(
+ micromark_with_options(" $$\n aaa\naaa\n$$", &math),
+ "<pre><code class=\"language-math math-display\">aaa\naaa\n</code></pre>",
+ "should remove up to one space from the content if the opening sequence is indented w/ 1 space"
+ );
+
+ assert_eq!(
+ micromark_with_options(" $$\naaa\n aaa\naaa\n $$", &math),
+ "<pre><code class=\"language-math math-display\">aaa\naaa\naaa\n</code></pre>",
+ "should remove up to two space from the content if the opening sequence is indented w/ 2 spaces"
+ );
+
+ assert_eq!(
+ micromark_with_options(" $$\n aaa\n aaa\n aaa\n $$", &math),
+ "<pre><code class=\"language-math math-display\">aaa\n aaa\naaa\n</code></pre>",
+ "should remove up to three space from the content if the opening sequence is indented w/ 3 spaces"
+ );
+
+ assert_eq!(
+ micromark_with_options(" $$\n aaa\n $$", &math),
+ "<pre><code>$$\naaa\n$$\n</code></pre>",
+ "should not support indenteding the opening sequence w/ 4 spaces"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$\naaa\n $$", &math),
+ "<pre><code class=\"language-math math-display\">aaa\n</code></pre>",
+ "should support an indented closing sequence"
+ );
+
+ assert_eq!(
+ micromark_with_options(" $$\naaa\n $$", &math),
+ "<pre><code class=\"language-math math-display\">aaa\n</code></pre>",
+ "should support a differently indented closing sequence than the opening sequence"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$\naaa\n $$\n", &math),
+ "<pre><code class=\"language-math math-display\">aaa\n $$\n</code></pre>\n",
+ "should not support an indented closing sequence w/ 4 spaces"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$ $$\naaa", &math),
+ "<p><code class=\"language-math math-inline\"> </code>\naaa</p>",
+ "should not support dollars in the opening fence after the opening sequence"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$$\naaa\n$$$ $$\n", &math),
+ "<pre><code class=\"language-math math-display\">aaa\n$$$ $$\n</code></pre>\n",
+ "should not support spaces in the closing sequence"
+ );
+
+ assert_eq!(
+ micromark_with_options("foo\n$$\nbar\n$$\nbaz", &math),
+ "<p>foo</p>\n<pre><code class=\"language-math math-display\">bar\n</code></pre>\n<p>baz</p>",
+ "should support interrupting paragraphs"
+ );
+
+ assert_eq!(
+ micromark_with_options("foo\n---\n$$\nbar\n$$\n# baz", &math),
+ "<h2>foo</h2>\n<pre><code class=\"language-math math-display\">bar\n</code></pre>\n<h1>baz</h1>",
+ "should support interrupting other content"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$ruby\ndef foo(x)\n return 3\nend\n$$", &math),
+ "<pre><code class=\"language-math math-display\">def foo(x)\n return 3\nend\n</code></pre>",
+ "should not support an “info” string (1)"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$$;\n$$$", &math),
+ "<pre><code class=\"language-math math-display\"></code></pre>",
+ "should not support an “info” string (2)"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$ ruby startline=3 `%@#`\ndef foo(x)\n return 3\nend\n$$$$", &math),
+ "<pre><code class=\"language-math math-display\">def foo(x)\n return 3\nend\n</code></pre>",
+ "should not support an “info” string (3)"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$ aa $$\nfoo", &math),
+ "<p><code class=\"language-math math-inline\">aa</code>\nfoo</p>",
+ "should not support dollars in the meta string"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$\n$$ aaa\n$$", &math),
+ "<pre><code class=\"language-math math-display\">$$ aaa\n</code></pre>",
+ "should not support meta string on closing sequences"
+ );
+
+ // Our own:
+ assert_eq!(
+ micromark_with_options("$$ ", &math),
+ "<pre><code class=\"language-math math-display\"></code></pre>\n",
+ "should support an eof after whitespace, after the start fence sequence"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$ js\nalert(1)\n$$", &math),
+ "<pre><code class=\"language-math math-display\">alert(1)\n</code></pre>",
+ "should support whitespace between the sequence and the meta string"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$js", &math),
+ "<pre><code class=\"language-math math-display\"></code></pre>\n",
+ "should support an eof after the meta string"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$ js \nalert(1)\n$$", &math),
+ "<pre><code class=\"language-math math-display\">alert(1)\n</code></pre>",
+ "should support whitespace after the meta string"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$\n ", &math),
+ "<pre><code class=\"language-math math-display\"> \n</code></pre>\n",
+ "should support an eof after whitespace in content"
+ );
+
+ assert_eq!(
+ micromark_with_options(" $$\n ", &math),
+ "<pre><code class=\"language-math math-display\"></code></pre>\n",
+ "should support an eof in the prefix, in content"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$j\\+s&copy;", &math),
+ "<pre><code class=\"language-math math-display\"></code></pre>\n",
+ "should support character escapes and character references in meta strings"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$a\\&b\0c", &math),
+ "<pre><code class=\"language-math math-display\"></code></pre>\n",
+ "should support dangerous characters in meta strings"
+ );
+
+ assert_eq!(
+ micromark_with_options(" $$\naaa\n $$", &math),
+ "<pre><code class=\"language-math math-display\">aaa\n $$\n</code></pre>\n",
+ "should not support a closing sequence w/ too much indent, regardless of opening sequence (1)"
+ );
+
+ assert_eq!(
+ micromark_with_options("> $$\n>\n>\n>\n\na", &math),
+ "<blockquote>\n<pre><code class=\"language-math math-display\">\n\n\n</code></pre>\n</blockquote>\n<p>a</p>",
+ "should not support a closing sequence w/ too much indent, regardless of opening sequence (2)"
+ );
+
+ assert_eq!(
+ micromark_with_options("> $$a\nb", &math),
+ "<blockquote>\n<pre><code class=\"language-math math-display\"></code></pre>\n</blockquote>\n<p>b</p>",
+ "should not support lazyness (1)"
+ );
+
+ assert_eq!(
+ micromark_with_options("> a\n$$b", &math),
+ "<blockquote>\n<p>a</p>\n</blockquote>\n<pre><code class=\"language-math math-display\"></code></pre>\n",
+ "should not support lazyness (2)"
+ );
+
+ assert_eq!(
+ micromark_with_options("> $$a\n$$", &math),
+ "<blockquote>\n<pre><code class=\"language-math math-display\"></code></pre>\n</blockquote>\n<pre><code class=\"language-math math-display\"></code></pre>\n",
+ "should not support lazyness (3)"
+ );
+}
diff --git a/tests/math_text.rs b/tests/math_text.rs
index d0e7589..4fe0288 100644
--- a/tests/math_text.rs
+++ b/tests/math_text.rs
@@ -7,7 +7,7 @@ fn math_text() {
let math = Options {
constructs: Constructs {
math_text: true,
- // To do: enable `math_flow`.
+ math_flow: true,
..Constructs::default()
},
..Options::default()
@@ -21,7 +21,7 @@ fn math_text() {
assert_eq!(
micromark_with_options("$foo$ $$bar$$", &math),
- "<p><code class=\"lang-math math-inline\">foo</code> <code class=\"lang-math math-inline\">bar</code></p>",
+ "<p><code class=\"language-math math-inline\">foo</code> <code class=\"language-math math-inline\">bar</code></p>",
"should support math (text) if enabled"
);
@@ -33,103 +33,97 @@ fn math_text() {
..math.clone()
}
),
- "<p>$foo$ <code class=\"lang-math math-inline\">bar</code></p>",
+ "<p>$foo$ <code class=\"language-math math-inline\">bar</code></p>",
"should not support math (text) w/ a single dollar, w/ `math_text_single_dollar: false`"
);
- // assert_eq!(
- // micromark_with_options("$foo$", &math),
- // "<p><code class=\"lang-math math-inline\">foo</code></p>",
- // "should support math (text)"
- // );
-
assert_eq!(
micromark_with_options("$$ foo $ bar $$", &math),
- "<p><code class=\"lang-math math-inline\">foo $ bar</code></p>",
+ "<p><code class=\"language-math math-inline\">foo $ bar</code></p>",
"should support math (text) w/ more dollars"
);
assert_eq!(
micromark_with_options("$ $$ $", &math),
- "<p><code class=\"lang-math math-inline\">$$</code></p>",
+ "<p><code class=\"language-math math-inline\">$$</code></p>",
"should support math (text) w/ fences inside, and padding"
);
assert_eq!(
micromark_with_options("$ $$ $", &math),
- "<p><code class=\"lang-math math-inline\"> $$ </code></p>",
+ "<p><code class=\"language-math math-inline\"> $$ </code></p>",
"should support math (text) w/ extra padding"
);
assert_eq!(
micromark_with_options("$ a$", &math),
- "<p><code class=\"lang-math math-inline\"> a</code></p>",
+ "<p><code class=\"language-math math-inline\"> a</code></p>",
"should support math (text) w/ unbalanced padding"
);
assert_eq!(
micromark_with_options("$\u{a0}b\u{a0}$", &math),
- "<p><code class=\"lang-math math-inline\">\u{a0}b\u{a0}</code></p>",
+ "<p><code class=\"language-math math-inline\">\u{a0}b\u{a0}</code></p>",
"should support math (text) w/ non-padding whitespace"
);
assert_eq!(
micromark_with_options("$ $\n$ $", &math),
- "<p><code class=\"lang-math math-inline\"> </code>\n<code class=\"lang-math math-inline\"> </code></p>",
+ "<p><code class=\"language-math math-inline\"> </code>\n<code class=\"language-math math-inline\"> </code></p>",
"should support math (text) w/o data"
);
assert_eq!(
- micromark_with_options("$$\nfoo\nbar \nbaz\n$$", &math),
- "<p><code class=\"lang-math math-inline\">foo bar baz</code></p>",
+ micromark_with_options("$\nfoo\nbar \nbaz\n$", &math),
+ "<p><code class=\"language-math math-inline\">foo bar baz</code></p>",
"should support math (text) w/o line endings (1)"
);
assert_eq!(
- micromark_with_options("$$\nfoo \n$$", &math),
- "<p><code class=\"lang-math math-inline\">foo </code></p>",
+ micromark_with_options("$\nfoo \n$", &math),
+ "<p><code class=\"language-math math-inline\">foo </code></p>",
"should support math (text) w/o line endings (2)"
);
assert_eq!(
micromark_with_options("$foo bar \nbaz$", &math),
- "<p><code class=\"lang-math math-inline\">foo bar baz</code></p>",
+ "<p><code class=\"language-math math-inline\">foo bar baz</code></p>",
"should not support whitespace collapsing"
);
assert_eq!(
micromark_with_options("$foo\\$bar$", &math),
- "<p><code class=\"lang-math math-inline\">foo\\</code>bar$</p>",
+ "<p><code class=\"language-math math-inline\">foo\\</code>bar$</p>",
"should not support character escapes"
);
assert_eq!(
micromark_with_options("$$foo$bar$$", &math),
- "<p><code class=\"lang-math math-inline\">foo$bar</code></p>",
+ "<p><code class=\"language-math math-inline\">foo$bar</code></p>",
"should support more dollars"
);
assert_eq!(
micromark_with_options("$ foo $$ bar $", &math),
- "<p><code class=\"lang-math math-inline\">foo $$ bar</code></p>",
+ "<p><code class=\"language-math math-inline\">foo $$ bar</code></p>",
"should support less dollars"
);
assert_eq!(
micromark_with_options("*foo$*$", &math),
- "<p>*foo<code class=\"lang-math math-inline\">*</code></p>",
+ "<p>*foo<code class=\"language-math math-inline\">*</code></p>",
"should precede over emphasis"
);
assert_eq!(
micromark_with_options("[not a $link](/foo$)", &math),
- "<p>[not a <code class=\"lang-math math-inline\">link](/foo</code>)</p>",
+ "<p>[not a <code class=\"language-math math-inline\">link](/foo</code>)</p>",
"should precede over links"
);
assert_eq!(
micromark_with_options("$<a href=\"$\">$", &math),
- "<p><code class=\"lang-math math-inline\">&lt;a href=&quot;</code>&quot;&gt;$</p>",
+ "<p><code class=\"language-math math-inline\">&lt;a href=&quot;</code>&quot;&gt;$</p>",
"should have same precedence as HTML (1)"
);
@@ -148,7 +142,7 @@ fn math_text() {
assert_eq!(
micromark_with_options("$<http://foo.bar.$baz>$", &math),
- "<p><code class=\"lang-math math-inline\">&lt;http://foo.bar.</code>baz&gt;$</p>",
+ "<p><code class=\"language-math math-inline\">&lt;http://foo.bar.</code>baz&gt;$</p>",
"should have same precedence as autolinks (1)"
);
@@ -172,19 +166,19 @@ fn math_text() {
assert_eq!(
micromark_with_options("$foo$$bar$$", &math),
- "<p>$foo<code class=\"lang-math math-inline\">bar</code></p>",
+ "<p>$foo<code class=\"language-math math-inline\">bar</code></p>",
"should not support no closing fence (2)"
);
assert_eq!(
micromark_with_options("$foo\t\tbar$", &math),
- "<p><code class=\"lang-math math-inline\">foo\t\tbar</code></p>",
+ "<p><code class=\"language-math math-inline\">foo\t\tbar</code></p>",
"should support tabs in code"
);
assert_eq!(
micromark_with_options("\\$$x$", &math),
- "<p>$<code class=\"lang-math math-inline\">x</code></p>",
+ "<p>$<code class=\"language-math math-inline\">x</code></p>",
"should support an escaped initial dollar"
);
}