| <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.testRunner) |
| testRunner.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> |