cpython/Lib/test/test_minidom.py

348 lines
8.6 KiB
Python

# test for xml.dom.minidom
from xml.dom.minidom import parse, Node, Document, parseString
import xml.parsers.expat
import os.path
import sys
import traceback
from test_support import verbose
if __name__ == "__main__":
base = sys.argv[0]
else:
base = __file__
tstfile = os.path.join(os.path.dirname(base), "test.xml")
del base
def confirm( test, testname="Test" ):
if test:
print "Passed " + testname
else:
print "Failed " + testname
raise Exception
Node._debug=1
def testParseFromFile():
from StringIO import StringIO
dom=parse( StringIO( open( tstfile ).read() ) )
dom.unlink()
confirm(isinstance(dom,Document))
def testGetElementsByTagName( ):
dom=parse( tstfile )
confirm( dom.getElementsByTagName( "LI" )==\
dom.documentElement.getElementsByTagName( "LI" ) )
dom.unlink()
def testInsertBefore( ):
dom=parse( tstfile )
docel=dom.documentElement
#docel.insertBefore( dom.createProcessingInstruction("a", "b"),
# docel.childNodes[1])
#docel.insertBefore( dom.createProcessingInstruction("a", "b"),
# docel.childNodes[0])
#confirm( docel.childNodes[0].tet=="a" )
#confirm( docel.childNodes[2].tet=="a" )
dom.unlink()
def testAppendChild():
dom=parse( tstfile )
dom.documentElement.appendChild( dom.createComment( u"Hello" ))
confirm( dom.documentElement.childNodes[-1].nodeName=="#comment" )
confirm( dom.documentElement.childNodes[-1].data=="Hello" )
dom.unlink()
def testNonZero():
dom=parse( tstfile )
confirm( dom )# should not be zero
dom.appendChild( dom.createComment( "foo" ) )
confirm( not dom.childNodes[-1].childNodes )
dom.unlink()
def testUnlink():
dom=parse( tstfile )
dom.unlink()
def testElement():
dom=Document()
dom.appendChild( dom.createElement( "abc" ) )
confirm( dom.documentElement )
dom.unlink()
def testAAA():
dom=parseString( "<abc/>" )
el=dom.documentElement
el.setAttribute( "spam", "jam2" )
dom.unlink()
def testAAB():
dom=parseString( "<abc/>" )
el=dom.documentElement
el.setAttribute( "spam", "jam" )
el.setAttribute( "spam", "jam2" )
dom.unlink()
def testAddAttr():
dom=Document()
child=dom.appendChild( dom.createElement( "abc" ) )
child.setAttribute( "def", "ghi" )
confirm( child.getAttribute( "def" )=="ghi" )
confirm( child.attributes["def"].value=="ghi" )
child.setAttribute( "jkl", "mno" )
confirm( child.getAttribute( "jkl" )=="mno" )
confirm( child.attributes["jkl"].value=="mno" )
confirm( len( child.attributes )==2 )
child.setAttribute( "def", "newval" )
confirm( child.getAttribute( "def" )=="newval" )
confirm( child.attributes["def"].value=="newval" )
confirm( len( child.attributes )==2 )
dom.unlink()
def testDeleteAttr():
dom=Document()
child=dom.appendChild( dom.createElement( "abc" ) )
confirm( len( child.attributes)==0 )
child.setAttribute( "def", "ghi" )
confirm( len( child.attributes)==1 )
del child.attributes["def"]
confirm( len( child.attributes)==0 )
dom.unlink()
def testRemoveAttr():
dom=Document()
child=dom.appendChild( dom.createElement( "abc" ) )
child.setAttribute( "def", "ghi" )
confirm( len( child.attributes)==1 )
child.removeAttribute("def" )
confirm( len( child.attributes)==0 )
dom.unlink()
def testRemoveAttrNS():
dom=Document()
child=dom.appendChild(
dom.createElementNS( "http://www.python.org", "python:abc" ) )
child.setAttributeNS( "http://www.w3.org", "xmlns:python",
"http://www.python.org" )
child.setAttributeNS( "http://www.python.org", "python:abcattr", "foo" )
confirm( len( child.attributes )==2 )
child.removeAttributeNS( "http://www.python.org", "abcattr" )
confirm( len( child.attributes )==1 )
dom.unlink()
def testRemoveAttributeNode():
dom=Document()
child=dom.appendChild( dom.createElement( "foo" ) )
child.setAttribute( "spam", "jam" )
confirm( len( child.attributes )==1 )
node=child.getAttributeNode( "spam" )
child.removeAttributeNode( node )
confirm( len( child.attributes )==0 )
dom.unlink()
def testChangeAttr():
dom=parseString( "<abc/>" )
el=dom.documentElement
el.setAttribute( "spam", "jam" )
confirm( len( el.attributes )==1 )
el.setAttribute( "spam", "bam" )
confirm( len( el.attributes )==1 )
el.attributes["spam"]="ham"
confirm( len( el.attributes )==1 )
el.setAttribute( "spam2", "bam" )
confirm( len( el.attributes )==2 )
el.attributes[ "spam2"]= "bam2"
confirm( len( el.attributes )==2 )
dom.unlink()
def testGetAttrList():
pass
def testGetAttrValues(): pass
def testGetAttrLength(): pass
def testGetAttribute(): pass
def testGetAttributeNS(): pass
def testGetAttributeNode(): pass
def testGetElementsByTagNameNS(): pass
def testGetEmptyNodeListFromElementsByTagNameNS(): pass
def testElementReprAndStr():
dom=Document()
el=dom.appendChild( dom.createElement( "abc" ) )
string1=repr( el )
string2=str( el )
confirm( string1==string2 )
dom.unlink()
# commented out until Fredrick's fix is checked in
def _testElementReprAndStrUnicode():
dom=Document()
el=dom.appendChild( dom.createElement( u"abc" ) )
string1=repr( el )
string2=str( el )
confirm( string1==string2 )
dom.unlink()
# commented out until Fredrick's fix is checked in
def _testElementReprAndStrUnicodeNS():
dom=Document()
el=dom.appendChild(
dom.createElementNS( u"http://www.slashdot.org", u"slash:abc" ))
string1=repr( el )
string2=str( el )
confirm( string1==string2 )
confirm( string1.find("slash:abc" )!=-1 )
dom.unlink()
confirm( len( Node.allnodes )==0 )
def testAttributeRepr():
dom=Document()
el=dom.appendChild( dom.createElement( u"abc" ) )
node=el.setAttribute( "abc", "def" )
confirm( str( node ) == repr( node ) )
dom.unlink()
confirm( len( Node.allnodes )==0 )
def testTextNodeRepr(): pass
def testWriteXML():
str = '<a b="c"/>'
dom = parseString(str)
domstr = dom.toxml()
dom.unlink()
confirm(str == domstr)
confirm( len( Node.allnodes )==0 )
def testProcessingInstruction(): pass
def testProcessingInstructionRepr(): pass
def testTextRepr(): pass
def testWriteText(): pass
def testDocumentElement(): pass
def testTooManyDocumentElements(): pass
def testCreateElementNS(): pass
def testCreatAttributeNS(): pass
def testParse(): pass
def testParseString(): pass
def testComment(): pass
def testAttrListItem(): pass
def testAttrListItems(): pass
def testAttrListItemNS(): pass
def testAttrListKeys(): pass
def testAttrListKeysNS(): pass
def testAttrListValues(): pass
def testAttrListLength(): pass
def testAttrList__getitem__(): pass
def testAttrList__setitem__(): pass
def testSetAttrValueandNodeValue(): pass
def testParseElement(): pass
def testParseAttributes(): pass
def testParseElementNamespaces(): pass
def testParseAttributeNamespaces(): pass
def testParseProcessingInstructions(): pass
def testChildNodes(): pass
def testFirstChild(): pass
def testHasChildNodes(): pass
def testCloneElementShallow(): pass
def testCloneElementShallowCopiesAttributes(): pass
def testCloneElementDeep(): pass
def testCloneDocumentShallow(): pass
def testCloneDocumentDeep(): pass
def testCloneAttributeShallow(): pass
def testCloneAttributeDeep(): pass
def testClonePIShallow(): pass
def testClonePIDeep(): pass
names=globals().keys()
names.sort()
works=1
for name in names:
if name.startswith( "test" ):
func=globals()[name]
try:
func()
print "Test Succeeded", name
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={}
except Exception, e :
works=0
print "Test Failed: ", name
apply( traceback.print_exception, sys.exc_info() )
print `e`
Node.allnodes={}
if works:
print "All tests succeeded"
else:
print "\n\n\n\n************ Check for failures!"
Node.debug = None # Delete debug output collected in a StringIO object
Node._debug = 0 # And reset debug mode