Something went wrong. Try again.
Markdown parser fork with extended syntax for personal use.
Something went wrong. Try again.
5.1 kB · 203 lines
Rust
at hack
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204use markdown::{ mdast::{Node, Root, ThematicBreak}, message, to_html, to_html_with_options, to_mdast, unist::Position, Constructs, Options, ParseOptions,};use pretty_assertions::assert_eq;
#[test]fn thematic_break() -> Result<(), message::Message> { assert_eq!( to_html("***\n---\n___"), "<hr />\n<hr />\n<hr />", "should support thematic breaks w/ asterisks, dashes, and underscores" );
assert_eq!( to_html("+++"), "<p>+++</p>", "should not support thematic breaks w/ plusses" );
assert_eq!( to_html("==="), "<p>===</p>", "should not support thematic breaks w/ equals" );
assert_eq!( to_html("--"), "<p>--</p>", "should not support thematic breaks w/ two dashes" );
assert_eq!( to_html("**"), "<p>**</p>", "should not support thematic breaks w/ two asterisks" );
assert_eq!( to_html("__"), "<p>__</p>", "should not support thematic breaks w/ two underscores" );
assert_eq!( to_html(" ***"), "<hr />", "should support thematic breaks w/ 1 space" );
assert_eq!( to_html(" ***"), "<hr />", "should support thematic breaks w/ 2 spaces" );
assert_eq!( to_html(" ***"), "<hr />", "should support thematic breaks w/ 3 spaces" );
assert_eq!( to_html(" ***"), "<pre><code>***\n</code></pre>", "should not support thematic breaks w/ 4 spaces" );
assert_eq!( to_html("Foo\n ***"), "<p>Foo\n***</p>", "should not support thematic breaks w/ 4 spaces as paragraph continuation" );
assert_eq!( to_html("_____________________________________"), "<hr />", "should support thematic breaks w/ many markers" );
assert_eq!( to_html(" - - -"), "<hr />", "should support thematic breaks w/ spaces (1)" );
assert_eq!( to_html(" ** * ** * ** * **"), "<hr />", "should support thematic breaks w/ spaces (2)" );
assert_eq!( to_html("- - - -"), "<hr />", "should support thematic breaks w/ spaces (3)" );
assert_eq!( to_html("- - - - "), "<hr />", "should support thematic breaks w/ trailing spaces" );
assert_eq!( to_html("_ _ _ _ a"), "<p>_ _ _ _ a</p>", "should not support thematic breaks w/ other characters (1)" );
assert_eq!( to_html("a------"), "<p>a------</p>", "should not support thematic breaks w/ other characters (2)" );
assert_eq!( to_html("---a---"), "<p>---a---</p>", "should not support thematic breaks w/ other characters (3)" );
assert_eq!( to_html(" *-*"), "<p><em>-</em></p>", "should not support thematic breaks w/ mixed markers" );
assert_eq!( to_html("- foo\n***\n- bar"), "<ul>\n<li>foo</li>\n</ul>\n<hr />\n<ul>\n<li>bar</li>\n</ul>", "should support thematic breaks mixed w/ lists (1)" );
assert_eq!( to_html("* Foo\n* * *\n* Bar"), "<ul>\n<li>Foo</li>\n</ul>\n<hr />\n<ul>\n<li>Bar</li>\n</ul>", "should support thematic breaks mixed w/ lists (2)" );
assert_eq!( to_html("Foo\n***\nbar"), "<p>Foo</p>\n<hr />\n<p>bar</p>", "should support thematic breaks interrupting paragraphs" );
assert_eq!( to_html("Foo\n---\nbar"), "<h2>Foo</h2>\n<p>bar</p>", "should not support thematic breaks w/ dashes interrupting paragraphs (setext heading)" );
assert_eq!( to_html("- Foo\n- * * *"), "<ul>\n<li>Foo</li>\n<li>\n<hr />\n</li>\n</ul>", "should support thematic breaks in lists" );
assert_eq!( to_html("> ---\na"), "<blockquote>\n<hr />\n</blockquote>\n<p>a</p>", "should not support lazyness (1)" );
assert_eq!( to_html("> a\n---"), "<blockquote>\n<p>a</p>\n</blockquote>\n<hr />", "should not support lazyness (2)" );
assert_eq!( to_html_with_options( "***", &Options { parse: ParseOptions { constructs: Constructs { thematic_break: false, ..Default::default() }, ..Default::default() }, ..Default::default() } )?, "<p>***</p>", "should support turning off thematic breaks" );
assert_eq!( to_mdast("***", &Default::default())?, Node::Root(Root { children: vec![Node::ThematicBreak(ThematicBreak { position: Some(Position::new(1, 1, 0, 1, 4, 3)) })], position: Some(Position::new(1, 1, 0, 1, 4, 3)) }), "should support thematic breaks as `ThematicBreak`s in mdast" );
Ok(())}