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