Added minidom tests.
diff --git a/Lib/test/test_minidom.py b/Lib/test/test_minidom.py
new file mode 100644
index 0000000..4819bc6
--- /dev/null
+++ b/Lib/test/test_minidom.py
@@ -0,0 +1,321 @@
+from xml.dom.minidom import parse, Node, Document, parseString
+import traceback, sys
+
+tstfile="test.xml"
+
+Node._debug=1
+
+def testGetElementsByTagName( ):
+    dom=parse( tstfile )
+    assert dom.getElementsByTagName( "LI" )==\
+            dom.documentElement.getElementsByTagName( "LI" )
+    dom.unlink()
+    dom=None
+    assert( 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])
+
+    #assert docel.childNodes[0].target=="a"
+    #assert docel.childNodes[2].target=="a"
+    dom.unlink()
+    del dom
+    del docel
+    assert( len( Node.allnodes ))==0
+
+def testAppendChild():
+    dom=parse( tstfile )
+    dom.documentElement.appendChild( dom.createComment( u"Hello" ))
+    assert dom.documentElement.childNodes[-1].nodeName=="#comment"
+    assert dom.documentElement.childNodes[-1].data=="Hello"
+    dom.unlink()
+    dom=None
+    assert( len( Node.allnodes ))==0
+
+def testNonZero():
+    dom=parse( tstfile )
+    assert dom # should not be zero
+    dom.appendChild( dom.createComment( "foo" ) )
+    assert not dom.childNodes[-1].childNodes
+    dom.unlink()
+    dom=None
+    assert( len( Node.allnodes ))==0
+
+def testUnlink():
+    dom=parse( tstfile )
+    dom.unlink()
+    dom=None
+    assert( len( Node.allnodes ))==0
+
+def testElement():
+    dom=Document()
+    dom.appendChild( dom.createElement( "abc" ) )
+    assert dom.documentElement
+    dom.unlink()
+    dom=None
+    assert( 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" )
+    assert child.getAttribute( "def" )=="ghi"
+    assert child.attributes["def"].value=="ghi"
+
+    child.setAttribute( "jkl", "mno" )
+    assert child.getAttribute( "jkl" )=="mno"
+    assert child.attributes["jkl"].value=="mno"
+
+    assert len( child.attributes )==2
+
+    child.setAttribute( "def", "newval" )
+    assert child.getAttribute( "def" )=="newval"
+    assert child.attributes["def"].value=="newval"
+
+    assert len( child.attributes )==2
+
+    dom.unlink()
+    dom=None
+    child=None
+
+def testDeleteAttr():
+    dom=Document()
+    child=dom.appendChild( dom.createElement( "abc" ) )
+
+    assert len( child.attributes)==0
+    child.setAttribute( "def", "ghi" )
+    assert len( child.attributes)==1
+    del child.attributes["def"]
+    assert len( child.attributes)==0
+    dom.unlink()
+    assert( len( Node.allnodes ))==0
+
+def testRemoveAttr():
+    dom=Document()
+    child=dom.appendChild( dom.createElement( "abc" ) )
+
+    child.setAttribute( "def", "ghi" )
+    assert len( child.attributes)==1
+    child.removeAttribute("def" )
+    assert 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" )
+    assert len( child.attributes )==2
+    child.removeAttributeNS( "http://www.python.org", "abcattr" )
+    assert len( child.attributes )==1
+
+    dom.unlink()
+    dom=None
+    
+def testRemoveAttributeNode():
+    dom=Document()
+    child=dom.appendChild( dom.createElement( "foo" ) )
+    child.setAttribute( "spam", "jam" )
+    assert len( child.attributes )==1
+    node=child.getAttributeNode( "spam" )
+    child.removeAttributeNode( node )
+    assert len( child.attributes )==0
+
+    dom.unlink()
+    dom=None
+    assert len( Node.allnodes )==0
+
+def testChangeAttr():
+    dom=parseString( "<abc/>" )
+    el=dom.documentElement
+    el.setAttribute( "spam", "jam" )
+    assert len( el.attributes )==1
+    el.setAttribute( "spam", "bam" )
+    assert len( el.attributes )==1
+    el.attributes["spam"]="ham"
+    assert len( el.attributes )==1
+    el.setAttribute( "spam2", "bam" )
+    assert len( el.attributes )==2
+    el.attributes[ "spam2"]= "bam2"
+    assert len( el.attributes )==2
+    dom.unlink()
+    dom=None
+    assert 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 )
+    assert 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 )
+    assert 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 )
+    assert string1==string2
+    assert string1.find("slash:abc" )!=-1
+    dom.unlink()
+
+def testAttributeRepr():
+    dom=Document()
+    el=dom.appendChild( dom.createElement( u"abc" ) )
+    node=el.setAttribute( "abc", "def" )
+    assert 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()
+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:"
+                print Node.allnodes.items()[0:10]
+            Node.allnodes={}
+        except Exception, e :
+            print "Test Failed: ", name
+            apply( traceback.print_exception, sys.exc_info() )
+            print `e`
+            Node.allnodes={}
+            raise
+