|
@@ -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>
|