1mod children;
14#[cfg(feature = "json")]
15mod json;
16#[cfg(feature = "parse")]
17mod parse;
18#[cfg(feature = "print")]
19mod print;
20#[cfg(feature = "render")]
21mod render;
22
23use std::marker::PhantomData;
24
25pub use children::MjAccordionChild;
26
27use crate::prelude::{Component, StaticTag};
28
29pub const NAME: &str = "mj-accordion";
30
31pub struct MjAccordionTag;
32
33impl StaticTag for MjAccordionTag {
34 fn static_tag() -> &'static str {
35 NAME
36 }
37}
38
39pub type MjAccordion =
40 Component<PhantomData<MjAccordionTag>, crate::prelude::AttributeMap, Vec<MjAccordionChild>>;
41
42#[cfg(all(test, feature = "parse", feature = "render"))]
43mod tests {
44 #[cfg(feature = "print")]
45 #[test]
46 fn chaining_print_parse() {
47 use crate::mj_accordion::MjAccordion;
48 use crate::mj_accordion_element::{MjAccordionElement, MjAccordionElementChildren};
49 use crate::mj_accordion_title::MjAccordionTitle;
50 use crate::prelude::parser::{MrmlCursor, MrmlParser, ParserOptions};
51 use crate::prelude::print::Printable;
52 use crate::text::Text;
53
54 let element = MjAccordion::new(
55 Default::default(),
56 vec![MjAccordionElement::new(
57 Default::default(),
58 MjAccordionElementChildren {
59 title: Some(MjAccordionTitle::new(
60 Default::default(),
61 vec![Text::from("Hello World!".to_string())],
62 )),
63 text: None,
64 },
65 )
66 .into()],
67 );
68 let initial = element.print_dense().unwrap();
69 let raw ="<mj-accordion><mj-accordion-element><mj-accordion-title>Hello World!</mj-accordion-title></mj-accordion-element></mj-accordion>";
70 let opts = ParserOptions::default();
71 let parser = MrmlParser::new(&opts);
72 let mut cursor = MrmlCursor::new(raw);
73 let elt: MjAccordion = parser.parse_root(&mut cursor).unwrap();
74 let result = elt.print_dense().unwrap();
75 assert_eq!(initial, result);
76 }
77
78 #[cfg(feature = "json")]
79 #[test]
80 fn chaining_json_parse() {
81 use crate::mj_accordion::{MjAccordion, MjAccordionChild};
82 use crate::mj_accordion_element::{MjAccordionElement, MjAccordionElementChildren};
83 use crate::mj_accordion_title::MjAccordionTitle;
84 use crate::text::Text;
85
86 let element = MjAccordion::new(
87 Default::default(),
88 vec![MjAccordionChild::MjAccordionElement(
89 MjAccordionElement::new(
90 Default::default(),
91 MjAccordionElementChildren {
92 title: Some(MjAccordionTitle::new(
93 Default::default(),
94 vec![Text::from("Hello World!".to_string())],
95 )),
96 text: None,
97 },
98 ),
99 )],
100 );
101 let initial_json = serde_json::to_string(&element).unwrap();
102 let result: MjAccordion = serde_json::from_str(initial_json.as_str()).unwrap();
103
104 let result_json = serde_json::to_string(&result).unwrap();
105 assert_eq!(initial_json, result_json);
106 }
107}