use markdown::{ mdast::{Code, Node, Root}, to_html, to_html_with_options, to_mdast, unist::Position, CompileOptions, Constructs, Options, ParseOptions, }; use pretty_assertions::assert_eq; #[test] fn code_indented() -> Result<(), String> { assert_eq!( to_html(" a simple\n indented code block"), "
a simple\n  indented code block\n
", "should support indented code" ); assert_eq!( to_html(" - foo\n\n bar"), "", "should prefer list item content over indented code (1)" ); assert_eq!( to_html("1. foo\n\n - bar"), "
    \n
  1. \n

    foo

    \n\n
  2. \n
", "should prefer list item content over indented code (2)" ); assert_eq!( to_html(" \n *hi*\n\n - one"), "
<a/>\n*hi*\n\n- one\n
", "should support blank lines in indented code (1)" ); assert_eq!( to_html(" chunk1\n\n chunk2\n \n \n \n chunk3"), "
chunk1\n\nchunk2\n\n\n\nchunk3\n
", "should support blank lines in indented code (2)" ); assert_eq!( to_html(" chunk1\n \n chunk2"), "
chunk1\n  \n  chunk2\n
", "should support blank lines in indented code (3)" ); assert_eq!( to_html("Foo\n bar"), "

Foo\nbar

", "should not support interrupting paragraphs" ); assert_eq!( to_html(" foo\nbar"), "
foo\n
\n

bar

", "should support paragraphs directly after indented code" ); assert_eq!( to_html("# Heading\n foo\nHeading\n------\n foo\n----"), "

Heading

\n
foo\n
\n

Heading

\n
foo\n
\n
", "should mix w/ other content" ); assert_eq!( to_html(" foo\n bar"), "
    foo\nbar\n
", "should support extra whitespace on the first line" ); assert_eq!( to_html("\n \n foo\n "), "
foo\n
", "should not support initial blank lines" ); assert_eq!( to_html(" foo "), "
foo  \n
", "should support trailing whitespace" ); assert_eq!( to_html("> a\nb"), "
\n
a\n
\n
\n

b

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

a\nb

\n
", "should not support lazyness (2)" ); assert_eq!( to_html("> a\n b"), "
\n

a\nb

\n
", "should not support lazyness (3)" ); assert_eq!( to_html("> a\n b"), "
\n

a\nb

\n
", "should not support lazyness (4)" ); assert_eq!( to_html("> a\n b"), "
\n
a\n
\n
\n
b\n
", "should not support lazyness (5)" ); assert_eq!( to_html("> a\n b"), "
\n
a\n
\n
\n
 b\n
", "should not support lazyness (6)" ); assert_eq!( to_html("> a\n b"), "
\n
a\n
\n
\n
  b\n
", "should not support lazyness (7)" ); let off = Options { parse: ParseOptions { constructs: Constructs { code_indented: false, ..Default::default() }, ..Default::default() }, ..Default::default() }; assert_eq!( to_html_with_options(" a", &off)?, "

a

", "should support turning off code (indented, 1)" ); assert_eq!( to_html_with_options("> a\n b", &off)?, "
\n

a\nb

\n
", "should support turning off code (indented, 2)" ); assert_eq!( to_html_with_options("- a\n b", &off)?, "", "should support turning off code (indented, 3)" ); assert_eq!( to_html_with_options("- a\n - b", &off)?, "", "should support turning off code (indented, 4)" ); assert_eq!( to_html_with_options("- a\n - b", &off)?, "", "should support turning off code (indented, 5)" ); assert_eq!( to_html_with_options("```\na\n ```", &off)?, "
a\n
", "should support turning off code (indented, 6)" ); assert_eq!( to_html_with_options( "a ", &Options { parse: ParseOptions { constructs: Constructs { code_indented: false, ..Default::default() }, ..Default::default() }, compile: CompileOptions { allow_dangerous_html: true, ..Default::default() } } )?, "

a

", "should support turning off code (indented, 7)" ); assert_eq!( to_html_with_options("- Foo\n---", &off)?, "\n
", "should support turning off code (indented, 8)" ); assert_eq!( to_html_with_options("- Foo\n ---", &off)?, "", "should support turning off code (indented, 9)" ); assert_eq!( to_mdast( "\tconsole.log(1)\n console.log(2)\n", &Default::default() )?, Node::Root(Root { children: vec![Node::Code(Code { lang: None, meta: None, value: "console.log(1)\nconsole.log(2)".into(), position: Some(Position::new(1, 1, 0, 2, 19, 34)) })], position: Some(Position::new(1, 1, 0, 3, 1, 35)) }), "should support code (indented) as `Code`s in mdast" ); Ok(()) }