| <!DOCTYPE html> |
| <title>Node.normalize()</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <div id=log></div> |
| <script> |
| test(function() { |
| var df = document.createDocumentFragment(), |
| t1 = document.createTextNode("1"), |
| t2 = document.createTextNode("2"), |
| t3 = document.createTextNode("3"), |
| t4 = document.createTextNode("4") |
| df.appendChild(t1) |
| df.appendChild(t2) |
| assert_equals(df.childNodes.length, 2) |
| assert_equals(df.textContent, "12") |
| var el = document.createElement('x') |
| df.appendChild(el) |
| el.appendChild(t3) |
| el.appendChild(t4) |
| document.normalize() |
| assert_equals(el.childNodes.length, 2) |
| assert_equals(el.textContent, "34") |
| assert_equals(df.childNodes.length, 3) |
| assert_equals(t1.data, "1") |
| df.normalize() |
| assert_equals(df.childNodes.length, 2) |
| assert_equals(df.firstChild, t1) |
| assert_equals(t1.data, "12") |
| assert_equals(t2.data, "2") |
| assert_equals(el.firstChild, t3) |
| assert_equals(t3.data, "34") |
| assert_equals(t4.data, "4") |
| }) |
| |
| // https://www.w3.org/Bugs/Public/show_bug.cgi?id=19837 |
| test(function() { |
| var div = document.createElement("div") |
| var t1 = div.appendChild(document.createTextNode("")) |
| var t2 = div.appendChild(document.createTextNode("a")) |
| var t3 = div.appendChild(document.createTextNode("")) |
| assert_array_equals(div.childNodes, [t1, t2, t3]) |
| div.normalize(); |
| assert_array_equals(div.childNodes, [t2]) |
| }, "Empty text nodes separated by a non-empty text node") |
| test(function() { |
| var div = document.createElement("div") |
| var t1 = div.appendChild(document.createTextNode("")) |
| var t2 = div.appendChild(document.createTextNode("")) |
| assert_array_equals(div.childNodes, [t1, t2]) |
| div.normalize(); |
| assert_array_equals(div.childNodes, []) |
| }, "Empty text nodes") |
| |
| // The specification for normalize is clear that only "exclusive Text |
| // nodes" are to be modified. This excludes CDATASection nodes, which |
| // derive from Text. Naïve implementations may fail to skip |
| // CDATASection nodes, or even worse, try to test textContent or |
| // nodeValue without taking care to check the node type. They will |
| // fail this test. |
| test(function() { |
| // We create an XML document so that we can create CDATASection. |
| // Except for the CDATASection the result should be the same for |
| // an HTML document. (No non-Text node should be touched.) |
| var doc = new DOMParser().parseFromString("<div/>", "text/xml") |
| var div = doc.documentElement |
| var t1 = div.appendChild(doc.createTextNode("a")) |
| // The first parameter is the "target" of the processing |
| // instruction, and the 2nd is the text content. |
| var t2 = div.appendChild(doc.createProcessingInstruction("pi", "")) |
| var t3 = div.appendChild(doc.createTextNode("b")) |
| var t4 = div.appendChild(doc.createCDATASection("")) |
| var t5 = div.appendChild(doc.createTextNode("c")) |
| var t6 = div.appendChild(doc.createComment("")) |
| var t7 = div.appendChild(doc.createTextNode("d")) |
| var t8 = div.appendChild(doc.createElement("el")) |
| var t9 = div.appendChild(doc.createTextNode("e")) |
| var expected = [t1, t2, t3, t4, t5, t6, t7, t8, t9] |
| assert_array_equals(div.childNodes, expected) |
| div.normalize() |
| assert_array_equals(div.childNodes, expected) |
| }, "Non-text nodes with empty textContent values.") |
| </script> |