| Index: third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/Document-getElementById.html
|
| diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/Document-getElementById.html b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/Document-getElementById.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f4c16045bdb42c0fca0f335dcbc2ce9f2ef60d59
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/Document-getElementById.html
|
| @@ -0,0 +1,350 @@
|
| +<!DOCTYPE html>
|
| +<meta charset=utf-8>
|
| +<title>Document.getElementById</title>
|
| +<link rel="author" title="Tetsuharu OHZEKI" href="mailto:saneyuki.snyk@gmail.com">
|
| +<link rel=help href="https://dom.spec.whatwg.org/#dom-document-getelementbyid">
|
| +<script src="../../../../resources/testharness.js"></script>
|
| +<script src="../../../../resources/testharnessreport.js"></script>
|
| +<body>
|
| + <div id="log"></div>
|
| +
|
| + <!-- test 0 -->
|
| + <div id=""></div>
|
| +
|
| + <!-- test 1 -->
|
| + <div id="test1"></div>
|
| +
|
| + <!-- test 5 -->
|
| + <div id="test5" data-name="1st">
|
| + <p id="test5" data-name="2nd">P</p>
|
| + <input id="test5" type="submit" value="Submit" data-name="3rd">
|
| + </div>
|
| +
|
| + <!-- test 15 -->
|
| + <div id="outer">
|
| + <div id="middle">
|
| + <div id="inner"></div>
|
| + </div>
|
| + </div>
|
| +
|
| +<script>
|
| + var gBody = document.getElementsByTagName("body")[0];
|
| +
|
| + test(function() {
|
| + assert_equals(document.getElementById(""), null);
|
| + }, "Calling document.getElementById with an empty string argument.");
|
| +
|
| + test(function() {
|
| + var element = document.createElement("div");
|
| + element.setAttribute("id", "null");
|
| + document.body.appendChild(element);
|
| + this.add_cleanup(function() { document.body.removeChild(element) });
|
| + assert_equals(document.getElementById(null), element);
|
| + }, "Calling document.getElementById with a null argument.");
|
| +
|
| + test(function() {
|
| + var element = document.createElement("div");
|
| + element.setAttribute("id", "undefined");
|
| + document.body.appendChild(element);
|
| + this.add_cleanup(function() { document.body.removeChild(element) });
|
| + assert_equals(document.getElementById(undefined), element);
|
| + }, "Calling document.getElementById with an undefined argument.");
|
| +
|
| +
|
| + test(function() {
|
| + var bar = document.getElementById("test1");
|
| + assert_not_equals(bar, null, "should not be null");
|
| + assert_equals(bar.tagName, "DIV", "should have expected tag name.");
|
| + assert_true(bar instanceof HTMLDivElement, "should be a valid Element instance");
|
| + }, "on static page");
|
| +
|
| +
|
| + test(function() {
|
| + var TEST_ID = "test2";
|
| +
|
| + var test = document.createElement("div");
|
| + test.setAttribute("id", TEST_ID);
|
| + gBody.appendChild(test);
|
| +
|
| + // test: appended element
|
| + var result = document.getElementById(TEST_ID);
|
| + assert_not_equals(result, null, "should not be null.");
|
| + assert_equals(result.tagName, "DIV", "should have appended element's tag name");
|
| + assert_true(result instanceof HTMLDivElement, "should be a valid Element instance");
|
| +
|
| + // test: removed element
|
| + gBody.removeChild(test);
|
| + var removed = document.getElementById(TEST_ID);
|
| + // `document.getElementById()` returns `null` if there is none.
|
| + // https://dom.spec.whatwg.org/#dom-nonelementparentnode-getelementbyid
|
| + assert_equals(removed, null, "should not get removed element.");
|
| + }, "Document.getElementById with a script-inserted element");
|
| +
|
| +
|
| + test(function() {
|
| + // setup fixtures.
|
| + var TEST_ID = "test3";
|
| + var test = document.createElement("div");
|
| + test.setAttribute("id", TEST_ID);
|
| + gBody.appendChild(test);
|
| +
|
| + // update id
|
| + var UPDATED_ID = "test3-updated";
|
| + test.setAttribute("id", UPDATED_ID);
|
| + var e = document.getElementById(UPDATED_ID);
|
| + assert_equals(e, test, "should get the element with id.");
|
| +
|
| + var old = document.getElementById(TEST_ID);
|
| + assert_equals(old, null, "shouldn't get the element by the old id.");
|
| +
|
| + // remove id.
|
| + test.removeAttribute("id");
|
| + var e2 = document.getElementById(UPDATED_ID);
|
| + assert_equals(e2, null, "should return null when the passed id is none in document.");
|
| + }, "update `id` attribute via setAttribute/removeAttribute");
|
| +
|
| +
|
| + test(function() {
|
| + var TEST_ID = "test4-should-not-exist";
|
| +
|
| + var e = document.createElement('div');
|
| + e.setAttribute("id", TEST_ID);
|
| +
|
| + assert_equals(document.getElementById(TEST_ID), null, "should be null");
|
| + document.body.appendChild(e);
|
| + assert_equals(document.getElementById(TEST_ID), e, "should be the appended element");
|
| + }, "Ensure that the id attribute only affects elements present in a document");
|
| +
|
| +
|
| + test(function() {
|
| + // the method should return the 1st element.
|
| + var TEST_ID = "test5";
|
| + var target = document.getElementById(TEST_ID);
|
| + assert_not_equals(target, null, "should not be null");
|
| + assert_equals(target.getAttribute("data-name"), "1st", "should return the 1st");
|
| +
|
| + // even if after the new element was appended.
|
| + var element4 = document.createElement("div");
|
| + element4.setAttribute("id", TEST_ID);
|
| + element4.setAttribute("data-name", "4th");
|
| + gBody.appendChild(element4);
|
| + var target2 = document.getElementById(TEST_ID);
|
| + assert_not_equals(target2, null, "should not be null");
|
| + assert_equals(target2.getAttribute("data-name"), "1st", "should be the 1st");
|
| +
|
| + // should return the next element after removed the subtree including the 1st element.
|
| + target2.parentNode.removeChild(target2);
|
| + var target3 = document.getElementById(TEST_ID);
|
| + assert_not_equals(target3, null, "should not be null");
|
| + assert_equals(target3.getAttribute("data-name"), "4th", "should be the 4th");
|
| + }, "in tree order, within the context object's tree");
|
| +
|
| +
|
| + test(function() {
|
| + var TEST_ID = "test6";
|
| + var s = document.createElement("div");
|
| + s.setAttribute("id", TEST_ID);
|
| + // append to Element, not Document.
|
| + document.createElement("div").appendChild(s);
|
| +
|
| + assert_equals(document.getElementById(TEST_ID), null, "should be null");
|
| + }, "Modern browsers optimize this method with using internal id cache. " +
|
| + "This test checks that their optimization should effect only append to `Document`, not append to `Node`.");
|
| +
|
| +
|
| + test(function() {
|
| + var TEST_ID = "test7"
|
| + var element = document.createElement("div");
|
| + element.setAttribute("id", TEST_ID);
|
| + gBody.appendChild(element);
|
| +
|
| + var target = document.getElementById(TEST_ID);
|
| + assert_equals(target, element, "should return the element before changing the value");
|
| +
|
| + element.attributes[0].value = TEST_ID + "-updated";
|
| + var target2 = document.getElementById(TEST_ID);
|
| + assert_equals(target2, null, "should return null after updated id via Attr.value");
|
| + var target3 = document.getElementById(TEST_ID + "-updated");
|
| + assert_equals(target3, element, "should be equal to the updated element.");
|
| + }, "changing attribute's value via `Attr` gotten from `Element.attribute`.");
|
| +
|
| +
|
| + test(function() {
|
| + var TEST_ID = "test8";
|
| +
|
| + // setup fixture
|
| + var element = document.createElement("div");
|
| + element.setAttribute("id", TEST_ID + "-fixture");
|
| + gBody.appendChild(element);
|
| +
|
| + // add id-ed element with using innerHTML
|
| + element.innerHTML = "<div id='"+ TEST_ID +"'></div>";
|
| + var test = document.getElementById(TEST_ID);
|
| + assert_equals(test, element.firstChild, "should not be null");
|
| + assert_equals(test.tagName, "DIV", "should have expected tag name.");
|
| + assert_true(test instanceof HTMLDivElement, "should be a valid Element instance");
|
| + }, "add id attribute via innerHTML");
|
| +
|
| +
|
| + test(function() {
|
| + var TEST_ID = "test9";
|
| +
|
| + // add fixture
|
| + var fixture = document.createElement("div");
|
| + fixture.setAttribute("id", TEST_ID + "-fixture");
|
| + gBody.appendChild(fixture);
|
| +
|
| + var element = document.createElement("div");
|
| + element.setAttribute("id", TEST_ID);
|
| + fixture.appendChild(element);
|
| +
|
| + // check 'getElementById' should get the 'element'
|
| + assert_equals(document.getElementById(TEST_ID), element, "should not be null");
|
| +
|
| + // remove id-ed element with using innerHTML (clear 'element')
|
| + fixture.innerHTML = "";
|
| + var test = document.getElementById(TEST_ID);
|
| + assert_equals(test, null, "should be null.");
|
| + }, "remove id attribute via innerHTML");
|
| +
|
| +
|
| + test(function() {
|
| + var TEST_ID = "test10";
|
| +
|
| + // setup fixture
|
| + var element = document.createElement("div");
|
| + element.setAttribute("id", TEST_ID + "-fixture");
|
| + gBody.appendChild(element);
|
| +
|
| + // add id-ed element with using outerHTML
|
| + element.outerHTML = "<div id='"+ TEST_ID +"'></div>";
|
| + var test = document.getElementById(TEST_ID);
|
| + assert_not_equals(test, null, "should not be null");
|
| + assert_equals(test.tagName, "DIV", "should have expected tag name.");
|
| + assert_true(test instanceof HTMLDivElement,"should be a valid Element instance");
|
| + }, "add id attribute via outerHTML");
|
| +
|
| +
|
| + test(function() {
|
| + var TEST_ID = "test11";
|
| +
|
| + var element = document.createElement("div");
|
| + element.setAttribute("id", TEST_ID);
|
| + gBody.appendChild(element);
|
| +
|
| + var test = document.getElementById(TEST_ID);
|
| + assert_equals(test, element, "should be equal to the appended element.");
|
| +
|
| + // remove id-ed element with using outerHTML
|
| + element.outerHTML = "<div></div>";
|
| + var test = document.getElementById(TEST_ID);
|
| + assert_equals(test, null, "should be null.");
|
| + }, "remove id attribute via outerHTML");
|
| +
|
| +
|
| + test(function() {
|
| + // setup fixtures.
|
| + var TEST_ID = "test12";
|
| + var test = document.createElement("div");
|
| + test.id = TEST_ID;
|
| + gBody.appendChild(test);
|
| +
|
| + // update id
|
| + var UPDATED_ID = TEST_ID + "-updated";
|
| + test.id = UPDATED_ID;
|
| + var e = document.getElementById(UPDATED_ID);
|
| + assert_equals(e, test, "should get the element with id.");
|
| +
|
| + var old = document.getElementById(TEST_ID);
|
| + assert_equals(old, null, "shouldn't get the element by the old id.");
|
| +
|
| + // remove id.
|
| + test.id = "";
|
| + var e2 = document.getElementById(UPDATED_ID);
|
| + assert_equals(e2, null, "should return null when the passed id is none in document.");
|
| + }, "update `id` attribute via element.id");
|
| +
|
| +
|
| + test(function() {
|
| + var TEST_ID = "test13";
|
| +
|
| + var create_same_id_element = function (order) {
|
| + var element = document.createElement("div");
|
| + element.setAttribute("id", TEST_ID);
|
| + element.setAttribute("data-order", order);// for debug
|
| + return element;
|
| + };
|
| +
|
| + // create fixture
|
| + var container = document.createElement("div");
|
| + container.setAttribute("id", TEST_ID + "-fixture");
|
| + gBody.appendChild(container);
|
| +
|
| + var element1 = create_same_id_element("1");
|
| + var element2 = create_same_id_element("2");
|
| + var element3 = create_same_id_element("3");
|
| + var element4 = create_same_id_element("4");
|
| +
|
| + // append element: 2 -> 4 -> 3 -> 1
|
| + container.appendChild(element2);
|
| + container.appendChild(element4);
|
| + container.insertBefore(element3, element4);
|
| + container.insertBefore(element1, element2);
|
| +
|
| +
|
| + var test = document.getElementById(TEST_ID);
|
| + assert_equals(test, element1, "should return 1st element");
|
| + container.removeChild(element1);
|
| +
|
| + test = document.getElementById(TEST_ID);
|
| + assert_equals(test, element2, "should return 2nd element");
|
| + container.removeChild(element2);
|
| +
|
| + test = document.getElementById(TEST_ID);
|
| + assert_equals(test, element3, "should return 3rd element");
|
| + container.removeChild(element3);
|
| +
|
| + test = document.getElementById(TEST_ID);
|
| + assert_equals(test, element4, "should return 4th element");
|
| + container.removeChild(element4);
|
| +
|
| +
|
| + }, "where insertion order and tree order don't match");
|
| +
|
| + test(function() {
|
| + var TEST_ID = "test14";
|
| + var a = document.createElement("a");
|
| + var b = document.createElement("b");
|
| + a.appendChild(b);
|
| + b.id = TEST_ID;
|
| + assert_equals(document.getElementById(TEST_ID), null);
|
| +
|
| + gBody.appendChild(a);
|
| + assert_equals(document.getElementById(TEST_ID), b);
|
| + }, "Inserting an id by inserting its parent node");
|
| +
|
| + test(function () {
|
| + var TEST_ID = "test15"
|
| + var outer = document.getElementById("outer");
|
| + var middle = document.getElementById("middle");
|
| + var inner = document.getElementById("inner");
|
| + outer.removeChild(middle);
|
| +
|
| + var new_el = document.createElement("h1");
|
| + new_el.id = "heading";
|
| + inner.appendChild(new_el);
|
| + // the new element is not part of the document since
|
| + // "middle" element was removed previously
|
| + assert_equals(document.getElementById("heading"), null);
|
| + }, "Document.getElementById must not return nodes not present in document");
|
| +
|
| + // TODO:
|
| + // id attribute in a namespace
|
| +
|
| +
|
| + // TODO:
|
| + // SVG + MathML elements with id attributes
|
| +
|
| +</script>
|
| +</body>
|
| +</html>
|
|
|