load('dom.js'); load('string.js'); load('array.js'); load('../nanosax.js/nanosax.js'); load('../dommer/dommer.js'); WARN_ON_PREFIX = false; function setup() { this.doc = new dommer.Document(); }; function test_toXML() { var node = doc.createElementNS('foo:', 'foo'); node.appendChild(doc.createElementNS('bar:', 'bar')); node.appendChild(doc.createTextNode('baz')); testing.assertEquals(domlib.toXML(node), 'baz'); }; function test_toXML_document() { var node = doc.createElementNS('foo:', 'foo'); doc.documentElement = node; node.appendChild(doc.createElementNS('bar:', 'bar')); node.appendChild(doc.createTextNode('baz')); testing.assertEquals(domlib.toXML(doc), '\n' + 'baz'); }; function test_toXML_text() { var node = doc.createElementNS('foo:', 'foo'); var text = doc.createTextNode('baz & qux'); node.appendChild(text); testing.assertEquals(domlib.toXML(text), 'baz & qux'); }; function test_toXML_no_xmlns_repeat() { var node = doc.createElementNS('foo:', 'foo'); node.appendChild(doc.createElementNS('foo:', 'bar')); testing.assertEquals(domlib.toXML(node), ''); }; function test_toXML_no_xmlns_prefix_repeat() { var node = doc.createElementNS('foo:', 'foo'); node.setPrefix('foo'); var barnode = doc.createElementNS('foo:', 'bar') barnode.setPrefix('foo'); node.appendChild(barnode); testing.assertEquals(domlib.toXML(node), ''); }; function test_toXML_no_xmlns_xml_xmlns() { var node = doc.createElementNS('foo:', 'foo'); node.setPrefix('foo'); node._setProtected('namespaceURI', 'foo:'); testing.assertEquals(domlib.toXML(node), ''); }; function test_toXML_duplicate_prefix() { var node = doc.createElementNS('foo:', 'foo'); node.setAttributeNS('bar:', 'bar', 'bar'); testing.assertEquals(domlib.toXML(node), '') }; function test_toXML_unprefixed_attr_with_child() { var node = doc.createElementNS('foo:', 'foo'); node.setPrefix(''); var child = doc.createElementNS('foo:', 'bar'); node.appendChild(child); child.setAttributeNS('foo:', 'baz', 'baz'); testing.assertEquals(domlib.toXML(node), ''); }; function test_toXML_unprefixed_attr_with_grandchild() { var node = doc.createElementNS('foo:', 'foo'); node.setPrefix(''); var child = doc.createElementNS('foo:', 'bar'); node.appendChild(child); child.setAttributeNS('foo:', 'baz', 'baz'); var child2 = doc.createElementNS('foo2:', 'quux'); child.appendChild(child2); testing.assertEquals(domlib.toXML(node), '' + ''); }; function test_toXML_prefixed_attr_default_node() { var node = doc.createElement('foo'); node.setAttributeNS('bar:', 'bar', 'bar'); testing.assertEquals(domlib.toXML(node), ''); }; function test_toXML_attr_same_ns() { var node = doc.createElementNS('foo:', 'foo'); node.setAttributeNS('foo:', 'bar', 'baz'); testing.assertEquals(domlib.toXML(node), ''); }; function test_toXML_attr_sans_ns() { var node = doc.createElementNS('foo:', 'foo'); node.setAttribute('bar', 'baz'); testing.assertEquals(node.attributes[0].namespaceURI, null); testing.assertEquals(domlib.toXML(node), ''); }; function test_toXML_xmlid() { var node = doc.createElement('foo'); node.setAttribute('xml:id', 'foobar'); testing.assertEquals(domlib.toXML(node), ''); }; function test_toXML_xmlid_with_namespace() { var node = doc.createElement('foo'); node.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:id', 'foobar'); testing.assertEquals(domlib.toXML(node), ''); }; function test_toXML_xmlid_nested() { // just to keep Jasper happy :) var node = doc.createElement('foo'); var child = doc.createElement('bar'); node.setAttribute('xml:id', 'foo'); child.setAttribute('xml:id', 'bar'); node.appendChild(child); testing.assertEquals(domlib.toXML(node), ''); }; function test_toXML_triple_nested() { // this borked in Cobes var node1 = doc.createElementNS('bar:', 'a'); doc.appendChild(node1); var node2 = doc.createElementNS('foo:', 'b'); node2.setPrefix('dbi'); node1.appendChild(node2); var node3 = doc.createElementNS('bar:', 'c'); node2.appendChild(node3); testing.assertEquals(domlib.toXML(node1), '' + ''); }; function test_hasClass() { var node = doc.createElement('foo'); node.className = 'foo'; testing.assertTrue(domlib.hasClass(node, 'foo')); testing.assertFalse(domlib.hasClass(node, 'fo')); testing.assertFalse(domlib.hasClass(node, 'oo')); node.className = 'foo bar'; testing.assertTrue(domlib.hasClass(node, 'foo')); testing.assertTrue(domlib.hasClass(node, 'bar')); testing.assertFalse(domlib.hasClass(node, 'foo bar')); }; function test_addClass() { var node = doc.createElement('foo'); node.className = ''; domlib.addClass(node, 'foo'); testing.assertEquals(node.className, 'foo'); domlib.addClass(node, 'bar'); testing.assertEquals(node.className, 'foo bar'); domlib.addClass(node, 'foo'); testing.assertEquals(node.className, 'foo bar'); }; function test_removeClass() { var node = doc.createElement('foo'); node.className = 'foo bar'; domlib.removeClass(node, 'foo'); testing.assertEquals(node.className, 'bar'); domlib.removeClass(node, 'bar'); testing.assertFalse(node.className); testing.assertThrows(undefined, domlib.removeClass, domlib, node, 'baz'); }; function test_toXML_nested_namespaces() { var node = doc.createElementNS('foo:', 'foo'); var child = doc.createElementNS('bar:', 'bar'); doc.documentElement = node; node.appendChild(child); testing.assertEquals(domlib.toXML(doc.documentElement), ''); }; function test_toXML_comment() { var root = doc.createElement('foo'); doc.appendChild(root); root.appendChild(doc.createComment(' foo & bar ')); testing.assertEquals(domlib.toXML(doc.documentElement), ''); }; function test_getElementsByClassName() { var root = doc.createElement('foo'); var child = doc.createElement('bar'); root.appendChild(child); doc.appendChild(root); testing.assertEquals(domlib.getElementsByClassName(root, 'foo'), []); root.className = 'foo'; var result = domlib.getElementsByClassName(doc, 'foo'); testing.assertEquals(result.length, 1); testing.assertEquals(result[0].nodeName, 'foo'); child.className = 'foo'; var result = domlib.getElementsByClassName(doc, 'foo'); testing.assertEquals(result.length, 2); testing.assertEquals(result[1].nodeName, 'bar'); child.className = 'foo bar'; var result = domlib.getElementsByClassName(doc, 'foo'); testing.assertEquals(result.length, 2); child.className = 'foobar'; var result = domlib.getElementsByClassName(doc, 'foo'); testing.assertEquals(result.length, 1); }; function test_compareNodes_simple() { var n1 = doc.createElement('foo'); var n2 = doc.createElement('foo'); testing.assertTrue(domlib.compareNodes(n1, n2)); }; function test_compareNodes_ns() { var n1 = doc.createElementNS('foo:', 'foo'); var n2 = doc.createElementNS('bar:', 'foo'); testing.assertFalse(domlib.compareNodes(n1, n2)); }; function test_compareNodes_attrs() { var n1 = doc.createElement('foo'); var n2 = doc.createElement('foo'); n1.setAttribute('foo', 'bar'); n2.setAttribute('foo', 'bar'); testing.assertTrue(domlib.compareNodes(n1, n2)); n2.setAttribute('foo', 'baz'); testing.assertFalse(domlib.compareNodes(n1, n2)); n2.setAttribute('foo', 'bar'); n1.setAttribute('bar', 'baz'); testing.assertFalse(domlib.compareNodes(n1, n2)); n1.removeAttribute('bar'); testing.assertTrue(domlib.compareNodes(n1, n2)); n1.setAttributeNS('foo:', 'bar', 'baz'); n2.setAttributeNS('bar:', 'bar', 'baz'); testing.assertFalse(domlib.compareNodes(n1, n2)); n2.removeAttribute('bar'); n2.setAttributeNS('foo:', 'bar', 'baz'); testing.assertTrue(domlib.compareNodes(n1, n2)); }; function test_compareNodes_nodeValue() { var n1 = doc.createElement('foo'); var n2 = doc.createElement('foo'); n1.appendChild(doc.createTextNode('bar')); n2.appendChild(doc.createTextNode('baz')); testing.assertFalse(domlib.compareNodes(n1, n2)); n2.childNodes[0].nodeValue = 'bar'; testing.assertTrue(domlib.compareNodes(n1, n2)); }; function test_compareNodes_xmlns() { var dom = new dommer.DOM(); var doc = dom.parseXML(''); var doc2 = dom.parseXML( ''); testing.assertTrue(domlib.compareNodes( doc.documentElement, doc2.documentElement)); }; function test_compareNodes_more_in_second() { var dom = new dommer.DOM(); var doc1 = dom.parseXML(''); var doc2 = dom.parseXML(''); testing.assertFalse(domlib.compareNodes( doc1.documentElement, doc2.documentElement)); };