diff options
Diffstat (limited to 'testing/web-platform/tests/dom/nodes/Node-normalize.html')
-rw-r--r-- | testing/web-platform/tests/dom/nodes/Node-normalize.html | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/testing/web-platform/tests/dom/nodes/Node-normalize.html b/testing/web-platform/tests/dom/nodes/Node-normalize.html new file mode 100644 index 0000000000..4d455996e5 --- /dev/null +++ b/testing/web-platform/tests/dom/nodes/Node-normalize.html @@ -0,0 +1,83 @@ +<!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> |