<html> <head> <title>Test of DOM Node.normalize()</title> <script> function logLine(message) { var console = document.getElementById("console"); console.appendChild(document.createTextNode(message)); console.appendChild(document.createElement('br')); } function log(message) { var console = document.getElementById("console"); console.appendChild(document.createTextNode(message)); } function prepare_test1(testDiv) { testDiv.firstChild.splitText(4); return testDiv.childNodes.length == 2; } function check_test1(testDiv) { return testDiv.childNodes.length == 1; } function prepare_test2(testDiv) { testDiv.firstChild.splitText(9); testDiv.firstChild.splitText(4); return testDiv.childNodes.length == 3; } function check_test2(testDiv) { return testDiv.childNodes.length == 1; } function prepare_test3(testDiv) { testDiv.childNodes[1].splitText(4); testDiv.childNodes[4].splitText(3); return testDiv.childNodes.length == 6; } function check_test3(testDiv) { return testDiv.childNodes.length == 4; } function prepare_test4(testDiv) { testDiv.childNodes[0].data = ""; return testDiv.childNodes.length == 1; } function check_test4(testDiv) { return testDiv.childNodes.length == 0; } function prepare_test5(testDiv) { testDiv.childNodes[1].data = ""; return testDiv.childNodes.length == 3; } function check_test5(testDiv) { return testDiv.childNodes.length == 2; } function prepare_test6(testDiv) { testDiv.childNodes[0].splitText(0); testDiv.childNodes[0].splitText(0); return testDiv.childNodes.length == 3; } function check_test6(testDiv) { return testDiv.childNodes.length == 1; } function prepare_test7(testDiv) { testDiv.childNodes[0].splitText(4); testDiv.childNodes[0].splitText(4); testDiv.childNodes[0].splitText(4); return testDiv.childNodes.length == 4; } function check_test7(testDiv) { return testDiv.childNodes.length == 1; } function prepare_test8(testDiv) { testDiv.childNodes[0].splitText(4); testDiv.childNodes[0].splitText(4); return testDiv.childNodes.length == 3; } function check_test8(testDiv) { return testDiv.childNodes.length == 1; } function prepare_test9(testDiv) { testDiv.childNodes[1].splitText(4); testDiv.childNodes[1].splitText(0); // empty text node before other text nodes testDiv.childNodes[5].splitText(3); testDiv.childNodes[5].splitText(3); // empty text node between other text nodes testDiv.childNodes[7].splitText(2); // empty text node after other text nodes return testDiv.childNodes.length == 9; } function check_test9(testDiv) { return testDiv.childNodes.length == 4; } function prepare_test10(testDiv) { testDiv.childNodes[0].childNodes[0].splitText(2); testDiv.childNodes[1].splitText(4); testDiv.childNodes[3].childNodes[0].data = ""; // empty first text node of the second bold node testDiv.childNodes[3].childNodes[1].childNodes[0].data = ""; // empty text node of the italic node testDiv.childNodes[4].splitText(1); return testDiv.childNodes.length == 6; } function check_test10(testDiv) { return testDiv.childNodes.length == 4 && testDiv.childNodes[0].childNodes.length == 1 // first bold node must have single text node child && testDiv.childNodes[2].childNodes.length == 1 // first bold node must have single italic node child && testDiv.childNodes[2].childNodes[0].childNodes.length == 0; // italic node must be empty } function runTest(testDiv, testName) { if (self["prepare_"+testName](testDiv)) { var oldHTML = testDiv.innerHTML; testDiv.normalize(); if (testDiv.innerHTML != oldHTML) { log("FAILED: innerHTML changed from \"" + oldHTML + "\" to \"" + testDiv.innerHTML + "\""); } else { if (self["check_"+testName](testDiv)) log("PASSED"); else log("FAILED"); } } else { log("FAILED in test preparation"); } } function runTests() { if (window.layoutTestController) layoutTestController.dumpAsText(); try { var tests = document.getElementById("tests").childNodes; for (i = 0; i < tests.length; i++) { var testDiv = tests[i]; // Skip formatting text nodes if (testDiv.nodeType == Node.ELEMENT_NODE) { var testName = testDiv.getAttribute("name"); log(testName + " (" + testDiv.getAttribute("description") + "): "); try { runTest(testDiv, testName); } catch(e) { log("FAILED with exception: " + e); } logLine("") } } } catch(e) { logLine("FAILED, exception thrown during tests: " + e); } } </script> </head> <body onload="runTests()"> <div id="description">Several tests of the DOM normalize() function.</div> <div id="tests" style="display:none"> <div name="test1" description="two non-empty text nodes">some text</div> <div name="test2" description="three non-empty text nodes">some more text</div> <div name="test3" description="non-empty text nodes mixed with elements"><b></b>some more<b></b> text</div> <div name="test4" description="single empty text node">text</div> <div name="test5" description="empty text node between elements"><b></b>text<i></i></div> <div name="test6" description="empty text nodes before non-empty node">text</div> <div name="test7" description="empty text nodes after non-empty node">text</div> <div name="test8" description="empty text nodes between non-empty nodes">some text</div> <div name="test9" description="empty and non-empty text nodes mixed with elements"><b></b>some more<b></b> text</div> <div name="test10" description="mixed cases including deeper nested text nodes"><b>text</b>text <b>text<i>text</i></b> text</div> </div> <div id="console"></div> </body> </html>