/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ function run_test() { /* * NOTE: [i] is not allowed in this test, since it's done via classinfo and * we don't have that in xpcshell; the workaround is item(i). Suck. */ init(); test_element(); // more tests would be nice here (such as for documents), but the primary // uses of Node.normalize() are in test_element; stuff beyond this is either // unimplemented or is unlikely to be used all that much within a browser // DOM implementation } // TEST CODE var doc; // cache for use in all tests function init() { doc = ParseFile("empty_document.xml"); } function test_element() { var x = doc.createElement("funk"); // one empty Text node x.appendChild(doc.createTextNode("")); Assert.equal(x.childNodes.length, 1); x.normalize(); Assert.equal(x.childNodes.length, 0); // multiple empty Text nodes x.appendChild(doc.createTextNode("")); x.appendChild(doc.createTextNode("")); Assert.equal(x.childNodes.length, 2); x.normalize(); Assert.equal(x.childNodes.length, 0); // empty Text node followed by other Text node x.appendChild(doc.createTextNode("")); x.appendChild(doc.createTextNode("Guaraldi")); Assert.equal(x.childNodes.length, 2); x.normalize(); Assert.equal(x.childNodes.length, 1); Assert.equal(x.childNodes.item(0).nodeValue, "Guaraldi"); // Text node followed by empty Text node clearKids(x); x.appendChild(doc.createTextNode("Guaraldi")); x.appendChild(doc.createTextNode("")); Assert.equal(x.childNodes.length, 2); x.normalize(); Assert.equal(x.childNodes.item(0).nodeValue, "Guaraldi"); // Text node followed by empty Text node followed by other Node clearKids(x); x.appendChild(doc.createTextNode("Guaraldi")); x.appendChild(doc.createTextNode("")); x.appendChild(doc.createElement("jazzy")); Assert.equal(x.childNodes.length, 3); x.normalize(); Assert.equal(x.childNodes.length, 2); Assert.equal(x.childNodes.item(0).nodeValue, "Guaraldi"); Assert.equal(x.childNodes.item(1).nodeName, "jazzy"); // Nodes are recursively normalized clearKids(x); var kid = doc.createElement("eit"); kid.appendChild(doc.createTextNode("")); x.appendChild(doc.createTextNode("Guaraldi")); x.appendChild(doc.createTextNode("")); x.appendChild(kid); Assert.equal(x.childNodes.length, 3); Assert.equal(x.childNodes.item(2).childNodes.length, 1); x.normalize(); Assert.equal(x.childNodes.length, 2); Assert.equal(x.childNodes.item(0).nodeValue, "Guaraldi"); Assert.equal(x.childNodes.item(1).childNodes.length, 0); } // UTILITY FUNCTIONS function clearKids(node) { while (node.hasChildNodes()) { node.removeChild(node.childNodes.item(0)); } }