mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	 9e79a25b8a
			
		
	
	
		9e79a25b8a
		
	
	
	
	
		
			
			flag is true, is set to a StringIO object that silently collects all debug messages. This is triggered by the Node._debug=1 statement at the top of test_minidom.py. After the tests, we better delete that StringIO object to avoid wasting memory. We also reset the _debug flag. (Note that this is an undetectable memory leak, and the memory doesn't get collected by the cycle-gc either, because it's all reachable -- it's just useless.)
		
			
				
	
	
		
			360 lines
		
	
	
	
		
			8.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			360 lines
		
	
	
	
		
			8.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # test for xml.dom.minidom
 | |
| 
 | |
| from xml.dom.minidom import parse, Node, Document, parseString
 | |
| 
 | |
| 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()
 | |
|     dom=None
 | |
|     confirm (len( Node.allnodes )==0)
 | |
| 
 | |
| 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()
 | |
|     del dom
 | |
|     del docel
 | |
|     confirm( len( Node.allnodes )==0)
 | |
| 
 | |
| 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()
 | |
|     dom=None
 | |
|     confirm( len( Node.allnodes )==0 )
 | |
| 
 | |
| def testNonZero():
 | |
|     dom=parse( tstfile )
 | |
|     confirm( dom )# should not be zero
 | |
|     dom.appendChild( dom.createComment( "foo" ) )
 | |
|     confirm( not dom.childNodes[-1].childNodes )
 | |
|     dom.unlink()
 | |
|     dom=None
 | |
|     confirm( len( Node.allnodes )==0 )
 | |
| 
 | |
| def testUnlink():
 | |
|     dom=parse( tstfile )
 | |
|     dom.unlink()
 | |
|     dom=None
 | |
|     confirm( len( Node.allnodes )==0 )
 | |
| 
 | |
| def testElement():
 | |
|     dom=Document()
 | |
|     dom.appendChild( dom.createElement( "abc" ) )
 | |
|     confirm( dom.documentElement )
 | |
|     dom.unlink()
 | |
|     dom=None
 | |
|     confirm( len( Node.allnodes )==0 )
 | |
| 
 | |
| def testAAA():
 | |
|     dom=parseString( "<abc/>" )
 | |
|     el=dom.documentElement
 | |
|     el.setAttribute( "spam", "jam2" )
 | |
|     dom.unlink()
 | |
|     dom=None
 | |
| 
 | |
| def testAAB():
 | |
|     dom=parseString( "<abc/>" )
 | |
|     el=dom.documentElement
 | |
|     el.setAttribute( "spam", "jam" )
 | |
|     el.setAttribute( "spam", "jam2" )
 | |
|     dom.unlink()
 | |
|     dom=None
 | |
| 
 | |
| 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()
 | |
|     dom=None
 | |
|     child=None
 | |
| 
 | |
| 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()
 | |
|     confirm( len( Node.allnodes )==0 )
 | |
| 
 | |
| 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()
 | |
|     dom=None
 | |
|     
 | |
| 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()
 | |
|     dom=None
 | |
|     confirm( len( Node.allnodes )==0 )
 | |
| 
 | |
| 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()
 | |
|     dom=None
 | |
|     confirm( len( Node.allnodes )==0 )
 | |
| 
 | |
| 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()
 | |
| 
 | |
| def testAttributeRepr():
 | |
|     dom=Document()
 | |
|     el=dom.appendChild( dom.createElement( u"abc" ) )
 | |
|     node=el.setAttribute( "abc", "def" )
 | |
|     confirm( str( node ) == repr( node ) )
 | |
|     dom.unlink()
 | |
| 
 | |
| def testTextNodeRepr(): pass
 | |
| 
 | |
| def testWriteXML(): pass
 | |
| 
 | |
| 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
 | |
|             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
 |