1 use markup5ever_rcdom::{RcDom, SerializableHandle};
2 use xml5ever::driver;
3 use xml5ever::serialize;
4 use xml5ever::tendril::TendrilSink;
5 
6 #[test]
el_ns_serialize()7 fn el_ns_serialize() {
8     assert_eq_serialization(
9         "<a:title xmlns:a=\"http://www.foo.org/\" value=\"test\">Test</a:title>",
10         driver::parse_document(RcDom::default(), Default::default())
11             .from_utf8()
12             .one("<a:title xmlns:a=\"http://www.foo.org/\" value=\"test\">Test</title>".as_bytes()),
13     );
14 }
15 
16 #[test]
nested_ns_serialize()17 fn nested_ns_serialize() {
18     assert_eq_serialization("<a:x xmlns:a=\"http://www.foo.org/\" xmlns:b=\"http://www.bar.org/\" value=\"test\"><b:y/></a:x>",
19         driver::parse_document(RcDom::default(), Default::default())
20             .from_utf8()
21             .one("<a:x xmlns:a=\"http://www.foo.org/\" xmlns:b=\"http://www.bar.org/\" value=\"test\"><b:y/></a:x>".as_bytes()));
22 }
23 
24 #[test]
def_ns_serialize()25 fn def_ns_serialize() {
26     assert_eq_serialization(
27         "<table xmlns=\"html4\"><td></td></table>",
28         driver::parse_document(RcDom::default(), Default::default())
29             .from_utf8()
30             .one("<table xmlns=\"html4\"><td></td></table>".as_bytes()),
31     );
32 }
33 
34 #[test]
undefine_ns_serialize()35 fn undefine_ns_serialize() {
36     assert_eq_serialization(
37         "<a:x xmlns:a=\"http://www.foo.org\"><a:y xmlns:a=\"\"><a:z/></a:y</a:x>",
38         driver::parse_document(RcDom::default(), Default::default())
39             .from_utf8()
40             .one(
41                 "<a:x xmlns:a=\"http://www.foo.org\"><a:y xmlns:a=\"\"><a:z/></a:y</a:x>"
42                     .as_bytes(),
43             ),
44     );
45 }
46 
47 #[test]
redefine_default_ns_serialize()48 fn redefine_default_ns_serialize() {
49     assert_eq_serialization(
50         "<x xmlns=\"http://www.foo.org\"><y xmlns=\"\"><z/></y</x>",
51         driver::parse_document(RcDom::default(), Default::default())
52             .from_utf8()
53             .one("<x xmlns=\"http://www.foo.org\"><y xmlns=\"\"><z/></y</x>".as_bytes()),
54     );
55 }
56 
57 #[test]
attr_serialize()58 fn attr_serialize() {
59     assert_serialization(
60         "<title value=\"test\">Test</title>",
61         driver::parse_document(RcDom::default(), Default::default())
62             .from_utf8()
63             .one("<title value='test'>Test".as_bytes()),
64     );
65 }
66 
67 #[test]
from_utf8()68 fn from_utf8() {
69     assert_serialization(
70         "<title>Test</title>",
71         driver::parse_document(RcDom::default(), Default::default())
72             .from_utf8()
73             .one("<title>Test".as_bytes()),
74     );
75 }
76 
assert_eq_serialization(text: &'static str, dom: RcDom)77 fn assert_eq_serialization(text: &'static str, dom: RcDom) {
78     let mut serialized = Vec::new();
79     let document: SerializableHandle = dom.document.clone().into();
80     serialize::serialize(&mut serialized, &document, Default::default()).unwrap();
81 
82     let dom_from_text = driver::parse_document(RcDom::default(), Default::default())
83         .from_utf8()
84         .one(text.as_bytes());
85 
86     let mut reserialized = Vec::new();
87     let document: SerializableHandle = dom_from_text.document.clone().into();
88     serialize::serialize(&mut reserialized, &document, Default::default()).unwrap();
89 
90     assert_eq!(
91         String::from_utf8(serialized).unwrap(),
92         String::from_utf8(reserialized).unwrap()
93     );
94 }
95 
assert_serialization(text: &'static str, dom: RcDom)96 fn assert_serialization(text: &'static str, dom: RcDom) {
97     let mut serialized = Vec::new();
98     let document: SerializableHandle = dom.document.clone().into();
99     serialize::serialize(&mut serialized, &document, Default::default()).unwrap();
100     assert_eq!(String::from_utf8(serialized).unwrap(), text);
101 }
102