Something went wrong. Try again.
Markdown parser fork with extended syntax for personal use.
Something went wrong. Try again.
26 kB · 708 lines
Rust
at hack
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709use markdown::{ mdast::{List, ListItem, Node, Paragraph, Root, Text}, message, to_html, to_html_with_options, to_mdast, unist::Position, CompileOptions, Constructs, Options, ParseOptions,};use pretty_assertions::assert_eq;
#[test]fn list() -> Result<(), message::Message> { let danger = Options { compile: CompileOptions { allow_dangerous_html: true, allow_dangerous_protocol: true, ..Default::default() }, ..Default::default() };
assert_eq!( to_html( "A paragraph\nwith two lines.\n\n indented code\n\n> A block quote."), "<p>A paragraph\nwith two lines.</p>\n<pre><code>indented code\n</code></pre>\n<blockquote>\n<p>A block quote.</p>\n</blockquote>", "should support documents" );
assert_eq!( to_html("1. a\n b.\n\n c\n\n > d."), "<ol>\n<li>\n<p>a\nb.</p>\n<pre><code>c\n</code></pre>\n<blockquote>\n<p>d.</p>\n</blockquote>\n</li>\n</ol>", "should support documents in list items" );
assert_eq!( to_html("- one\n\n two"), "<ul>\n<li>one</li>\n</ul>\n<p>two</p>", "should not support 1 space for a two-character list prefix" );
assert_eq!( to_html("- a\n\n b"), "<ul>\n<li>\n<p>a</p>\n<p>b</p>\n</li>\n</ul>", "should support blank lines in list items" );
assert_eq!( to_html(" - one\n\n two"), "<ul>\n<li>one</li>\n</ul>\n<pre><code> two\n</code></pre>", "should support indented code after lists" );
assert_eq!( to_html(" > > 1. one\n>>\n>> two"), "<blockquote>\n<blockquote>\n<ol>\n<li>\n<p>one</p>\n<p>two</p>\n</li>\n</ol>\n</blockquote>\n</blockquote>", "should support proper indent mixed w/ block quotes (1)" );
assert_eq!( to_html(">>- one\n>>\n > > two"), "<blockquote>\n<blockquote>\n<ul>\n<li>one</li>\n</ul>\n<p>two</p>\n</blockquote>\n</blockquote>", "should support proper indent mixed w/ block quotes (2)" );
assert_eq!( to_html("-one\n\n2.two"), "<p>-one</p>\n<p>2.two</p>", "should not support a missing space after marker" );
assert_eq!( to_html("- foo\n\n\n bar"), "<ul>\n<li>\n<p>foo</p>\n<p>bar</p>\n</li>\n</ul>", "should support multiple blank lines between items" );
assert_eq!( to_html("1. foo\n\n ```\n bar\n ```\n\n baz\n\n > bam"), "<ol>\n<li>\n<p>foo</p>\n<pre><code>bar\n</code></pre>\n<p>baz</p>\n<blockquote>\n<p>bam</p>\n</blockquote>\n</li>\n</ol>", "should support flow in items" );
assert_eq!( to_html("- Foo\n\n bar\n\n\n baz"), "<ul>\n<li>\n<p>Foo</p>\n<pre><code>bar\n\n\nbaz\n</code></pre>\n</li>\n</ul>", "should support blank lines in indented code in items" );
assert_eq!( to_html("123456789. ok"), "<ol start=\"123456789\">\n<li>ok</li>\n</ol>", "should support start on the first list item" );
assert_eq!( to_html("1234567890. not ok"), "<p>1234567890. not ok</p>", "should not support ordered item values over 10 digits" );
assert_eq!( to_html("0. ok"), "<ol start=\"0\">\n<li>ok</li>\n</ol>", "should support ordered item values of `0`" );
assert_eq!( to_html("003. ok"), "<ol start=\"3\">\n<li>ok</li>\n</ol>", "should support ordered item values starting w/ `0`s" );
assert_eq!( to_html("-1. not ok"), "<p>-1. not ok</p>", "should not support “negative” ordered item values" );
assert_eq!( to_html("- foo\n\n bar"), "<ul>\n<li>\n<p>foo</p>\n<pre><code>bar\n</code></pre>\n</li>\n</ul>", "should support indented code in list items (1)" );
assert_eq!( to_html(" 10. foo\n\n bar"), "<ol start=\"10\">\n<li>\n<p>foo</p>\n<pre><code>bar\n</code></pre>\n</li>\n</ol>", "should support indented code in list items (2)" );
assert_eq!( to_html(" indented code\n\nparagraph\n\n more code"), "<pre><code>indented code\n</code></pre>\n<p>paragraph</p>\n<pre><code>more code\n</code></pre>", "should support indented code in list items (3)" );
assert_eq!( to_html("1. indented code\n\n paragraph\n\n more code"), "<ol>\n<li>\n<pre><code>indented code\n</code></pre>\n<p>paragraph</p>\n<pre><code>more code\n</code></pre>\n</li>\n</ol>", "should support indented code in list items (4)" );
assert_eq!( to_html("1. indented code\n\n paragraph\n\n more code"), "<ol>\n<li>\n<pre><code> indented code\n</code></pre>\n<p>paragraph</p>\n<pre><code>more code\n</code></pre>\n</li>\n</ol>", "should support indented code in list items (5)" );
assert_eq!( to_html(" foo\n\nbar"), "<p>foo</p>\n<p>bar</p>", "should support indented code in list items (6)" );
assert_eq!( to_html("- foo\n\n bar"), "<ul>\n<li>foo</li>\n</ul>\n<p>bar</p>", "should support indented code in list items (7)" );
assert_eq!( to_html("- foo\n\n bar"), "<ul>\n<li>\n<p>foo</p>\n<p>bar</p>\n</li>\n</ul>", "should support indented code in list items (8)" );
assert_eq!( to_html("-\n foo\n-\n ```\n bar\n ```\n-\n baz"), "<ul>\n<li>foo</li>\n<li>\n<pre><code>bar\n</code></pre>\n</li>\n<li>\n<pre><code>baz\n</code></pre>\n</li>\n</ul>", "should support blank first lines (1)" );
assert_eq!( to_html("- \n foo"), "<ul>\n<li>foo</li>\n</ul>", "should support blank first lines (2)" );
assert_eq!( to_html("-\n\n foo"), "<ul>\n<li></li>\n</ul>\n<p>foo</p>", "should support empty only items" );
assert_eq!( to_html("- foo\n-\n- bar"), "<ul>\n<li>foo</li>\n<li></li>\n<li>bar</li>\n</ul>", "should support empty continued items" );
assert_eq!( to_html("- foo\n- \n- bar"), "<ul>\n<li>foo</li>\n<li></li>\n<li>bar</li>\n</ul>", "should support blank continued items" );
assert_eq!( to_html("1. foo\n2.\n3. bar"), "<ol>\n<li>foo</li>\n<li></li>\n<li>bar</li>\n</ol>", "should support empty continued items (ordered)" );
assert_eq!( to_html("*"), "<ul>\n<li></li>\n</ul>", "should support a single empty item" );
assert_eq!( to_html("foo\n*\n\nfoo\n1."), "<p>foo\n*</p>\n<p>foo\n1.</p>", "should not support empty items to interrupt paragraphs" );
assert_eq!( to_html( " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote."), "<ol>\n<li>\n<p>A paragraph\nwith two lines.</p>\n<pre><code>indented code\n</code></pre>\n<blockquote>\n<p>A block quote.</p>\n</blockquote>\n</li>\n</ol>", "should support indenting w/ 1 space" );
assert_eq!( to_html( " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote."), "<ol>\n<li>\n<p>A paragraph\nwith two lines.</p>\n<pre><code>indented code\n</code></pre>\n<blockquote>\n<p>A block quote.</p>\n</blockquote>\n</li>\n</ol>", "should support indenting w/ 2 spaces" );
assert_eq!( to_html( " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote."), "<ol>\n<li>\n<p>A paragraph\nwith two lines.</p>\n<pre><code>indented code\n</code></pre>\n<blockquote>\n<p>A block quote.</p>\n</blockquote>\n</li>\n</ol>", "should support indenting w/ 3 spaces" );
assert_eq!( to_html( " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote."), "<pre><code>1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n</code></pre>", "should not support indenting w/ 4 spaces" );
assert_eq!( to_html( " 1. A paragraph\nwith two lines.\n\n indented code\n\n > A block quote."), "<ol>\n<li>\n<p>A paragraph\nwith two lines.</p>\n<pre><code>indented code\n</code></pre>\n<blockquote>\n<p>A block quote.</p>\n</blockquote>\n</li>\n</ol>", "should support lazy lines" );
assert_eq!( to_html(" 1. A paragraph\n with two lines."), "<ol>\n<li>A paragraph\nwith two lines.</li>\n</ol>", "should support partially lazy lines" );
assert_eq!( to_html("> 1. > Blockquote\ncontinued here."), "<blockquote>\n<ol>\n<li>\n<blockquote>\n<p>Blockquote\ncontinued here.</p>\n</blockquote>\n</li>\n</ol>\n</blockquote>", "should support lazy lines combined w/ other containers" );
assert_eq!( to_html("> 1. > Blockquote\n> continued here."), "<blockquote>\n<ol>\n<li>\n<blockquote>\n<p>Blockquote\ncontinued here.</p>\n</blockquote>\n</li>\n</ol>\n</blockquote>", "should support partially continued, partially lazy lines combined w/ other containers" );
assert_eq!( to_html("- [\na"), "<ul>\n<li>[\na</li>\n</ul>", "should support lazy, definition-like lines" );
assert_eq!( to_html("- [a]: b\nc"), "<ul>\n<li>c</li>\n</ul>", "should support a definition, followed by a lazy paragraph" );
assert_eq!( to_html("- foo\n - bar\n - baz\n - boo"), "<ul>\n<li>foo\n<ul>\n<li>bar\n<ul>\n<li>baz\n<ul>\n<li>boo</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>", "should support sublists w/ enough spaces (1)" );
assert_eq!( to_html("- foo\n - bar\n - baz\n - boo"), "<ul>\n<li>foo</li>\n<li>bar</li>\n<li>baz</li>\n<li>boo</li>\n</ul>", "should not support sublists w/ too few spaces" );
assert_eq!( to_html("10) foo\n - bar"), "<ol start=\"10\">\n<li>foo\n<ul>\n<li>bar</li>\n</ul>\n</li>\n</ol>", "should support sublists w/ enough spaces (2)" );
assert_eq!( to_html("10) foo\n - bar"), "<ol start=\"10\">\n<li>foo</li>\n</ol>\n<ul>\n<li>bar</li>\n</ul>", "should not support sublists w/ too few spaces (2)" );
assert_eq!( to_html("- - foo"), "<ul>\n<li>\n<ul>\n<li>foo</li>\n</ul>\n</li>\n</ul>", "should support sublists (1)" );
assert_eq!( to_html("1. - 2. foo"), "<ol>\n<li>\n<ul>\n<li>\n<ol start=\"2\">\n<li>foo</li>\n</ol>\n</li>\n</ul>\n</li>\n</ol>", "should support sublists (2)" );
assert_eq!( to_html("- # Foo\n- Bar\n ---\n baz"), "<ul>\n<li>\n<h1>Foo</h1>\n</li>\n<li>\n<h2>Bar</h2>\nbaz</li>\n</ul>", "should support headings in list items" );
assert_eq!( to_html("- foo\n- bar\n+ baz"), "<ul>\n<li>foo</li>\n<li>bar</li>\n</ul>\n<ul>\n<li>baz</li>\n</ul>", "should support a new list by changing the marker (unordered)" );
assert_eq!( to_html("1. foo\n2. bar\n3) baz"), "<ol>\n<li>foo</li>\n<li>bar</li>\n</ol>\n<ol start=\"3\">\n<li>baz</li>\n</ol>", "should support a new list by changing the marker (ordered)" );
assert_eq!( to_html("Foo\n- bar\n- baz"), "<p>Foo</p>\n<ul>\n<li>bar</li>\n<li>baz</li>\n</ul>", "should support interrupting a paragraph" );
assert_eq!( to_html("a\n2. b"), "<p>a\n2. b</p>", "should not support interrupting a paragraph with a non-1 numbered item" );
assert_eq!( to_html("\n2. a"), "<ol start=\"2\">\n<li>a</li>\n</ol>", "should “interrupt” a blank line (1)" );
assert_eq!( to_html("a\n\n2. b"), "<p>a</p>\n<ol start=\"2\">\n<li>b</li>\n</ol>", "should “interrupt” a blank line (2)" );
assert_eq!( to_html("a\n1. b"), "<p>a</p>\n<ol>\n<li>b</li>\n</ol>", "should support interrupting a paragraph with a 1 numbered item" );
assert_eq!( to_html("- foo\n\n- bar\n\n\n- baz"), "<ul>\n<li>\n<p>foo</p>\n</li>\n<li>\n<p>bar</p>\n</li>\n<li>\n<p>baz</p>\n</li>\n</ul>", "should support blank lines between items (1)" );
assert_eq!( to_html("- foo\n - bar\n - baz\n\n\n bim"), "<ul>\n<li>foo\n<ul>\n<li>bar\n<ul>\n<li>\n<p>baz</p>\n<p>bim</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>", "should support blank lines between items (2)" );
assert_eq!( to_html_with_options("- foo\n- bar\n\n<!-- -->\n\n- baz\n- bim", &danger)?, "<ul>\n<li>foo</li>\n<li>bar</li>\n</ul>\n<!-- -->\n<ul>\n<li>baz</li>\n<li>bim</li>\n</ul>", "should support HTML comments between lists" );
assert_eq!( to_html_with_options("- foo\n\n notcode\n\n- foo\n\n<!-- -->\n\n code", &danger)?, "<ul>\n<li>\n<p>foo</p>\n<p>notcode</p>\n</li>\n<li>\n<p>foo</p>\n</li>\n</ul>\n<!-- -->\n<pre><code>code\n</code></pre>", "should support HTML comments between lists and indented code" );
assert_eq!( to_html("- a\n - b\n - c\n - d\n - e\n - f\n- g"), "<ul>\n<li>a</li>\n<li>b</li>\n<li>c</li>\n<li>d</li>\n<li>e</li>\n<li>f</li>\n<li>g</li>\n</ul>", "should not support lists in lists w/ too few spaces (1)" );
assert_eq!( to_html("1. a\n\n 2. b\n\n 3. c"), "<ol>\n<li>\n<p>a</p>\n</li>\n<li>\n<p>b</p>\n</li>\n<li>\n<p>c</p>\n</li>\n</ol>", "should not support lists in lists w/ too few spaces (2)" );
assert_eq!( to_html("- a\n - b\n - c\n - d\n - e"), "<ul>\n<li>a</li>\n<li>b</li>\n<li>c</li>\n<li>d\n- e</li>\n</ul>", "should not support lists in lists w/ too few spaces (3)" );
assert_eq!( to_html("1. a\n\n 2. b\n\n 3. c"), "<ol>\n<li>\n<p>a</p>\n</li>\n<li>\n<p>b</p>\n</li>\n</ol>\n<pre><code>3. c\n</code></pre>", "should not support lists in lists w/ too few spaces (3)" );
assert_eq!( to_html("- a\n- b\n\n- c"), "<ul>\n<li>\n<p>a</p>\n</li>\n<li>\n<p>b</p>\n</li>\n<li>\n<p>c</p>\n</li>\n</ul>", "should support loose lists w/ a blank line between (1)" );
assert_eq!( to_html("* a\n*\n\n* c"), "<ul>\n<li>\n<p>a</p>\n</li>\n<li></li>\n<li>\n<p>c</p>\n</li>\n</ul>", "should support loose lists w/ a blank line between (2)" );
assert_eq!( to_html("- a\n- b\n\n c\n- d"), "<ul>\n<li>\n<p>a</p>\n</li>\n<li>\n<p>b</p>\n<p>c</p>\n</li>\n<li>\n<p>d</p>\n</li>\n</ul>", "should support loose lists w/ a blank line in an item (1)" );
assert_eq!( to_html("- a\n- b\n\n [ref]: /url\n- d"), "<ul>\n<li>\n<p>a</p>\n</li>\n<li>\n<p>b</p>\n</li>\n<li>\n<p>d</p>\n</li>\n</ul>", "should support loose lists w/ a blank line in an item (2)" );
assert_eq!( to_html("- a\n- ```\n b\n\n\n ```\n- c"), "<ul>\n<li>a</li>\n<li>\n<pre><code>b\n\n\n</code></pre>\n</li>\n<li>c</li>\n</ul>", "should support tight lists w/ a blank line in fenced code" );
assert_eq!( to_html("- a\n - b\n\n c\n- d"), "<ul>\n<li>a\n<ul>\n<li>\n<p>b</p>\n<p>c</p>\n</li>\n</ul>\n</li>\n<li>d</li>\n</ul>", "should support tight lists w/ a blank line in a sublist" );
assert_eq!( to_html("* a\n > b\n >\n* c"), "<ul>\n<li>a\n<blockquote>\n<p>b</p>\n</blockquote>\n</li>\n<li>c</li>\n</ul>", "should support tight lists w/ a blank line in a block quote" );
assert_eq!( to_html("- a\n > b\n ```\n c\n ```\n- d"), "<ul>\n<li>a\n<blockquote>\n<p>b</p>\n</blockquote>\n<pre><code>c\n</code></pre>\n</li>\n<li>d</li>\n</ul>", "should support tight lists w/ flow w/o blank line" );
assert_eq!( to_html("- a"), "<ul>\n<li>a</li>\n</ul>", "should support tight lists w/ a single content" );
assert_eq!( to_html("- a\n - b"), "<ul>\n<li>a\n<ul>\n<li>b</li>\n</ul>\n</li>\n</ul>", "should support tight lists w/ a sublist" );
assert_eq!( to_html("1. ```\n foo\n ```\n\n bar"), "<ol>\n<li>\n<pre><code>foo\n</code></pre>\n<p>bar</p>\n</li>\n</ol>", "should support loose lists w/ a blank line in an item" );
assert_eq!( to_html("* foo\n * bar\n\n baz"), "<ul>\n<li>\n<p>foo</p>\n<ul>\n<li>bar</li>\n</ul>\n<p>baz</p>\n</li>\n</ul>", "should support loose lists w/ tight sublists (1)" );
assert_eq!( to_html("- a\n - b\n - c\n\n- d\n - e\n - f"), "<ul>\n<li>\n<p>a</p>\n<ul>\n<li>b</li>\n<li>c</li>\n</ul>\n</li>\n<li>\n<p>d</p>\n<ul>\n<li>e</li>\n<li>f</li>\n</ul>\n</li>\n</ul>", "should support loose lists w/ tight sublists (2)" );
// Extra. assert_eq!( to_html("* a\n*\n\n \n\t\n* b"), "<ul>\n<li>\n<p>a</p>\n</li>\n<li></li>\n<li>\n<p>b</p>\n</li>\n</ul>", "should support continued list items after an empty list item w/ many blank lines" );
assert_eq!( to_html("*\n ~~~p\n\n ~~~"), "<ul>\n<li>\n<pre><code class=\"language-p\">\n</code></pre>\n</li>\n</ul>", "should support blank lines in code after an initial blank line" );
assert_eq!( to_html( "* a tight item that ends with an html element: `x`\n\nParagraph"), "<ul>\n<li>a tight item that ends with an html element: <code>x</code></li>\n</ul>\n<p>Paragraph</p>", "should ignore line endings after tight items ending in tags" );
assert_eq!( to_html("* foo\n\n*\n\n* bar"), "<ul>\n<li>\n<p>foo</p>\n</li>\n<li></li>\n<li>\n<p>bar</p>\n</li>\n</ul>", "should support empty items in a spread list" );
assert_eq!( to_html("- ```\n\n ```"), "<ul>\n<li>\n<pre><code>\n</code></pre>\n</li>\n</ul>", "should remove indent of code (fenced) in list (0 space)" );
assert_eq!( to_html("- ```\n \n ```"), "<ul>\n<li>\n<pre><code>\n</code></pre>\n</li>\n</ul>", "should remove indent of code (fenced) in list (1 space)" );
assert_eq!( to_html("- ```\n \n ```"), "<ul>\n<li>\n<pre><code>\n</code></pre>\n</li>\n</ul>", "should remove indent of code (fenced) in list (2 spaces)" );
assert_eq!( to_html("- ```\n \n ```"), "<ul>\n<li>\n<pre><code> \n</code></pre>\n</li>\n</ul>", "should remove indent of code (fenced) in list (3 spaces)" );
assert_eq!( to_html("- ```\n \n ```"), "<ul>\n<li>\n<pre><code> \n</code></pre>\n</li>\n</ul>", "should remove indent of code (fenced) in list (4 spaces)" );
assert_eq!( to_html("- ```\n\t\n ```"), "<ul>\n<li>\n<pre><code> \n</code></pre>\n</li>\n</ul>", "should remove indent of code (fenced) in list (1 tab)" );
assert_eq!( to_html("- +\n-"), "<ul>\n<li>\n<ul>\n<li></li>\n</ul>\n</li>\n<li></li>\n</ul>", "should support complex nested and empty lists (1)" );
assert_eq!( to_html("- 1.\n-"), "<ul>\n<li>\n<ol>\n<li></li>\n</ol>\n</li>\n<li></li>\n</ul>", "should support complex nested and empty lists (2)" );
assert_eq!( to_html("* - +\n* -"), "<ul>\n<li>\n<ul>\n<li>\n<ul>\n<li></li>\n</ul>\n</li>\n</ul>\n</li>\n<li>\n<ul>\n<li></li>\n</ul>\n</li>\n</ul>", "should support complex nested and empty lists (3)" );
assert_eq!( to_html_with_options("* a\n\n<!---->\n\n* b", &danger)?, "<ul>\n<li>a</li>\n</ul>\n<!---->\n<ul>\n<li>b</li>\n</ul>", "should support the common list breaking comment method" );
assert_eq!( to_html_with_options( "- one\n\n two", &Options { parse: ParseOptions { constructs: Constructs { list_item: false, ..Default::default() }, ..Default::default() }, ..Default::default() } )?, "<p>- one</p>\n<p>two</p>", "should support turning off lists" );
assert_eq!( to_mdast("* a", &Default::default())?, Node::Root(Root { children: vec![Node::List(List { ordered: false, spread: false, start: None, children: vec![Node::ListItem(ListItem { checked: None, spread: false, 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)) })], position: Some(Position::new(1, 1, 0, 1, 4, 3)) }), "should support lists, list items as `List`, `ListItem`s in mdast" );
assert_eq!( to_mdast("3. a\n4. b", &Default::default())?, Node::Root(Root { children: vec![Node::List(List { ordered: true, spread: false, start: Some(3), children: vec![ Node::ListItem(ListItem { checked: None, spread: false, children: vec![Node::Paragraph(Paragraph { children: vec![Node::Text(Text { value: "a".into(), position: Some(Position::new(1, 4, 3, 1, 5, 4)) }),], position: Some(Position::new(1, 4, 3, 1, 5, 4)) })], position: Some(Position::new(1, 1, 0, 1, 5, 4)) }), Node::ListItem(ListItem { checked: None, spread: false, children: vec![Node::Paragraph(Paragraph { children: vec![Node::Text(Text { value: "b".into(), position: Some(Position::new(2, 4, 8, 2, 5, 9)) }),], position: Some(Position::new(2, 4, 8, 2, 5, 9)) })], position: Some(Position::new(2, 1, 5, 2, 5, 9)) }) ], position: Some(Position::new(1, 1, 0, 2, 5, 9)) })], position: Some(Position::new(1, 1, 0, 2, 5, 9)) }), "should support `start` fields on `List` w/ `ordered: true` in mdast" );
assert_eq!( to_mdast("* a\n\n b\n* c", &Default::default())?, Node::Root(Root { children: vec![Node::List(List { ordered: false, spread: false, start: None, children: vec![ Node::ListItem(ListItem { checked: None, spread: true, 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)) }), Node::Paragraph(Paragraph { children: vec![Node::Text(Text { value: "b".into(), position: Some(Position::new(3, 3, 7, 3, 4, 8)) }),], position: Some(Position::new(3, 3, 7, 3, 4, 8)) }) ], position: Some(Position::new(1, 1, 0, 3, 4, 8)) }), Node::ListItem(ListItem { checked: None, spread: false, children: vec![Node::Paragraph(Paragraph { children: vec![Node::Text(Text { value: "c".into(), position: Some(Position::new(4, 3, 11, 4, 4, 12)) }),], position: Some(Position::new(4, 3, 11, 4, 4, 12)) })], position: Some(Position::new(4, 1, 9, 4, 4, 12)) }) ], position: Some(Position::new(1, 1, 0, 4, 4, 12)) })], position: Some(Position::new(1, 1, 0, 4, 4, 12)) }), "should support `spread` fields on `List`, `ListItem`s in mdast" );
Ok(())}