166 lines
4.6 KiB
Rust
166 lines
4.6 KiB
Rust
use markdown::mdast::{ImageReference, Node, Paragraph, ReferenceKind};
|
|
use mdast_util_to_markdown::to_markdown as to;
|
|
use pretty_assertions::assert_eq;
|
|
|
|
#[test]
|
|
fn image_reference() {
|
|
assert_eq!(
|
|
to(&Node::ImageReference(ImageReference {
|
|
position: None,
|
|
alt: String::new(),
|
|
reference_kind: ReferenceKind::Full,
|
|
identifier: String::new(),
|
|
label: None
|
|
}))
|
|
.unwrap(),
|
|
"![][]\n",
|
|
"should support a link reference (nonsensical)"
|
|
);
|
|
|
|
assert_eq!(
|
|
to(&Node::ImageReference(ImageReference {
|
|
position: None,
|
|
alt: String::from("a"),
|
|
reference_kind: ReferenceKind::Full,
|
|
identifier: String::new(),
|
|
label: None
|
|
}))
|
|
.unwrap(),
|
|
"![a][]\n",
|
|
"should support `alt`"
|
|
);
|
|
|
|
assert_eq!(
|
|
to(&Node::ImageReference(ImageReference {
|
|
position: None,
|
|
alt: String::new(),
|
|
reference_kind: ReferenceKind::Full,
|
|
identifier: String::from("a"),
|
|
label: None
|
|
}))
|
|
.unwrap(),
|
|
"![][a]\n",
|
|
"should support an `identifier` (nonsensical)"
|
|
);
|
|
|
|
assert_eq!(
|
|
to(&Node::ImageReference(ImageReference {
|
|
position: None,
|
|
alt: String::new(),
|
|
reference_kind: ReferenceKind::Full,
|
|
identifier: String::new(),
|
|
label: String::from("a").into()
|
|
}))
|
|
.unwrap(),
|
|
"![][a]\n",
|
|
"should support a `label` (nonsensical)"
|
|
);
|
|
|
|
assert_eq!(
|
|
to(&Node::ImageReference(ImageReference {
|
|
position: None,
|
|
alt: String::from("A"),
|
|
reference_kind: ReferenceKind::Shortcut,
|
|
identifier: String::from("A"),
|
|
label: None
|
|
}))
|
|
.unwrap(),
|
|
"![A]\n",
|
|
"should support `reference_kind: \"ReferenceKind::Shortcut\"`"
|
|
);
|
|
|
|
assert_eq!(
|
|
to(&Node::ImageReference(ImageReference {
|
|
position: None,
|
|
alt: String::from("A"),
|
|
reference_kind: ReferenceKind::Collapsed,
|
|
identifier: String::from("A"),
|
|
label: None
|
|
}))
|
|
.unwrap(),
|
|
"![A][]\n",
|
|
"should support `reference_kind: \"ReferenceKind::Collapsed\"`"
|
|
);
|
|
|
|
assert_eq!(
|
|
to(&Node::ImageReference(ImageReference {
|
|
position: None,
|
|
alt: String::from("A"),
|
|
reference_kind: ReferenceKind::Full,
|
|
identifier: String::from("A"),
|
|
label: None
|
|
}))
|
|
.unwrap(),
|
|
"![A][A]\n",
|
|
"should support `reference_kind: \"ReferenceKind::Full\"`"
|
|
);
|
|
|
|
assert_eq!(
|
|
to(&Node::ImageReference(ImageReference {
|
|
position: None,
|
|
alt: String::from("&"),
|
|
label: String::from("&").into(),
|
|
reference_kind: ReferenceKind::Full,
|
|
identifier: String::from("&"),
|
|
}))
|
|
.unwrap(),
|
|
"![&][&]\n",
|
|
"should prefer label over identifier"
|
|
);
|
|
|
|
assert_eq!(
|
|
to(&Node::ImageReference(ImageReference {
|
|
position: None,
|
|
label: None,
|
|
alt: String::from("&"),
|
|
reference_kind: ReferenceKind::Full,
|
|
identifier: String::from("&"),
|
|
}))
|
|
.unwrap(),
|
|
"![&][&]\n",
|
|
"should decode `identifier` if w/o `label`"
|
|
);
|
|
|
|
assert_eq!(
|
|
to(&Node::Paragraph(Paragraph {
|
|
children: vec![Node::ImageReference(ImageReference {
|
|
position: None,
|
|
label: None,
|
|
alt: String::from("&a;"),
|
|
reference_kind: ReferenceKind::Full,
|
|
identifier: String::from("&b;"),
|
|
})],
|
|
position: None
|
|
}))
|
|
.unwrap(),
|
|
"![\\&a;][&b;]\n",
|
|
"should support incorrect character references"
|
|
);
|
|
|
|
assert_eq!(
|
|
to(&Node::ImageReference(ImageReference {
|
|
position: None,
|
|
label: None,
|
|
alt: String::from("+"),
|
|
reference_kind: ReferenceKind::Full,
|
|
identifier: String::from("\\+"),
|
|
}))
|
|
.unwrap(),
|
|
"![+][+]\n",
|
|
"should unescape `identifier` if w/o `label`"
|
|
);
|
|
|
|
assert_eq!(
|
|
to(&Node::ImageReference(ImageReference {
|
|
position: None,
|
|
label: None,
|
|
alt: String::from("a"),
|
|
reference_kind: ReferenceKind::Collapsed,
|
|
identifier: String::from("b"),
|
|
}))
|
|
.unwrap(),
|
|
"![a][b]\n",
|
|
"should use a full reference if w/o `ReferenceKind` and the label does not match the reference"
|
|
);
|
|
}
|