| Index: third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/Node-insertBefore.html
|
| diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/Node-insertBefore.html b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/Node-insertBefore.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d37148c66db38feedaa5c432bbeeac76f630c31c
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/Node-insertBefore.html
|
| @@ -0,0 +1,306 @@
|
| +<!DOCTYPE html>
|
| +<title>Node.insertBefore</title>
|
| +<script src="../../../../resources/testharness.js"></script>
|
| +<script src="../../../../resources/testharnessreport.js"></script>
|
| +<div id="log"></div>
|
| +<script>
|
| +function testLeafNode(nodeName, createNodeFunction) {
|
| + test(function() {
|
| + var node = createNodeFunction();
|
| + assert_throws(new TypeError(), function() { node.insertBefore(null, null) })
|
| + }, "Calling insertBefore with a non-Node first argument on a leaf node " + nodeName + " must throw TypeError.")
|
| + test(function() {
|
| + var node = createNodeFunction();
|
| + assert_throws("HIERARCHY_REQUEST_ERR", function() { node.insertBefore(document.createTextNode("fail"), null) })
|
| + // Would be step 2.
|
| + assert_throws("HIERARCHY_REQUEST_ERR", function() { node.insertBefore(node, null) })
|
| + // Would be step 3.
|
| + assert_throws("HIERARCHY_REQUEST_ERR", function() { node.insertBefore(node, document.createTextNode("child")) })
|
| + }, "Calling insertBefore an a leaf node " + nodeName + " must throw HIERARCHY_REQUEST_ERR.")
|
| +}
|
| +
|
| +test(function() {
|
| + // WebIDL.
|
| + assert_throws(new TypeError(), function() { document.body.insertBefore(null, null) })
|
| + assert_throws(new TypeError(), function() { document.body.insertBefore(null, document.body.firstChild) })
|
| + assert_throws(new TypeError(), function() { document.body.insertBefore({'a':'b'}, document.body.firstChild) })
|
| +}, "Calling insertBefore with a non-Node first argument must throw TypeError.")
|
| +
|
| +testLeafNode("DocumentType", function () { return document.doctype; } )
|
| +testLeafNode("Text", function () { return document.createTextNode("Foo") })
|
| +testLeafNode("Comment", function () { return document.createComment("Foo") })
|
| +testLeafNode("ProcessingInstruction", function () { return document.createProcessingInstruction("foo", "bar") })
|
| +
|
| +test(function() {
|
| + // Step 2.
|
| + assert_throws("HIERARCHY_REQUEST_ERR", function() { document.body.insertBefore(document.body, document.getElementById("log")) })
|
| + assert_throws("HIERARCHY_REQUEST_ERR", function() { document.body.insertBefore(document.documentElement, document.getElementById("log")) })
|
| +}, "Calling insertBefore with an inclusive ancestor of the context object must throw HIERARCHY_REQUEST_ERR.")
|
| +
|
| +// Step 3.
|
| +test(function() {
|
| + var a = document.createElement("div");
|
| + var b = document.createElement("div");
|
| + var c = document.createElement("div");
|
| + assert_throws("NotFoundError", function() {
|
| + a.insertBefore(b, c);
|
| + });
|
| +}, "Calling insertBefore with a reference child whose parent is not the context node must throw a NotFoundError.")
|
| +
|
| +// Step 4.1.
|
| +test(function() {
|
| + var doc = document.implementation.createHTMLDocument("title");
|
| + var doc2 = document.implementation.createHTMLDocument("title2");
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(doc2, doc.documentElement);
|
| + });
|
| +
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(doc.createTextNode("text"), doc.documentElement);
|
| + });
|
| +}, "If the context node is a document, inserting a document or text node should throw a HierarchyRequestError.")
|
| +
|
| +// Step 4.2.1.
|
| +test(function() {
|
| + var doc = document.implementation.createHTMLDocument("title");
|
| + doc.removeChild(doc.documentElement);
|
| +
|
| + var df = doc.createDocumentFragment();
|
| + df.appendChild(doc.createElement("a"));
|
| + df.appendChild(doc.createElement("b"));
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(df, null);
|
| + });
|
| +
|
| + df = doc.createDocumentFragment();
|
| + df.appendChild(doc.createTextNode("text"));
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(df, null);
|
| + });
|
| +
|
| + df = doc.createDocumentFragment();
|
| + df.appendChild(doc.createComment("comment"));
|
| + df.appendChild(doc.createTextNode("text"));
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(df, null);
|
| + });
|
| +}, "If the context node is a document, appending a DocumentFragment that contains a text node or too many elements should throw a HierarchyRequestError.")
|
| +test(function() {
|
| + var doc = document.implementation.createHTMLDocument("title");
|
| + doc.removeChild(doc.documentElement);
|
| +
|
| + var df = doc.createDocumentFragment();
|
| + df.appendChild(doc.createElement("a"));
|
| + df.appendChild(doc.createElement("b"));
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(df, doc.firstChild);
|
| + });
|
| +
|
| + df = doc.createDocumentFragment();
|
| + df.appendChild(doc.createTextNode("text"));
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(df, doc.firstChild);
|
| + });
|
| +
|
| + df = doc.createDocumentFragment();
|
| + df.appendChild(doc.createComment("comment"));
|
| + df.appendChild(doc.createTextNode("text"));
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(df, doc.firstChild);
|
| + });
|
| +}, "If the context node is a document, inserting a DocumentFragment that contains a text node or too many elements should throw a HierarchyRequestError.")
|
| +
|
| +// Step 4.2.2.
|
| +test(function() {
|
| + // The context node has an element child.
|
| + var doc = document.implementation.createHTMLDocument("title");
|
| + var comment = doc.appendChild(doc.createComment("foo"));
|
| + assert_array_equals(doc.childNodes, [doc.doctype, doc.documentElement, comment]);
|
| +
|
| + var df = doc.createDocumentFragment();
|
| + df.appendChild(doc.createElement("a"));
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(df, doc.doctype);
|
| + });
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(df, doc.documentElement);
|
| + });
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(df, comment);
|
| + });
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(df, null);
|
| + });
|
| +}, "If the context node is a document, inserting a DocumentFragment with an element if there already is an element child should throw a HierarchyRequestError.")
|
| +test(function() {
|
| + // /child/ is a doctype.
|
| + var doc = document.implementation.createHTMLDocument("title");
|
| + var comment = doc.insertBefore(doc.createComment("foo"), doc.firstChild);
|
| + doc.removeChild(doc.documentElement);
|
| + assert_array_equals(doc.childNodes, [comment, doc.doctype]);
|
| +
|
| + var df = doc.createDocumentFragment();
|
| + df.appendChild(doc.createElement("a"));
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(df, doc.doctype);
|
| + });
|
| +}, "If the context node is a document and a doctype is following the reference child, inserting a DocumentFragment with an element should throw a HierarchyRequestError.")
|
| +test(function() {
|
| + // /child/ is not null and a doctype is following /child/.
|
| + var doc = document.implementation.createHTMLDocument("title");
|
| + var comment = doc.insertBefore(doc.createComment("foo"), doc.firstChild);
|
| + doc.removeChild(doc.documentElement);
|
| + assert_array_equals(doc.childNodes, [comment, doc.doctype]);
|
| +
|
| + var df = doc.createDocumentFragment();
|
| + df.appendChild(doc.createElement("a"));
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(df, comment);
|
| + });
|
| +}, "If the context node is a document, inserting a DocumentFragment with an element before the doctype should throw a HierarchyRequestError.")
|
| +
|
| +// Step 4.3.
|
| +test(function() {
|
| + // The context node has an element child.
|
| + var doc = document.implementation.createHTMLDocument("title");
|
| + var comment = doc.appendChild(doc.createComment("foo"));
|
| + assert_array_equals(doc.childNodes, [doc.doctype, doc.documentElement, comment]);
|
| +
|
| + var a = doc.createElement("a");
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(a, doc.doctype);
|
| + });
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(a, doc.documentElement);
|
| + });
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(a, comment);
|
| + });
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(a, null);
|
| + });
|
| +}, "If the context node is a document, inserting an element if there already is an element child should throw a HierarchyRequestError.")
|
| +test(function() {
|
| + // /child/ is a doctype.
|
| + var doc = document.implementation.createHTMLDocument("title");
|
| + var comment = doc.insertBefore(doc.createComment("foo"), doc.firstChild);
|
| + doc.removeChild(doc.documentElement);
|
| + assert_array_equals(doc.childNodes, [comment, doc.doctype]);
|
| +
|
| + var a = doc.createElement("a");
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(a, doc.doctype);
|
| + });
|
| +}, "If the context node is a document, inserting an element before the doctype should throw a HierarchyRequestError.")
|
| +test(function() {
|
| + // /child/ is not null and a doctype is following /child/.
|
| + var doc = document.implementation.createHTMLDocument("title");
|
| + var comment = doc.insertBefore(doc.createComment("foo"), doc.firstChild);
|
| + doc.removeChild(doc.documentElement);
|
| + assert_array_equals(doc.childNodes, [comment, doc.doctype]);
|
| +
|
| + var a = doc.createElement("a");
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(a, comment);
|
| + });
|
| +}, "If the context node is a document and a doctype is following the reference child, inserting an element should throw a HierarchyRequestError.")
|
| +
|
| +// Step 4.4.
|
| +test(function() {
|
| + var doc = document.implementation.createHTMLDocument("title");
|
| + var comment = doc.insertBefore(doc.createComment("foo"), doc.firstChild);
|
| + assert_array_equals(doc.childNodes, [comment, doc.doctype, doc.documentElement]);
|
| +
|
| + var doctype = document.implementation.createDocumentType("html", "", "");
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(doctype, comment);
|
| + });
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(doctype, doc.doctype);
|
| + });
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(doctype, doc.documentElement);
|
| + });
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(doctype, null);
|
| + });
|
| +}, "If the context node is a document, inserting a doctype if there already is a doctype child should throw a HierarchyRequestError.")
|
| +test(function() {
|
| + var doc = document.implementation.createHTMLDocument("title");
|
| + var comment = doc.appendChild(doc.createComment("foo"));
|
| + doc.removeChild(doc.doctype);
|
| + assert_array_equals(doc.childNodes, [doc.documentElement, comment]);
|
| +
|
| + var doctype = document.implementation.createDocumentType("html", "", "");
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(doctype, comment);
|
| + });
|
| +}, "If the context node is a document, inserting a doctype after the document element should throw a HierarchyRequestError.")
|
| +test(function() {
|
| + var doc = document.implementation.createHTMLDocument("title");
|
| + var comment = doc.appendChild(doc.createComment("foo"));
|
| + doc.removeChild(doc.doctype);
|
| + assert_array_equals(doc.childNodes, [doc.documentElement, comment]);
|
| +
|
| + var doctype = document.implementation.createDocumentType("html", "", "");
|
| + assert_throws("HierarchyRequestError", function() {
|
| + doc.insertBefore(doctype, null);
|
| + });
|
| +}, "If the context node is a document with and element child, appending a doctype should throw a HierarchyRequestError.")
|
| +
|
| +// Step 5.
|
| +test(function() {
|
| + var df = document.createDocumentFragment();
|
| + var a = df.appendChild(document.createElement("a"));
|
| +
|
| + var doc = document.implementation.createHTMLDocument("title");
|
| + assert_throws("HierarchyRequestError", function() {
|
| + df.insertBefore(doc, a);
|
| + });
|
| + assert_throws("HierarchyRequestError", function() {
|
| + df.insertBefore(doc, null);
|
| + });
|
| +
|
| + var doctype = document.implementation.createDocumentType("html", "", "");
|
| + assert_throws("HierarchyRequestError", function() {
|
| + df.insertBefore(doctype, a);
|
| + });
|
| + assert_throws("HierarchyRequestError", function() {
|
| + df.insertBefore(doctype, null);
|
| + });
|
| +}, "If the context node is a DocumentFragment, inserting a document or a doctype should throw a HierarchyRequestError.")
|
| +test(function() {
|
| + var el = document.createElement("div");
|
| + var a = el.appendChild(document.createElement("a"));
|
| +
|
| + var doc = document.implementation.createHTMLDocument("title");
|
| + assert_throws("HierarchyRequestError", function() {
|
| + el.insertBefore(doc, a);
|
| + });
|
| + assert_throws("HierarchyRequestError", function() {
|
| + el.insertBefore(doc, null);
|
| + });
|
| +
|
| + var doctype = document.implementation.createDocumentType("html", "", "");
|
| + assert_throws("HierarchyRequestError", function() {
|
| + el.insertBefore(doctype, a);
|
| + });
|
| + assert_throws("HierarchyRequestError", function() {
|
| + el.insertBefore(doctype, null);
|
| + });
|
| +}, "If the context node is an element, inserting a document or a doctype should throw a HierarchyRequestError.")
|
| +
|
| +// Step 7.
|
| +test(function() {
|
| + var a = document.createElement("div");
|
| + var b = document.createElement("div");
|
| + var c = document.createElement("div");
|
| + a.appendChild(b);
|
| + a.appendChild(c);
|
| + assert_array_equals(a.childNodes, [b, c]);
|
| + assert_equals(a.insertBefore(b, b), b);
|
| + assert_array_equals(a.childNodes, [b, c]);
|
| + assert_equals(a.insertBefore(c, c), c);
|
| + assert_array_equals(a.childNodes, [b, c]);
|
| +}, "Inserting a node before itself should not move the node");
|
| +</script>
|
|
|