This repository has been archived on 2020-12-18. You can view files and clone it, but cannot push or open issues or pull requests.
Core_DOM-dev/Core_DOM/common/tests/Node-insertBefore.html

289 lines
12 KiB
HTML

<!DOCTYPE html>
<title>Node.insertBefore</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<div id="log"></div>
</body>
<script>
test(function() {
var node = document.createTextNode("Foo");
assert_throws("HIERARCHY_REQUEST_ERR", function() { node.insertBefore(document.createTextNode("fail"), null) })
}, "Calling insertBefore an a leaf node Text must throw HIERARCHY_REQUEST_ERR.")
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>