214 lines
6.0 KiB
HTML
214 lines
6.0 KiB
HTML
<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>
|