use edit_xml::{Document, Element, Node};
mod test_utils;
#[test]
fn test_escape() -> anyhow::Result<()> {
test_utils::setup_logger();
let expected = r#"<?xml version="1.0" encoding="UTF-8"?>
<root attr="&gt;&lt;&amp;&quot;&apos;attrval">
<inner xmlns:ns="&gt;&lt;&amp;&quot;&apos;nsval">><&"'text</inner>
</root>
<!--<&amp;--><![CDATA[<&]]><!DOCTYPE <&amp;>
<?<&?>"#;
let mut doc = Document::new();
let container = doc.container();
let root = Element::build("root")
.attribute("attr", "><&\"'attrval")
.push_to(&mut doc, container);
Element::build("inner")
.namespace_decl("ns", "><&\"'nsval")
.add_text("><&\"'text")
.push_to(&mut doc, root);
doc.push_root_node(Node::Comment("<&".to_string()))
.unwrap();
doc.push_root_node(Node::CData("<&".to_string()))
.unwrap();
doc.push_root_node(Node::DocType("<&".to_string()))
.unwrap();
doc.push_root_node(Node::PI("<&".to_string())).unwrap();
let xml = doc.write_str().unwrap();
println!("{}", xml);
assert_eq!(xml, expected);
Ok(())
}