<!doctype html>
<title>Node assorted property tests</title>
<link rel=author title="Aryeh Gregor" href=ayg@aryeh.name>
<meta charset=utf-8>
<div id=log></div>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=../common.js></script>
<script>
"use strict";
/**
 * First we define a data structure to tell us what tests to run.  The keys
 * will be eval()ed, and are mostly global variables defined in common.js.  The
 * values are objects, which maps properties to expected values.  So
 *
 *     foo: {
 *         bar: "baz",
 *         quz: 7,
 *     },
 *
 * will test that eval("foo.bar") === "baz" and eval("foo.quz") === 7.  "foo"
 * and "bar" could thus be expressions, like "document.documentElement" and
 * "childNodes[4]" respectively.
 *
 * To avoid repetition, some values are automatically added based on others.
 * For instance, if we specify nodeType: Node.TEXT_NODE, we'll automatically
 * also test nodeName: "#text".  This is handled by code after this variable is
 * defined.
 */
var expected = {
    testDiv: {
        // Node
        nodeType: Node.ELEMENT_NODE,
        ownerDocument: document,
        parentNode: document.body,
        parentElement: document.body,
        "childNodes.length": 6,
        "childNodes[0]": paras[0],
        "childNodes[1]": paras[1],
        "childNodes[2]": paras[2],
        "childNodes[3]": paras[3],
        "childNodes[4]": paras[4],
        "childNodes[5]": comment,
        previousSibling: null,
        nextSibling: document.getElementById("log"),
        textContent: "A\u0308b\u0308c\u0308d\u0308e\u0308f\u0308g\u0308h\u0308\nIjklmnop\nQrstuvwxYzabcdefGhijklmn",

        // Element
        namespaceURI: "http://www.w3.org/1999/xhtml",
        prefix: null,
        localName: "div",
        tagName: "DIV",
        id: "test",
        "children[0]": paras[0],
        "children[1]": paras[1],
        "children[2]": paras[2],
        "children[3]": paras[3],
        "children[4]": paras[4],
        previousElementSibling: null,
        // nextSibling isn't explicitly set
        //nextElementSibling: ,
        childElementCount: 5,
    },
    detachedDiv: {
        // Node
        nodeType: Node.ELEMENT_NODE,
        ownerDocument: document,
        parentNode: null,
        parentElement: null,
        "childNodes.length": 2,
        "childNodes[0]": detachedPara1,
        "childNodes[1]": detachedPara2,
        previousSibling: null,
        nextSibling: null,
        textContent: "OpqrstuvWxyzabcd",

        // Element
        namespaceURI: "http://www.w3.org/1999/xhtml",
        prefix: null,
        localName: "div",
        tagName: "DIV",
        "children[0]": detachedPara1,
        "children[1]": detachedPara2,
        previousElementSibling: null,
        nextElementSibling: null,
        childElementCount: 2,
    },
    detachedPara1: {
        // Node
        nodeType: Node.ELEMENT_NODE,
        ownerDocument: document,
        parentNode: detachedDiv,
        parentElement: detachedDiv,
        "childNodes.length": 1,
        previousSibling: null,
        nextSibling: detachedPara2,
        textContent: "Opqrstuv",

        // Element
        namespaceURI: "http://www.w3.org/1999/xhtml",
        prefix: null,
        localName: "p",
        tagName: "P",
        previousElementSibling: null,
        nextElementSibling: detachedPara2,
        childElementCount: 0,
    },
    detachedPara2: {
        // Node
        nodeType: Node.ELEMENT_NODE,
        ownerDocument: document,
        parentNode: detachedDiv,
        parentElement: detachedDiv,
        "childNodes.length": 1,
        previousSibling: detachedPara1,
        nextSibling: null,
        textContent: "Wxyzabcd",

        // Element
        namespaceURI: "http://www.w3.org/1999/xhtml",
        prefix: null,
        localName: "p",
        tagName: "P",
        previousElementSibling: detachedPara1,
        nextElementSibling: null,
        childElementCount: 0,
    },
    document: {
        // Node
        nodeType: Node.DOCUMENT_NODE,
        "childNodes.length": 2,
        "childNodes[0]": document.doctype,
        "childNodes[1]": document.documentElement,

        // Document
        URL: String(location),
        compatMode: "CSS1Compat",
        characterSet: "UTF-8",
        contentType: "text/html",
        doctype: doctype,
        //documentElement: ,
    },
    foreignDoc: {
        // Node
        nodeType: Node.DOCUMENT_NODE,
        "childNodes.length": 3,
        "childNodes[0]": foreignDoc.doctype,
        "childNodes[1]": foreignDoc.documentElement,
        "childNodes[2]": foreignComment,

        // Document
        URL: "about:blank",
        compatMode: "CSS1Compat",
        characterSet: "UTF-8",
        contentType: "text/html",
        //doctype: ,
        //documentElement: ,
    },
    foreignPara1: {
        // Node
        nodeType: Node.ELEMENT_NODE,
        ownerDocument: foreignDoc,
        parentNode: foreignDoc.body,
        parentElement: foreignDoc.body,
        "childNodes.length": 1,
        previousSibling: null,
        nextSibling: foreignPara2,
        textContent: "Efghijkl",

        // Element
        namespaceURI: "http://www.w3.org/1999/xhtml",
        prefix: null,
        localName: "p",
        tagName: "P",
        previousElementSibling: null,
        nextElementSibling: foreignPara2,
        childElementCount: 0,
    },
    foreignPara2: {
        // Node
        nodeType: Node.ELEMENT_NODE,
        ownerDocument: foreignDoc,
        parentNode: foreignDoc.body,
        parentElement: foreignDoc.body,
        "childNodes.length": 1,
        previousSibling: foreignPara1,
        nextSibling: foreignTextNode,
        textContent: "Mnopqrst",

        // Element
        namespaceURI: "http://www.w3.org/1999/xhtml",
        prefix: null,
        localName: "p",
        tagName: "P",
        previousElementSibling: foreignPara1,
        nextElementSibling: null,
        childElementCount: 0,
    },
    xmlDoc: {
        // Node
        nodeType: Node.DOCUMENT_NODE,
        "childNodes.length": 4,
        "childNodes[0]": xmlDoctype,
        "childNodes[1]": xmlElement,
        "childNodes[2]": processingInstruction,
        "childNodes[3]": xmlComment,

        // Document
        URL: "about:blank",
        compatMode: "CSS1Compat",
        characterSet: "UTF-8",
        contentType: "application/xml",
        //doctype: ,
        //documentElement: ,
    },
    xmlElement: {
        // Node
        nodeType: Node.ELEMENT_NODE,
        ownerDocument: xmlDoc,
        parentNode: xmlDoc,
        parentElement: null,
        "childNodes.length": 1,
        "childNodes[0]": xmlTextNode,
        previousSibling: xmlDoctype,
        nextSibling: processingInstruction,
        textContent: "do re mi fa so la ti",

        // Element
        namespaceURI: null,
        prefix: null,
        localName: "igiveuponcreativenames",
        tagName: "igiveuponcreativenames",
        previousElementSibling: null,
        nextElementSibling: null,
        childElementCount: 0,
    },
    detachedXmlElement: {
        // Node
        nodeType: Node.ELEMENT_NODE,
        ownerDocument: xmlDoc,
        parentNode: null,
        parentElement: null,
        "childNodes.length": 0,
        previousSibling: null,
        nextSibling: null,
        textContent: "",

        // Element
        namespaceURI: null,
        prefix: null,
        localName: "everyone-hates-hyphenated-element-names",
        tagName: "everyone-hates-hyphenated-element-names",
        previousElementSibling: null,
        nextElementSibling: null,
        childElementCount: 0,
    },
    detachedTextNode: {
        // Node
        nodeType: Node.TEXT_NODE,
        ownerDocument: document,
        parentNode: null,
        parentElement: null,
        previousSibling: null,
        nextSibling: null,
        nodeValue: "Uvwxyzab",

        // Text
        wholeText: "Uvwxyzab",
    },
    foreignTextNode: {
        // Node
        nodeType: Node.TEXT_NODE,
        ownerDocument: foreignDoc,
        parentNode: foreignDoc.body,
        parentElement: foreignDoc.body,
        previousSibling: foreignPara2,
        nextSibling: null,
        nodeValue: "I admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now.",

        // Text
        wholeText: "I admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now.",
    },
    detachedForeignTextNode: {
        // Node
        nodeType: Node.TEXT_NODE,
        ownerDocument: foreignDoc,
        parentNode: null,
        parentElement: null,
        previousSibling: null,
        nextSibling: null,
        nodeValue: "Cdefghij",

        // Text
        wholeText: "Cdefghij",
    },
    xmlTextNode: {
        // Node
        nodeType: Node.TEXT_NODE,
        ownerDocument: xmlDoc,
        parentNode: xmlElement,
        parentElement: xmlElement,
        previousSibling: null,
        nextSibling: null,
        nodeValue: "do re mi fa so la ti",

        // Text
        wholeText: "do re mi fa so la ti",
    },
    detachedXmlTextNode: {
        // Node
        nodeType: Node.TEXT_NODE,
        ownerDocument: xmlDoc,
        parentNode: null,
        parentElement: null,
        previousSibling: null,
        nextSibling: null,
        nodeValue: "Klmnopqr",

        // Text
        wholeText: "Klmnopqr",
    },
    processingInstruction: {
        // Node
        nodeType: Node.PROCESSING_INSTRUCTION_NODE,
        ownerDocument: xmlDoc,
        parentNode: xmlDoc,
        parentElement: null,
        previousSibling: xmlElement,
        nextSibling: xmlComment,
        nodeValue: 'Did you know that ":syn sync fromstart" is very useful when using vim to edit large amounts of JavaScript embedded in HTML?',

        // ProcessingInstruction
        target: "somePI",
    },
    detachedProcessingInstruction: {
        // Node
        nodeType: Node.PROCESSING_INSTRUCTION_NODE,
        ownerDocument: xmlDoc,
        parentNode: null,
        parentElement: null,
        previousSibling: null,
        nextSibling: null,
        nodeValue: "chirp chirp chirp",

        // ProcessingInstruction
        target: "whippoorwill",
    },
    comment: {
        // Node
        nodeType: Node.COMMENT_NODE,
        ownerDocument: document,
        parentNode: testDiv,
        parentElement: testDiv,
        previousSibling: paras[4],
        nextSibling: null,
        nodeValue: "Alphabet soup?",
    },
    detachedComment: {
        // Node
        nodeType: Node.COMMENT_NODE,
        ownerDocument: document,
        parentNode: null,
        parentElement: null,
        previousSibling: null,
        nextSibling: null,
        nodeValue: "Stuvwxyz",
    },
    foreignComment: {
        // Node
        nodeType: Node.COMMENT_NODE,
        ownerDocument: foreignDoc,
        parentNode: foreignDoc,
        parentElement: null,
        previousSibling: foreignDoc.documentElement,
        nextSibling: null,
        nodeValue: '"Commenter" and "commentator" mean different things.  I\'ve seen non-native speakers trip up on this.',
    },
    detachedForeignComment: {
        // Node
        nodeType: Node.COMMENT_NODE,
        ownerDocument: foreignDoc,
        parentNode: null,
        parentElement: null,
        previousSibling: null,
        nextSibling: null,
        nodeValue: "אריה יהודה",
    },
    xmlComment: {
        // Node
        nodeType: Node.COMMENT_NODE,
        ownerDocument: xmlDoc,
        parentNode: xmlDoc,
        parentElement: null,
        previousSibling: processingInstruction,
        nextSibling: null,
        nodeValue: "I maliciously created a comment that will break incautious XML serializers, but Firefox threw an exception, so all I got was this lousy T-shirt",
    },
    detachedXmlComment: {
        // Node
        nodeType: Node.COMMENT_NODE,
        ownerDocument: xmlDoc,
        parentNode: null,
        parentElement: null,
        previousSibling: null,
        nextSibling: null,
        nodeValue: "בן חיים אליעזר",
    },
    docfrag: {
        // Node
        nodeType: Node.DOCUMENT_FRAGMENT_NODE,
        ownerDocument: document,
        "childNodes.length": 0,
        textContent: "",
    },
    foreignDocfrag: {
        // Node
        nodeType: Node.DOCUMENT_FRAGMENT_NODE,
        ownerDocument: foreignDoc,
        "childNodes.length": 0,
        textContent: "",
    },
    xmlDocfrag: {
        // Node
        nodeType: Node.DOCUMENT_FRAGMENT_NODE,
        ownerDocument: xmlDoc,
        "childNodes.length": 0,
        textContent: "",
    },
    doctype: {
        // Node
        nodeType: Node.DOCUMENT_TYPE_NODE,
        ownerDocument: document,
        parentNode: document,
        previousSibling: null,
        nextSibling: document.documentElement,

        // DocumentType
        name: "html",
        publicId: "",
        systemId: "",
    },
    foreignDoctype: {
        // Node
        nodeType: Node.DOCUMENT_TYPE_NODE,
        ownerDocument: foreignDoc,
        parentNode: foreignDoc,
        previousSibling: null,
        nextSibling: foreignDoc.documentElement,

        // DocumentType
        name: "html",
        publicId: "",
        systemId: "",
    },
    xmlDoctype: {
        // Node
        nodeType: Node.DOCUMENT_TYPE_NODE,
        ownerDocument: xmlDoc,
        parentNode: xmlDoc,
        previousSibling: null,
        nextSibling: xmlElement,

        // DocumentType
        name: "qorflesnorf",
        publicId: "abcde",
        systemId: "x\"'y",
    },
    "paras[0]": {
        // Node
        nodeType: Node.ELEMENT_NODE,
        ownerDocument: document,
        parentNode: testDiv,
        parentElement: testDiv,
        "childNodes.length": 1,
        previousSibling: null,
        nextSibling: paras[1],
        textContent: "A\u0308b\u0308c\u0308d\u0308e\u0308f\u0308g\u0308h\u0308\n",

        // Element
        namespaceURI: "http://www.w3.org/1999/xhtml",
        prefix: null,
        localName: "p",
        tagName: "P",
        id: "a",
        previousElementSibling: null,
        nextElementSibling: paras[1],
        childElementCount: 0,
    },
    "paras[1]": {
        // Node
        nodeType: Node.ELEMENT_NODE,
        ownerDocument: document,
        parentNode: testDiv,
        parentElement: testDiv,
        "childNodes.length": 1,
        previousSibling: paras[0],
        nextSibling: paras[2],
        textContent: "Ijklmnop\n",

        // Element
        namespaceURI: "http://www.w3.org/1999/xhtml",
        prefix: null,
        localName: "p",
        tagName: "P",
        id: "b",
        previousElementSibling: paras[0],
        nextElementSibling: paras[2],
        childElementCount: 0,
    },
    "paras[2]": {
        // Node
        nodeType: Node.ELEMENT_NODE,
        ownerDocument: document,
        parentNode: testDiv,
        parentElement: testDiv,
        "childNodes.length": 1,
        previousSibling: paras[1],
        nextSibling: paras[3],
        textContent: "Qrstuvwx",

        // Element
        namespaceURI: "http://www.w3.org/1999/xhtml",
        prefix: null,
        localName: "p",
        tagName: "P",
        id: "c",
        previousElementSibling: paras[1],
        nextElementSibling: paras[3],
        childElementCount: 0,
    },
    "paras[3]": {
        // Node
        nodeType: Node.ELEMENT_NODE,
        ownerDocument: document,
        parentNode: testDiv,
        parentElement: testDiv,
        "childNodes.length": 1,
        previousSibling: paras[2],
        nextSibling: paras[4],
        textContent: "Yzabcdef",

        // Element
        namespaceURI: "http://www.w3.org/1999/xhtml",
        prefix: null,
        localName: "p",
        tagName: "P",
        id: "d",
        previousElementSibling: paras[2],
        nextElementSibling: paras[4],
        childElementCount: 0,
    },
    "paras[4]": {
        // Node
        nodeType: Node.ELEMENT_NODE,
        ownerDocument: document,
        parentNode: testDiv,
        parentElement: testDiv,
        "childNodes.length": 1,
        previousSibling: paras[3],
        nextSibling: comment,
        textContent: "Ghijklmn",

        // Element
        namespaceURI: "http://www.w3.org/1999/xhtml",
        prefix: null,
        localName: "p",
        tagName: "P",
        id: "e",
        previousElementSibling: paras[3],
        nextElementSibling: null,
        childElementCount: 0,
    },
};

for (var node in expected) {
    // Now we set various default values by node type.
    switch (expected[node].nodeType) {
    case Node.ELEMENT_NODE:
        expected[node].nodeName = expected[node].tagName;
        expected[node].nodeValue = null;
        expected[node]["children.length"] = expected[node].childElementCount;

        if (expected[node].id === undefined) {
            expected[node].id = "";
        }
        if (expected[node].className === undefined) {
            expected[node].className = "";
        }

        var len = expected[node].childElementCount;
        if (len === 0) {
            expected[node].firstElementChild =
            expected[node].lastElementChild = null;
        } else {
            // If we have expectations for the first/last child in children,
            // use those.  Otherwise, at least check that .firstElementChild ==
            // .children[0] and .lastElementChild == .children[len - 1], even
            // if we aren't sure what they should be.
            expected[node].firstElementChild = expected[node]["children[0]"]
                ? expected[node]["children[0]"]
                : eval(node).children[0];
            expected[node].lastElementChild =
                expected[node]["children[" + (len - 1) + "]"]
                ? expected[node]["children[" + (len - 1) + "]"]
                : eval(node).children[len - 1];
        }
        break;

    case Node.TEXT_NODE:
        expected[node].nodeName = "#text";
        expected[node]["childNodes.length"] = 0;
        expected[node].textContent = expected[node].data =
            expected[node].nodeValue;
        expected[node].length = expected[node].nodeValue.length;
        break;

    case Node.PROCESSING_INSTRUCTION_NODE:
        expected[node].nodeName = expected[node].target;
        expected[node]["childNodes.length"] = 0;
        expected[node].textContent = expected[node].data =
            expected[node].nodeValue;
        expected[node].length = expected[node].nodeValue.length;
        break;

    case Node.COMMENT_NODE:
        expected[node].nodeName = "#comment";
        expected[node]["childNodes.length"] = 0;
        expected[node].textContent = expected[node].data =
            expected[node].nodeValue;
        expected[node].length = expected[node].nodeValue.length;
        break;

    case Node.DOCUMENT_NODE:
        expected[node].nodeName = "#document";
        expected[node].ownerDocument = expected[node].parentNode =
            expected[node].parentElement = expected[node].previousSibling =
            expected[node].nextSibling = expected[node].nodeValue =
            expected[node].textContent = null;
        expected[node].documentURI = expected[node].URL;
        expected[node].charset = expected[node].inputEncoding =
            expected[node].characterSet;
        break;

    case Node.DOCUMENT_TYPE_NODE:
        expected[node].nodeName = expected[node].name;
        expected[node]["childNodes.length"] = 0;
        expected[node].parentElement = expected[node].nodeValue =
            expected[node].textContent = null;
        break;

    case Node.DOCUMENT_FRAGMENT_NODE:
        expected[node].nodeName = "#document-fragment";
        expected[node].parentNode = expected[node].parentElement =
            expected[node].previousSibling = expected[node].nextSibling =
            expected[node].nodeValue = null;
        break;
    }

    // Now we set some further default values that are independent of node
    // type.
    var len = expected[node]["childNodes.length"];
    if (len === 0) {
        expected[node].firstChild = expected[node].lastChild = null;
    } else {
        // If we have expectations for the first/last child in childNodes, use
        // those.  Otherwise, at least check that .firstChild == .childNodes[0]
        // and .lastChild == .childNodes[len - 1], even if we aren't sure what
        // they should be.
        expected[node].firstChild = expected[node]["childNodes[0]"]
            ? expected[node]["childNodes[0]"]
            : eval(node).childNodes[0];
        expected[node].lastChild =
            expected[node]["childNodes[" + (len - 1) + "]"]
            ? expected[node]["childNodes[" + (len - 1) + "]"]
            : eval(node).childNodes[len - 1];
    }
    expected[node]["hasChildNodes()"] = !!expected[node]["childNodes.length"];

    // Finally, we test!
    for (var prop in expected[node]) {
        test(function() {
            assert_equals(eval(node + "." + prop), expected[node][prop]);
        }, node + "." + prop);
    }
}

testDiv.parentNode.removeChild(testDiv);
</script>
