/// <reference path="../src/odata-xml.js" />
/// <reference path="common/djstest.js" />

// odata-xml-tests.js

(function (window, undefined) {
    djstest.addTest(function readLinksTest() {
        var tests = [
            { i: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\r\n\
                  <links xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices\">\r\n\
                    <uri>http://services.odata.org/OData/OData.svc/Products(1)</uri>\r\n\
                    <uri>http://services.odata.org/OData/OData.svc/Products(2)</uri>\r\n\
                    <uri></uri>\r\n\
                  </links>",
                e: { results: [
                        { uri: "http://services.odata.org/OData/OData.svc/Products(1)" },
                        { uri: "http://services.odata.org/OData/OData.svc/Products(2)" },
                        { uri: ""}]
                }
            },
            { i: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\r\n\
                  <links xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices\"/>",
                e: { results: [] }
            },
            { i: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\r\n\
                  <uri xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices\">http://services.odata.org/OData/OData.svc/Products(2)</uri>",
                e: { uri: "http://services.odata.org/OData/OData.svc/Products(2)" }
            },
            { i: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\r\n\
                  <uri xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices\"/>",
                e: { uri: "" }
            }
           ];


        var i, len;
        for (i = 0, len = tests.length; i < len; i++) {
            OData.read("foo", function success(data) {
                djstest.assertAreEqualDeep(data, tests[i].e, "Deserialized links object match");
            },
               function error(err) {
                   djstest.fail(err.message);
               },
               OData.defaultHttpHandler,
               {
                   request: function (request, success) {
                       success({ headers: { "Content-Type": "application/xml" }, body: tests[i].i });
                   }
               });
        }

        djstest.done();
    });

    // DATAJS INTERNAL START
    djstest.addTest(function writeLinksTest() {
        var tests = [
        {
            i: { uri: "" },
            e: "<?xml version=\"1.0\"?>\r\n\
                <uri xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices\"/>"
        },
        {
            i: { uri: null },
            e: "<?xml version=\"1.0\"?>\r\n\
                <uri xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices\"/>"
        },
        {
            i: { uri: undefined },
            e: "<?xml version=\"1.0\"?>\r\n\
                <uri xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices\"/>"
        },
        {
            i: { uri: "http://services.odata.org/OData/OData.svc/Products(2)" },
            e: "<?xml version=\"1.0\"?>\r\n\
                <uri xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices\">http://services.odata.org/OData/OData.svc/Products(2)</uri>"
        },
        {
            i: { results: [
                   { uri: "http://services.odata.org/OData/OData.svc/Products(1)" },
                   { uri: "http://services.odata.org/OData/OData.svc/Products(2)" },
                   { uri: "" }
               ]
            },
            error: true
        },
        {
            i: { __metadata: {}, uri: "http://services.odata.org/OData/OData.svc/Products(2)" },
            error: true
        },
        {
            i: {},
            error: true
        }
        ];

        var i, len;
        for (i = 0, len = tests.length; i < len; i++) {
            OData.request({ headers: { "Content-Type": "application/xml" }, data: tests[i].i },
               function success(data) { },
               function error(err) {
                   if (tests[i].error) {
                       djstest.assert(true, "Error handler called when expected");
                   } else {
                       djstest.fail(err.message);
                   }
               },
               OData.defaultHttpHandler,
               {
                   request: function (request, success) {
                       var expected = datajs.xmlParse(tests[i].e).documentElement;
                       var actual = datajs.xmlParse(request.body).documentElement;

                       djstest.assertAreEqual(expected.localName || expected.baseName, actual.localName || actual.baseName, "Nodes local names are equal");
                       djstest.assertAreEqual(expected.namespaceURI, actual.namespaceURI, "Nodes namespaces are equal");

                       expected = expected.firstChild;
                       actual = actual.firstChild;

                       while (expected) {
                           if (!actual) {
                               djstest.fail("actual is not defined");
                               break;
                           }
                           djstest.assertAreEqual(expected.localName || expected.baseName, actual.localName || actual.baseName, "Nodes local names are equal");
                           djstest.assertAreEqual(expected.namespaceURI, actual.namespaceURI, "Nodes namespaces are equal");

                           expected = expected.nextSibling;
                           actual = actual.nextSibling;
                       }
                   }
               });
        }

        djstest.done();
    });

    djstest.addTest(function getURIInfoTest() {
        var tests = [
            { input: "https://host.com:8080/path1/path2?p1=1&p2=2#fragment", expected: { scheme: "https:", authority: "//host.com:8080", path: "/path1/path2", query: "?p1=1&p2=2", fragment: "#fragment", isAbsolute: true} },
            { input: "http://host.com:8080/path1/path2?p1=1&p2=2#fragment", expected: { scheme: "http:", authority: "//host.com:8080", path: "/path1/path2", query: "?p1=1&p2=2", fragment: "#fragment", isAbsolute: true} },
            { input: "https:", expected: { scheme: "https:", isAbsolute: true} },
            { input: "http:", expected: { scheme: "http:", isAbsolute: true} },
            { input: "//host.com", expected: { authority: "//host.com", isAbsolute: false} },
            { input: "path1", expected: { path: "path1", isAbsolute: false} },
            { input: "?query", expected: { query: "?query", isAbsolute: false} },
            { input: "#fragment", expected: { fragment: "#fragment", isAbsolute: false} },
            { input: undefined, expected: { isAbsolute: false} },
            { input: "", expected: { isAbsolute: false} },
            { input: null, expected: { isAbsolute: false} }
        ];

        var i, len;
        for (i = 0, len = tests.length; i < len; i++) {
            var actual = datajs.getURIInfo(tests[i].input);
            djstest.assertAreEqualDeep(actual, tests[i].expected, "test " + i + "didn't return the expected URI parts");
        }
        djstest.done();
    });

    djstest.addTest(function normalizeURICaseTest() {
        var tests = [
            { uri: "hTTp://HOST.com/path1/Path2/PATH3?Query1=x&query2=Y#Fragment", expected: "http://host.com/path1/Path2/PATH3?Query1=x&query2=Y#Fragment" },
            { uri: "http://fabrikam%20user%3AHisPassWord@www.FaBriKAM.com:5895/Path%3A%201?q1=hi%20%3Ato%20you", expected: "http://fabrikam%20user%3aHisPassWord@www.fabrikam.com:5895/Path%3a%201?q1=hi%20%3ato%20you" },
            { uri: "/PATH1/PATH2?P1=AbC#fraGment", expected: "/PATH1/PATH2?P1=AbC#fraGment" },
            { uri: "HttP://" + encodeURIComponent("FTP://www.example.com&story=breaking_news:password@www.HOST.CoM:5678/"), expected: "http://" + encodeURIComponent("FTP://www.example.com&story=breaking_news:password@www.HOST.CoM:5678/").toLowerCase() }
        ];

        var i, len;
        for (i = 0, len = tests.length; i < len; i++) {
            var actual = datajs.normalizeURICase(tests[i].uri, tests[i].base);
            djstest.assertAreEqual(actual, tests[i].expected, "test " + i + "didn't return the expected URI");
        }
        djstest.done();
    });

    djstest.addTest(function normalizeURITest() {
        var tests = [
            { uri: "http://host.com/path1#fragment", base: "http://base", expected: "http://host.com/path1#fragment" },
            { uri: "//host.com/path1?p1=0", base: "http://base?p2=1", expected: "http://host.com/path1?p1=0" },
            { uri: "?p1=0#fragment", base: "http://base/basepath", expected: "http://base/basepath?p1=0#fragment" },
            { uri: "?p1=0#fragment", base: "http://base/basepath?p2=1", expected: "http://base/basepath?p1=0#fragment" },
            { uri: "#fragment", base: "http://base/basepath?p2=1", expected: "http://base/basepath?p2=1#fragment" },
            { uri: "/path1/path2?p1=0", base: "http://base/basePath", expected: "http://base/path1/path2?p1=0" },
            { uri: "path1/path2?p1=0", base: "http://base/basepath", expected: "http://base/path1/path2?p1=0" },
            { uri: "path1/path2?p1=0", base: "http://base/basepath/basepath2", expected: "http://base/basepath/path1/path2?p1=0" },
            { uri: "", base: "http://base/basepath?p1=0#fragment", expected: "http://base/basepath?p1=0" },
            { uri: "path1/path2?p1=0", base: "", expected: "path1/path2?p1=0" },
            { uri: "/a/b/c/./../../g", base: "http://base/basepath", expected: "http://base/a/g" },
            { uri: "a/b/c/././../../g", base: "http://base/basepath/", expected: "http://base/basepath/a/g" },
            { uri: "../a/b/c/././../../g", base: "http://base/basepath/", expected: "http://base/a/g" },
            { uri: "./a/b/c/././../../g", base: "http://base/basepath/", expected: "http://base/basepath/a/g" },
            { uri: "/../a/b/c/././../../g", base: "http://base/basepath/", expected: "http://base/a/g" },
            { uri: "/./a/b/c/././../../g", base: "http://base/basepath/", expected: "http://base/a/g" }
        ];

        var i, len;
        for (i = 0, len = tests.length; i < len; i++) {
            var actual = datajs.normalizeURI(tests[i].uri, tests[i].base);
            djstest.assertAreEqual(actual, tests[i].expected, "test " + i + "didn't return the expected normalized URI");
        }
        djstest.done();
    });

    djstest.addTest(function xmlParseTest() {
        var xml = '<root xmlns:n1="http://namespace1" xml:base="http://base.org" />';
        var root = datajs.xmlParse(xml);
        djstest.assert(root, "xml._parse didn't return a xml dom object");
        djstest.done();
    });

    djstest.addTest(function xmlbaseURITest() {
        var xml = "\
         <root xmlns:n1=\"http://namespace1\" \r\n\
               xml:base=\"http://base.org\"> \r\n\
           <element base=\"this is not a xml base attribute\" /> \r\n\
         </root>\r\n";

        var doc = datajs.xmlParse(xml);
        var root = datajs.xmlFirstChildElement(doc);
        var child = datajs.xmlFirstChildElement(root);

        djstest.assertAreEqual(datajs.xmlBaseURI(root), "http://base.org", "xml._baseURI didn't return the expected value");
        djstest.assert(!datajs.xmlBaseURI(child), "xml._baseURI returned a value when it wasn't expected");
        djstest.done();
    });

    djstest.addTest(function xmlAttributeValueTest() {
        var xml = "\
     <root xmlns:n1=\"http://namespace1\" \r\n\
           xml:base=\"http://base.org\"> \r\n\
        <element attribute=\"value\" n1:nsAttribute=\"nsValue\" /> \r\n\
     </root> \r\n";

        var doc = datajs.xmlParse(xml);
        var root = datajs.xmlFirstChildElement(doc);
        var child = datajs.xmlFirstChildElement(root);

        djstest.assertAreEqual(datajs.xmlAttributeValue(child, "attribute"), "value", "xml._attribute didn't return the expected value for attribute");
        djstest.assertAreEqual(datajs.xmlAttributeValue(child, "nsAttribute", "http://namespace1"), "nsValue", "xml._attribute didn't return the expected value for nsAttribute");
        djstest.assert(!datajs.xmlAttributeValue(child, "nsAttribute"), "xml._attribute returned a value for nsAttribute without specifying a namespace");

        djstest.done();
    });

    djstest.addTest(function xmlLocalNameTest() {
        var xml = "<root xmlns:n1=\"http://namespace1\" /> \r\n";

        var doc = datajs.xmlParse(xml);
        var root = datajs.xmlFirstChildElement(doc);

        djstest.assertAreEqual(datajs.xmlLocalName(root), "root", "xml._localName didn't return the expected localName of the root element");
        djstest.done();
    });

    djstest.addTest(function xmlFirstChildElement() {
        var xml = "\
         <root xmlns:n1=\"http://namespace1\" \r\n\
               xml:base=\"http://base.org\"> \r\n\
           <element1 /> \r\n\
           <element2 /> \r\n\
         </root>\r\n";


        var doc = datajs.xmlParse(xml);
        var root = datajs.xmlFirstChildElement(doc);
        var child = datajs.xmlFirstChildElement(root);

        djstest.assertAreEqual(datajs.xmlLocalName(child), "element1", "xml.firstElement returned didn't return the expected element");
        djstest.done();
    });

    djstest.addTest(function xmlChildElementsTest() {
        var xml = "\
         <root xmlns:n1=\"http://namespace1\" \r\n\
               xml:base=\"http://base.org\"> \r\n\
           <element1 /> \r\n\
           <element2 xml:base=\"http://otherBase.org\" /> \r\n\
           <n1:element3 xml:base=\"path1/path2\" /> \r\n\
         </root>\r\n";

        var expected = [
            { localName: "element1", nsURI: null },
            { localName: "element2", nsURI: null },
            { localName: "element3", nsURI: "http://namespace1" }
        ];

        var actual = [];

        var doc = datajs.xmlParse(xml);
        var root = datajs.xmlFirstChildElement(doc);
    
        datajs.xmlChildElements(root, function (child) {
            djstest.log("in child elements callback");
            actual.push({
                localName: datajs.xmlLocalName(child),
                nsURI: datajs.xmlNamespaceURI(child)
            });
        });

        djstest.assertAreEqualDeep(actual, expected, "xml.childElements didn't return the expected elements");
        djstest.done();
    });

    djstest.addTest(function xmlAttributesTest() {
        var xml = "\
         <root xmlns:n1=\"http://namespace1\" \r\n\
               xml:base=\"http://base.org\" \r\n\
               attribute=\"value\" \r\n\
               n1:nsAttribute=\"nsValue\" />\r\n";

        var expected = {
            n1: { localName: "n1", nsURI: "http://www.w3.org/2000/xmlns/", value: "http://namespace1" },
            base: { localName: "base", nsURI: "http://www.w3.org/XML/1998/namespace", value: "http://base.org" },
            attribute: { localName: "attribute", nsURI: null, value: "value" },
            nsAttribute: { localName: "nsAttribute", nsURI: "http://namespace1", value: "nsValue" }
        };

        var actual = {};

        var doc = datajs.xmlParse(xml);
        var root = datajs.xmlFirstChildElement(doc);

        datajs.xmlAttributes(root, function (attribute) {
            djstest.log("in child elements callback");
            var localName = datajs.xmlLocalName(attribute);
            actual[localName] = {
                localName: localName, 
                nsURI: datajs.xmlNamespaceURI(attribute),
                value: attribute.value
            };
        });

        djstest.assertAreEqualDeep(actual, expected, "xml.attributes returned didn't return the expected attributes");
        djstest.done();
    });

    djstest.addTest(function hasLeadingOrTrailingWhitespaceTest() {
        // tests are in text / expected format.
        var tests = [
            { t: "", r: false },
            { t: " ", r: true },
            { t: "text", r: false },
            { t: "text with spaces", r: false },
            { t: "not \r\n really", r: false },
            { t: " at start", r: true },
            { t: "at end ", r: true },
            { t: "end\r", r: true },
            { t: "end\n", r: true },
            { t: "end\r\n", r: true }
        ];

        var i, len;
        for (i = 0, len = tests.length; i < len; i++) {
            var result = datajs.hasLeadingOrTrailingWhitespace(tests[i].t);
            djstest.assertAreEqual(result, tests[i].r, "match for " + tests[i].t);
        }

        djstest.done();
    });

    djstest.addTest(function xmlInnerTextTest() {
        // Tests are in test / expected format.
        var tests = [
            { t: "<t>text</t>", r: "text" },
            { t: "<t>text with a <![CDATA[cdata block]]></t>", r: "text with a cdata block" },
            { t: "<t> text </t>", r: " text " },
            { t: "<t> </t>", r: null },
            { t: "<t> <b>text</b> </t>", r: null },
            { t: "<t> preceding</t>", r: " preceding" },
            { t: "<t xml:space='preserve'> <b>text</b> </t>", r: "  " },
            { t: "<t xml:space='default'> <b>text</b> </t>", r: null}
        ];

        var i, len;
        for (i = 0, len = tests.length; i < len; i++) {
            var test = tests[i];
            var doc = datajs.xmlParse(test.t);
            var actual = datajs.xmlInnerText(doc);
            djstest.assertAreEqual(actual, test.r, "test for [" + test.t + "]");
        }

        djstest.done();
    });

    // DATAJS INTERNAL END
})(this);
