<!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>