Add a test of interaction between & and extra replacements.
Remove extra noise from the output when there are no errors, and say more
in the exception when there are errors.
diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py
index 3c5b11a..af97888 100644
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -19,17 +19,17 @@
 # ===== Utilities
 
 tests = 0
-fails = 0
+failures = []
 
 def confirm(outcome, name):
-    global tests, fails
+    global tests
 
     tests = tests + 1
     if outcome:
-        print "Passed", name
+        if verbose:
+            print "Failed", name
     else:
-        print "Failed", name
-        fails = fails + 1
+        failures.append(name)
 
 def test_make_parser2():
     try:
@@ -82,6 +82,9 @@
 def test_unescape_extra():
     return unescape("Hei på deg", {"å" : "å"}) == "Hei på deg"
 
+def test_unescape_amp_extra():
+    return unescape("&foo;", {"&foo;": "splat"}) == "&foo;"
+
 # ===== quoteattr
 
 def test_quoteattr_basic():
@@ -650,6 +653,8 @@
     if name[ : 5] == "test_":
         confirm(value(), name)
 
-print "%d tests, %d failures" % (tests, fails)
-if fails != 0:
-    raise TestFailed, "%d of %d tests failed" % (fails, tests)
+if verbose:
+    print "%d tests, %d failures" % (tests, len(failures))
+if failures:
+    raise TestFailed("%d of %d tests failed: %s"
+                     % (len(failures), tests, ", ".join(failures)))