mrml/mj_preview/
json.rs

1#[cfg(test)]
2mod tests {
3    use std::marker::PhantomData;
4
5    use crate::comment::Comment;
6    use crate::mj_preview::{MjPreview, MjPreviewChild};
7    use crate::prelude::OneOrMany;
8    use crate::text::Text;
9
10    #[test]
11    fn serialize() {
12        let elt = MjPreview::from("Hello World");
13        assert_eq!(
14            serde_json::to_string(&elt).unwrap(),
15            r#"{"type":"mj-preview","children":"Hello World"}"#
16        );
17
18        let elt = MjPreview {
19            tag: PhantomData,
20            attributes: (),
21            children: OneOrMany::Many(vec![
22                MjPreviewChild::Text(Text::from("Hello World")),
23                MjPreviewChild::Comment(Comment::from("this is a comment")),
24            ]),
25        };
26        assert_eq!(
27            serde_json::to_string(&elt).unwrap(),
28            r#"{"type":"mj-preview","children":["Hello World",{"type":"comment","children":"this is a comment"}]}"#
29        );
30    }
31
32    #[test]
33    fn deserialize() {
34        let elt = MjPreview::from("Hello World");
35        let json = serde_json::to_string(&elt).unwrap();
36        let res: MjPreview = serde_json::from_str(&json).unwrap();
37        assert_eq!(res.children, elt.children);
38    }
39
40    #[test]
41    fn deserialize_single_child() {
42        // for backward compatibility
43        let first: MjPreview =
44            serde_json::from_str(r#"{"type":"mj-preview","children":"Hello World"}"#).unwrap();
45        let second: MjPreview =
46            serde_json::from_str(r#"{"type":"mj-preview","children":["Hello World"]}"#).unwrap();
47        let first_children = Vec::from_iter(first.children.iter());
48        let second_children = Vec::from_iter(second.children.iter());
49        assert_eq!(first_children, second_children);
50    }
51}