summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/dom/nodes/Node-normalize.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/dom/nodes/Node-normalize.html')
-rw-r--r--testing/web-platform/tests/dom/nodes/Node-normalize.html83
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>