summaryrefslogtreecommitdiffstats
path: root/LayoutTests/fast/dom/Attr/change-id-via-attr-node-value.html
diff options
context:
space:
mode:
Diffstat (limited to 'LayoutTests/fast/dom/Attr/change-id-via-attr-node-value.html')
-rw-r--r--LayoutTests/fast/dom/Attr/change-id-via-attr-node-value.html223
1 files changed, 223 insertions, 0 deletions
diff --git a/LayoutTests/fast/dom/Attr/change-id-via-attr-node-value.html b/LayoutTests/fast/dom/Attr/change-id-via-attr-node-value.html
new file mode 100644
index 0000000..c4e97bd
--- /dev/null
+++ b/LayoutTests/fast/dom/Attr/change-id-via-attr-node-value.html
@@ -0,0 +1,223 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<link rel="stylesheet" href="../../js/resources/js-test-style.css">
+<script src="../../js/resources/js-test-pre.js"></script>
+</head>
+<body id="a">
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Test that different ways of changing an element's id all work properly.");
+
+debug("\n1. Check id after parsing.");
+shouldBe('document.getElementById("a")', 'document.body');
+shouldBe('document.body.id', '"a"');
+shouldBe('document.body.getAttributeNode("id").isId', 'true');
+shouldBe('document.body.getAttributeNode("id").textContent', '"a"');
+
+debug("\n2. Change Attr.value.");
+document.body.getAttributeNode("id").value = "b";
+shouldBe('document.getElementById("a")', 'null');
+shouldBe('document.getElementById("b")', 'document.body');
+shouldBe('document.body.getAttributeNode("id").textContent', '"b"');
+
+debug("\n3. Change HTMLElement.id.");
+document.body.id = "c";
+shouldBe('document.getElementById("b")', 'null');
+shouldBe('document.getElementById("c")', 'document.body');
+shouldBe('document.body.getAttributeNode("id").textContent', '"c"');
+
+debug("\n4. Change id attribute via setAttribute().");
+document.body.setAttribute("id", "d");
+shouldBe('document.getElementById("c")', 'null');
+shouldBe('document.getElementById("d")', 'document.body');
+shouldBe('document.body.getAttributeNode("id").textContent', '"d"');
+
+debug("\n5. Change id attribute via setAttributeNS().");
+document.body.setAttributeNS(null, "id", "e");
+shouldBe('document.getElementById("d")', 'null');
+shouldBe('document.getElementById("e")', 'document.body');
+shouldBe('document.body.getAttributeNode("id").textContent', '"e"');
+
+var attrNode = document.body.getAttributeNode("id");
+
+debug("\n6. Change Attr.nodeValue.");
+document.body.getAttributeNode("id").nodeValue = "f";
+shouldBe('document.getElementById("e")', 'null');
+shouldBe('document.getElementById("f")', 'document.body');
+shouldBe('document.body.id', '"f"');
+shouldBe('document.body.getAttribute("id")', '"f"');
+shouldBe('attrNode.textContent', '"f"');
+shouldBe('attrNode.childNodes.length', '1');
+
+// Firefox doesn't support these for Attr nodes.
+debug("\n7. Attr.replaceChild().");
+try {
+ attrNode.replaceChild(document.createTextNode("g"), attrNode.firstChild);
+ shouldBe('document.getElementById("f")', 'null');
+ shouldBe('document.getElementById("g")', 'document.body');
+ shouldBe('document.body.id', '"g"');
+ shouldBe('document.body.getAttribute("id")', '"g"');
+ shouldBe('attrNode.textContent', '"g"');
+ shouldBe('attrNode.childNodes.length', '1');
+} catch (ex) {
+ debug(ex);
+}
+
+debug("\n8. Attr.insertBefore().");
+try {
+ attrNode.insertBefore(document.createTextNode("0"), attrNode.firstChild);
+ shouldBe('document.getElementById("g")', 'null');
+ shouldBe('document.getElementById("0g")', 'document.body');
+ shouldBe('document.body.id', '"0g"');
+ shouldBe('document.body.getAttribute("id")', '"0g"');
+ shouldBe('attrNode.textContent', '"0g"');
+ shouldBe('attrNode.childNodes.length', '2');
+} catch (ex) {
+ debug(ex);
+}
+
+debug("\n9. attr.appendChild().");
+try {
+ attrNode.appendChild(document.createTextNode("2"));
+ shouldBe('document.getElementById("0g")', 'null');
+ shouldBe('document.getElementById("0g2")', 'document.body');
+ shouldBe('document.body.id', '"0g2"');
+ shouldBe('document.body.getAttribute("id")', '"0g2"');
+ shouldBe('attrNode.textContent', '"0g2"');
+ shouldBe('attrNode.childNodes.length', '3');
+} catch (ex) {
+ debug(ex);
+}
+
+debug("\n10. Attr.removeChild()");
+attrNode.nodeValue = "h";
+attrNode.removeChild(attrNode.firstChild);
+shouldBe('document.body.getAttributeNode("id").childNodes.length', '0');
+shouldBe('document.getElementById("h")', 'null');
+shouldBe('document.getElementById("")', 'null');
+shouldBe('document.body.id', '""');
+shouldBe('document.body.getAttribute("id")', '""');
+shouldBe('document.body.getAttributeNode("id").textContent', '""');
+
+debug("\n11. Changing Text.nodeValue.");
+attrNode.nodeValue = "h";
+attrNode.firstChild.nodeValue = "i";
+shouldBe('attrNode.firstChild.nodeValue', '"i"');
+shouldBe('document.getElementById("i")', 'document.body');
+shouldBe('document.body.id', '"i"');
+shouldBe('document.body.getAttribute("id")', '"i"');
+shouldBe('attrNode.textContent', '"i"');
+shouldBe('attrNode.childNodes.length', '1');
+
+debug("\n12. Chnaging Attr.textContent.");
+attrNode.textContent = "hi";
+shouldBe('document.getElementById("i")', 'null');
+shouldBe('document.getElementById("hi")', 'document.body');
+shouldBe('document.body.id', '"hi"');
+shouldBe('document.body.getAttribute("id")', '"hi"');
+shouldBe('attrNode.textContent', '"hi"');
+shouldBe('attrNode.childNodes.length', '1');
+
+debug("\n13. Text.splitText().");
+attrNode.firstChild.splitText(1);
+shouldBe('document.getElementById("hi")', 'document.body');
+shouldBe('document.body.id', '"hi"');
+shouldBe('document.body.getAttribute("id")', '"hi"');
+shouldBe('document.body.getAttributeNode("id").textContent', '"hi"');
+shouldBe('document.body.getAttributeNode("id").childNodes.length', '2');
+
+debug("\n14. Node.normalize(), joining text nodes.");
+attrNode.normalize();
+shouldBe('document.getElementById("hi")', 'document.body');
+shouldBe('document.body.id', '"hi"');
+shouldBe('document.body.getAttribute("id")', '"hi"');
+shouldBe('document.body.getAttributeNode("id").textContent', '"hi"');
+shouldBe('document.body.getAttributeNode("id").childNodes.length', '1');
+
+debug("\n15. Changing Attr.nodeValue.");
+attrNode.nodeValue = "foo";
+attrNode.firstChild.replaceWholeText("j");
+shouldBe('document.getElementById("hi")', 'null');
+shouldBe('document.getElementById("j")', 'document.body');
+shouldBe('document.body.id', '"j"');
+shouldBe('document.body.getAttribute("id")', '"j"');
+shouldBe('attrNode.textContent', '"j"');
+shouldBe('attrNode.childNodes.length', '1');
+
+debug("\n16. Changing Text.data.");
+attrNode.firstChild.data = "k";
+shouldBe('document.getElementById("j")', 'null');
+shouldBe('document.getElementById("k")', 'document.body');
+shouldBe('document.body.id', '"k"');
+shouldBe('document.body.getAttribute("id")', '"k"');
+shouldBe('attrNode.textContent', '"k"');
+shouldBe('attrNode.childNodes.length', '1');
+
+debug("\n17. Changing text child with appendData().");
+attrNode.firstChild.appendData("l");
+shouldBe('document.getElementById("k")', 'null');
+shouldBe('document.getElementById("kl")', 'document.body');
+shouldBe('document.body.id', '"kl"');
+shouldBe('document.body.getAttribute("id")', '"kl"');
+shouldBe('attrNode.textContent', '"kl"');
+shouldBe('attrNode.childNodes.length', '1');
+
+debug("\n18. Changing text child with insertData().");
+attrNode.firstChild.insertData(1, "1");
+shouldBe('document.getElementById("kl")', 'null');
+shouldBe('document.getElementById("k1l")', 'document.body');
+shouldBe('document.body.id', '"k1l"');
+shouldBe('document.body.getAttribute("id")', '"k1l"');
+shouldBe('attrNode.textContent', '"k1l"');
+shouldBe('attrNode.childNodes.length', '1');
+
+debug("\n19. Changing text child with deleteData().");
+attrNode.firstChild.deleteData(0, 2);
+shouldBe('document.getElementById("k1l")', 'null');
+shouldBe('document.getElementById("l")', 'document.body');
+shouldBe('document.body.id', '"l"');
+shouldBe('document.body.getAttribute("id")', '"l"');
+shouldBe('attrNode.textContent', '"l"');
+shouldBe('attrNode.childNodes.length', '1');
+
+debug("\n20. Changing text child with replaceData().");
+attrNode.firstChild.replaceData(0, 1, "mn");
+shouldBe('document.getElementById("l")', 'null');
+shouldBe('document.getElementById("mn")', 'document.body');
+shouldBe('document.body.id', '"mn"');
+shouldBe('document.body.getAttribute("id")', '"mn"');
+shouldBe('attrNode.textContent', '"mn"');
+shouldBe('attrNode.childNodes.length', '1');
+
+debug("\n21. Remove an Attr node.");
+document.body.removeAttributeNode(attrNode);
+shouldBe('document.body.id', '""');
+shouldBe('document.getElementById("mn")', 'null');
+shouldBe('document.body.getAttribute("id")', 'null');
+shouldBe('document.body.getAttributeNode("id")', 'null');
+
+debug("\n22. Add an Attr node.");
+var attrNode = document.createAttribute("id");
+attrNode.value = "o";
+document.body.setAttributeNode(attrNode);
+shouldBe('document.getElementById("o")', 'document.body');
+shouldBe('document.body.id', '"o"');
+shouldBe('document.body.getAttribute("id")', '"o"');
+
+debug("\n23. Add an Attr node over an existing one.");
+var attrNode = document.createAttribute("id");
+attrNode.value = "p";
+document.body.setAttributeNode(attrNode);
+shouldBe('document.getElementById("o")', 'null');
+shouldBe('document.getElementById("p")', 'document.body');
+shouldBe('document.body.id', '"p"');
+shouldBe('document.body.getAttribute("id")', '"p"');
+
+var successfullyParsed = true;
+</script>
+<script src="../../js/resources/js-test-post.js"></script>
+</body>
+</html>