dom_renderer 0.2.2

Crate for rendering html (or other DOMs) strings
Documentation

#[cfg(test)]
mod ref_test {
    use dom_renderer::*;

    #[test]
    fn document() {
        let a = domdoc!(end_elem!("a"));
        let b = empty!("b");

        assert_eq!("<a></a>", a.as_doc().unwrap().render());
        assert!(b.as_doc().is_none());

        let mut a = a;
        a.as_doc_mut().unwrap().nodes.push(domtxt!("text"));
        assert_eq!("<a></a>text", a.as_doc().unwrap().render());
    }

    #[test]
    fn document_type() {
        let a = doctype!("html");
        let b = empty!("b");

        assert_eq!("<!DOCTYPE html>", a.as_doctype().unwrap().render());
        assert!(b.as_doctype().is_none());

        let mut a = a;
        a.as_doctype_mut().unwrap().doc_type = "root";
        assert_eq!("<!DOCTYPE root>", a.as_doctype().unwrap().render());
    }

    #[test]
    fn empty() {
        let a = empty!("a");
        let b = end_elem!("b");

        assert_eq!("<a>", a.as_empty().unwrap().render());
        assert!(b.as_empty().is_none());

        let mut a = a;
        a.as_empty_mut().unwrap().attributes.push(("id",String::from("id1")));
        assert_eq!("<a id=\"id1\">", a.as_empty().unwrap().render());
    }

    #[test]
    fn element() {
        let a = end_elem!("a");
        let b = empty!("b");

        assert_eq!("<a></a>", a.as_elem().unwrap().render());
        assert!(b.as_elem().is_none());

        let mut a = a;
        a.as_elem_mut().unwrap().child_nodes.push(domtxt!("text"));
        assert_eq!("<a>text</a>", a.as_elem().unwrap().render());
    }

    #[test]
    fn text() {
        let a = domtxt!("text");
        let b = empty!("b");

        assert_eq!("text", a.as_text().unwrap());
        assert!(b.as_text().is_none());

        let mut a = a;
        a.as_text_mut().unwrap().replace_range(..4, "TEXT");
        assert_eq!("TEXT", a.as_text().unwrap());
    }

    #[test]
    fn inner_node_update() {
        let mut n = elem!("a";
            end_elem!("b"; "BValue"),
            end_elem!("c"; "CValue"),
            end_elem!("d"; "DValue"),
        );
        let elem_n = n.as_elem_mut().unwrap();
        assert_eq!("a", elem_n.tag);

        let elem_c = elem_n.child_nodes[1].as_elem_mut().unwrap();
        assert_eq!("c", elem_c.tag);
        elem_c.child_nodes.push(empty!("child"));
        elem_c.attributes.push(("attr", String::from("ATTR")));
        elem_c.child_nodes.push(end_elem!("child2"; "Child"));
        elem_c.child_nodes[2].as_elem_mut().unwrap().child_nodes[0].as_text_mut().unwrap().push_str("Value");
        assert_eq!("<a><b>BValue</b><c attr=\"ATTR\">CValue<child><child2>ChildValue</child2></c><d>DValue</d></a>", n.render());
    }
}