Patch #750542: pprint now will pretty print subclasses of list, tuple
and dict too, as long as they don't overwrite __repr__().
diff --git a/Lib/test/test_pprint.py b/Lib/test/test_pprint.py
index 0e6559d..d66b78a 100644
--- a/Lib/test/test_pprint.py
+++ b/Lib/test/test_pprint.py
@@ -8,6 +8,22 @@
     def uni(x):
         return x
 
+# list, tuple and dict subclasses that do or don't overwrite __repr__
+class list2(list):
+    pass
+class list3(list):
+    def __repr__(self):
+        return list.__repr__(self)
+class tuple2(tuple):
+    pass
+class tuple3(tuple):
+    def __repr__(self):
+        return tuple.__repr__(self)
+class dict2(dict):
+    pass
+class dict3(dict):
+    def __repr__(self):
+        return dict.__repr__(self)
 
 class QueryTestCase(unittest.TestCase):
 
@@ -84,11 +100,20 @@
                    "expected not isreadable for " + `unreadable`)
 
     def test_same_as_repr(self):
-        # Simple objects and small containers that should be same as repr()
+        # Simple objects, small containers and classes that overwrite __repr__
+        # For those the result should be the same as repr()
         verify = self.assert_
-        for simple in (0, 0L, 0+0j, 0.0, "", uni(""), (), [], {}, verify, pprint,
+        for simple in (0, 0L, 0+0j, 0.0, "", uni(""),
+                       (), tuple2(), tuple3(),
+                       [], list2(), list3(),
+                       {}, dict2(), dict3(),
+                       verify, pprint,
                        -6, -6L, -6-6j, -1.5, "x", uni("x"), (3,), [3], {3: 6},
                        (1,2), [3,4], {5: 6, 7: 8},
+                       tuple2((1,2)), tuple3((1,2)), tuple3(range(100)),
+                       [3,4], list2([3,4]), list3([3,4]), list3(range(100)),
+                       {5: 6, 7: 8}, dict2({5: 6, 7: 8}), dict3({5: 6, 7: 8}),
+                       dict3([(x,x) for x in range(100)]),
                        {"xy\tab\n": (3,), 5: [[]], (): {}},
                        range(10, -11, -1)
                       ):
@@ -99,7 +124,6 @@
                 verify(native == got, "expected %s got %s from pprint.%s" %
                                       (native, got, function))
 
-
     def test_basic_line_wrap(self):
         # verify basic line-wrapping operation
         o = {'RPM_cal': 0,
@@ -117,7 +141,18 @@
  'main_code_runtime_us': 0,
  'read_io_runtime_us': 0,
  'write_io_runtime_us': 43690}"""
-        self.assertEqual(pprint.pformat(o), exp)
+        for type in [dict, dict2]:
+            self.assertEqual(pprint.pformat(type(o)), exp)
+
+        o = range(100)
+        exp = '[%s]' % ',\n '.join(map(str, o))
+        for type in [list, list2]:
+            self.assertEqual(pprint.pformat(type(o)), exp)
+
+        o = tuple(range(100))
+        exp = '(%s)' % ',\n '.join(map(str, o))
+        for type in [tuple, tuple2]:
+            self.assertEqual(pprint.pformat(type(o)), exp)
 
     def test_subclassing(self):
         o = {'names with spaces': 'should be presented using repr()',