Shallow clone of https://github.com/wooorm/markdown-rs
This commit is contained in:
@@ -0,0 +1,326 @@
|
||||
use markdown::mdast::{Code, Node};
|
||||
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 text() {
|
||||
assert_eq!(
|
||||
to_md_with_opts(
|
||||
&Node::Code(Code {
|
||||
value: String::from("a"),
|
||||
position: None,
|
||||
lang: None,
|
||||
meta: None
|
||||
}),
|
||||
&Options {
|
||||
fences: false,
|
||||
..Default::default()
|
||||
}
|
||||
)
|
||||
.unwrap(),
|
||||
" a\n",
|
||||
"should support code w/ a value (indent)"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::from("a"),
|
||||
position: None,
|
||||
lang: None,
|
||||
meta: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"```\na\n```\n",
|
||||
"should support code w/ a value (fences)"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::new(),
|
||||
position: None,
|
||||
lang: Some("a".to_string()),
|
||||
meta: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"```a\n```\n",
|
||||
"should support code w/ a lang"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::new(),
|
||||
position: None,
|
||||
lang: None,
|
||||
meta: Some("a".to_string())
|
||||
}))
|
||||
.unwrap(),
|
||||
"```\n```\n",
|
||||
"should support (ignore) code w/ only a meta"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::new(),
|
||||
position: None,
|
||||
lang: Some("a".to_string()),
|
||||
meta: Some("b".to_string())
|
||||
}))
|
||||
.unwrap(),
|
||||
"```a b\n```\n",
|
||||
"should support code w/ lang and meta"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::new(),
|
||||
position: None,
|
||||
lang: Some("a b".to_string()),
|
||||
meta: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"```a b\n```\n",
|
||||
"should encode a space in `lang`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::new(),
|
||||
position: None,
|
||||
lang: Some("a\nb".to_string()),
|
||||
meta: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"```a
b\n```\n",
|
||||
"should encode a line ending in `lang`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::new(),
|
||||
position: None,
|
||||
lang: Some("a`b".to_string()),
|
||||
meta: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"```a`b\n```\n",
|
||||
"should encode a grave accent in `lang`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::new(),
|
||||
position: None,
|
||||
lang: Some("a\\-b".to_string()),
|
||||
meta: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"```a\\\\-b\n```\n",
|
||||
"should escape a backslash in `lang`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::new(),
|
||||
position: None,
|
||||
lang: Some("x".to_string()),
|
||||
meta: Some("a b".to_string())
|
||||
}))
|
||||
.unwrap(),
|
||||
"```x a b\n```\n",
|
||||
"should not encode a space in `meta`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::new(),
|
||||
position: None,
|
||||
lang: Some("x".to_string()),
|
||||
meta: Some("a\nb".to_string())
|
||||
}))
|
||||
.unwrap(),
|
||||
"```x a
b\n```\n",
|
||||
"should encode a line ending in `meta`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::new(),
|
||||
position: None,
|
||||
lang: Some("x".to_string()),
|
||||
meta: Some("a`b".to_string())
|
||||
}))
|
||||
.unwrap(),
|
||||
"```x a`b\n```\n",
|
||||
"should encode a grave accent in `meta`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::new(),
|
||||
position: None,
|
||||
lang: Some("x".to_string()),
|
||||
meta: Some("a\\-b".to_string())
|
||||
}))
|
||||
.unwrap(),
|
||||
"```x a\\\\-b\n```\n",
|
||||
"should escape a backslash in `meta`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to_md_with_opts(
|
||||
&Node::Code(Code {
|
||||
value: String::new(),
|
||||
position: None,
|
||||
lang: None,
|
||||
meta: None
|
||||
}),
|
||||
&Options {
|
||||
fence: '~',
|
||||
..Default::default()
|
||||
}
|
||||
)
|
||||
.unwrap(),
|
||||
"~~~\n~~~\n",
|
||||
"should support fenced code w/ tildes when `fence: \"~\"`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to_md_with_opts(
|
||||
&Node::Code(Code {
|
||||
value: String::new(),
|
||||
position: None,
|
||||
lang: Some("a`b".to_string()),
|
||||
meta: None
|
||||
}),
|
||||
&Options {
|
||||
fence: '~',
|
||||
..Default::default()
|
||||
}
|
||||
)
|
||||
.unwrap(),
|
||||
"~~~a`b\n~~~\n",
|
||||
"should not encode a grave accent when using tildes for fences"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::from("```\nasd\n```"),
|
||||
position: None,
|
||||
lang: None,
|
||||
meta: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"````\n```\nasd\n```\n````\n",
|
||||
"should use more grave accents for fences if there are streaks of grave accents in the value (fences)"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to_md_with_opts(
|
||||
&Node::Code(Code {
|
||||
value: String::from("~~~\nasd\n~~~"),
|
||||
position: None,
|
||||
lang: None,
|
||||
meta: None
|
||||
}),
|
||||
&Options {
|
||||
fence: '~',
|
||||
..Default::default()
|
||||
}
|
||||
)
|
||||
.unwrap(),
|
||||
"~~~~\n~~~\nasd\n~~~\n~~~~\n",
|
||||
"should use more tildes for fences if there are streaks of tildes in the value (fences)"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::from("b"),
|
||||
position: None,
|
||||
lang: Some("a".to_string()),
|
||||
meta: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"```a\nb\n```\n",
|
||||
"should use a fence if there is an info"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::from(" "),
|
||||
position: None,
|
||||
lang: None,
|
||||
meta: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"```\n \n```\n",
|
||||
"should use a fence if there is only whitespace"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::from("\na"),
|
||||
position: None,
|
||||
lang: None,
|
||||
meta: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"```\n\na\n```\n",
|
||||
"should use a fence if there first line is blank (void)"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::from(" \na"),
|
||||
position: None,
|
||||
lang: None,
|
||||
meta: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"```\n \na\n```\n",
|
||||
"should use a fence if there first line is blank (filled)"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::from("a\n"),
|
||||
position: None,
|
||||
lang: None,
|
||||
meta: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"```\na\n\n```\n",
|
||||
"should use a fence if there last line is blank (void)"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Code(Code {
|
||||
value: String::from("a\n "),
|
||||
position: None,
|
||||
lang: None,
|
||||
meta: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"```\na\n \n```\n",
|
||||
"should use a fence if there last line is blank (filled)"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to_md_with_opts(
|
||||
&Node::Code(Code {
|
||||
value: String::from(" a\n\n b"),
|
||||
position: None,
|
||||
lang: None,
|
||||
meta: None
|
||||
}),
|
||||
&Options {
|
||||
fences: false,
|
||||
..Default::default()
|
||||
}
|
||||
)
|
||||
.unwrap(),
|
||||
" a\n\n b\n",
|
||||
"should use an indent if the value is indented"
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user