Index: Lib/test/test_minidom.py
===================================================================
--- Lib/test/test_minidom.py (revision 54643)
+++ Lib/test/test_minidom.py (working copy)
@@ -3,9 +3,8 @@
import os
import sys
import pickle
-import traceback
from StringIO import StringIO
-from test.test_support import verbose, run_unittest, TestSkipped
+from test import test_support
import unittest
import xml.dom
@@ -16,6 +15,11 @@
from xml.dom.minidom import getDOMImplementation
+try:
+ import gc
+except ImportError:
+ gc = None
+
if __name__ == "__main__":
base = sys.argv[0]
else:
@@ -52,88 +56,81 @@
doctype.notations.item(0).ownerDocument = doc
return doc
+def parseStringWith(xml, **opts):
+ import xml.dom.expatbuilder as exb
+ import xml.dom.xmlbuilder as xb
+ options = xb.Options()
+ for k, v in opts.items():
+ getattr(options, k) # assert the attribute is there
+ setattr(options, k, v)
+ builder = exb.makeBuilder(options)
+ return builder.parseString(xml)
+
class MinidomTest(unittest.TestCase):
- def tearDown(self):
- try:
- Node.allnodes
- except AttributeError:
- # We don't actually have the minidom from the standard library,
- # but are picking up the PyXML version from site-packages.
- pass
- else:
- self.confirm(len(Node.allnodes) == 0,
- "assertion: len(Node.allnodes) == 0")
- if len(Node.allnodes):
- print "Garbage left over:"
- if verbose:
- print Node.allnodes.items()[0:10]
- else:
- # Don't print specific nodes if repeatable results
- # are needed
- print len(Node.allnodes)
- Node.allnodes = {}
-
- def confirm(self, test, testname = "Test"):
- self.assertTrue(test, testname)
-
- def checkWholeText(self, node, s):
- t = node.wholeText
- self.confirm(t == s, "looking for %s, found %s" % (repr(s), repr(t)))
-
+ def assertSameNode(self, a, b, msg=None):
+ if msg is None:
+ msg = "Expected nodes to be the same, got %r and %r" % (a, b)
+ self.assert_(a.isSameNode(b), msg)
+
+ def assertNotSameNode(self, a, b, msg=None):
+ if msg is None:
+ msg = "Expected two distinct nodes, got two references to %r" % a
+ self.failIf(a.isSameNode(b), msg)
+ self.failIf(b.isSameNode(a), msg)
+
def testParseFromFile(self):
dom = parse(StringIO(open(tstfile).read()))
dom.unlink()
- self.confirm(isinstance(dom,Document))
-
+ self.assert_(isinstance(dom,Document))
+
def testGetElementsByTagName(self):
dom = parse(tstfile)
- self.confirm(dom.getElementsByTagName("LI") == \
- dom.documentElement.getElementsByTagName("LI"))
+ self.assertEqual(dom.getElementsByTagName("LI"),
+ dom.documentElement.getElementsByTagName("LI"))
dom.unlink()
-
+
def testInsertBefore(self):
dom = parseString("")
root = dom.documentElement
elem = root.childNodes[0]
nelem = dom.createElement("element")
root.insertBefore(nelem, elem)
- self.confirm(len(root.childNodes) == 2
- and root.childNodes.length == 2
- and root.childNodes[0] is nelem
- and root.childNodes.item(0) is nelem
- and root.childNodes[1] is elem
- and root.childNodes.item(1) is elem
- and root.firstChild is nelem
- and root.lastChild is elem
- and root.toxml() == ""
- , "testInsertBefore -- node properly placed in tree")
+ self.assertEqual(len(root.childNodes), 2)
+ self.assertEqual(root.childNodes.length, 2)
+ self.assert_(root.childNodes[0] is nelem)
+ self.assert_(root.childNodes.item(0) is nelem)
+ self.assert_(root.childNodes[1] is elem)
+ self.assert_(root.childNodes.item(1) is elem)
+ self.assert_(root.firstChild is nelem)
+ self.assert_(root.lastChild is elem)
+ self.assertEqual(root.toxml(), "")
+
nelem = dom.createElement("element")
root.insertBefore(nelem, None)
- self.confirm(len(root.childNodes) == 3
- and root.childNodes.length == 3
- and root.childNodes[1] is elem
- and root.childNodes.item(1) is elem
- and root.childNodes[2] is nelem
- and root.childNodes.item(2) is nelem
- and root.lastChild is nelem
- and nelem.previousSibling is elem
- and root.toxml() == ""
- , "testInsertBefore -- node properly placed in tree")
+ self.assertEqual(len(root.childNodes), 3)
+ self.assertEqual(root.childNodes.length, 3)
+ self.assert_(root.childNodes[1] is elem)
+ self.assert_(root.childNodes.item(1) is elem)
+ self.assert_(root.childNodes[2] is nelem)
+ self.assert_(root.childNodes.item(2) is nelem)
+ self.assert_(root.lastChild is nelem)
+ self.assert_(nelem.previousSibling is elem)
+ self.assertEqual(root.toxml(), "")
+
nelem2 = dom.createElement("bar")
root.insertBefore(nelem2, nelem)
- self.confirm(len(root.childNodes) == 4
- and root.childNodes.length == 4
- and root.childNodes[2] is nelem2
- and root.childNodes.item(2) is nelem2
- and root.childNodes[3] is nelem
- and root.childNodes.item(3) is nelem
- and nelem2.nextSibling is nelem
- and nelem.previousSibling is nelem2
- and root.toxml() ==
- ""
- , "testInsertBefore -- node properly placed in tree")
+ self.assertEqual(len(root.childNodes), 4)
+ self.assertEqual(root.childNodes.length, 4)
+ self.assert_(root.childNodes[2] is nelem2)
+ self.assert_(root.childNodes.item(2) is nelem2)
+ self.assert_(root.childNodes[3] is nelem)
+ self.assert_(root.childNodes.item(3) is nelem)
+ self.assert_(nelem2.nextSibling is nelem)
+ self.assert_(nelem.previousSibling is nelem2)
+ self.assertEqual(root.toxml(), "")
+
dom.unlink()
-
+
def _create_fragment_test_nodes(self):
dom = parseString("")
orig = dom.createTextNode("original")
@@ -146,166 +143,168 @@
frag.appendChild(c2)
frag.appendChild(c3)
return dom, orig, c1, c2, c3, frag
-
+
def testInsertBeforeFragment(self):
dom, orig, c1, c2, c3, frag = self._create_fragment_test_nodes()
dom.documentElement.insertBefore(frag, None)
- self.confirm(tuple(dom.documentElement.childNodes) ==
- (orig, c1, c2, c3),
- "insertBefore(, None)")
+ self.assertEqual(tuple(dom.documentElement.childNodes),
+ (orig, c1, c2, c3),
+ "insertBefore(, None)")
frag.unlink()
dom.unlink()
dom, orig, c1, c2, c3, frag = self._create_fragment_test_nodes()
dom.documentElement.insertBefore(frag, orig)
- self.confirm(tuple(dom.documentElement.childNodes) ==
- (c1, c2, c3, orig),
- "insertBefore(, orig)")
+ self.assertEqual(tuple(dom.documentElement.childNodes),
+ (c1, c2, c3, orig),
+ "insertBefore(, orig)")
frag.unlink()
dom.unlink()
-
+
def testAppendChild(self):
dom = parse(tstfile)
dom.documentElement.appendChild(dom.createComment(u"Hello"))
- self.confirm(dom.documentElement.childNodes[-1].nodeName == "#comment")
- self.confirm(dom.documentElement.childNodes[-1].data == "Hello")
+ self.assertEqual(dom.documentElement.childNodes[-1].nodeName, "#comment")
+ self.assertEqual(dom.documentElement.childNodes[-1].data, "Hello")
dom.unlink()
-
+
def testAppendChildFragment(self):
dom, orig, c1, c2, c3, frag = self._create_fragment_test_nodes()
dom.documentElement.appendChild(frag)
- self.confirm(tuple(dom.documentElement.childNodes) ==
- (orig, c1, c2, c3),
- "appendChild()")
+ self.assertEqual(tuple(dom.documentElement.childNodes),
+ (orig, c1, c2, c3),
+ "appendChild()")
frag.unlink()
dom.unlink()
-
+
def testReplaceChildFragment(self):
dom, orig, c1, c2, c3, frag = self._create_fragment_test_nodes()
dom.documentElement.replaceChild(frag, orig)
orig.unlink()
- self.confirm(tuple(dom.documentElement.childNodes) == (c1, c2, c3),
- "replaceChild()")
+ self.assertEqual(tuple(dom.documentElement.childNodes),
+ (c1, c2, c3),
+ "replaceChild()")
frag.unlink()
dom.unlink()
-
+
def testLegalChildren(self):
dom = Document()
elem = dom.createElement('element')
text = dom.createTextNode('text')
self.assertRaises(xml.dom.HierarchyRequestErr, dom.appendChild, text)
-
+
dom.appendChild(elem)
- self.assertRaises(xml.dom.HierarchyRequestErr, dom.insertBefore, text,
- elem)
- self.assertRaises(xml.dom.HierarchyRequestErr, dom.replaceChild, text,
- elem)
-
+ self.assertRaises(xml.dom.HierarchyRequestErr,
+ dom.insertBefore, text, elem)
+ self.assertRaises(xml.dom.HierarchyRequestErr,
+ dom.replaceChild, text, elem)
+
nodemap = elem.attributes
- self.assertRaises(xml.dom.HierarchyRequestErr, nodemap.setNamedItem,
- text)
- self.assertRaises(xml.dom.HierarchyRequestErr, nodemap.setNamedItemNS,
- text)
-
+ self.assertRaises(xml.dom.HierarchyRequestErr,
+ nodemap.setNamedItem, text)
+ self.assertRaises(xml.dom.HierarchyRequestErr,
+ nodemap.setNamedItemNS, text)
+
elem.appendChild(text)
dom.unlink()
-
+
def testNamedNodeMapSetItem(self):
dom = Document()
elem = dom.createElement('element')
attrs = elem.attributes
attrs["foo"] = "bar"
a = attrs.item(0)
- self.confirm(a.ownerDocument is dom,
- "NamedNodeMap.__setitem__() sets ownerDocument")
- self.confirm(a.ownerElement is elem,
- "NamedNodeMap.__setitem__() sets ownerElement")
- self.confirm(a.value == "bar",
- "NamedNodeMap.__setitem__() sets value")
- self.confirm(a.nodeValue == "bar",
- "NamedNodeMap.__setitem__() sets nodeValue")
+ self.assert_(a.ownerDocument is dom,
+ "NamedNodeMap.__setitem__() sets ownerDocument")
+ self.assert_(a.ownerElement is elem,
+ "NamedNodeMap.__setitem__() sets ownerElement")
+ self.assertEqual(a.value, "bar",
+ "NamedNodeMap.__setitem__() sets value")
+ self.assertEqual(a.nodeValue, "bar",
+ "NamedNodeMap.__setitem__() sets nodeValue")
elem.unlink()
dom.unlink()
-
+
def testNonZero(self):
dom = parse(tstfile)
- self.confirm(dom)# should not be zero
+ self.assert_(dom, "result of parse() should not be zero")
dom.appendChild(dom.createComment("foo"))
- self.confirm(not dom.childNodes[-1].childNodes)
+ self.assert_(not dom.childNodes[-1].childNodes)
dom.unlink()
-
+
def testUnlink(self):
dom = parse(tstfile)
dom.unlink()
-
- def testElement(self):
+
+ def testDocumentElement(self):
dom = Document()
dom.appendChild(dom.createElement("abc"))
- self.confirm(dom.documentElement)
+ self.assert_(dom.documentElement)
dom.unlink()
-
+
def testAAA(self):
dom = parseString("")
el = dom.documentElement
el.setAttribute("spam", "jam2")
- self.confirm(el.toxml() == '', "testAAA")
+ self.assertEqual(el.toxml(), '', "testAAA")
a = el.getAttributeNode("spam")
- self.confirm(a.ownerDocument is dom,
- "setAttribute() sets ownerDocument")
- self.confirm(a.ownerElement is dom.documentElement,
- "setAttribute() sets ownerElement")
+ self.assert_(a.ownerDocument is dom,
+ "setAttribute() sets ownerDocument")
+ self.assert_(a.ownerElement is dom.documentElement,
+ "setAttribute() sets ownerElement")
dom.unlink()
-
+
def testAAB(self):
dom = parseString("")
el = dom.documentElement
el.setAttribute("spam", "jam")
el.setAttribute("spam", "jam2")
- self.confirm(el.toxml() == '', "testAAB")
+ self.assertEqual(el.toxml(), '')
dom.unlink()
-
+
def testAddAttr(self):
dom = Document()
child = dom.appendChild(dom.createElement("abc"))
-
+
child.setAttribute("def", "ghi")
- self.confirm(child.getAttribute("def") == "ghi")
- self.confirm(child.attributes["def"].value == "ghi")
-
+ self.assertEqual(child.getAttribute("def"), "ghi")
+ self.assertEqual(child.attributes["def"].value, "ghi")
+
child.setAttribute("jkl", "mno")
- self.confirm(child.getAttribute("jkl") == "mno")
- self.confirm(child.attributes["jkl"].value == "mno")
-
- self.confirm(len(child.attributes) == 2)
-
+ self.assertEqual(child.getAttribute("jkl"), "mno")
+ self.assertEqual(child.attributes["jkl"].value, "mno")
+
+ self.assertEqual(len(child.attributes), 2)
+
child.setAttribute("def", "newval")
- self.confirm(child.getAttribute("def") == "newval")
- self.confirm(child.attributes["def"].value == "newval")
-
- self.confirm(len(child.attributes) == 2)
+ self.assertEqual(child.getAttribute("def"), "newval")
+ self.assertEqual(child.attributes["def"].value, "newval")
+
+ self.assertEqual(len(child.attributes), 2)
dom.unlink()
-
+
def testDeleteAttr(self):
dom = Document()
child = dom.appendChild(dom.createElement("abc"))
-
- self.confirm(len(child.attributes) == 0)
+
+ self.assertEqual(len(child.attributes), 0)
child.setAttribute("def", "ghi")
- self.confirm(len(child.attributes) == 1)
+ self.assertEqual(len(child.attributes), 1)
del child.attributes["def"]
- self.confirm(len(child.attributes) == 0)
+ self.assertEqual(len(child.attributes), 0)
dom.unlink()
-
+
def testRemoveAttr(self):
dom = Document()
child = dom.appendChild(dom.createElement("abc"))
-
+
child.setAttribute("def", "ghi")
- self.confirm(len(child.attributes) == 1)
+ self.assertEqual(len(child.attributes), 1)
child.removeAttribute("def")
- self.confirm(len(child.attributes) == 0)
+ self.assertEqual(len(child.attributes), 0)
+
dom.unlink()
-
+
def testRemoveAttrNS(self):
dom = Document()
child = dom.appendChild(
@@ -313,93 +312,93 @@
child.setAttributeNS("http://www.w3.org", "xmlns:python",
"http://www.python.org")
child.setAttributeNS("http://www.python.org", "python:abcattr", "foo")
- self.confirm(len(child.attributes) == 2)
+ self.assertEqual(len(child.attributes), 2)
child.removeAttributeNS("http://www.python.org", "abcattr")
- self.confirm(len(child.attributes) == 1)
+ self.assertEqual(len(child.attributes), 1)
dom.unlink()
-
+
def testRemoveAttributeNode(self):
dom = Document()
child = dom.appendChild(dom.createElement("foo"))
child.setAttribute("spam", "jam")
- self.confirm(len(child.attributes) == 1)
+ self.assertEqual(len(child.attributes), 1)
node = child.getAttributeNode("spam")
child.removeAttributeNode(node)
- self.confirm(len(child.attributes) == 0
- and child.getAttributeNode("spam") is None)
+ self.assertEqual(len(child.attributes), 0)
+ self.assert_(child.getAttributeNode("spam") is None)
dom.unlink()
-
+
def testChangeAttr(self):
dom = parseString("")
el = dom.documentElement
el.setAttribute("spam", "jam")
- self.confirm(len(el.attributes) == 1)
+ self.assertEqual(len(el.attributes), 1)
el.setAttribute("spam", "bam")
# Set this attribute to be an ID and make sure that doesn't change
# when changing the value:
el.setIdAttribute("spam")
- self.confirm(len(el.attributes) == 1
- and el.attributes["spam"].value == "bam"
- and el.attributes["spam"].nodeValue == "bam"
- and el.getAttribute("spam") == "bam"
- and el.getAttributeNode("spam").isId)
+ self.assertEqual(len(el.attributes), 1)
+ self.assertEqual(el.attributes["spam"].value, "bam")
+ self.assertEqual(el.attributes["spam"].nodeValue, "bam")
+ self.assertEqual(el.getAttribute("spam"), "bam")
+ self.assert_(el.getAttributeNode("spam").isId)
el.attributes["spam"] = "ham"
- self.confirm(len(el.attributes) == 1
- and el.attributes["spam"].value == "ham"
- and el.attributes["spam"].nodeValue == "ham"
- and el.getAttribute("spam") == "ham"
- and el.attributes["spam"].isId)
+ self.assertEqual(len(el.attributes), 1)
+ self.assertEqual(el.attributes["spam"].value, "ham")
+ self.assertEqual(el.attributes["spam"].nodeValue, "ham")
+ self.assertEqual(el.getAttribute("spam"), "ham")
+ self.assert_(el.attributes["spam"].isId)
el.setAttribute("spam2", "bam")
- self.confirm(len(el.attributes) == 2
- and el.attributes["spam"].value == "ham"
- and el.attributes["spam"].nodeValue == "ham"
- and el.getAttribute("spam") == "ham"
- and el.attributes["spam2"].value == "bam"
- and el.attributes["spam2"].nodeValue == "bam"
- and el.getAttribute("spam2") == "bam")
+ self.assertEqual(len(el.attributes), 2)
+ self.assertEqual(el.attributes["spam"].value, "ham")
+ self.assertEqual(el.attributes["spam"].nodeValue, "ham")
+ self.assertEqual(el.getAttribute("spam"), "ham")
+ self.assertEqual(el.attributes["spam2"].value, "bam")
+ self.assertEqual(el.attributes["spam2"].nodeValue, "bam")
+ self.assertEqual(el.getAttribute("spam2"), "bam")
el.attributes["spam2"] = "bam2"
- self.confirm(len(el.attributes) == 2
- and el.attributes["spam"].value == "ham"
- and el.attributes["spam"].nodeValue == "ham"
- and el.getAttribute("spam") == "ham"
- and el.attributes["spam2"].value == "bam2"
- and el.attributes["spam2"].nodeValue == "bam2"
- and el.getAttribute("spam2") == "bam2")
+ self.assertEqual(len(el.attributes), 2)
+ self.assertEqual(el.attributes["spam"].value, "ham")
+ self.assertEqual(el.attributes["spam"].nodeValue, "ham")
+ self.assertEqual(el.getAttribute("spam"), "ham")
+ self.assertEqual(el.attributes["spam2"].value, "bam2")
+ self.assertEqual(el.attributes["spam2"].nodeValue, "bam2")
+ self.assertEqual(el.getAttribute("spam2"), "bam2")
dom.unlink()
-
+
def testGetAttrList(self):
pass
-
+
def testGetAttrValues(self): pass
-
+
def testGetAttrLength(self): pass
-
+
def testGetAttribute(self): pass
-
+
def testGetAttributeNS(self): pass
-
+
def testGetAttributeNode(self): pass
-
+
def testGetElementsByTagNameNS(self):
d="""
"""
dom = parseString(d)
- elems = dom.getElementsByTagNameNS("http://pyxml.sf.net/minidom",
+ elems = dom.getElementsByTagNameNS("http://pyxml.sf.net/minidom",
"myelem")
- self.confirm(len(elems) == 1
- and elems[0].namespaceURI == "http://pyxml.sf.net/minidom"
- and elems[0].localName == "myelem"
- and elems[0].prefix == "minidom"
- and elems[0].tagName == "minidom:myelem"
- and elems[0].nodeName == "minidom:myelem")
+ self.assertEqual(len(elems), 1)
+ self.assertEqual(elems[0].namespaceURI, "http://pyxml.sf.net/minidom")
+ self.assertEqual(elems[0].localName, "myelem")
+ self.assertEqual(elems[0].prefix, "minidom")
+ self.assertEqual(elems[0].tagName, "minidom:myelem")
+ self.assertEqual(elems[0].nodeName, "minidom:myelem")
dom.unlink()
-
- def get_empty_nodelist_from_elements_by_tagName_ns_helper(self, doc, nsuri,
+
+ def get_empty_nodelist_from_elements_by_tagName_ns_helper(self, doc, nsuri,
lname):
nodelist = doc.getElementsByTagNameNS(nsuri, lname)
- self.confirm(len(nodelist) == 0)
-
+ self.assertEqual(len(nodelist), 0)
+
def testGetEmptyNodeListFromElementsByTagNameNS(self):
doc = parseString('')
self.get_empty_nodelist_from_elements_by_tagName_ns_helper(
@@ -408,7 +407,8 @@
doc, '*', 'splat')
self.get_empty_nodelist_from_elements_by_tagName_ns_helper(
doc, 'http://xml.python.org/namespaces/a', '*')
-
+ doc.unlink()
+
doc = parseString('')
self.get_empty_nodelist_from_elements_by_tagName_ns_helper(
doc, "http://xml.python.org/splat", "not-there")
@@ -416,79 +416,79 @@
doc, "*", "not-there")
self.get_empty_nodelist_from_elements_by_tagName_ns_helper(
doc, "http://somewhere.else.net/not-there", "e")
-
+ doc.unlink()
+
def testElementReprAndStr(self):
dom = Document()
el = dom.appendChild(dom.createElement("abc"))
string1 = repr(el)
string2 = str(el)
- self.confirm(string1 == string2)
+ self.assertEqual(string1, string2)
dom.unlink()
-
+
def testElementReprAndStrUnicode(self):
dom = Document()
el = dom.appendChild(dom.createElement(u"abc"))
string1 = repr(el)
string2 = str(el)
- self.confirm(string1 == string2)
+ self.assertEqual(string1, string2)
dom.unlink()
-
+
def testElementReprAndStrUnicodeNS(self):
dom = Document()
el = dom.appendChild(
dom.createElementNS(u"http://www.slashdot.org", u"slash:abc"))
string1 = repr(el)
string2 = str(el)
- self.confirm(string1 == string2)
- self.confirm(string1.find("slash:abc") != -1)
+ self.assertEqual(string1, string2)
+ self.assert_("slash:abc" in string1)
dom.unlink()
-
+
def testAttributeRepr(self):
dom = Document()
el = dom.appendChild(dom.createElement(u"abc"))
node = el.setAttribute("abc", "def")
- self.confirm(str(node) == repr(node))
+ self.assertEqual(str(node), repr(node))
dom.unlink()
-
+
def testTextNodeRepr(self): pass
-
+
def testWriteXML(self):
str = ''
dom = parseString(str)
domstr = dom.toxml()
dom.unlink()
- self.confirm(str == domstr)
-
+ self.assertEqual(str, domstr)
+
def testAltNewline(self):
str = '\n\n'
dom = parseString(str)
domstr = dom.toprettyxml(newl="\r\n")
dom.unlink()
- self.confirm(domstr == str.replace("\n", "\r\n"))
-
+ self.assertEqual(domstr, str.replace("\n", "\r\n"))
+
def testProcessingInstruction(self):
dom = parseString('')
pi = dom.documentElement.firstChild
- self.confirm(pi.target == "mypi"
- and pi.data == "data \t\n "
- and pi.nodeName == "mypi"
- and pi.nodeType == Node.PROCESSING_INSTRUCTION_NODE
- and pi.attributes is None
- and not pi.hasChildNodes()
- and len(pi.childNodes) == 0
- and pi.firstChild is None
- and pi.lastChild is None
- and pi.localName is None
- and pi.namespaceURI == xml.dom.EMPTY_NAMESPACE)
-
+ self.assertEqual(pi.target, "mypi")
+ self.assertEqual(pi.data, "data \t\n ")
+ self.assertEqual(pi.nodeName, "mypi")
+ self.assertEqual(pi.nodeType, Node.PROCESSING_INSTRUCTION_NODE)
+ self.assert_(pi.attributes is None)
+ self.assert_(not pi.hasChildNodes())
+ self.assertEqual(len(pi.childNodes), 0)
+ self.assert_(pi.firstChild is None)
+ self.assert_(pi.lastChild is None)
+ self.assert_(pi.localName is None)
+ self.assertEqual(pi.namespaceURI, xml.dom.EMPTY_NAMESPACE)
+ dom.unlink()
+
def testProcessingInstructionRepr(self): pass
-
+
def testTextRepr(self): pass
-
+
def testWriteText(self): pass
-
- def testDocumentElement(self): pass
-
+
def testTooManyDocumentElements(self):
doc = parseString("")
elem = doc.createElement("extra")
@@ -496,240 +496,264 @@
self.assertRaises(xml.dom.HierarchyRequestErr, doc.appendChild, elem)
elem.unlink()
doc.unlink()
-
+
def testCreateElementNS(self): pass
-
+
def testCreateAttributeNS(self): pass
-
+
def testParse(self): pass
-
+
def testParseString(self): pass
-
+
def testComment(self): pass
-
+
def testAttrListItem(self): pass
-
+
def testAttrListItems(self): pass
-
+
def testAttrListItemNS(self): pass
-
+
def testAttrListKeys(self): pass
-
+
def testAttrListKeysNS(self): pass
-
+
def testRemoveNamedItem(self):
doc = parseString("")
e = doc.documentElement
attrs = e.attributes
a1 = e.getAttributeNode("a")
a2 = attrs.removeNamedItem("a")
- self.confirm(a1.isSameNode(a2))
+ self.assertSameNode(a1, a2)
self.assertRaises(xml.dom.NotFoundErr, attrs.removeNamedItem, "a")
-
+ doc.unlink()
+
def testRemoveNamedItemNS(self):
doc = parseString("")
e = doc.documentElement
attrs = e.attributes
a1 = e.getAttributeNodeNS("http://xml.python.org/", "b")
a2 = attrs.removeNamedItemNS("http://xml.python.org/", "b")
- self.confirm(a1.isSameNode(a2))
- self.assertRaises(xml.dom.NotFoundErr, attrs.removeNamedItemNS,
+ self.assertSameNode(a1, a2)
+ self.assertRaises(xml.dom.NotFoundErr, attrs.removeNamedItemNS,
"http://xml.python.org/", "b")
-
+ doc.unlink()
+
def testAttrListValues(self): pass
-
+
def testAttrListLength(self): pass
-
+
def testAttrList__getitem__(self): pass
-
+
def testAttrList__setitem__(self): pass
-
+
def testSetAttrValueandNodeValue(self): pass
-
+
def testParseElement(self): pass
-
+
def testParseAttributes(self): pass
-
+
def testParseElementNamespaces(self): pass
-
+
def testParseAttributeNamespaces(self): pass
-
+
def testParseProcessingInstructions(self): pass
-
+
def testChildNodes(self): pass
-
+
def testFirstChild(self): pass
-
+
def testHasChildNodes(self): pass
- def _testCloneElementCopiesAttributes(self, e1, e2, test):
+ def _checkCloneElementCopiesAttributes(self, e1, e2, test):
attrs1 = e1.attributes
attrs2 = e2.attributes
keys1 = attrs1.keys()
keys2 = attrs2.keys()
keys1.sort()
keys2.sort()
- self.confirm(keys1 == keys2, "clone of element has same attribute keys")
+ self.assertEqual(keys1, keys2,
+ "clone of element has same attribute keys")
for i in range(len(keys1)):
a1 = attrs1.item(i)
a2 = attrs2.item(i)
- self.confirm(a1 is not a2
- and a1.value == a2.value
- and a1.nodeValue == a2.nodeValue
- and a1.namespaceURI == a2.namespaceURI
- and a1.localName == a2.localName
- , "clone of attribute node has proper attribute values")
- self.confirm(a2.ownerElement is e2,
- "clone of attribute node correctly owned")
-
+ self.assert_(a1 is not a2)
+ self.assertEqual(a1.value, a2.value)
+ self.assertEqual(a1.nodeValue, a2.nodeValue)
+ self.assertEqual(a1.namespaceURI, a2.namespaceURI)
+ self.assertEqual(a1.localName, a2.localName)
+ self.assert_(a2.ownerElement is e2,
+ "clone of attribute node correctly owned")
+
def _setupCloneElement(self, deep):
dom = parseString("")
root = dom.documentElement
clone = root.cloneNode(deep)
- self._testCloneElementCopiesAttributes(
+ self._checkCloneElementCopiesAttributes(
root, clone, "testCloneElement" + (deep and "Deep" or "Shallow"))
# mutilate the original so shared data is detected
root.tagName = root.nodeName = "MODIFIED"
root.setAttribute("attr", "NEW VALUE")
root.setAttribute("added", "VALUE")
return dom, clone
-
+
def testCloneElementShallow(self):
dom, clone = self._setupCloneElement(0)
- self.confirm(len(clone.childNodes) == 0
- and clone.childNodes.length == 0
- and clone.parentNode is None
- and clone.toxml() == ''
- , "testCloneElementShallow")
+ self.assertEqual(len(clone.childNodes), 0)
+ self.assertEqual(clone.childNodes.length, 0)
+ self.assertEqual(clone.parentNode, None)
+ self.assertEqual(clone.toxml(), '')
dom.unlink()
-
+ clone.unlink()
+
def testCloneElementDeep(self):
dom, clone = self._setupCloneElement(1)
- self.confirm(len(clone.childNodes) == 1
- and clone.childNodes.length == 1
- and clone.parentNode is None
- and clone.toxml() == ''
- , "testCloneElementDeep")
+ self.assertEqual(len(clone.childNodes), 1)
+ self.assertEqual(clone.childNodes.length, 1)
+ self.assertEqual(clone.parentNode, None)
+ self.assertEqual(clone.toxml(), '')
dom.unlink()
+ clone.unlink()
def testCloneDocumentShallow(self):
- doc = parseString("\n"
- ""
- "\n"
- "]>\n"
- "")
+ doc = parseString(
+ "\n"
+ ""
+ "\n"
+ "]>\n"
+ "")
doc2 = doc.cloneNode(0)
- self.confirm(doc2 is None,
- "testCloneDocumentShallow:"
- " shallow cloning of documents makes no sense!")
+ self.assert_(doc2 is None,
+ "testCloneDocumentShallow:"
+ " shallow cloning of documents makes no sense!")
+ doc.unlink()
def testCloneDocumentDeep(self):
- doc = parseString("\n"
- ""
- "\n"
- "]>\n"
- "")
+ doc = parseString(
+ "\n"
+ ""
+ "\n"
+ "]>\n"
+ "")
doc2 = doc.cloneNode(1)
- self.confirm(not (doc.isSameNode(doc2) or doc2.isSameNode(doc)),
- "testCloneDocumentDeep: document objects not distinct")
- self.confirm(len(doc.childNodes) == len(doc2.childNodes),
- "testCloneDocumentDeep: wrong number of Document children")
- self.confirm(doc2.documentElement.nodeType == Node.ELEMENT_NODE,
- "testCloneDocumentDeep: documentElement not an ELEMENT_NODE")
- self.confirm(doc2.documentElement.ownerDocument.isSameNode(doc2),
+ self.assertNotSameNode(doc, doc2,
+ "testCloneDocumentDeep: document objects not distinct")
+ self.assertEqual(
+ len(doc.childNodes), len(doc2.childNodes),
+ "testCloneDocumentDeep: wrong number of Document children")
+ self.assertEqual(
+ doc2.documentElement.nodeType, Node.ELEMENT_NODE,
+ "testCloneDocumentDeep: documentElement not an ELEMENT_NODE")
+ self.assertSameNode(doc2.documentElement.ownerDocument, doc2,
"testCloneDocumentDeep: documentElement owner is not new document")
- self.confirm(not doc.documentElement.isSameNode(doc2.documentElement),
- "testCloneDocumentDeep: documentElement should not be shared")
+ self.assertNotSameNode(
+ doc.documentElement, doc2.documentElement,
+ "testCloneDocumentDeep: documentElement should not be shared")
if doc.doctype is not None:
# check the doctype iff the original DOM maintained it
- self.confirm(doc2.doctype.nodeType == Node.DOCUMENT_TYPE_NODE,
+ self.assertEqual(doc2.doctype.nodeType, Node.DOCUMENT_TYPE_NODE,
"testCloneDocumentDeep: doctype not a DOCUMENT_TYPE_NODE")
- self.confirm(doc2.doctype.ownerDocument.isSameNode(doc2))
- self.confirm(not doc.doctype.isSameNode(doc2.doctype))
+ self.assertSameNode(doc2.doctype.ownerDocument, doc2)
+ self.assertNotSameNode(doc.doctype, doc2.doctype)
+ doc.unlink()
+ doc2.unlink()
def testCloneDocumentTypeDeepOk(self):
doctype = create_nonempty_doctype()
clone = doctype.cloneNode(1)
- self.confirm(clone is not None
- and clone.nodeName == doctype.nodeName
- and clone.name == doctype.name
- and clone.publicId == doctype.publicId
- and clone.systemId == doctype.systemId
- and len(clone.entities) == len(doctype.entities)
- and clone.entities.item(len(clone.entities)) is None
- and len(clone.notations) == len(doctype.notations)
- and clone.notations.item(len(clone.notations)) is None
- and len(clone.childNodes) == 0)
+ self.assert_(clone is not None)
+ self.assertEqual(clone.nodeName, doctype.nodeName)
+ self.assertEqual(clone.name, doctype.name)
+ self.assertEqual(clone.publicId, doctype.publicId)
+ self.assertEqual(clone.systemId, doctype.systemId)
+ self.assertEqual(len(clone.entities), len(doctype.entities))
+ self.assert_(clone.entities.item(len(clone.entities)) is None)
+ self.assertEqual(len(clone.notations), len(doctype.notations))
+ self.assert_(clone.notations.item(len(clone.notations)) is None)
+ self.assertEqual(len(clone.childNodes), 0)
for i in range(len(doctype.entities)):
se = doctype.entities.item(i)
ce = clone.entities.item(i)
- self.confirm((not se.isSameNode(ce))
- and (not ce.isSameNode(se))
- and ce.nodeName == se.nodeName
- and ce.notationName == se.notationName
- and ce.publicId == se.publicId
- and ce.systemId == se.systemId
- and ce.encoding == se.encoding
- and ce.actualEncoding == se.actualEncoding
- and ce.version == se.version)
+ self.assertNotSameNode(se, ce)
+ self.assertEqual(ce.nodeName, se.nodeName)
+ self.assertEqual(ce.notationName, se.notationName)
+ self.assertEqual(ce.publicId, se.publicId)
+ self.assertEqual(ce.systemId, se.systemId)
+ self.assertEqual(ce.encoding, se.encoding)
+ self.assertEqual(ce.actualEncoding, se.actualEncoding)
+ self.assertEqual(ce.version, se.version)
for i in range(len(doctype.notations)):
sn = doctype.notations.item(i)
cn = clone.notations.item(i)
- self.confirm((not sn.isSameNode(cn))
- and (not cn.isSameNode(sn))
- and cn.nodeName == sn.nodeName
- and cn.publicId == sn.publicId
- and cn.systemId == sn.systemId)
+ self.assertNotSameNode(sn, cn)
+ self.assertEqual(cn.nodeName, sn.nodeName)
+ self.assertEqual(cn.publicId, sn.publicId)
+ self.assertEqual(cn.systemId, sn.systemId)
+ doctype.unlink()
+ clone.unlink()
def testCloneDocumentTypeDeepNotOk(self):
doc = create_doc_with_doctype()
clone = doc.doctype.cloneNode(1)
- self.confirm(clone is None, "testCloneDocumentTypeDeepNotOk")
+ self.assert_(clone is None)
+ doc.unlink()
def testCloneDocumentTypeShallowOk(self):
doctype = create_nonempty_doctype()
clone = doctype.cloneNode(0)
- self.confirm(clone is not None
- and clone.nodeName == doctype.nodeName
- and clone.name == doctype.name
- and clone.publicId == doctype.publicId
- and clone.systemId == doctype.systemId
- and len(clone.entities) == 0
- and clone.entities.item(0) is None
- and len(clone.notations) == 0
- and clone.notations.item(0) is None
- and len(clone.childNodes) == 0)
+ self.assert_(clone is not None)
+ self.assertEqual(clone.nodeName, doctype.nodeName)
+ self.assertEqual(clone.name, doctype.name)
+ self.assertEqual(clone.publicId, doctype.publicId)
+ self.assertEqual(clone.systemId, doctype.systemId)
+ self.assertEqual(len(clone.entities), 0)
+ self.assert_(clone.entities.item(0) is None)
+ self.assertEqual(len(clone.notations), 0)
+ self.assert_(clone.notations.item(0) is None)
+ self.assertEqual(len(clone.childNodes), 0)
+ doctype.unlink()
+ clone.unlink()
def testCloneDocumentTypeShallowNotOk(self):
doc = create_doc_with_doctype()
clone = doc.doctype.cloneNode(0)
- self.confirm(clone is None, "testCloneDocumentTypeShallowNotOk")
+ self.assert_(clone is None)
+ doc.unlink()
- def check_import_document(self, deep, testName):
+ def check_import_document(self, deep):
doc1 = parseString("")
doc2 = parseString("")
- self.assertRaises(xml.dom.NotSupportedErr, doc1.importNode, doc2, deep)
-
+ self.assertRaises(
+ xml.dom.NotSupportedErr,
+ doc1.importNode, doc2, deep)
+ doc1.unlink()
+ doc2.unlink()
+
def testImportDocumentShallow(self):
- self.check_import_document(0, "testImportDocumentShallow")
-
+ self.check_import_document(0)
+
def testImportDocumentDeep(self):
- self.check_import_document(1, "testImportDocumentDeep")
-
+ self.check_import_document(1)
+
def testImportDocumentTypeShallow(self):
src = create_doc_with_doctype()
target = create_doc_without_doctype()
- self.assertRaises(xml.dom.NotSupportedErr, target.importNode,
- src.doctype, 0)
-
+ self.assertRaises(
+ xml.dom.NotSupportedErr,
+ target.importNode, src.doctype, 0)
+ src.unlink()
+ target.unlink()
+
def testImportDocumentTypeDeep(self):
src = create_doc_with_doctype()
target = create_doc_without_doctype()
- self.assertRaises(xml.dom.NotSupportedErr, target.importNode,
- src.doctype, 1)
-
+ self.assertRaises(
+ xml.dom.NotSupportedErr,
+ target.importNode, src.doctype, 1)
+ src.unlink()
+ target.unlink()
+
# Testing attribute clones uses a helper, and should always be deep,
# even if the argument to cloneNode is false.
def check_clone_attribute(self, deep, testName):
@@ -737,32 +761,33 @@
attr = doc.documentElement.getAttributeNode("attr")
self.failIfEqual(attr, None)
clone = attr.cloneNode(deep)
- self.confirm(not clone.isSameNode(attr))
- self.confirm(not attr.isSameNode(clone))
- self.confirm(clone.ownerElement is None,
+ self.assertNotSameNode(clone, attr)
+ self.assert_(clone.ownerElement is None,
testName + ": ownerElement should be None")
- self.confirm(clone.ownerDocument.isSameNode(attr.ownerDocument),
+ self.assertSameNode(clone.ownerDocument, attr.ownerDocument,
testName + ": ownerDocument does not match")
- self.confirm(clone.specified,
+ self.assert_(clone.specified,
testName + ": cloned attribute must have specified == True")
-
+ doc.unlink()
+
def testCloneAttributeShallow(self):
self.check_clone_attribute(0, "testCloneAttributeShallow")
-
+
def testCloneAttributeDeep(self):
self.check_clone_attribute(1, "testCloneAttributeDeep")
-
+
def check_clone_pi(self, deep, testName):
doc = parseString("")
pi = doc.firstChild
- self.assertEquals(pi.nodeType, Node.PROCESSING_INSTRUCTION_NODE)
+ self.assertEqual(pi.nodeType, Node.PROCESSING_INSTRUCTION_NODE)
clone = pi.cloneNode(deep)
- self.confirm(clone.target == pi.target
- and clone.data == pi.data)
-
+ self.assertEqual(clone.target, pi.target)
+ self.assertEqual(clone.data, pi.data)
+ doc.unlink()
+
def testClonePIShallow(self):
self.check_clone_pi(0, "testClonePIShallow")
-
+
def testClonePIDeep(self):
self.check_clone_pi(1, "testClonePIDeep")
@@ -771,40 +796,37 @@
root = doc.documentElement
root.appendChild(doc.createTextNode("first"))
root.appendChild(doc.createTextNode("second"))
- self.confirm(len(root.childNodes) == 2
- and root.childNodes.length == 2,
- "testNormalize -- preparation")
+ self.assertEqual(len(root.childNodes), 2)
+ self.assertEqual(root.childNodes.length, 2)
doc.normalize()
- self.confirm(len(root.childNodes) == 1
- and root.childNodes.length == 1
- and root.firstChild is root.lastChild
- and root.firstChild.data == "firstsecond"
- , "testNormalize -- result")
+ self.assertEqual(len(root.childNodes), 1)
+ self.assertEqual(root.childNodes.length, 1)
+ self.assert_(root.firstChild is root.lastChild)
+ self.assertEqual(root.firstChild.data, "firstsecond")
doc.unlink()
-
+
doc = parseString("")
root = doc.documentElement
root.appendChild(doc.createTextNode(""))
doc.normalize()
- self.confirm(len(root.childNodes) == 0
- and root.childNodes.length == 0,
- "testNormalize -- single empty node removed")
+ self.assertEqual(len(root.childNodes), 0)
+ self.assertEqual(root.childNodes.length, 0)
doc.unlink()
-
+
def testSiblings(self):
doc = parseString("text?")
root = doc.documentElement
(pi, text, elm) = root.childNodes
-
- self.confirm(pi.nextSibling is text and
- pi.previousSibling is None and
- text.nextSibling is elm and
- text.previousSibling is pi and
- elm.nextSibling is None and
- elm.previousSibling is text, "testSiblings")
-
+
+ self.assert_(pi.nextSibling is text)
+ self.assert_(pi.previousSibling is None)
+ self.assert_(text.nextSibling is elm)
+ self.assert_(text.previousSibling is pi)
+ self.assert_(elm.nextSibling is None)
+ self.assert_(elm.previousSibling is text)
+
doc.unlink()
-
+
def testParents(self):
doc = parseString(
"")
@@ -812,29 +834,29 @@
elm1 = root.childNodes[0]
(elm2a, elm2b) = elm1.childNodes
elm3 = elm2b.childNodes[0]
-
- self.confirm(root.parentNode is doc and
- elm1.parentNode is root and
- elm2a.parentNode is elm1 and
- elm2b.parentNode is elm1 and
- elm3.parentNode is elm2b, "testParents")
+
+ self.assert_(root.parentNode is doc)
+ self.assert_(elm1.parentNode is root)
+ self.assert_(elm2a.parentNode is elm1)
+ self.assert_(elm2b.parentNode is elm1)
+ self.assert_(elm3.parentNode is elm2b)
+
doc.unlink()
-
+
def testNodeListItem(self):
doc = parseString("")
children = doc.childNodes
docelem = children[0]
- self.confirm(children[0] is children.item(0)
- and children.item(1) is None
- and docelem.childNodes.item(0) is docelem.childNodes[0]
- and docelem.childNodes.item(1) is docelem.childNodes[1]
- and docelem.childNodes.item(0).childNodes.item(0) is None,
- "test NodeList.item()")
+ self.assert_(children[0] is children.item(0))
+ self.assert_(children.item(1) is None)
+ self.assert_(docelem.childNodes.item(0) is docelem.childNodes[0])
+ self.assert_(docelem.childNodes.item(1) is docelem.childNodes[1])
+ self.assert_(docelem.childNodes.item(0).childNodes.item(0) is None)
doc.unlink()
-
+
def testSAX2DOM(self):
from xml.dom import pulldom
-
+
sax2dom = pulldom.SAX2DOM()
sax2dom.startDocument()
sax2dom.startElement("doc", {})
@@ -845,210 +867,211 @@
sax2dom.characters("text")
sax2dom.endElement("doc")
sax2dom.endDocument()
-
+
doc = sax2dom.document
root = doc.documentElement
(text1, elm1, text2) = root.childNodes
text3 = elm1.childNodes[0]
-
- self.confirm(text1.previousSibling is None and
- text1.nextSibling is elm1 and
- elm1.previousSibling is text1 and
- elm1.nextSibling is text2 and
- text2.previousSibling is elm1 and
- text2.nextSibling is None and
- text3.previousSibling is None and
- text3.nextSibling is None, "testSAX2DOM - siblings")
-
- self.confirm(root.parentNode is doc and
- text1.parentNode is root and
- elm1.parentNode is root and
- text2.parentNode is root and
- text3.parentNode is elm1, "testSAX2DOM - parents")
+
+ self.assert_(text1.previousSibling is None)
+ self.assert_(text1.nextSibling is elm1)
+ self.assert_(elm1.previousSibling is text1)
+ self.assert_(elm1.nextSibling is text2)
+ self.assert_(text2.previousSibling is elm1)
+ self.assert_(text2.nextSibling is None)
+ self.assert_(text3.previousSibling is None)
+ self.assert_(text3.nextSibling is None)
+
+ self.assert_(root.parentNode is doc)
+ self.assert_(text1.parentNode is root)
+ self.assert_(elm1.parentNode is root)
+ self.assert_(text2.parentNode is root)
+ self.assert_(text3.parentNode is elm1)
+
doc.unlink()
-
+
def testEncodings(self):
+ # Test encoding euro sign
doc = parseString('€')
- self.confirm(doc.toxml() == u'\u20ac'
- and doc.toxml('utf-8') ==
- '\xe2\x82\xac'
- and doc.toxml('iso-8859-15') ==
- '\xa4',
- "testEncodings - encoding EURO SIGN")
-
- # Verify that character decoding errors throw exceptions instead
+ self.assertEqual(
+ doc.toxml(), u'\u20ac')
+ self.assertEqual(
+ doc.toxml('utf-8'),
+ '\xe2\x82\xac')
+ self.assertEqual(
+ doc.toxml('iso-8859-15'),
+ '\xa4')
+ doc.unlink()
+
+ # Verify that character decoding errors throw exceptions instead
# of crashing
- self.assertRaises(UnicodeDecodeError, parseString,
+ self.assertRaises(UnicodeDecodeError, parseString,
'Comment \xe7a va ? Tr\xe8s bien ?')
-
- doc.unlink()
- class UserDataHandler:
- called = 0
- def handle(self, operation, key, data, src, dst):
- dst.setUserData(key, data + 1, self)
- src.setUserData(key, None, None)
- self.called = 1
-
def testUserData(self):
dom = Document()
n = dom.createElement('e')
- self.confirm(n.getUserData("foo") is None)
+ self.assert_(n.getUserData("foo") is None)
n.setUserData("foo", None, None)
- self.confirm(n.getUserData("foo") is None)
+ self.assert_(n.getUserData("foo") is None)
n.setUserData("foo", 12, 12)
n.setUserData("bar", 13, 13)
- self.confirm(n.getUserData("foo") == 12)
- self.confirm(n.getUserData("bar") == 13)
+ self.assertEqual(n.getUserData("foo"), 12)
+ self.assertEqual(n.getUserData("bar"), 13)
n.setUserData("foo", None, None)
- self.confirm(n.getUserData("foo") is None)
- self.confirm(n.getUserData("bar") == 13)
-
- handler = self.UserDataHandler()
+ self.assert_(n.getUserData("foo") is None)
+ self.assertEqual(n.getUserData("bar"), 13)
+
+ class UserDataHandler:
+ called = 0
+ def handle(self, operation, key, data, src, dst):
+ dst.setUserData(key, data + 1, self)
+ src.setUserData(key, None, None)
+ self.called = 1
+
+ handler = UserDataHandler()
n.setUserData("bar", 12, handler)
c = n.cloneNode(1)
- self.confirm(handler.called
- and n.getUserData("bar") is None
- and c.getUserData("bar") == 13)
+ self.assert_(handler.called)
+ self.assert_(n.getUserData("bar") is None)
+ self.assertEqual(c.getUserData("bar"), 13)
n.unlink()
c.unlink()
dom.unlink()
def checkRenameNodeSharedConstraints(self, doc, node):
# Make sure illegal NS usage is detected:
- self.assertRaises(xml.dom.NamespaceErr, doc.renameNode, node,
+ self.assertRaises(xml.dom.NamespaceErr, doc.renameNode, node,
"http://xml.python.org/ns", "xmlns:foo")
doc2 = parseString("")
- self.assertRaises(xml.dom.WrongDocumentErr, doc2.renameNode, node,
+ self.assertRaises(xml.dom.WrongDocumentErr, doc2.renameNode, node,
xml.dom.EMPTY_NAMESPACE, "foo")
-
+ doc2.unlink()
+
def testRenameAttribute(self):
doc = parseString("")
elem = doc.documentElement
attrmap = elem.attributes
attr = elem.attributes['a']
-
+
# Simple renaming
attr = doc.renameNode(attr, xml.dom.EMPTY_NAMESPACE, "b")
- self.confirm(attr.name == "b"
- and attr.nodeName == "b"
- and attr.localName is None
- and attr.namespaceURI == xml.dom.EMPTY_NAMESPACE
- and attr.prefix is None
- and attr.value == "v"
- and elem.getAttributeNode("a") is None
- and elem.getAttributeNode("b").isSameNode(attr)
- and attrmap["b"].isSameNode(attr)
- and attr.ownerDocument.isSameNode(doc)
- and attr.ownerElement.isSameNode(elem))
-
+ self.assertEqual(attr.name, "b")
+ self.assertEqual(attr.nodeName, "b")
+ self.assert_(attr.localName is None)
+ self.assertEqual(attr.namespaceURI, xml.dom.EMPTY_NAMESPACE)
+ self.assert_(attr.prefix is None)
+ self.assertEqual(attr.value, "v")
+ self.assert_(elem.getAttributeNode("a") is None)
+ self.assertSameNode(elem.getAttributeNode("b"), attr)
+ self.assertSameNode(attrmap["b"], attr)
+ self.assertSameNode(attr.ownerDocument, doc)
+ self.assertSameNode(attr.ownerElement, elem)
+
# Rename to have a namespace, no prefix
attr = doc.renameNode(attr, "http://xml.python.org/ns", "c")
- self.confirm(attr.name == "c"
- and attr.nodeName == "c"
- and attr.localName == "c"
- and attr.namespaceURI == "http://xml.python.org/ns"
- and attr.prefix is None
- and attr.value == "v"
- and elem.getAttributeNode("a") is None
- and elem.getAttributeNode("b") is None
- and elem.getAttributeNode("c").isSameNode(attr)
- and elem.getAttributeNodeNS(
- "http://xml.python.org/ns", "c").isSameNode(attr)
- and attrmap["c"].isSameNode(attr)
- and attrmap[("http://xml.python.org/ns", "c")].isSameNode(attr))
-
+ self.assertEqual(attr.name, "c")
+ self.assertEqual(attr.nodeName, "c")
+ self.assertEqual(attr.localName, "c")
+ self.assertEqual(attr.namespaceURI, "http://xml.python.org/ns")
+ self.assert_(attr.prefix is None)
+ self.assertEqual(attr.value, "v")
+ self.assert_(elem.getAttributeNode("a") is None)
+ self.assert_(elem.getAttributeNode("b") is None)
+ self.assertSameNode(elem.getAttributeNode("c"), attr)
+ self.assertSameNode(
+ elem.getAttributeNodeNS("http://xml.python.org/ns", "c"), attr)
+ self.assertSameNode(attrmap["c"], attr)
+ self.assertSameNode(attrmap[("http://xml.python.org/ns", "c")], attr)
+
# Rename to have a namespace, with prefix
attr = doc.renameNode(attr, "http://xml.python.org/ns2", "p:d")
- self.confirm(attr.name == "p:d"
- and attr.nodeName == "p:d"
- and attr.localName == "d"
- and attr.namespaceURI == "http://xml.python.org/ns2"
- and attr.prefix == "p"
- and attr.value == "v"
- and elem.getAttributeNode("a") is None
- and elem.getAttributeNode("b") is None
- and elem.getAttributeNode("c") is None
- and elem.getAttributeNodeNS(
- "http://xml.python.org/ns", "c") is None
- and elem.getAttributeNode("p:d").isSameNode(attr)
- and elem.getAttributeNodeNS(
- "http://xml.python.org/ns2", "d").isSameNode(attr)
- and attrmap["p:d"].isSameNode(attr)
- and attrmap[("http://xml.python.org/ns2", "d")].isSameNode(attr))
-
+ self.assertEqual(attr.name, "p:d")
+ self.assertEqual(attr.nodeName, "p:d")
+ self.assertEqual(attr.localName, "d")
+ self.assertEqual(attr.namespaceURI, "http://xml.python.org/ns2")
+ self.assertEqual(attr.prefix, "p")
+ self.assertEqual(attr.value, "v")
+ self.assert_(elem.getAttributeNode("a") is None)
+ self.assert_(elem.getAttributeNode("b") is None)
+ self.assert_(elem.getAttributeNode("c") is None)
+ self.assert_(elem.getAttributeNodeNS("http://xml.python.org/ns", "c") is None)
+ self.assertSameNode(elem.getAttributeNode("p:d"), attr)
+ self.assertSameNode(elem.getAttributeNodeNS("http://xml.python.org/ns2", "d"), attr)
+ self.assertSameNode(attrmap["p:d"], attr)
+ self.assertSameNode(attrmap[("http://xml.python.org/ns2", "d")], attr)
+
# Rename back to a simple non-NS node
attr = doc.renameNode(attr, xml.dom.EMPTY_NAMESPACE, "e")
- self.confirm(attr.name == "e"
- and attr.nodeName == "e"
- and attr.localName is None
- and attr.namespaceURI == xml.dom.EMPTY_NAMESPACE
- and attr.prefix is None
- and attr.value == "v"
- and elem.getAttributeNode("a") is None
- and elem.getAttributeNode("b") is None
- and elem.getAttributeNode("c") is None
- and elem.getAttributeNode("p:d") is None
- and elem.getAttributeNodeNS(
- "http://xml.python.org/ns", "c") is None
- and elem.getAttributeNode("e").isSameNode(attr)
- and attrmap["e"].isSameNode(attr))
+ self.assertEqual(attr.name, "e")
+ self.assertEqual(attr.nodeName, "e")
+ self.assert_(attr.localName is None)
+ self.assertEqual(attr.namespaceURI, xml.dom.EMPTY_NAMESPACE)
+ self.assert_(attr.prefix is None)
+ self.assertEqual(attr.value, "v")
+ self.assert_(elem.getAttributeNode("a") is None)
+ self.assert_(elem.getAttributeNode("b") is None)
+ self.assert_(elem.getAttributeNode("c") is None)
+ self.assert_(elem.getAttributeNode("p:d") is None)
+ self.assert_(elem.getAttributeNodeNS("http://xml.python.org/ns", "c") is None)
+ self.assertSameNode(elem.getAttributeNode("e"), attr)
+ self.assertSameNode(attrmap["e"], attr)
- self.assertRaises(xml.dom.NamespaceErr, doc.renameNode, attr,
+ self.assertRaises(xml.dom.NamespaceErr, doc.renameNode, attr,
"http://xml.python.org/ns", "xmlns")
self.checkRenameNodeSharedConstraints(doc, attr)
doc.unlink()
-
+
def testRenameElement(self):
doc = parseString("")
elem = doc.documentElement
-
+
# Simple renaming
elem = doc.renameNode(elem, xml.dom.EMPTY_NAMESPACE, "a")
- self.confirm(elem.tagName == "a"
- and elem.nodeName == "a"
- and elem.localName is None
- and elem.namespaceURI == xml.dom.EMPTY_NAMESPACE
- and elem.prefix is None
- and elem.ownerDocument.isSameNode(doc))
-
+ self.assertEqual(elem.tagName, "a")
+ self.assertEqual(elem.nodeName, "a")
+ self.assert_(elem.localName is None)
+ self.assertEqual(elem.namespaceURI, xml.dom.EMPTY_NAMESPACE)
+ self.assert_(elem.prefix is None)
+ self.assertSameNode(elem.ownerDocument, doc)
+
# Rename to have a namespace, no prefix
elem = doc.renameNode(elem, "http://xml.python.org/ns", "b")
- self.confirm(elem.tagName == "b"
- and elem.nodeName == "b"
- and elem.localName == "b"
- and elem.namespaceURI == "http://xml.python.org/ns"
- and elem.prefix is None
- and elem.ownerDocument.isSameNode(doc))
-
+ self.assertEqual(elem.tagName, "b")
+ self.assertEqual(elem.nodeName, "b")
+ self.assertEqual(elem.localName, "b")
+ self.assertEqual(elem.namespaceURI, "http://xml.python.org/ns")
+ self.assert_(elem.prefix is None)
+ self.assertSameNode(elem.ownerDocument, doc)
+
# Rename to have a namespace, with prefix
elem = doc.renameNode(elem, "http://xml.python.org/ns2", "p:c")
- self.confirm(elem.tagName == "p:c"
- and elem.nodeName == "p:c"
- and elem.localName == "c"
- and elem.namespaceURI == "http://xml.python.org/ns2"
- and elem.prefix == "p"
- and elem.ownerDocument.isSameNode(doc))
-
+ self.assertEqual(elem.tagName, "p:c")
+ self.assertEqual(elem.nodeName, "p:c")
+ self.assertEqual(elem.localName, "c")
+ self.assertEqual(elem.namespaceURI, "http://xml.python.org/ns2")
+ self.assertEqual(elem.prefix, "p")
+ self.assertSameNode(elem.ownerDocument, doc)
+
# Rename back to a simple non-NS node
elem = doc.renameNode(elem, xml.dom.EMPTY_NAMESPACE, "d")
- self.confirm(elem.tagName == "d"
- and elem.nodeName == "d"
- and elem.localName is None
- and elem.namespaceURI == xml.dom.EMPTY_NAMESPACE
- and elem.prefix is None
- and elem.ownerDocument.isSameNode(doc))
-
+ self.assertEqual(elem.tagName, "d")
+ self.assertEqual(elem.nodeName, "d")
+ self.assert_(elem.localName is None)
+ self.assertEqual(elem.namespaceURI, xml.dom.EMPTY_NAMESPACE)
+ self.assert_(elem.prefix is None)
+ self.assertSameNode(elem.ownerDocument, doc)
+
self.checkRenameNodeSharedConstraints(doc, elem)
doc.unlink()
-
+
def testRenameOther(self):
# We have to create a comment node explicitly since not all DOM
# builders used with minidom add comments to the DOM.
doc = xml.dom.minidom.getDOMImplementation().createDocument(
xml.dom.EMPTY_NAMESPACE, "e", None)
node = doc.createComment("comment")
- self.assertRaises(xml.dom.NotSupportedErr, doc.renameNode, node,
+ self.assertRaises(xml.dom.NotSupportedErr, doc.renameNode, node,
xml.dom.EMPTY_NAMESPACE, "foo")
doc.unlink()
@@ -1056,47 +1079,50 @@
doc = parseString("a")
elem = doc.documentElement
text = elem.childNodes[0]
- self.assertEquals(text.nodeType, Node.TEXT_NODE)
-
- self.checkWholeText(text, "a")
+ self.assertEqual(text.nodeType, Node.TEXT_NODE)
+
+ self.assertEqual(text.wholeText, "a")
elem.appendChild(doc.createTextNode("b"))
- self.checkWholeText(text, "ab")
+ self.assertEqual(text.wholeText, "ab")
elem.insertBefore(doc.createCDATASection("c"), text)
- self.checkWholeText(text, "cab")
-
+ self.assertEqual(text.wholeText, "cab")
+
# make sure we don't cross other nodes
splitter = doc.createComment("comment")
elem.appendChild(splitter)
text2 = doc.createTextNode("d")
elem.appendChild(text2)
- self.checkWholeText(text, "cab")
- self.checkWholeText(text2, "d")
-
+ self.assertEqual(text.wholeText, "cab")
+ self.assertEqual(text2.wholeText, "d")
+
x = doc.createElement("x")
elem.replaceChild(x, splitter)
splitter = x
- self.checkWholeText(text, "cab")
- self.checkWholeText(text2, "d")
-
+ self.assertEqual(text.wholeText, "cab")
+ self.assertEqual(text2.wholeText, "d")
+
x = doc.createProcessingInstruction("y", "z")
elem.replaceChild(x, splitter)
splitter = x
- self.checkWholeText(text, "cab")
- self.checkWholeText(text2, "d")
-
+ self.assertEqual(text.wholeText, "cab")
+ self.assertEqual(text2.wholeText, "d")
+
elem.removeChild(splitter)
- self.checkWholeText(text, "cabd")
- self.checkWholeText(text2, "cabd")
-
+ self.assertEqual(text.wholeText, "cabd")
+ self.assertEqual(text2.wholeText, "cabd")
+
+ doc.unlink()
+
def testPatch1094164(self):
doc = parseString("")
elem = doc.documentElement
e = elem.firstChild
- self.confirm(e.parentNode is elem, "Before replaceChild()")
+ self.assert_(e.parentNode is elem, "Before replaceChild()")
# Check that replacing a child with itself leaves the tree unchanged
elem.replaceChild(e, e)
- self.confirm(e.parentNode is elem, "After replaceChild()")
-
+ self.assert_(e.parentNode is elem, "After replaceChild()")
+ doc.unlink()
+
def testReplaceWholeText(self):
def setup():
doc = parseString("ad")
@@ -1107,25 +1133,28 @@
elem.insertBefore(doc.createTextNode("b"), splitter)
elem.insertBefore(doc.createCDATASection("c"), text1)
return doc, elem, text1, splitter, text2
-
+
doc, elem, text1, splitter, text2 = setup()
text = text1.replaceWholeText("new content")
- self.checkWholeText(text, "new content")
- self.checkWholeText(text2, "d")
- self.confirm(len(elem.childNodes) == 3)
-
+ self.assertEqual(text.wholeText, "new content")
+ self.assertEqual(text2.wholeText, "d")
+ self.assertEqual(len(elem.childNodes), 3)
+ doc.unlink()
+
doc, elem, text1, splitter, text2 = setup()
text = text2.replaceWholeText("new content")
- self.checkWholeText(text, "new content")
- self.checkWholeText(text1, "cab")
- self.confirm(len(elem.childNodes) == 5)
-
+ self.assertEqual(text.wholeText, "new content")
+ self.assertEqual(text1.wholeText, "cab")
+ self.assertEqual(len(elem.childNodes), 5)
+ doc.unlink()
+
doc, elem, text1, splitter, text2 = setup()
text = text1.replaceWholeText("")
- self.checkWholeText(text2, "d")
- self.confirm(text is None
- and len(elem.childNodes) == 2)
-
+ self.assertEqual(text2.wholeText, "d")
+ self.assert_(text is None)
+ self.assertEqual(len(elem.childNodes), 2)
+ doc.unlink()
+
def testSchemaType(self):
doc = parseString(
"")
e = doc.documentElement
a1 = e.getAttributeNode("a1")
a2 = e.getAttributeNode("a2")
- self.confirm(doc.getElementById("v") is None
- and not a1.isId
- and not a2.isId)
+ self.assert_(doc.getElementById("v") is None)
+ self.failIf(a1.isId)
+ self.failIf(a2.isId)
e.setIdAttribute("a1")
- self.confirm(e.isSameNode(doc.getElementById("v"))
- and a1.isId
- and not a2.isId)
+ self.assertSameNode(e, doc.getElementById("v"))
+ self.assert_(a1.isId)
+ self.failIf(a2.isId)
e.setIdAttribute("a2")
- self.confirm(e.isSameNode(doc.getElementById("v"))
- and e.isSameNode(doc.getElementById("w"))
- and a1.isId
- and a2.isId)
+ self.assertSameNode(e, doc.getElementById("v"))
+ self.assertSameNode(e, doc.getElementById("w"))
+ self.assert_(a1.isId)
+ self.assert_(a2.isId)
# replace the a1 node; the new node should *not* be an ID
a3 = doc.createAttribute("a1")
a3.value = "v"
e.setAttributeNode(a3)
- self.confirm(doc.getElementById("v") is None
- and e.isSameNode(doc.getElementById("w"))
- and not a1.isId
- and a2.isId
- and not a3.isId)
+ self.assert_(doc.getElementById("v") is None)
+ self.assertSameNode(e, doc.getElementById("w"))
+ self.failIf(a1.isId)
+ self.assert_(a2.isId)
+ self.failIf(a3.isId)
# renaming an attribute should not affect its ID-ness:
doc.renameNode(a2, xml.dom.EMPTY_NAMESPACE, "an")
- self.confirm(e.isSameNode(doc.getElementById("w"))
- and a2.isId)
-
+ self.assertSameNode(e, doc.getElementById("w"))
+ self.assert_(a2.isId)
+ doc.unlink()
+
def testSetIdAttributeNS(self):
NS1 = "http://xml.python.org/ns1"
NS2 = "http://xml.python.org/ns2"
@@ -1200,31 +1231,32 @@
e = doc.documentElement
a1 = e.getAttributeNodeNS(NS1, "a1")
a2 = e.getAttributeNodeNS(NS2, "a2")
- self.confirm(doc.getElementById("v") is None
- and not a1.isId
- and not a2.isId)
+ self.assert_(doc.getElementById("v") is None)
+ self.failIf(a1.isId)
+ self.failIf(a2.isId)
e.setIdAttributeNS(NS1, "a1")
- self.confirm(e.isSameNode(doc.getElementById("v"))
- and a1.isId
- and not a2.isId)
+ self.assertSameNode(e, doc.getElementById("v"))
+ self.assert_(a1.isId)
+ self.failIf(a2.isId)
e.setIdAttributeNS(NS2, "a2")
- self.confirm(e.isSameNode(doc.getElementById("v"))
- and e.isSameNode(doc.getElementById("w"))
- and a1.isId
- and a2.isId)
+ self.assertSameNode(e, doc.getElementById("v"))
+ self.assertSameNode(e, doc.getElementById("w"))
+ self.assert_(a1.isId)
+ self.assert_(a2.isId)
# replace the a1 node; the new node should *not* be an ID
a3 = doc.createAttributeNS(NS1, "a1")
a3.value = "v"
e.setAttributeNode(a3)
- self.confirm(e.isSameNode(doc.getElementById("w")))
- self.confirm(not a1.isId)
- self.confirm(a2.isId)
- self.confirm(not a3.isId)
- self.confirm(doc.getElementById("v") is None)
+ self.assertSameNode(e, doc.getElementById("w"))
+ self.failIf(a1.isId)
+ self.assert_(a2.isId)
+ self.failIf(a3.isId)
+ self.assert_(doc.getElementById("v") is None)
# renaming an attribute should not affect its ID-ness:
doc.renameNode(a2, xml.dom.EMPTY_NAMESPACE, "an")
- self.confirm(e.isSameNode(doc.getElementById("w"))
- and a2.isId)
+ self.assertSameNode(e, doc.getElementById("w"))
+ self.assert_(a2.isId)
+ doc.unlink()
def testSetIdAttributeNode(self):
NS1 = "http://xml.python.org/ns1"
@@ -1236,31 +1268,32 @@
e = doc.documentElement
a1 = e.getAttributeNodeNS(NS1, "a1")
a2 = e.getAttributeNodeNS(NS2, "a2")
- self.confirm(doc.getElementById("v") is None
- and not a1.isId
- and not a2.isId)
+ self.assert_(doc.getElementById("v") is None)
+ self.failIf(a1.isId)
+ self.failIf(a2.isId)
e.setIdAttributeNode(a1)
- self.confirm(e.isSameNode(doc.getElementById("v"))
- and a1.isId
- and not a2.isId)
+ self.assertSameNode(e, doc.getElementById("v"))
+ self.assert_(a1.isId)
+ self.failIf(a2.isId)
e.setIdAttributeNode(a2)
- self.confirm(e.isSameNode(doc.getElementById("v"))
- and e.isSameNode(doc.getElementById("w"))
- and a1.isId
- and a2.isId)
+ self.assertSameNode(e, doc.getElementById("v"))
+ self.assertSameNode(e, doc.getElementById("w"))
+ self.assert_(a1.isId)
+ self.assert_(a2.isId)
# replace the a1 node; the new node should *not* be an ID
a3 = doc.createAttributeNS(NS1, "a1")
a3.value = "v"
e.setAttributeNode(a3)
- self.confirm(e.isSameNode(doc.getElementById("w")))
- self.confirm(not a1.isId)
- self.confirm(a2.isId)
- self.confirm(not a3.isId)
- self.confirm(doc.getElementById("v") is None)
+ self.assertSameNode(e, doc.getElementById("w"))
+ self.failIf(a1.isId)
+ self.assert_(a2.isId)
+ self.failIf(a3.isId)
+ self.assert_(doc.getElementById("v") is None)
# renaming an attribute should not affect its ID-ness:
doc.renameNode(a2, xml.dom.EMPTY_NAMESPACE, "an")
- self.confirm(e.isSameNode(doc.getElementById("w"))
- and a2.isId)
+ self.assertSameNode(e, doc.getElementById("w"))
+ self.assert_(a2.isId)
+ doc.unlink()
def testPickledDocument(self):
doc = parseString("\n"
@@ -1275,40 +1308,94 @@
stack = [(doc, doc2)]
while stack:
n1, n2 = stack.pop()
- self.confirm(n1.nodeType == n2.nodeType
- and len(n1.childNodes) == len(n2.childNodes)
- and n1.nodeName == n2.nodeName
- and not n1.isSameNode(n2)
- and not n2.isSameNode(n1))
+ self.assertEqual(n1.nodeType, n2.nodeType)
+ self.assertEqual(len(n1.childNodes), len(n2.childNodes))
+ self.assertEqual(n1.nodeName, n2.nodeName)
+ self.assertNotSameNode(n1, n2)
if n1.nodeType == Node.DOCUMENT_TYPE_NODE:
len(n1.entities)
len(n2.entities)
len(n1.notations)
len(n2.notations)
- self.confirm(len(n1.entities) == len(n2.entities)
- and len(n1.notations) == len(n2.notations))
+ self.assertEqual(len(n1.entities), len(n2.entities))
+ self.assertEqual(len(n1.notations), len(n2.notations))
for i in range(len(n1.notations)):
no1 = n1.notations.item(i)
no2 = n1.notations.item(i)
- self.confirm(no1.name == no2.name
- and no1.publicId == no2.publicId
- and no1.systemId == no2.systemId)
+ self.assertEqual(no1.name, no2.name)
+ self.assertEqual(no1.publicId, no2.publicId)
+ self.assertEqual(no1.systemId, no2.systemId)
statck.append((no1, no2))
for i in range(len(n1.entities)):
e1 = n1.entities.item(i)
e2 = n2.entities.item(i)
- self.confirm(e1.notationName == e2.notationName
- and e1.publicId == e2.publicId
- and e1.systemId == e2.systemId)
+ self.assertEqual(e1.notationName, e2.notationName)
+ self.assertEqual(e1.publicId, e2.publicId)
+ self.assertEqual(e1.systemId, e2.systemId)
stack.append((e1, e2))
if n1.nodeType != Node.DOCUMENT_NODE:
- self.confirm(n1.ownerDocument.isSameNode(doc)
- and n2.ownerDocument.isSameNode(doc2))
+ self.assertSameNode(n1.ownerDocument, doc)
+ self.assertSameNode(n2.ownerDocument, doc2)
for i in range(len(n1.childNodes)):
stack.append((n1.childNodes[i], n2.childNodes[i]))
+ doc.unlink()
+ doc2.unlink()
+ if gc is not None:
+ # Testing unlink()
+ #
+ # All the tests call unlink() properly. This should leave no
+ # cycles for the garbage collector to collect. To test that it
+ # works, we use the garbage collector's debug API.
+
+ def setUp(self):
+ # Disable garbage collection before each test.
+ self._gc_was_enabled = gc.isenabled()
+ self._gc_old_debug_flags = gc.get_debug()
+ gc.disable()
+ # Do a manual collection to start clean.
+ gc.set_debug(0)
+ del gc.garbage[:]
+ gc.collect()
+ # During and after the test, no nodes should be collected.
+ gc.set_debug(gc.DEBUG_SAVEALL)
+
+ def tearDown(self):
+ # Re-enable garbage collection.
+ del gc.garbage[:]
+ gc.set_debug(self._gc_old_debug_flags)
+ if self._gc_was_enabled:
+ gc.enable()
+
+ def _check_cycles(self):
+ gc.collect()
+ garbageNodes = [obj for obj in gc.garbage if isinstance(obj, Node)]
+ garbageCount = len(garbageNodes)
+ if garbageCount:
+ print "Garbage left over: %i nodes" % garbageCount
+ if test_support.verbose:
+ try:
+ print garbageNodes[:10]
+ except:
+ print "?"
+ self.assertEqual(garbageCount, 0)
+
+ # Fix up all tests to call _check_cycles()
+ # Can't use tearDown() to do this because it treats exceptions
+ # as errors, not test failures.
+ def _wrapTest(fn):
+ def memoryTestWrapper(self):
+ fn(self)
+ self._check_cycles()
+ return memoryTestWrapper
+ _loc = locals()
+ for _name, _fn in _loc.items():
+ if _name.startswith('test'):
+ _loc[_name] = _wrapTest(_fn)
+ del _loc, _name, _fn, _wrapTest
+
def test_main():
- run_unittest(MinidomTest)
-
+ test_support.run_unittest(MinidomTest)
+
if __name__ == "__main__":
test_main()