normalize.html revision eff69b907ef2cd3a9af0351287a929c66f58e3f6
1<html>
2
3<head>
4
5<title>Test of DOM Node.normalize()</title>
6
7<script>
8
9function logLine(message)
10{
11    var console = document.getElementById("console");
12    console.appendChild(document.createTextNode(message));
13    console.appendChild(document.createElement('br'));
14}
15
16function log(message)
17{
18    var console = document.getElementById("console");
19    console.appendChild(document.createTextNode(message));
20}
21
22
23function prepare_test1(testDiv)
24{
25    testDiv.firstChild.splitText(4);
26    return testDiv.childNodes.length == 2;
27}
28function check_test1(testDiv)
29{
30    return testDiv.childNodes.length == 1;
31}
32
33function prepare_test2(testDiv)
34{
35    testDiv.firstChild.splitText(9);
36    testDiv.firstChild.splitText(4);
37    return testDiv.childNodes.length == 3;
38}
39function check_test2(testDiv)
40{
41    return testDiv.childNodes.length == 1;
42}
43
44function prepare_test3(testDiv)
45{
46    testDiv.childNodes[1].splitText(4);
47    testDiv.childNodes[4].splitText(3);
48    return testDiv.childNodes.length == 6;
49}
50function check_test3(testDiv)
51{
52    return testDiv.childNodes.length == 4;
53}
54
55function prepare_test4(testDiv)
56{
57    testDiv.childNodes[0].data = "";
58    return testDiv.childNodes.length == 1;
59}
60function check_test4(testDiv)
61{
62    return testDiv.childNodes.length == 0;
63}
64
65function prepare_test5(testDiv)
66{
67    testDiv.childNodes[1].data = "";
68    return testDiv.childNodes.length == 3;
69}
70function check_test5(testDiv)
71{
72    return testDiv.childNodes.length == 2;
73}
74
75function prepare_test6(testDiv)
76{
77    testDiv.childNodes[0].splitText(0);
78    testDiv.childNodes[0].splitText(0);
79    return testDiv.childNodes.length == 3;
80}
81function check_test6(testDiv)
82{
83    return testDiv.childNodes.length == 1;
84}
85
86function prepare_test7(testDiv)
87{
88    testDiv.childNodes[0].splitText(4);
89    testDiv.childNodes[0].splitText(4);
90    testDiv.childNodes[0].splitText(4);
91    return testDiv.childNodes.length == 4;
92}
93function check_test7(testDiv)
94{
95    return testDiv.childNodes.length == 1;
96}
97
98function prepare_test8(testDiv)
99{
100    testDiv.childNodes[0].splitText(4);
101    testDiv.childNodes[0].splitText(4);
102    return testDiv.childNodes.length == 3;
103}
104function check_test8(testDiv)
105{
106    return testDiv.childNodes.length == 1;
107}
108
109function prepare_test9(testDiv)
110{
111    testDiv.childNodes[1].splitText(4);
112    testDiv.childNodes[1].splitText(0);    // empty text node before other text nodes
113    testDiv.childNodes[5].splitText(3);
114    testDiv.childNodes[5].splitText(3);    // empty text node between other text nodes
115    testDiv.childNodes[7].splitText(2);    // empty text node after other text nodes
116    return testDiv.childNodes.length == 9;
117}
118function check_test9(testDiv)
119{
120    return testDiv.childNodes.length == 4;
121}
122
123function prepare_test10(testDiv)
124{
125    testDiv.childNodes[0].childNodes[0].splitText(2);
126    testDiv.childNodes[1].splitText(4);
127    testDiv.childNodes[3].childNodes[0].data = "";    // empty first text node of the second bold node
128    testDiv.childNodes[3].childNodes[1].childNodes[0].data = "";    // empty text node of the italic node
129    testDiv.childNodes[4].splitText(1);
130    return testDiv.childNodes.length == 6;
131}
132function check_test10(testDiv)
133{
134    return testDiv.childNodes.length == 4
135        && testDiv.childNodes[0].childNodes.length == 1        // first bold node must have single text node child
136        && testDiv.childNodes[2].childNodes.length == 1        // first bold node must have single italic node child
137        && testDiv.childNodes[2].childNodes[0].childNodes.length == 0;    // italic node must be empty
138}
139
140function runTest(testDiv, testName)
141{
142    if (self["prepare_"+testName](testDiv)) {
143        var oldHTML = testDiv.innerHTML;
144        testDiv.normalize();
145        if (testDiv.innerHTML != oldHTML) {
146            log("FAILED: innerHTML changed from \"" + oldHTML + "\" to \"" + testDiv.innerHTML + "\"");
147        } else {
148            if (self["check_"+testName](testDiv))
149                log("PASSED");
150            else
151                log("FAILED");
152        }        
153    } else {
154        log("FAILED in test preparation");
155    }
156}
157
158function runTests()
159{
160    if (window.layoutTestController)
161        layoutTestController.dumpAsText();
162
163    try {
164        var tests = document.getElementById("tests").childNodes;
165        for (i = 0; i < tests.length; i++) {
166            var testDiv = tests[i];
167            // Skip formatting text nodes
168            if (testDiv.nodeType == Node.ELEMENT_NODE) {
169                var testName = testDiv.getAttribute("name");
170                
171                log(testName + " (" + testDiv.getAttribute("description") + "): ");
172                
173                try {
174                    runTest(testDiv, testName);
175                } catch(e) {
176                    log("FAILED with exception: " + e);
177                }
178                
179                logLine("")
180            }
181        }
182
183    } catch(e) {
184        logLine("FAILED, exception thrown during tests: " + e);
185    }
186}
187
188</script>
189
190</head>
191
192<body onload="runTests()">
193
194<div id="description">Several tests of the DOM normalize() function.</div>
195
196<div id="tests" style="display:none">
197    <div name="test1" description="two non-empty text nodes">some text</div>
198    <div name="test2" description="three non-empty text nodes">some more text</div>
199    <div name="test3" description="non-empty text nodes mixed with elements"><b></b>some more<b></b> text</div>
200    <div name="test4" description="single empty text node">text</div>
201    <div name="test5" description="empty text node between elements"><b></b>text<i></i></div>
202    <div name="test6" description="empty text nodes before non-empty node">text</div>
203    <div name="test7" description="empty text nodes after non-empty node">text</div>
204    <div name="test8" description="empty text nodes between non-empty nodes">some text</div>
205    <div name="test9" description="empty and non-empty text nodes mixed with elements"><b></b>some more<b></b> text</div>
206    <div name="test10" description="mixed cases including deeper nested text nodes"><b>text</b>text <b>text<i>text</i></b> text</div>
207</div>
208
209<div id="console"></div>
210
211</body>
212
213</html>
214