/*

Richard Tobin's XML 1.1 test suite 13 Feb 2003

*/
#[cfg(all(test, feature = "test-conformance-xml"))]
use std::fs;
#[cfg(all(test, feature = "test-conformance-xml"))]
use chadpath::item::Node;
#[cfg(all(test, feature = "test-conformance-xml"))]
use chadpath::parser::{ParseError, xml};
#[cfg(all(test, feature = "test-conformance-xml"))]
use chadpath::trees::smite::RNode;
#[cfg(all(test, feature = "test-conformance-xml"))]
use chadpath::validators::Schema;

#[cfg(all(test, feature = "test-conformance-xml"))]
fn test_eduni_xml11_invalid(xmldoc: &str) {
    let testxml = RNode::new_document();
    let parseresult = xml::parse(
        testxml,
        xmldoc,
        Some(|_: &_| Err(ParseError::MissingNameSpace)),
    );

    assert!(parseresult.is_err());
}

#[cfg(all(test, feature = "test-conformance-xml"))]
fn test_eduni_xml11_invalid_dtd(xmldoc: &str) {
    let testxml = RNode::new_document();
    let parseresult = xml::parse(
        testxml,
        xmldoc,
        Some(|_: &_| Err(ParseError::MissingNameSpace)),
    );

    assert!(parseresult.is_ok());

    let doc = parseresult.unwrap();

    let validation = doc.validate(Schema::DTD);
    assert!(validation.is_err());
}

/*
#[test]
#[cfg(all(test, feature = "test-conformance-xml"))]
fn rmt015() {
    /*
        This test is deliberately ignored.
        This document is now well formed, as per the 5th edition.
    */
    /*
        Test ID:rmt-015
        Test URI:015.xml
        Spec Sections:2.3
        Description:Has a "long s" in a name, legal in XML 1.1, illegal in XML 1.0 thru 4th edition
    */

    test_eduni_xml11_invalid(fs::read_to_string("tests/conformance/xml/xmlconf/eduni/xml-1.1/015.xml")
            .unwrap()
            .as_str());
}
 */

/*
#[test]
#[ignore]
#[cfg(all(test, feature = "test-conformance-xml"))]
fn rmt017() {
    /*
        This test is deliberately ignored.
        This document is now well formed, as per the 5th edition.
    */
    /*
        Test ID:rmt-017
        Test URI:017.xml
        Spec Sections:2.3
        Description:Has a Byzantine Musical Symbol Kratimata in a name, legal in XML 1.1, illegal in XML 1.0 thru 4th edition
    */

    test_eduni_xml11_invalid(fs::read_to_string("tests/conformance/xml/xmlconf/eduni/xml-1.1/017.xml")
            .unwrap()
            .as_str());
}
 */

/*
#[test]
#[ignore]
#[cfg(all(test, feature = "test-conformance-xml"))]
fn rmt018() {
    /*
        This test is deliberately ignored.
        This document is now well formed, as per the 5th edition.
    */
    /*
        Test ID:rmt-018
        Test URI:018.xml
        Spec Sections:2.3
        Description:Has the last legal namechar in XML 1.1, illegal in XML 1.0 thru 4th edition
    */

    test_eduni_xml11_invalid(fs::read_to_string("tests/conformance/xml/xmlconf/eduni/xml-1.1/018.xml")
            .unwrap()
            .as_str());
}
 */

#[test]
#[ignore]
#[cfg(all(test, feature = "test-conformance-xml"))]
fn rmt030() {
    /*
        Test ID:rmt-030
        Test URI:030.xml
        Spec Sections:2.11
        Description:Has a NEL character in an NMTOKENS attribute; well-formed in both XML 1.0 and 1.1, but valid only in 1.1
    */

    test_eduni_xml11_invalid_dtd(
        fs::read_to_string("tests/conformance/xml/xmlconf/eduni/xml-1.1/030.xml")
            .unwrap()
            .as_str(),
    );
}

#[test]
#[ignore]
#[cfg(all(test, feature = "test-conformance-xml"))]
fn rmt032() {
    /*
        Test ID:rmt-032
        Test URI:032.xml
        Spec Sections:2.11
        Description:Has an LSEP character in an NMTOKENS attribute; well-formed in both XML 1.0 and 1.1, but valid only in 1.1
    */

    test_eduni_xml11_invalid_dtd(
        fs::read_to_string("tests/conformance/xml/xmlconf/eduni/xml-1.1/032.xml")
            .unwrap()
            .as_str(),
    );
}

// This seems like an edge case. Saxon accepts the document
#[test]
#[ignore]
#[cfg(all(test, feature = "test-conformance-xml"))]
fn rmt036() {
    /*
        Test ID:rmt-036
        Test URI:036.xml
        Spec Sections:2.3
        Description:Has an NMTOKENS attribute containing a NEL character that comes from a character reference in an internal entity. Because NEL is not in the S production (even though real NELs are converted to LF on input), this is invalid in both XML 1.0 and 1.1.
    */

    test_eduni_xml11_invalid(
        fs::read_to_string("tests/conformance/xml/xmlconf/eduni/xml-1.1/036.xml")
            .unwrap()
            .as_str(),
    );
}

#[test]
#[ignore]
#[cfg(all(test, feature = "test-conformance-xml"))]
fn rmt037() {
    /*
        Test ID:rmt-037
        Test URI:037.xml
        Spec Sections:2.3
        Description:Has an NMTOKENS attribute containing a NEL character that comes from a character reference in an internal entity. Because NEL is not in the S production (even though real NELs are converted to LF on input), this is invalid in both XML 1.0 and 1.1.
    */

    test_eduni_xml11_invalid(
        fs::read_to_string("tests/conformance/xml/xmlconf/eduni/xml-1.1/037.xml")
            .unwrap()
            .as_str(),
    );
}

#[test]
#[ignore]
#[cfg(all(test, feature = "test-conformance-xml"))]
fn rmt046() {
    /*
        Test ID:rmt-046
        Test URI:046.xml
        Spec Sections:2.11
        Description:Has a NEL character in element content whitespace; well-formed in both XML 1.0 and 1.1, but valid only in 1.1
    */

    test_eduni_xml11_invalid_dtd(
        fs::read_to_string("tests/conformance/xml/xmlconf/eduni/xml-1.1/046.xml")
            .unwrap()
            .as_str(),
    );
}

#[test]
#[ignore]
#[cfg(all(test, feature = "test-conformance-xml"))]
fn rmt048() {
    /*
        Test ID:rmt-048
        Test URI:048.xml
        Spec Sections:2.11
        Description:Has an LSEP character in element content whitespace; well-formed in both XML 1.0 and 1.1, but valid only in 1.1
    */

    test_eduni_xml11_invalid(
        fs::read_to_string("tests/conformance/xml/xmlconf/eduni/xml-1.1/048.xml")
            .unwrap()
            .as_str(),
    );
}

#[test]
#[ignore]
#[cfg(all(test, feature = "test-conformance-xml"))]
fn rmt052() {
    /*
        Test ID:rmt-052
        Test URI:052.xml
        Spec Sections:2.3
        Description:Has element content whitespace containing a NEL character that comes from a character reference in an internal entity. Because NEL is not in the S production (even though real NELs are converted to LF on input), this is invalid in both XML 1.0 and 1.1.
    */

    test_eduni_xml11_invalid(
        fs::read_to_string("tests/conformance/xml/xmlconf/eduni/xml-1.1/052.xml")
            .unwrap()
            .as_str(),
    );
}

#[test]
#[ignore]
#[cfg(all(test, feature = "test-conformance-xml"))]
fn rmt053() {
    /*
        Test ID:rmt-053
        Test URI:053.xml
        Spec Sections:2.3
        Description:Has element content whitespace containing a NEL character that comes from a character reference in an internal entity. Because NEL is not in the S production (even though real NELs are converted to LF on input), this is invalid in both XML 1.0 and 1.1.
    */

    test_eduni_xml11_invalid(
        fs::read_to_string("tests/conformance/xml/xmlconf/eduni/xml-1.1/053.xml")
            .unwrap()
            .as_str(),
    );
}
