# 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( "" ) el=dom.documentElement el.setAttribute( "spam", "jam2" ) dom.unlink() def testAAB(): dom=parseString( "" ) 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( "" ) 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 = '' 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