Shallow clone of https://github.com/wooorm/markdown-rs
This commit is contained in:
@@ -0,0 +1,399 @@
|
||||
use markdown::mdast::{
|
||||
Break, Code, Definition, Heading, List, ListItem, Node, Paragraph, Root, Text, ThematicBreak,
|
||||
};
|
||||
use mdast_util_to_markdown::{
|
||||
to_markdown as to, to_markdown_with_options as to_md_with_opts, Options,
|
||||
};
|
||||
use pretty_assertions::assert_eq;
|
||||
|
||||
#[test]
|
||||
fn core() {
|
||||
assert_eq!(
|
||||
to(&Node::Root(Root {
|
||||
children: vec![
|
||||
Node::Paragraph(Paragraph {
|
||||
children: vec![Node::Text(Text {
|
||||
value: String::from("a"),
|
||||
position: None
|
||||
})],
|
||||
position: None
|
||||
}),
|
||||
Node::ThematicBreak(ThematicBreak { position: None }),
|
||||
Node::Paragraph(Paragraph {
|
||||
children: vec![Node::Text(Text {
|
||||
value: String::from("b"),
|
||||
position: None
|
||||
})],
|
||||
position: None
|
||||
}),
|
||||
],
|
||||
position: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"a\n\n***\n\nb\n",
|
||||
"should support root"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Root(Root {
|
||||
children: vec![
|
||||
Node::Text(Text {
|
||||
value: String::from("a"),
|
||||
position: None
|
||||
}),
|
||||
Node::Break(Break { position: None }),
|
||||
Node::Text(Text {
|
||||
value: String::from("b"),
|
||||
position: None
|
||||
}),
|
||||
],
|
||||
position: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"a\\\nb\n",
|
||||
"should not use blank lines between nodes when given phrasing"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Root(Root {
|
||||
children: vec![
|
||||
Node::Paragraph(Paragraph {
|
||||
children: vec![Node::Text(Text {
|
||||
value: String::from("a"),
|
||||
position: None
|
||||
})],
|
||||
position: None
|
||||
}),
|
||||
Node::Definition(Definition {
|
||||
position: None,
|
||||
url: String::new(),
|
||||
title: None,
|
||||
identifier: String::from("b"),
|
||||
label: None
|
||||
}),
|
||||
Node::Definition(Definition {
|
||||
position: None,
|
||||
url: String::new(),
|
||||
title: None,
|
||||
identifier: String::from("c"),
|
||||
label: None
|
||||
}),
|
||||
Node::Paragraph(Paragraph {
|
||||
children: vec![Node::Text(Text {
|
||||
value: String::from("d"),
|
||||
position: None
|
||||
})],
|
||||
position: None
|
||||
}),
|
||||
],
|
||||
position: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"a\n\n[b]: <>\n\n[c]: <>\n\nd\n",
|
||||
"should support adjacent definitions"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to_md_with_opts(
|
||||
&Node::Root(Root {
|
||||
children: vec![
|
||||
Node::Paragraph(Paragraph {
|
||||
children: vec![Node::Text(Text {
|
||||
value: String::from("a"),
|
||||
position: None
|
||||
})],
|
||||
position: None
|
||||
}),
|
||||
Node::Definition(Definition {
|
||||
position: None,
|
||||
url: String::new(),
|
||||
title: None,
|
||||
identifier: String::from("b"),
|
||||
label: None
|
||||
}),
|
||||
Node::Definition(Definition {
|
||||
position: None,
|
||||
url: String::new(),
|
||||
title: None,
|
||||
identifier: String::from("c"),
|
||||
label: None
|
||||
}),
|
||||
Node::Paragraph(Paragraph {
|
||||
children: vec![Node::Text(Text {
|
||||
value: String::from("d"),
|
||||
position: None
|
||||
})],
|
||||
position: None
|
||||
}),
|
||||
],
|
||||
position: None
|
||||
}),
|
||||
&Options {
|
||||
tight_definitions: true,
|
||||
..Default::default()
|
||||
}
|
||||
)
|
||||
.unwrap(),
|
||||
"a\n\n[b]: <>\n[c]: <>\n\nd\n",
|
||||
"should support tight adjacent definitions when `tight_definitions: true`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Root(Root {
|
||||
children: vec![
|
||||
Node::Paragraph(Paragraph {
|
||||
children: vec![Node::Text(Text {
|
||||
value: String::from("a"),
|
||||
position: None
|
||||
})],
|
||||
position: None
|
||||
}),
|
||||
Node::List(List {
|
||||
children: vec![Node::ListItem(ListItem {
|
||||
children: vec![],
|
||||
position: None,
|
||||
spread: false,
|
||||
checked: None
|
||||
})],
|
||||
position: None,
|
||||
ordered: false,
|
||||
start: None,
|
||||
spread: false
|
||||
}),
|
||||
Node::List(List {
|
||||
children: vec![Node::ListItem(ListItem {
|
||||
children: vec![],
|
||||
position: None,
|
||||
spread: false,
|
||||
checked: None
|
||||
})],
|
||||
position: None,
|
||||
ordered: false,
|
||||
start: None,
|
||||
spread: false
|
||||
}),
|
||||
Node::List(List {
|
||||
children: vec![Node::ListItem(ListItem {
|
||||
children: vec![],
|
||||
position: None,
|
||||
spread: false,
|
||||
checked: None
|
||||
})],
|
||||
position: None,
|
||||
ordered: true,
|
||||
start: None,
|
||||
spread: false
|
||||
}),
|
||||
Node::List(List {
|
||||
children: vec![Node::ListItem(ListItem {
|
||||
children: vec![],
|
||||
position: None,
|
||||
spread: false,
|
||||
checked: None
|
||||
})],
|
||||
position: None,
|
||||
ordered: true,
|
||||
start: None,
|
||||
spread: false
|
||||
}),
|
||||
Node::Paragraph(Paragraph {
|
||||
children: vec![Node::Text(Text {
|
||||
value: String::from("d"),
|
||||
position: None
|
||||
})],
|
||||
position: None
|
||||
}),
|
||||
],
|
||||
position: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"a\n\n*\n\n-\n\n1.\n\n1)\n\nd\n",
|
||||
"should use a different marker for adjacent lists"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to_md_with_opts(
|
||||
&Node::Root(Root {
|
||||
children: vec![
|
||||
Node::Code(Code {
|
||||
value: String::from("a"),
|
||||
position: None,
|
||||
lang: None,
|
||||
meta: None
|
||||
}),
|
||||
Node::List(List {
|
||||
children: vec![Node::ListItem(ListItem {
|
||||
children: vec![],
|
||||
position: None,
|
||||
spread: false,
|
||||
checked: None
|
||||
})],
|
||||
position: None,
|
||||
ordered: false,
|
||||
start: None,
|
||||
spread: false
|
||||
}),
|
||||
Node::Code(Code {
|
||||
value: String::from("b"),
|
||||
position: None,
|
||||
lang: None,
|
||||
meta: None
|
||||
}),
|
||||
],
|
||||
position: None
|
||||
}),
|
||||
&Options {
|
||||
fences: false,
|
||||
..Default::default()
|
||||
}
|
||||
)
|
||||
.unwrap(),
|
||||
" a\n\n*\n\n<!---->\n\n b\n",
|
||||
"should inject HTML comments between lists and an indented code"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to_md_with_opts(
|
||||
&Node::Root(Root {
|
||||
children: vec![
|
||||
Node::Code(Code {
|
||||
value: String::from("a"),
|
||||
position: None,
|
||||
lang: None,
|
||||
meta: None
|
||||
}),
|
||||
Node::Code(Code {
|
||||
value: String::from("b"),
|
||||
position: None,
|
||||
lang: None,
|
||||
meta: None
|
||||
}),
|
||||
],
|
||||
position: None
|
||||
}),
|
||||
&Options {
|
||||
fences: false,
|
||||
..Default::default()
|
||||
}
|
||||
)
|
||||
.unwrap(),
|
||||
" a\n\n<!---->\n\n b\n",
|
||||
"should inject HTML comments between adjacent indented code"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::ListItem(ListItem {
|
||||
children: vec![
|
||||
Node::Paragraph(Paragraph {
|
||||
children: vec![Node::Text(Text {
|
||||
value: String::from("a"),
|
||||
position: None
|
||||
})],
|
||||
position: None
|
||||
}),
|
||||
Node::Paragraph(Paragraph {
|
||||
children: vec![Node::Text(Text {
|
||||
value: String::from("b"),
|
||||
position: None
|
||||
})],
|
||||
position: None
|
||||
}),
|
||||
],
|
||||
position: None,
|
||||
spread: false,
|
||||
checked: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"* a\n\n b\n",
|
||||
"should not honour `spread: false` for two paragraphs"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::ListItem(ListItem {
|
||||
children: vec![
|
||||
Node::Paragraph(Paragraph {
|
||||
children: vec![Node::Text(Text {
|
||||
value: String::from("a"),
|
||||
position: None
|
||||
})],
|
||||
position: None
|
||||
}),
|
||||
Node::Definition(Definition {
|
||||
position: None,
|
||||
url: String::from("d"),
|
||||
title: None,
|
||||
identifier: String::from("b"),
|
||||
label: Some(String::from("c"))
|
||||
}),
|
||||
],
|
||||
position: None,
|
||||
spread: false,
|
||||
checked: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"* a\n\n [c]: d\n",
|
||||
"should not honour `spread: false` for a paragraph and a definition"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::ListItem(ListItem {
|
||||
children: vec![
|
||||
Node::Paragraph(Paragraph {
|
||||
children: vec![Node::Text(Text {
|
||||
value: String::from("a"),
|
||||
position: None
|
||||
})],
|
||||
position: None
|
||||
}),
|
||||
Node::Heading(Heading {
|
||||
children: vec![Node::Text(Text {
|
||||
value: String::from("b"),
|
||||
position: None
|
||||
})],
|
||||
position: None,
|
||||
depth: 1
|
||||
})
|
||||
],
|
||||
position: None,
|
||||
spread: false,
|
||||
checked: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"* a\n # b\n",
|
||||
"should honour `spread: false` for a paragraph and a heading"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to_md_with_opts(
|
||||
&Node::ListItem(ListItem {
|
||||
children: vec![
|
||||
Node::Paragraph(Paragraph {
|
||||
children: vec![Node::Text(Text {
|
||||
value: String::from("a"),
|
||||
position: None
|
||||
})],
|
||||
position: None
|
||||
}),
|
||||
Node::Heading(Heading {
|
||||
children: vec![Node::Text(Text {
|
||||
value: String::from("b"),
|
||||
position: None
|
||||
})],
|
||||
position: None,
|
||||
depth: 1
|
||||
})
|
||||
],
|
||||
position: None,
|
||||
spread: false,
|
||||
checked: None
|
||||
}),
|
||||
&Options {
|
||||
setext: true,
|
||||
..Default::default()
|
||||
}
|
||||
)
|
||||
.unwrap(),
|
||||
"* a\n\n b\n =\n",
|
||||
"should not honour `spread: false` for a paragraph and a setext heading"
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user