aboutsummaryrefslogtreecommitdiffstats
path: root/tests/math_text.rs
diff options
context:
space:
mode:
authorLibravatar Titus Wormer <tituswormer@gmail.com>2022-08-26 10:57:20 +0200
committerLibravatar Titus Wormer <tituswormer@gmail.com>2022-08-26 11:00:51 +0200
commitf41688c067be261279804b8ab3e04cd5d67f492f (patch)
tree7ddf8e3b4149de8c8425c8be3e6963c524ad4909 /tests/math_text.rs
parent1e4c95079cb97b2b02440b21945c6d12741a7d19 (diff)
downloadmarkdown-rs-f41688c067be261279804b8ab3e04cd5d67f492f.tar.gz
markdown-rs-f41688c067be261279804b8ab3e04cd5d67f492f.tar.bz2
markdown-rs-f41688c067be261279804b8ab3e04cd5d67f492f.zip
Add support for math (text)
Diffstat (limited to 'tests/math_text.rs')
-rw-r--r--tests/math_text.rs190
1 files changed, 190 insertions, 0 deletions
diff --git a/tests/math_text.rs b/tests/math_text.rs
new file mode 100644
index 0000000..d0e7589
--- /dev/null
+++ b/tests/math_text.rs
@@ -0,0 +1,190 @@
+extern crate micromark;
+use micromark::{micromark, micromark_with_options, Constructs, Options};
+use pretty_assertions::assert_eq;
+
+#[test]
+fn math_text() {
+ let math = Options {
+ constructs: Constructs {
+ math_text: true,
+ // To do: enable `math_flow`.
+ ..Constructs::default()
+ },
+ ..Options::default()
+ };
+
+ assert_eq!(
+ micromark("$a$"),
+ "<p>$a$</p>",
+ "should not support math (text) by default"
+ );
+
+ 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>",
+ "should support math (text) if enabled"
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ "$foo$ $$bar$$",
+ &Options {
+ math_text_single_dollar: false,
+ ..math.clone()
+ }
+ ),
+ "<p>$foo$ <code class=\"lang-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>",
+ "should support math (text) w/ more dollars"
+ );
+
+ assert_eq!(
+ micromark_with_options("$ $$ $", &math),
+ "<p><code class=\"lang-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>",
+ "should support math (text) w/ extra padding"
+ );
+
+ assert_eq!(
+ micromark_with_options("$ a$", &math),
+ "<p><code class=\"lang-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>",
+ "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>",
+ "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>",
+ "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>",
+ "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>",
+ "should not support whitespace collapsing"
+ );
+
+ assert_eq!(
+ micromark_with_options("$foo\\$bar$", &math),
+ "<p><code class=\"lang-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>",
+ "should support more dollars"
+ );
+
+ assert_eq!(
+ micromark_with_options("$ foo $$ bar $", &math),
+ "<p><code class=\"lang-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>",
+ "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>",
+ "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>",
+ "should have same precedence as HTML (1)"
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ "<a href=\"$\">$",
+ &Options {
+ allow_dangerous_html: true,
+ allow_dangerous_protocol: true,
+ ..math.clone()
+ }
+ ),
+ "<p><a href=\"$\">$</p>",
+ "should have same precedence as HTML (2)"
+ );
+
+ 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>",
+ "should have same precedence as autolinks (1)"
+ );
+
+ assert_eq!(
+ micromark_with_options("<http://foo.bar.$baz>$", &math),
+ "<p><a href=\"http://foo.bar.$baz\">http://foo.bar.$baz</a>$</p>",
+ "should have same precedence as autolinks (2)"
+ );
+
+ assert_eq!(
+ micromark_with_options("$$$foo$$", &math),
+ "<p>$$$foo$$</p>",
+ "should not support more dollars before a fence"
+ );
+
+ assert_eq!(
+ micromark_with_options("$foo", &math),
+ "<p>$foo</p>",
+ "should not support no closing fence (1)"
+ );
+
+ assert_eq!(
+ micromark_with_options("$foo$$bar$$", &math),
+ "<p>$foo<code class=\"lang-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>",
+ "should support tabs in code"
+ );
+
+ assert_eq!(
+ micromark_with_options("\\$$x$", &math),
+ "<p>$<code class=\"lang-math math-inline\">x</code></p>",
+ "should support an escaped initial dollar"
+ );
+}