aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorLibravatar Titus Wormer <tituswormer@gmail.com>2022-10-13 16:52:44 +0200
committerLibravatar Titus Wormer <tituswormer@gmail.com>2022-10-13 16:53:10 +0200
commite0ca78397ea34cde06ab8257a8481afc812d344f (patch)
tree5dc85ca4f9e18c2b93a3f86f106f2cd8535c828b /tests
parent5ad84c1670733843f677b2c5bee8c50d78b8e24a (diff)
downloadmarkdown-rs-e0ca78397ea34cde06ab8257a8481afc812d344f.tar.gz
markdown-rs-e0ca78397ea34cde06ab8257a8481afc812d344f.tar.bz2
markdown-rs-e0ca78397ea34cde06ab8257a8481afc812d344f.zip
Add a lot of tests on how mdast, unist work
Diffstat (limited to 'tests')
-rw-r--r--tests/test_utils/hast.rs238
1 files changed, 233 insertions, 5 deletions
diff --git a/tests/test_utils/hast.rs b/tests/test_utils/hast.rs
index 09a180a..2861898 100644
--- a/tests/test_utils/hast.rs
+++ b/tests/test_utils/hast.rs
@@ -230,11 +230,6 @@ pub struct Text {
/// ```
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct MdxJsxElement {
- // Parent.
- /// Content model.
- pub children: Vec<Node>,
- /// Positional info.
- pub position: Option<Position>,
// JSX element.
/// Name.
///
@@ -242,6 +237,11 @@ pub struct MdxJsxElement {
pub name: Option<String>,
/// Attributes.
pub attributes: Vec<AttributeContent>,
+ // Parent.
+ /// Content model.
+ pub children: Vec<Node>,
+ /// Positional info.
+ pub position: Option<Position>,
}
/// MDX: expression.
@@ -279,3 +279,231 @@ pub struct MdxjsEsm {
// Custom data on where each slice of `value` came from.
pub stops: Vec<Stop>,
}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use alloc::{format, string::ToString, vec};
+ use markdown::unist::Position;
+
+ // Literals.
+
+ #[test]
+ fn text() {
+ let mut node = Node::Text(Text {
+ value: "a".into(),
+ position: None,
+ });
+
+ assert_eq!(
+ format!("{:?}", node),
+ "Text { value: \"a\", position: None }",
+ "should support `Debug`"
+ );
+ assert_eq!(node.to_string(), "a", "should support `ToString`");
+ assert_eq!(node.children_mut(), None, "should support `children_mut`");
+ assert_eq!(node.children(), None, "should support `children`");
+ assert_eq!(node.position(), None, "should support `position`");
+ assert_eq!(node.position_mut(), None, "should support `position`");
+ node.position_set(Some(Position::new(1, 1, 0, 1, 2, 1)));
+ assert_eq!(
+ format!("{:?}", node),
+ "Text { value: \"a\", position: Some(1:1-1:2 (0-1)) }",
+ "should support `position_set`"
+ );
+ }
+
+ #[test]
+ fn comment() {
+ let mut node = Node::Comment(Comment {
+ value: "a".into(),
+ position: None,
+ });
+
+ assert_eq!(
+ format!("{:?}", node),
+ "Comment { value: \"a\", position: None }",
+ "should support `Debug`"
+ );
+ assert_eq!(node.to_string(), "a", "should support `ToString`");
+ assert_eq!(node.children_mut(), None, "should support `children_mut`");
+ assert_eq!(node.children(), None, "should support `children`");
+ assert_eq!(node.position(), None, "should support `position`");
+ assert_eq!(node.position_mut(), None, "should support `position`");
+ node.position_set(Some(Position::new(1, 1, 0, 1, 2, 1)));
+ assert_eq!(
+ format!("{:?}", node),
+ "Comment { value: \"a\", position: Some(1:1-1:2 (0-1)) }",
+ "should support `position_set`"
+ );
+ }
+
+ #[test]
+ fn mdx_expression() {
+ let mut node = Node::MdxExpression(MdxExpression {
+ value: "a".into(),
+ stops: vec![],
+ position: None,
+ });
+
+ assert_eq!(
+ format!("{:?}", node),
+ "MdxExpression { value: \"a\", position: None, stops: [] }",
+ "should support `Debug`"
+ );
+ assert_eq!(node.to_string(), "a", "should support `ToString`");
+ assert_eq!(node.children_mut(), None, "should support `children_mut`");
+ assert_eq!(node.children(), None, "should support `children`");
+ assert_eq!(node.position(), None, "should support `position`");
+ assert_eq!(node.position_mut(), None, "should support `position`");
+ node.position_set(Some(Position::new(1, 1, 0, 1, 2, 1)));
+ assert_eq!(
+ format!("{:?}", node),
+ "MdxExpression { value: \"a\", position: Some(1:1-1:2 (0-1)), stops: [] }",
+ "should support `position_set`"
+ );
+ }
+
+ #[test]
+ fn mdxjs_esm() {
+ let mut node = Node::MdxjsEsm(MdxjsEsm {
+ value: "a".into(),
+ stops: vec![],
+ position: None,
+ });
+
+ assert_eq!(
+ format!("{:?}", node),
+ "MdxjsEsm { value: \"a\", position: None, stops: [] }",
+ "should support `Debug`"
+ );
+ assert_eq!(node.to_string(), "a", "should support `ToString`");
+ assert_eq!(node.children_mut(), None, "should support `children_mut`");
+ assert_eq!(node.children(), None, "should support `children`");
+ assert_eq!(node.position(), None, "should support `position`");
+ assert_eq!(node.position_mut(), None, "should support `position`");
+ node.position_set(Some(Position::new(1, 1, 0, 1, 2, 1)));
+ assert_eq!(
+ format!("{:?}", node),
+ "MdxjsEsm { value: \"a\", position: Some(1:1-1:2 (0-1)), stops: [] }",
+ "should support `position_set`"
+ );
+ }
+
+ // Voids.
+
+ #[test]
+ fn doctype() {
+ let mut node = Node::Doctype(Doctype { position: None });
+
+ assert_eq!(
+ format!("{:?}", node),
+ "Doctype { position: None }",
+ "should support `Debug`"
+ );
+ assert_eq!(node.to_string(), "", "should support `ToString`");
+ assert_eq!(node.children_mut(), None, "should support `children_mut`");
+ assert_eq!(node.children(), None, "should support `children`");
+ assert_eq!(node.position(), None, "should support `position`");
+ assert_eq!(node.position_mut(), None, "should support `position`");
+ node.position_set(Some(Position::new(1, 1, 0, 1, 2, 1)));
+ assert_eq!(
+ format!("{:?}", node),
+ "Doctype { position: Some(1:1-1:2 (0-1)) }",
+ "should support `position_set`"
+ );
+ }
+
+ // Parents.
+
+ #[test]
+ fn root() {
+ let mut node = Node::Root(Root {
+ position: None,
+ children: vec![],
+ });
+
+ assert_eq!(
+ format!("{:?}", node),
+ "Root { children: [], position: None }",
+ "should support `Debug`"
+ );
+ assert_eq!(node.to_string(), "", "should support `ToString`");
+ assert_eq!(
+ node.children_mut(),
+ Some(&mut vec![]),
+ "should support `children_mut`"
+ );
+ assert_eq!(node.children(), Some(&vec![]), "should support `children`");
+ assert_eq!(node.position(), None, "should support `position`");
+ assert_eq!(node.position_mut(), None, "should support `position`");
+ node.position_set(Some(Position::new(1, 1, 0, 1, 2, 1)));
+ assert_eq!(
+ format!("{:?}", node),
+ "Root { children: [], position: Some(1:1-1:2 (0-1)) }",
+ "should support `position_set`"
+ );
+ }
+
+ #[test]
+ fn element() {
+ let mut node = Node::Element(Element {
+ tag_name: "a".into(),
+ properties: vec![],
+ position: None,
+ children: vec![],
+ });
+
+ assert_eq!(
+ format!("{:?}", node),
+ "Element { tag_name: \"a\", properties: [], children: [], position: None }",
+ "should support `Debug`"
+ );
+ assert_eq!(node.to_string(), "", "should support `ToString`");
+ assert_eq!(
+ node.children_mut(),
+ Some(&mut vec![]),
+ "should support `children_mut`"
+ );
+ assert_eq!(node.children(), Some(&vec![]), "should support `children`");
+ assert_eq!(node.position(), None, "should support `position`");
+ assert_eq!(node.position_mut(), None, "should support `position`");
+ node.position_set(Some(Position::new(1, 1, 0, 1, 2, 1)));
+ assert_eq!(
+ format!("{:?}", node),
+ "Element { tag_name: \"a\", properties: [], children: [], position: Some(1:1-1:2 (0-1)) }",
+ "should support `position_set`"
+ );
+ }
+
+ #[test]
+ fn mdx_jsx_element() {
+ let mut node = Node::MdxJsxElement(MdxJsxElement {
+ name: None,
+ attributes: vec![],
+ position: None,
+ children: vec![],
+ });
+
+ assert_eq!(
+ format!("{:?}", node),
+ "MdxJsxElement { name: None, attributes: [], children: [], position: None }",
+ "should support `Debug`"
+ );
+ assert_eq!(node.to_string(), "", "should support `ToString`");
+ assert_eq!(
+ node.children_mut(),
+ Some(&mut vec![]),
+ "should support `children_mut`"
+ );
+ assert_eq!(node.children(), Some(&vec![]), "should support `children`");
+ assert_eq!(node.position(), None, "should support `position`");
+ assert_eq!(node.position_mut(), None, "should support `position`");
+ node.position_set(Some(Position::new(1, 1, 0, 1, 2, 1)));
+ assert_eq!(
+ format!("{:?}", node),
+ "MdxJsxElement { name: None, attributes: [], children: [], position: Some(1:1-1:2 (0-1)) }",
+ "should support `position_set`"
+ );
+ }
+}