extern crate markdown; use markdown::{ mdast::{BlockQuote, Node, Paragraph, Root, Text}, to_html, to_html_with_options, to_mdast, unist::Position, Constructs, Options, ParseOptions, }; use pretty_assertions::assert_eq; #[test] fn block_quote() -> Result<(), String> { assert_eq!( to_html("> # a\n> b\n> c"), "
\n", "should support block quotes" ); assert_eq!( to_html("># a\n>b\n> c"), "a
\nb\nc
\n
\n", "should support block quotes w/o space" ); assert_eq!( to_html(" > # a\n > b\n > c"), "a
\nb\nc
\n
\n", "should support prefixing block quotes w/ spaces" ); assert_eq!( to_html(" > # 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!(
to_html("> # a\n> b\nc"),
"\n", "should support lazy content lines" ); assert_eq!( to_html("> a\nb\n> c"), "a
\nb\nc
\n
\n", "should support lazy content lines inside block quotes" ); assert_eq!( to_html("> a\n> ---"), "a\nb\nc
\n
\n", "should support setext headings underlines in block quotes" ); assert_eq!( to_html("> a\n---"), "a
\n
\n\na
\n
\n", "should support lists in block quotes" ); assert_eq!( to_html("> - 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!(
to_html("> ```\na\n```"),
"\n\n\n
a
\n
\n",
"should not support lazy fenced code in block quotes (1)"
);
assert_eq!(
to_html("> a\n```\nb"),
"\n\na
\n
b\n
\n",
"should not support lazy fenced code in block quotes (2)"
);
assert_eq!(
to_html("> a\n - b"),
"\n", "should not support lazy indented code (or lazy list) in block quotes" ); assert_eq!( to_html("> [\na"), "a\n- b
\n
\n", "should support lazy, definition-like lines" ); assert_eq!( to_html("> [a]: b\nc"), "[\na
\n
\n", "should support a definition, followed by a lazy paragraph" ); assert_eq!( to_html(">"), "c
\n
\n", "should support empty block quotes (1)" ); assert_eq!( to_html(">\n> \n> "), "
\n", "should support empty block quotes (2)" ); assert_eq!( to_html(">\n> a\n> "), "
\n", "should support initial or final lazy empty block quote lines" ); assert_eq!( to_html("> a\n\n> b"), "a
\n
\n\na
\n
\n", "should support adjacent block quotes" ); assert_eq!( to_html("> a\n> b"), "b
\n
\n", "should support a paragraph in a block quote" ); assert_eq!( to_html("> a\n>\n> b"), "a\nb
\n
\n", "should support adjacent paragraphs in block quotes" ); assert_eq!( to_html("[a]\n\n> [a]: b"), "\na
\nb
\n
\n", "should support a definition in a block quote (1)" ); assert_eq!( to_html("> [a]: b\n\n[a]"), "
\n\n", "should support a definition in a block quote (2)" ); assert_eq!( to_html("a\n> b"), "
a
\n\n", "should support interrupting paragraphs w/ block quotes" ); assert_eq!( to_html("> a\n***\n> b"), "b
\n
\n\na
\n
\n", "should support interrupting block quotes w/ thematic breaks" ); assert_eq!( to_html("> a\nb"), "b
\n
\n", "should not support interrupting block quotes w/ paragraphs" ); assert_eq!( to_html("> a\n\nb"), "a\nb
\n
\n\na
\n
b
", "should support interrupting block quotes w/ blank lines" ); assert_eq!( to_html("> a\n>\nb"), "\n\na
\n
b
", "should not support interrupting a blank line in a block quotes w/ paragraphs" ); assert_eq!( to_html("> > > a\nb"), "\n", "should not support interrupting many block quotes w/ paragraphs (1)" ); assert_eq!( to_html(">>> a\n> b\n>>c"), "\n\n\n\na\nb
\n
\n", "should not support interrupting many block quotes w/ paragraphs (2)" ); assert_eq!( to_html("> 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!( to_html_with_options( "> # a\n> b\n> c", &Options { parse: ParseOptions { constructs: Constructs { block_quote: false, ..Constructs::default() }, ..ParseOptions::default() }, ..Options::default() } )?, "b
\n
> # a\n> b\n> c
", "should support turning off block quotes" ); assert_eq!( to_mdast("> a", &ParseOptions::default())?, Node::Root(Root { children: vec![Node::BlockQuote(BlockQuote { children: vec![Node::Paragraph(Paragraph { children: vec![Node::Text(Text { value: "a".into(), 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(()) }