From 8183323c432fc1359c634feb68bc372e13f0bd03 Mon Sep 17 00:00:00 2001 From: Titus Wormer Date: Thu, 14 Jul 2022 17:40:10 +0200 Subject: Add support for container state * Fix to parse list item continuation based on how big the initial list item prefix was * Fix list items that start with blank lines --- tests/list.rs | 431 +++++++++++++++++++++++++++------------------------------- 1 file changed, 197 insertions(+), 234 deletions(-) (limited to 'tests/list.rs') diff --git a/tests/list.rs b/tests/list.rs index ca5c559..d3fcb98 100644 --- a/tests/list.rs +++ b/tests/list.rs @@ -23,26 +23,23 @@ fn list() { "should support documents in list items" ); - // To do: list (indent). - // assert_eq!( - // micromark("- one\n\n two"), - // "\n

two

", - // "should not support 1 space for a two-character list prefix" - // ); + assert_eq!( + micromark("- one\n\n two"), + "\n

two

", + "should not support 1 space for a two-character list prefix" + ); - // To do: list (indent). - // assert_eq!( - // micromark("- a\n\n b"), - // "", - // "should support blank lines in list items" - // ); + assert_eq!( + micromark("- a\n\n b"), + "", + "should support blank lines in list items" + ); - // To do: list (indent). - // assert_eq!( - // micromark(" - one\n\n two"), - // "\n
 two\n
", - // "should support indented code after lists" - // ); + assert_eq!( + micromark(" - one\n\n two"), + "\n
 two\n
", + "should support indented code after lists" + ); assert_eq!( micromark(" > > 1. one\n>>\n>> two"), @@ -50,12 +47,11 @@ fn list() { "should support proper indent mixed w/ block quotes (1)" ); - // To do: list (indent). - // assert_eq!( - // micromark(">>- one\n>>\n > > two"), - // "
\n
\n
    \n
  • one
  • \n
\n

two

\n
\n
", - // "should support proper indent mixed w/ block quotes (2)" - // ); + assert_eq!( + micromark(">>- one\n>>\n > > two"), + "
\n
\n
    \n
  • one
  • \n
\n

two

\n
\n
", + "should support proper indent mixed w/ block quotes (2)" + ); assert_eq!( micromark("-one\n\n2.two"), @@ -63,12 +59,11 @@ fn list() { "should not support a missing space after marker" ); - // To do: list (indent). - // assert_eq!( - // micromark("- foo\n\n\n bar"), - // "", - // "should support multiple blank lines between items" - // ); + assert_eq!( + micromark("- foo\n\n\n bar"), + "", + "should support multiple blank lines between items" + ); assert_eq!( micromark("1. foo\n\n ```\n bar\n ```\n\n baz\n\n > bam"), @@ -76,12 +71,11 @@ fn list() { "should support flow in items" ); - // To do: list (indent). - // assert_eq!( - // micromark("- Foo\n\n bar\n\n\n baz"), - // "", - // "should support blank lines in indented code in items" - // ); + assert_eq!( + micromark("- Foo\n\n bar\n\n\n baz"), + "", + "should support blank lines in indented code in items" + ); assert_eq!( micromark("123456789. ok"), @@ -113,19 +107,17 @@ fn list() { "should not support “negative” ordered item values" ); - // To do: list (indent). - // assert_eq!( - // micromark("- foo\n\n bar"), - // "", - // "should support indented code in list items (1)" - // ); + assert_eq!( + micromark("- foo\n\n bar"), + "", + "should support indented code in list items (1)" + ); - // To do: list (indent). - // assert_eq!( - // micromark(" 10. foo\n\n bar"), - // "
    \n
  1. \n

    foo

    \n
    bar\n
    \n
  2. \n
", - // "should support indented code in list items (2)" - // ); + assert_eq!( + micromark(" 10. foo\n\n bar"), + "
    \n
  1. \n

    foo

    \n
    bar\n
    \n
  2. \n
", + "should support indented code in list items (2)" + ); assert_eq!( micromark(" indented code\n\nparagraph\n\n more code"), @@ -133,19 +125,17 @@ fn list() { "should support indented code in list items (3)" ); - // To do: list (indent). - // assert_eq!( - // micromark("1. indented code\n\n paragraph\n\n more code"), - // "
    \n
  1. \n
    indented code\n
    \n

    paragraph

    \n
    more code\n
    \n
  2. \n
", - // "should support indented code in list items (4)" - // ); + assert_eq!( + micromark("1. indented code\n\n paragraph\n\n more code"), + "
    \n
  1. \n
    indented code\n
    \n

    paragraph

    \n
    more code\n
    \n
  2. \n
", + "should support indented code in list items (4)" + ); - // To do: list (indent). - // assert_eq!( - // micromark("1. indented code\n\n paragraph\n\n more code"), - // "
    \n
  1. \n
     indented code\n
    \n

    paragraph

    \n
    more code\n
    \n
  2. \n
", - // "should support indented code in list items (5)" - // ); + assert_eq!( + micromark("1. indented code\n\n paragraph\n\n more code"), + "
    \n
  1. \n
     indented code\n
    \n

    paragraph

    \n
    more code\n
    \n
  2. \n
", + "should support indented code in list items (5)" + ); assert_eq!( micromark(" foo\n\nbar"), @@ -153,33 +143,30 @@ fn list() { "should support indented code in list items (6)" ); - // To do: list (indent). - // assert_eq!( - // micromark("- foo\n\n bar"), - // "\n

bar

", - // "should support indented code in list items (7)" - // ); + assert_eq!( + micromark("- foo\n\n bar"), + "\n

bar

", + "should support indented code in list items (7)" + ); - // To do: list (indent). - // assert_eq!( - // micromark("- foo\n\n bar"), - // "", - // "should support indented code in list items (8)" - // ); + assert_eq!( + micromark("- foo\n\n bar"), + "", + "should support indented code in list items (8)" + ); - // To do: list (indent). + // To do: list (empty item is allowed to follow another item). // assert_eq!( // micromark("-\n foo\n-\n ```\n bar\n ```\n-\n baz"), // "", // "should support blank first lines (1)" // ); - // To do: list (indent). - // assert_eq!( - // micromark("- \n foo"), - // "", - // "should support blank first lines (2)" - // ); + assert_eq!( + micromark("- \n foo"), + "", + "should support blank first lines (2)" + ); assert_eq!( micromark("-\n\n foo"), @@ -220,32 +207,29 @@ fn list() { "should not support empty items to interrupt paragraphs" ); - // To do: list (indent). - // assert_eq!( - // micromark( - // " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote." - // ), - // "
    \n
  1. \n

    A paragraph\nwith two lines.

    \n
    indented code\n
    \n
    \n

    A block quote.

    \n
    \n
  2. \n
", - // "should support indenting w/ 1 space" - // ); + assert_eq!( + micromark( + " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote." + ), + "
    \n
  1. \n

    A paragraph\nwith two lines.

    \n
    indented code\n
    \n
    \n

    A block quote.

    \n
    \n
  2. \n
", + "should support indenting w/ 1 space" + ); - // To do: list (indent). - // assert_eq!( - // micromark( - // " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote." - // ), - // "
    \n
  1. \n

    A paragraph\nwith two lines.

    \n
    indented code\n
    \n
    \n

    A block quote.

    \n
    \n
  2. \n
", - // "should support indenting w/ 2 spaces" - // ); + assert_eq!( + micromark( + " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote." + ), + "
    \n
  1. \n

    A paragraph\nwith two lines.

    \n
    indented code\n
    \n
    \n

    A block quote.

    \n
    \n
  2. \n
", + "should support indenting w/ 2 spaces" + ); - // To do: list (indent). - // assert_eq!( - // micromark( - // " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote." - // ), - // "
    \n
  1. \n

    A paragraph\nwith two lines.

    \n
    indented code\n
    \n
    \n

    A block quote.

    \n
    \n
  2. \n
", - // "should support indenting w/ 3 spaces" - // ); + assert_eq!( + micromark( + " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote." + ), + "
    \n
  1. \n

    A paragraph\nwith two lines.

    \n
    indented code\n
    \n
    \n

    A block quote.

    \n
    \n
  2. \n
", + "should support indenting w/ 3 spaces" + ); assert_eq!( micromark( @@ -255,14 +239,13 @@ fn list() { "should not support indenting w/ 4 spaces" ); - // To do: list (indent). - // assert_eq!( - // micromark( - // " 1. A paragraph\nwith two lines.\n\n indented code\n\n > A block quote." - // ), - // "
    \n
  1. \n

    A paragraph\nwith two lines.

    \n
    indented code\n
    \n
    \n

    A block quote.

    \n
    \n
  2. \n
", - // "should support lazy lines" - // ); + assert_eq!( + micromark( + " 1. A paragraph\nwith two lines.\n\n indented code\n\n > A block quote." + ), + "
    \n
  1. \n

    A paragraph\nwith two lines.

    \n
    indented code\n
    \n
    \n

    A block quote.

    \n
    \n
  2. \n
", + "should support lazy lines" + ); assert_eq!( micromark(" 1. A paragraph\n with two lines."), @@ -282,19 +265,17 @@ fn list() { "should support partially continued, partially lazy lines combined w/ other containers" ); - // To do: list (indent). - // assert_eq!( - // micromark("- foo\n - bar\n - baz\n - boo"), - // "", - // "should support sublists w/ enough spaces (1)" - // ); + assert_eq!( + micromark("- foo\n - bar\n - baz\n - boo"), + "", + "should support sublists w/ enough spaces (1)" + ); - // To do: list (indent). - // assert_eq!( - // micromark("- foo\n - bar\n - baz\n - boo"), - // "", - // "should not support sublists w/ too few spaces" - // ); + assert_eq!( + micromark("- foo\n - bar\n - baz\n - boo"), + "", + "should not support sublists w/ too few spaces" + ); assert_eq!( micromark("10) foo\n - bar"), @@ -320,12 +301,11 @@ fn list() { "should support sublists (2)" ); - // To do: list (indent). - // assert_eq!( - // micromark("- # Foo\n- Bar\n ---\n baz"), - // "", - // "should support headings in list items" - // ); + assert_eq!( + micromark("- # Foo\n- Bar\n ---\n baz"), + "", + "should support headings in list items" + ); assert_eq!( micromark("- foo\n- bar\n+ baz"), @@ -376,12 +356,11 @@ fn list() { "should support blank lines between items (1)" ); - // To do: list (indent). - // assert_eq!( - // micromark("- foo\n - bar\n - baz\n\n\n bim"), - // "", - // "should support blank lines between items (2)" - // ); + assert_eq!( + micromark("- foo\n - bar\n - baz\n\n\n bim"), + "", + "should support blank lines between items (2)" + ); assert_eq!( micromark_with_options("- foo\n- bar\n\n\n\n- baz\n- bim", DANGER), @@ -407,19 +386,17 @@ fn list() { "should not support lists in lists w/ too few spaces (2)" ); - // To do: list (indent). - // assert_eq!( - // micromark("- a\n - b\n - c\n - d\n - e"), - // "", - // "should not support lists in lists w/ too few spaces (3)" - // ); + assert_eq!( + micromark("- a\n - b\n - c\n - d\n - e"), + "", + "should not support lists in lists w/ too few spaces (3)" + ); - // To do: list (indent). - // assert_eq!( - // micromark("1. a\n\n 2. b\n\n 3. c"), - // "
    \n
  1. \n

    a

    \n
  2. \n
  3. \n

    b

    \n
  4. \n
\n
3. c\n
", - // "should not support lists in lists w/ too few spaces (3)" - // ); + assert_eq!( + micromark("1. a\n\n 2. b\n\n 3. c"), + "
    \n
  1. \n

    a

    \n
  2. \n
  3. \n

    b

    \n
  4. \n
\n
3. c\n
", + "should not support lists in lists w/ too few spaces (3)" + ); assert_eq!( micromark("- a\n- b\n\n- c"), @@ -434,42 +411,38 @@ fn list() { // "should support loose lists w/ a blank line between (2)" // ); - // To do: list (indent). - // assert_eq!( - // micromark("- a\n- b\n\n c\n- d"), - // "", - // "should support loose lists w/ a blank line in an item (1)" - // ); + assert_eq!( + micromark("- a\n- b\n\n c\n- d"), + "", + "should support loose lists w/ a blank line in an item (1)" + ); - // To do: list (indent). - // assert_eq!( - // micromark("- a\n- b\n\n [ref]: /url\n- d"), - // "", - // "should support loose lists w/ a blank line in an item (2)" - // ); + assert_eq!( + micromark("- a\n- b\n\n [ref]: /url\n- d"), + "", + "should support loose lists w/ a blank line in an item (2)" + ); - // To do: list (indent). - // assert_eq!( - // micromark("- a\n- ```\n b\n\n\n ```\n- c"), - // "", - // "should support tight lists w/ a blank line in fenced code" - // ); + assert_eq!( + micromark("- a\n- ```\n b\n\n\n ```\n- c"), + "", + "should support tight lists w/ a blank line in fenced code" + ); - // To do: list (indent). - // assert_eq!( - // micromark("- a\n - b\n\n c\n- d"), - // "", - // "should support tight lists w/ a blank line in a sublist" - // ); + assert_eq!( + micromark("- a\n - b\n\n c\n- d"), + "", + "should support tight lists w/ a blank line in a sublist" + ); - // To do: list (indent). + // To do: list (loose/tight bug). // assert_eq!( // micromark("* a\n > b\n >\n* c"), // "", // "should support tight lists w/ a blank line in a block quote" // ); - // To do: list (indent). + // To do: list (some crash). // assert_eq!( // micromark("- a\n > b\n ```\n c\n ```\n- d"), // "", @@ -482,33 +455,29 @@ fn list() { "should support tight lists w/ a single content" ); - // To do: list (indent). - // assert_eq!( - // micromark("- a\n - b"), - // "", - // "should support tight lists w/ a sublist" - // ); + assert_eq!( + micromark("- a\n - b"), + "", + "should support tight lists w/ a sublist" + ); - // To do: list (indent). - // assert_eq!( - // micromark("1. ```\n foo\n ```\n\n bar"), - // "
    \n
  1. \n
    foo\n
    \n

    bar

    \n
  2. \n
", - // "should support loose lists w/ a blank line in an item" - // ); + assert_eq!( + micromark("1. ```\n foo\n ```\n\n bar"), + "
    \n
  1. \n
    foo\n
    \n

    bar

    \n
  2. \n
", + "should support loose lists w/ a blank line in an item" + ); - // To do: list (indent). - // assert_eq!( - // micromark("* foo\n * bar\n\n baz"), - // "", - // "should support loose lists w/ tight sublists (1)" - // ); + assert_eq!( + micromark("* foo\n * bar\n\n baz"), + "", + "should support loose lists w/ tight sublists (1)" + ); - // To do: list (indent). - // assert_eq!( - // micromark("- a\n - b\n - c\n\n- d\n - e\n - f"), - // "", - // "should support loose lists w/ tight sublists (2)" - // ); + assert_eq!( + micromark("- a\n - b\n - c\n\n- d\n - e\n - f"), + "", + "should support loose lists w/ tight sublists (2)" + ); // Extra. // To do: list (empty item is allowed to follow another item). @@ -518,12 +487,11 @@ fn list() { // "should support continued list items after an empty list item w/ many blank lines" // ); - // To do: list (indent). - // assert_eq!( - // micromark("*\n ~~~p\n\n ~~~"), - // "", - // "should support blank lines in code after an initial blank line" - // ); + assert_eq!( + micromark("*\n ~~~p\n\n ~~~"), + "", + "should support blank lines in code after an initial blank line" + ); assert_eq!( micromark( @@ -539,42 +507,37 @@ fn list() { "should support empty items in a spread list" ); - // To do: list (indent). - // assert_eq!( - // micromark("- ```\n\n ```"), - // "", - // "should remove indent of code (fenced) in list (0 space)" - // ); + assert_eq!( + micromark("- ```\n\n ```"), + "", + "should remove indent of code (fenced) in list (0 space)" + ); - // To do: list (indent, slurp?). - // assert_eq!( - // micromark("- ```\n \n ```"), - // "", - // "should remove indent of code (fenced) in list (1 space)" - // ); + assert_eq!( + micromark("- ```\n \n ```"), + "", + "should remove indent of code (fenced) in list (1 space)" + ); - // To do: list (indent, slurp?). - // assert_eq!( - // micromark("- ```\n \n ```"), - // "", - // "should remove indent of code (fenced) in list (2 spaces)" - // ); + assert_eq!( + micromark("- ```\n \n ```"), + "", + "should remove indent of code (fenced) in list (2 spaces)" + ); - // To do: list (indent, slurp?). - // assert_eq!( - // micromark("- ```\n \n ```"), - // "", - // "should remove indent of code (fenced) in list (3 spaces)" - // ); + assert_eq!( + micromark("- ```\n \n ```"), + "", + "should remove indent of code (fenced) in list (3 spaces)" + ); - // To do: list (indent, slurp?). - // assert_eq!( - // micromark("- ```\n \n ```"), - // "", - // "should remove indent of code (fenced) in list (4 spaces)" - // ); + assert_eq!( + micromark("- ```\n \n ```"), + "", + "should remove indent of code (fenced) in list (4 spaces)" + ); - // To do: list (indent, slurp?). + // To do: list (some off by one bug with tabs). // assert_eq!( // micromark("- ```\n\t\n ```"), // "", -- cgit