extern crate micromark; use micromark::{ mdast::{Node, Root, ThematicBreak}, micromark, micromark_to_mdast, micromark_with_options, unist::Position, Constructs, Options, }; use pretty_assertions::assert_eq; #[test] fn thematic_break() -> Result<(), String> { assert_eq!( micromark("***\n---\n___"), "
\n
\n
", "should support thematic breaks w/ asterisks, dashes, and underscores" ); assert_eq!( micromark("+++"), "

+++

", "should not support thematic breaks w/ plusses" ); assert_eq!( micromark("==="), "

===

", "should not support thematic breaks w/ equals" ); assert_eq!( micromark("--"), "

--

", "should not support thematic breaks w/ two dashes" ); assert_eq!( micromark("**"), "

**

", "should not support thematic breaks w/ two asterisks" ); assert_eq!( micromark("__"), "

__

", "should not support thematic breaks w/ two underscores" ); assert_eq!( micromark(" ***"), "
", "should support thematic breaks w/ 1 space" ); assert_eq!( micromark(" ***"), "
", "should support thematic breaks w/ 2 spaces" ); assert_eq!( micromark(" ***"), "
", "should support thematic breaks w/ 3 spaces" ); assert_eq!( micromark(" ***"), "
***\n
", "should not support thematic breaks w/ 4 spaces" ); assert_eq!( micromark("Foo\n ***"), "

Foo\n***

", "should not support thematic breaks w/ 4 spaces as paragraph continuation" ); assert_eq!( micromark("_____________________________________"), "
", "should support thematic breaks w/ many markers" ); assert_eq!( micromark(" - - -"), "
", "should support thematic breaks w/ spaces (1)" ); assert_eq!( micromark(" ** * ** * ** * **"), "
", "should support thematic breaks w/ spaces (2)" ); assert_eq!( micromark("- - - -"), "
", "should support thematic breaks w/ spaces (3)" ); assert_eq!( micromark("- - - - "), "
", "should support thematic breaks w/ trailing spaces" ); assert_eq!( micromark("_ _ _ _ a"), "

_ _ _ _ a

", "should not support thematic breaks w/ other characters (1)" ); assert_eq!( micromark("a------"), "

a------

", "should not support thematic breaks w/ other characters (2)" ); assert_eq!( micromark("---a---"), "

---a---

", "should not support thematic breaks w/ other characters (3)" ); assert_eq!( micromark(" *-*"), "

-

", "should not support thematic breaks w/ mixed markers" ); assert_eq!( micromark("- foo\n***\n- bar"), "\n
\n", "should support thematic breaks mixed w/ lists (1)" ); assert_eq!( micromark("* Foo\n* * *\n* Bar"), "\n
\n", "should support thematic breaks mixed w/ lists (2)" ); assert_eq!( micromark("Foo\n***\nbar"), "

Foo

\n
\n

bar

", "should support thematic breaks interrupting paragraphs" ); assert_eq!( micromark("Foo\n---\nbar"), "

Foo

\n

bar

", "should not support thematic breaks w/ dashes interrupting paragraphs (setext heading)" ); assert_eq!( micromark("- Foo\n- * * *"), "", "should support thematic breaks in lists" ); assert_eq!( micromark("> ---\na"), "
\n
\n
\n

a

", "should not support lazyness (1)" ); assert_eq!( micromark("> a\n---"), "
\n

a

\n
\n
", "should not support lazyness (2)" ); assert_eq!( micromark_with_options( "***", &Options { constructs: Constructs { thematic_break: false, ..Constructs::default() }, ..Options::default() } )?, "

***

", "should support turning off thematic breaks" ); assert_eq!( micromark_to_mdast("***", &Options::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(()) }