mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 15:13:28 +00:00
wpt: add all dom/nodes tests
This commit is contained in:
688
tests/wpt/dom/nodes/Node-properties.html
Normal file
688
tests/wpt/dom/nodes/Node-properties.html
Normal file
@@ -0,0 +1,688 @@
|
||||
<!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>
|
||||
Reference in New Issue
Block a user