extern crate micromark; use micromark::{ mdast::{BlockQuote, Node, Paragraph, Root, Text}, micromark, micromark_to_mdast, micromark_with_options, unist::Position, Constructs, Options, }; use pretty_assertions::assert_eq; #[test] fn block_quote() -> Result<(), String> { assert_eq!( micromark("> # a\n> b\n> c"), "
\n", "should support block quotes" ); assert_eq!( micromark("># a\n>b\n> c"), "a
\nb\nc
\n
\n", "should support block quotes w/o space" ); assert_eq!( micromark(" > # a\n > b\n > c"), "a
\nb\nc
\n
\n", "should support prefixing block quotes w/ spaces" ); assert_eq!( micromark(" > # a\n > b\n > c"), "a
\nb\nc
\n
> # a\n> b\n> c\n
",
"should not support block quotes w/ 4 spaces"
);
assert_eq!(
micromark("> # a\n> b\nc"),
"\n", "should support lazy content lines" ); assert_eq!( micromark("> a\nb\n> c"), "a
\nb\nc
\n
\n", "should support lazy content lines inside block quotes" ); assert_eq!( micromark("> a\n> ---"), "a\nb\nc
\n
\n", "should support setext headings underlines in block quotes" ); assert_eq!( micromark("> a\n---"), "a
\n
\n\na
\n
\n", "should support lists in block quotes" ); assert_eq!( micromark("> - a\n- b"), "\n
\n- a
\n- b
\n
\n\n\n
\n- a
\n
\n\n\na\n
b\n
",
"should not support lazy indented code in block quotes"
);
assert_eq!(
micromark("> ```\na\n```"),
"\n\n\n
a
\n
\n",
"should not support lazy fenced code in block quotes (1)"
);
assert_eq!(
micromark("> a\n```\nb"),
"\n\na
\n
b\n
\n",
"should not support lazy fenced code in block quotes (2)"
);
assert_eq!(
micromark("> a\n - b"),
"\n", "should not support lazy indented code (or lazy list) in block quotes" ); assert_eq!( micromark("> [\na"), "a\n- b
\n
\n", "should support lazy, definition-like lines" ); assert_eq!( micromark("> [a]: b\nc"), "[\na
\n
\n", "should support a definition, followed by a lazy paragraph" ); assert_eq!( micromark(">"), "c
\n
\n", "should support empty block quotes (1)" ); assert_eq!( micromark(">\n> \n> "), "
\n", "should support empty block quotes (2)" ); assert_eq!( micromark(">\n> a\n> "), "
\n", "should support initial or final lazy empty block quote lines" ); assert_eq!( micromark("> a\n\n> b"), "a
\n
\n\na
\n
\n", "should support adjacent block quotes" ); assert_eq!( micromark("> a\n> b"), "b
\n
\n", "should support a paragraph in a block quote" ); assert_eq!( micromark("> a\n>\n> b"), "a\nb
\n
\n", "should support adjacent paragraphs in block quotes" ); assert_eq!( micromark("[a]\n\n> [a]: b"), "\na
\nb
\n
\n", "should support a definition in a block quote (1)" ); assert_eq!( micromark("> [a]: b\n\n[a]"), "
\n\n", "should support a definition in a block quote (2)" ); assert_eq!( micromark("a\n> b"), "
a
\n\n", "should support interrupting paragraphs w/ block quotes" ); assert_eq!( micromark("> a\n***\n> b"), "b
\n
\n\na
\n
\n", "should support interrupting block quotes w/ thematic breaks" ); assert_eq!( micromark("> a\nb"), "b
\n
\n", "should not support interrupting block quotes w/ paragraphs" ); assert_eq!( micromark("> a\n\nb"), "a\nb
\n
\n\na
\n
b
", "should support interrupting block quotes w/ blank lines" ); assert_eq!( micromark("> a\n>\nb"), "\n\na
\n
b
", "should not support interrupting a blank line in a block quotes w/ paragraphs" ); assert_eq!( micromark("> > > a\nb"), "\n", "should not support interrupting many block quotes w/ paragraphs (1)" ); assert_eq!( micromark(">>> a\n> b\n>>c"), "\n\n\n\na\nb
\n
\n", "should not support interrupting many block quotes w/ paragraphs (2)" ); assert_eq!( micromark("> a\n\n> b"), "\n\n\n\na\nb\nc
\n
\n\n\na\n
\n", "should support 5 spaces for indented code, not 4" ); assert_eq!( micromark_with_options( "> # a\n> b\n> c", &Options { constructs: Constructs { block_quote: false, ..Constructs::default() }, ..Options::default() } )?, "b
\n
> # a\n> b\n> c
", "should support turning off block quotes" ); assert_eq!( micromark_to_mdast("> a", &Options::default())?, Node::Root(Root { children: vec![Node::BlockQuote(BlockQuote { children: vec![Node::Paragraph(Paragraph { children: vec![Node::Text(Text { value: "a".to_string(), position: Some(Position::new(1, 3, 2, 1, 4, 3)) }),], position: Some(Position::new(1, 3, 2, 1, 4, 3)) })], position: Some(Position::new(1, 1, 0, 1, 4, 3)) })], position: Some(Position::new(1, 1, 0, 1, 4, 3)) }), "should support block quotes as `BlockQuote`s in mdast" ); Ok(()) }