xml_dom 0.2.8

A Rust crate providing a reasonably faithful implementation of the W3C DOM Core
Documentation
use std::str::FromStr;
use xml_dom::level2::convert::{as_document, as_document_type, as_element};
use xml_dom::level2::{get_implementation, Name};

pub mod common;

#[test]
fn test_create_document_no_element() {
    let implementation = get_implementation();
    let document_node = implementation.create_document(None, None, None).unwrap();
    let document = as_document(&document_node).unwrap();
    assert!(document.document_element().is_none());
}

#[test]
fn test_create_document_namespaced_name() {
    let implementation = get_implementation();
    let document_node = implementation
        .create_document(Some(common::RDF_NS), Some("rdf:RDF"), None)
        .unwrap();
    let document = as_document(&document_node).unwrap();
    assert!(document.document_element().is_some());
}

#[test]
fn test_create_document_local_name() {
    let implementation = get_implementation();
    let document_node = implementation
        .create_document(None, Some("rdf:RDF"), None)
        .unwrap();
    let document = as_document(&document_node).unwrap();
    assert!(document.document_element().is_some());
}

#[test]
fn test_create_document_invalid_name() {
    let implementation = get_implementation();
    let document_node = implementation.create_document(Some(common::RDF_NS), None, None);
    assert!(document_node.is_err());
}

#[test]
fn test_create_document() {
    let implementation = get_implementation();
    let document_node = implementation
        .create_document(Some(common::RDF_NS), Some("rdf:RDF"), None)
        .unwrap();
    let document = as_document(&document_node).unwrap();
    assert!(document.document_element().is_some());
    let root_node = document.document_element().unwrap();
    let root_element = as_element(&root_node).unwrap();
    let expected_name = Name::new_ns(common::RDF_NS, "rdf:RDF").unwrap();
    assert_eq!(root_element.tag_name(), expected_name.to_string());
}

#[test]
fn test_create_document_type() {
    let implementation = get_implementation();
    let document_type_node = implementation
        .create_document_type(
            "html",
            Some("-//W3C//DTD XHTML 1.0 Transitional//EN"),
            Some("http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"),
        )
        .unwrap();
    let document_type = as_document_type(&document_type_node).unwrap();
    assert_eq!(document_type.node_name(), Name::from_str("html").unwrap());
    let public_id = document_type.public_id().unwrap();
    assert_eq!(
        public_id,
        "-//W3C//DTD XHTML 1.0 Transitional//EN".to_string()
    );
    let system_id = document_type.system_id().unwrap();
    assert_eq!(
        system_id,
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd".to_string()
    );

    let document_node = implementation
        .create_document(
            Some(common::RDF_NS),
            Some("rdf:RDF"),
            Some(document_type_node.clone()),
        )
        .unwrap();
    let document = as_document(&document_node).unwrap();
    assert!(document.doc_type().is_some());
    let stored_doc_type = document.doc_type().unwrap();
    assert_eq!(&document_type_node, &stored_doc_type);
}