Added EntityResolver and DTDHandler (patch 101631) with test cases.
diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py
index 8ff3dac..46d0d3e 100644
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -156,25 +156,45 @@
     def unparsedEntityDecl(self, name, publicId, systemId, ndata):
         self._entities.append((name, publicId, systemId, ndata))
 
-#  def test_expat_dtdhandler():
-#      parser = create_parser()
-#      handler = TestDTDHandler()
-#      parser.setDTDHandler(handler)
+def test_expat_dtdhandler():
+    parser = create_parser()
+    handler = TestDTDHandler()
+    parser.setDTDHandler(handler)
 
-#      parser.feed('<!DOCTYPE doc [\n')
-#      parser.feed('  <!ENTITY img SYSTEM "expat.gif" NDATA GIF>\n')
-#      parser.feed('  <!NOTATION GIF PUBLIC "-//CompuServe//NOTATION Graphics Interchange Format 89a//EN">\n')
-#      parser.feed(']>\n')
-#      parser.feed('<doc></doc>')
-#      parser.close()
+    parser.feed('<!DOCTYPE doc [\n')
+    parser.feed('  <!ENTITY img SYSTEM "expat.gif" NDATA GIF>\n')
+    parser.feed('  <!NOTATION GIF PUBLIC "-//CompuServe//NOTATION Graphics Interchange Format 89a//EN">\n')
+    parser.feed(']>\n')
+    parser.feed('<doc></doc>')
+    parser.close()
 
-#      return handler._notations == [("GIF", "-//CompuServe//NOTATION Graphics Interchange Format 89a//EN", None)] and \
-#             handler._entities == [("img", None, "expat.gif", "GIF")]
+    return handler._notations == [("GIF", "-//CompuServe//NOTATION Graphics Interchange Format 89a//EN", None)] and \
+           handler._entities == [("img", None, "expat.gif", "GIF")]
 
 # ===== EntityResolver support
 
-# can't test this until InputSource is in place
+class TestEntityResolver:
 
+    def resolveEntity(self, publicId, systemId):
+        inpsrc = InputSource()
+        inpsrc.setByteStream(StringIO("<entity/>"))
+        return inpsrc
+
+def test_expat_entityresolver():
+    return 1 # disabling this until pyexpat.c has been fixed
+    parser = create_parser()
+    parser.setEntityResolver(TestEntityResolver())
+    result = StringIO()
+    parser.setContentHandler(XMLGenerator(result))
+
+    parser.feed('<!DOCTYPE doc [\n')
+    parser.feed('  <!ENTITY test SYSTEM "whatever">\n')
+    parser.feed(']>\n')
+    parser.feed('<doc>&test;</doc>')
+    parser.close()
+
+    return result.getvalue() == start + "<doc><entity></entity></doc>"
+    
 # ===== Attributes support
 
 class AttrGatherer(ContentHandler):
@@ -440,5 +460,3 @@
 print "%d tests, %d failures" % (tests, fails)
 if fails != 0:
     raise TestFailed, "%d of %d tests failed" % (fails, tests)
-
-make_test_output()