From 4f776347163a514abadc7ded95e66a459be03bc9 Mon Sep 17 00:00:00 2001 From: Titus Wormer Date: Sat, 29 Oct 2022 14:03:59 +0200 Subject: Fix GFM task list checkboxes followed by eol Closes GH-24. --- tests/fuzz.rs | 8 ++++++ tests/gfm_task_list_item.rs | 60 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 67 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/fuzz.rs b/tests/fuzz.rs index d1a87b7..297e6a9 100644 --- a/tests/fuzz.rs +++ b/tests/fuzz.rs @@ -109,5 +109,13 @@ fn fuzz() -> Result<(), String> { "10: attention in different links (GH-21)" ); + assert!( + matches!( + to_mdast("* [ ]\na", &Default::default()), + Ok(mdast::Node::Root(_)) + ), + "11: gfm task list items followed by eols (GH-24)" + ); + Ok(()) } diff --git a/tests/gfm_task_list_item.rs b/tests/gfm_task_list_item.rs index 638206f..8b3f066 100644 --- a/tests/gfm_task_list_item.rs +++ b/tests/gfm_task_list_item.rs @@ -1,5 +1,5 @@ use markdown::{ - mdast::{List, ListItem, Node, Paragraph, Root, Text}, + mdast::{Emphasis, List, ListItem, Node, Paragraph, Root, Text}, to_html, to_html_with_options, to_mdast, unist::Position, Options, ParseOptions, @@ -291,5 +291,63 @@ Text. "should support task list items as `checked` fields on `ListItem`s in mdast" ); + assert_eq!( + to_mdast( + "* [x]\r\n a\n* [ ] b\n* [x]\t \r*c*", + &ParseOptions::gfm() + )?, + Node::Root(Root { + children: vec![Node::List(List { + ordered: false, + spread: false, + start: None, + children: vec![ + Node::ListItem(ListItem { + checked: Some(true), + spread: false, + children: vec![Node::Paragraph(Paragraph { + children: vec![Node::Text(Text { + value: "a".into(), + position: Some(Position::new(2, 1, 7, 2, 4, 10)) + }),], + position: Some(Position::new(2, 1, 7, 2, 4, 10)) + })], + position: Some(Position::new(1, 1, 0, 2, 4, 10)) + }), + Node::ListItem(ListItem { + checked: Some(false), + spread: false, + children: vec![Node::Paragraph(Paragraph { + children: vec![Node::Text(Text { + value: " b".into(), + position: Some(Position::new(3, 7, 17, 3, 10, 20)) + }),], + position: Some(Position::new(3, 7, 17, 3, 10, 20)) + })], + position: Some(Position::new(3, 1, 11, 3, 10, 20)) + }), + Node::ListItem(ListItem { + checked: Some(true), + spread: false, + children: vec![Node::Paragraph(Paragraph { + children: vec![Node::Emphasis(Emphasis { + children: vec![Node::Text(Text { + value: "c".into(), + position: Some(Position::new(5, 2, 30, 5, 3, 31)) + }),], + position: Some(Position::new(5, 1, 29, 5, 4, 32)) + })], + position: Some(Position::new(5, 1, 29, 5, 4, 32)) + })], + position: Some(Position::new(4, 1, 21, 5, 4, 32)) + }), + ], + position: Some(Position::new(1, 1, 0, 5, 4, 32)) + })], + position: Some(Position::new(1, 1, 0, 5, 4, 32)) + }), + "should handle lots of whitespace after checkbox, and non-text" + ); + Ok(()) } -- cgit