@@ -18,34 +18,54 @@ class list3(list):
18
18
def __repr__ (self ):
19
19
return list .__repr__ (self )
20
20
21
+ class list_custom_repr (list ):
22
+ def __repr__ (self ):
23
+ return '*' * len (list .__repr__ (self ))
24
+
21
25
class tuple2 (tuple ):
22
26
pass
23
27
24
28
class tuple3 (tuple ):
25
29
def __repr__ (self ):
26
30
return tuple .__repr__ (self )
27
31
32
+ class tuple_custom_repr (tuple ):
33
+ def __repr__ (self ):
34
+ return '*' * len (tuple .__repr__ (self ))
35
+
28
36
class set2 (set ):
29
37
pass
30
38
31
39
class set3 (set ):
32
40
def __repr__ (self ):
33
41
return set .__repr__ (self )
34
42
43
+ class set_custom_repr (set ):
44
+ def __repr__ (self ):
45
+ return '*' * len (set .__repr__ (self ))
46
+
35
47
class frozenset2 (frozenset ):
36
48
pass
37
49
38
50
class frozenset3 (frozenset ):
39
51
def __repr__ (self ):
40
52
return frozenset .__repr__ (self )
41
53
54
+ class frozenset_custom_repr (frozenset ):
55
+ def __repr__ (self ):
56
+ return '*' * len (frozenset .__repr__ (self ))
57
+
42
58
class dict2 (dict ):
43
59
pass
44
60
45
61
class dict3 (dict ):
46
62
def __repr__ (self ):
47
63
return dict .__repr__ (self )
48
64
65
+ class dict_custom_repr (dict ):
66
+ def __repr__ (self ):
67
+ return '*' * len (dict .__repr__ (self ))
68
+
49
69
class Unorderable :
50
70
def __repr__ (self ):
51
71
return str (id (self ))
@@ -155,7 +175,8 @@ def test_unreadable(self):
155
175
"expected not isreadable for %r" % (unreadable ,))
156
176
157
177
def test_same_as_repr (self ):
158
- # Simple objects, small containers and classes that overwrite __repr__
178
+ # Simple objects, small containers and classes that override __repr__
179
+ # to directly call super's __repr__.
159
180
# For those the result should be the same as repr().
160
181
# Ahem. The docs don't say anything about that -- this appears to
161
182
# be testing an implementation quirk. Starting in Python 2.5, it's
@@ -187,6 +208,32 @@ def test_same_as_repr(self):
187
208
.replace ('\n ' , ' ' ), native )
188
209
self .assertEqual (pprint .saferepr (simple ), native )
189
210
211
+ def test_container_repr_override_called (self ):
212
+ N = 1000
213
+ # Ensure that __repr__ override is called for subclasses of containers
214
+
215
+ for cont in (list_custom_repr (),
216
+ list_custom_repr ([1 ,2 ,3 ]),
217
+ list_custom_repr (range (N )),
218
+ tuple_custom_repr (),
219
+ tuple_custom_repr ([1 ,2 ,3 ]),
220
+ tuple_custom_repr (range (N )),
221
+ set_custom_repr (),
222
+ set_custom_repr ([1 ,2 ,3 ]),
223
+ set_custom_repr (range (N )),
224
+ frozenset_custom_repr (),
225
+ frozenset_custom_repr ([1 ,2 ,3 ]),
226
+ frozenset_custom_repr (range (N )),
227
+ dict_custom_repr (),
228
+ dict_custom_repr ({5 : 6 }),
229
+ dict_custom_repr (zip (range (N ),range (N ))),
230
+ ):
231
+ native = repr (cont )
232
+ expected = '*' * len (native )
233
+ self .assertEqual (pprint .pformat (cont ), expected )
234
+ self .assertEqual (pprint .pformat (cont , width = 1 , indent = 0 ), expected )
235
+ self .assertEqual (pprint .saferepr (cont ), expected )
236
+
190
237
def test_basic_line_wrap (self ):
191
238
# verify basic line-wrapping operation
192
239
o = {'RPM_cal' : 0 ,
0 commit comments