Shallow clone of https://github.com/wooorm/markdown-rs
This commit is contained in:
@@ -0,0 +1,345 @@
|
||||
use markdown::mdast::{Definition, 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 defintion() {
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::new(),
|
||||
title: None,
|
||||
identifier: String::new(),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[]: <>\n",
|
||||
"should support a definition w/o label"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::new(),
|
||||
title: None,
|
||||
identifier: String::new(),
|
||||
position: None,
|
||||
label: Some(String::from("a"))
|
||||
}))
|
||||
.unwrap(),
|
||||
"[a]: <>\n",
|
||||
"should support a definition w/ label"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::new(),
|
||||
title: None,
|
||||
identifier: String::new(),
|
||||
position: None,
|
||||
label: Some(String::from("\\"))
|
||||
}))
|
||||
.unwrap(),
|
||||
"[\\\\]: <>\n",
|
||||
"should escape a backslash in `label`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::new(),
|
||||
title: None,
|
||||
identifier: String::new(),
|
||||
position: None,
|
||||
label: Some(String::from("["))
|
||||
}))
|
||||
.unwrap(),
|
||||
"[\\[]: <>\n",
|
||||
"should escape an opening bracket in `label`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::new(),
|
||||
title: None,
|
||||
identifier: String::new(),
|
||||
position: None,
|
||||
label: Some(String::from("]"))
|
||||
}))
|
||||
.unwrap(),
|
||||
"[\\]]: <>\n",
|
||||
"should escape a closing bracket in `label`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::new(),
|
||||
title: None,
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[a]: <>\n",
|
||||
"should support a definition w/ identifier"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::new(),
|
||||
title: None,
|
||||
identifier: String::from(r"\\"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[\\\\]: <>\n",
|
||||
"should escape a backslash in `identifier`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::new(),
|
||||
title: None,
|
||||
identifier: String::from("["),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[\\[]: <>\n",
|
||||
"should escape an opening bracket in `identifier`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::new(),
|
||||
title: None,
|
||||
identifier: String::from("]"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[\\]]: <>\n",
|
||||
"should escape a closing bracket in `identifier`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::from("b"),
|
||||
title: None,
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[a]: b\n",
|
||||
"should support a definition w/ url"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::from("b c"),
|
||||
title: None,
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[a]: <b c>\n",
|
||||
"should support a definition w/ enclosed url w/ whitespace in url"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::from("b <c"),
|
||||
title: None,
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[a]: <b \\<c>\n",
|
||||
"should escape an opening angle bracket in `url` in an enclosed url"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::from("b >c"),
|
||||
title: None,
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[a]: <b \\>c>\n",
|
||||
"should escape a closing angle bracket in `url` in an enclosed url"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::from("b \\.c"),
|
||||
title: None,
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[a]: <b \\\\.c>\n",
|
||||
"should escape a backslash in `url` in an enclosed url"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::from("b\nc"),
|
||||
title: None,
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[a]: <b
c>\n",
|
||||
"should encode a line ending in `url` in an enclosed url"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::from("\x0C"),
|
||||
title: None,
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[a]: <\x0C>\n",
|
||||
"should encode a line ending in `url` in an enclosed url"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::from("b(c"),
|
||||
title: None,
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[a]: b\\(c\n",
|
||||
"should escape an opening paren in `url` in a raw url"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::from("b)c"),
|
||||
title: None,
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[a]: b\\)c\n",
|
||||
"should escape a closing paren in `url` in a raw url"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::from("b\\?c"),
|
||||
title: None,
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[a]: b\\\\?c\n",
|
||||
"should escape a backslash in `url` in a raw url"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::new(),
|
||||
title: String::from("b").into(),
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[a]: <> \"b\"\n",
|
||||
"should support a definition w/ title"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::from("b"),
|
||||
title: String::from("c").into(),
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[a]: b \"c\"\n",
|
||||
"should support a definition w/ url & title"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::new(),
|
||||
title: String::from("\"").into(),
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[a]: <> \"\\\"\"\n",
|
||||
"should escape a quote in `title` in a title"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to(&Node::Definition(Definition {
|
||||
url: String::new(),
|
||||
title: String::from("\\").into(),
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}))
|
||||
.unwrap(),
|
||||
"[a]: <> \"\\\\\"\n",
|
||||
"should escape a backslash in `title` in a title"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to_md_with_opts(
|
||||
&Node::Definition(Definition {
|
||||
url: String::new(),
|
||||
title: String::from("b").into(),
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}),
|
||||
&Options {
|
||||
quote: '\'',
|
||||
..Default::default()
|
||||
}
|
||||
)
|
||||
.unwrap(),
|
||||
"[a]: <> 'b'\n",
|
||||
"should support a definition w/ title when `quote: \"\'\"`"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
to_md_with_opts(
|
||||
&Node::Definition(Definition {
|
||||
url: String::new(),
|
||||
title: String::from("'").into(),
|
||||
identifier: String::from("a"),
|
||||
position: None,
|
||||
label: None
|
||||
}),
|
||||
&Options {
|
||||
quote: '\'',
|
||||
..Default::default()
|
||||
}
|
||||
)
|
||||
.unwrap(),
|
||||
"[a]: <> '\\''\n",
|
||||
"should escape a quote in `title` in a title when `quote: \"\'\"`"
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user