blob: 83c772b5b0326357ccd8b4948935be11437f0b9d [file] [log] [blame]
Tim Petersa814db52001-05-14 07:05:58 +00001import pprint
Fred Drakeb456e4f2002-12-31 07:16:16 +00002import test.test_support
Fred Drake43913dd2001-05-14 17:41:20 +00003import unittest
Raymond Hettinger5310b692008-01-24 21:47:56 +00004import test.test_set
Tim Petersa814db52001-05-14 07:05:58 +00005
Martin v. Löwis339d0f72001-08-17 18:39:25 +00006try:
7 uni = unicode
8except NameError:
Fred Drakeb456e4f2002-12-31 07:16:16 +00009 def uni(x):
10 return x
Martin v. Löwis339d0f72001-08-17 18:39:25 +000011
Walter Dörwald7a7ede52003-12-03 20:15:28 +000012# list, tuple and dict subclasses that do or don't overwrite __repr__
13class list2(list):
14 pass
Tim Petersd609b1a2006-06-02 23:22:51 +000015
Walter Dörwald7a7ede52003-12-03 20:15:28 +000016class list3(list):
17 def __repr__(self):
18 return list.__repr__(self)
Tim Petersd609b1a2006-06-02 23:22:51 +000019
Walter Dörwald7a7ede52003-12-03 20:15:28 +000020class tuple2(tuple):
21 pass
Tim Petersd609b1a2006-06-02 23:22:51 +000022
Walter Dörwald7a7ede52003-12-03 20:15:28 +000023class tuple3(tuple):
24 def __repr__(self):
25 return tuple.__repr__(self)
Tim Petersd609b1a2006-06-02 23:22:51 +000026
Walter Dörwald7a7ede52003-12-03 20:15:28 +000027class dict2(dict):
28 pass
Tim Petersd609b1a2006-06-02 23:22:51 +000029
Walter Dörwald7a7ede52003-12-03 20:15:28 +000030class dict3(dict):
31 def __repr__(self):
32 return dict.__repr__(self)
Tim Petersa814db52001-05-14 07:05:58 +000033
Fred Drake43913dd2001-05-14 17:41:20 +000034class QueryTestCase(unittest.TestCase):
Tim Petersa814db52001-05-14 07:05:58 +000035
Fred Drake43913dd2001-05-14 17:41:20 +000036 def setUp(self):
37 self.a = range(100)
38 self.b = range(200)
39 self.a[-12] = self.b
Tim Petersa814db52001-05-14 07:05:58 +000040
Fred Drake43913dd2001-05-14 17:41:20 +000041 def test_basic(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000042 # Verify .isrecursive() and .isreadable() w/o recursion
Fred Drake43913dd2001-05-14 17:41:20 +000043 verify = self.assert_
Fred Drakeb456e4f2002-12-31 07:16:16 +000044 pp = pprint.PrettyPrinter()
Martin v. Löwis339d0f72001-08-17 18:39:25 +000045 for safe in (2, 2.0, 2j, "abc", [3], (2,2), {3: 3}, uni("yaddayadda"),
Fred Drake43913dd2001-05-14 17:41:20 +000046 self.a, self.b):
Fred Drakeb456e4f2002-12-31 07:16:16 +000047 # module-level convenience functions
Fred Drake43913dd2001-05-14 17:41:20 +000048 verify(not pprint.isrecursive(safe),
Walter Dörwald70a6b492004-02-12 17:35:32 +000049 "expected not isrecursive for %r" % (safe,))
Fred Drake43913dd2001-05-14 17:41:20 +000050 verify(pprint.isreadable(safe),
Walter Dörwald70a6b492004-02-12 17:35:32 +000051 "expected isreadable for %r" % (safe,))
Fred Drakeb456e4f2002-12-31 07:16:16 +000052 # PrettyPrinter methods
53 verify(not pp.isrecursive(safe),
Walter Dörwald70a6b492004-02-12 17:35:32 +000054 "expected not isrecursive for %r" % (safe,))
Fred Drakeb456e4f2002-12-31 07:16:16 +000055 verify(pp.isreadable(safe),
Walter Dörwald70a6b492004-02-12 17:35:32 +000056 "expected isreadable for %r" % (safe,))
Tim Petersa814db52001-05-14 07:05:58 +000057
Fred Drake43913dd2001-05-14 17:41:20 +000058 def test_knotted(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000059 # Verify .isrecursive() and .isreadable() w/ recursion
Fred Drake43913dd2001-05-14 17:41:20 +000060 # Tie a knot.
61 self.b[67] = self.a
62 # Messy dict.
63 self.d = {}
64 self.d[0] = self.d[1] = self.d[2] = self.d
Tim Petersa814db52001-05-14 07:05:58 +000065
Fred Drake43913dd2001-05-14 17:41:20 +000066 verify = self.assert_
Fred Drakeb456e4f2002-12-31 07:16:16 +000067 pp = pprint.PrettyPrinter()
Tim Petersa814db52001-05-14 07:05:58 +000068
Fred Drake43913dd2001-05-14 17:41:20 +000069 for icky in self.a, self.b, self.d, (self.d, self.d):
70 verify(pprint.isrecursive(icky), "expected isrecursive")
71 verify(not pprint.isreadable(icky), "expected not isreadable")
Fred Drakeb456e4f2002-12-31 07:16:16 +000072 verify(pp.isrecursive(icky), "expected isrecursive")
73 verify(not pp.isreadable(icky), "expected not isreadable")
Fred Drake43913dd2001-05-14 17:41:20 +000074
75 # Break the cycles.
76 self.d.clear()
77 del self.a[:]
78 del self.b[:]
79
80 for safe in self.a, self.b, self.d, (self.d, self.d):
Fred Drakeb456e4f2002-12-31 07:16:16 +000081 # module-level convenience functions
Fred Drake43913dd2001-05-14 17:41:20 +000082 verify(not pprint.isrecursive(safe),
Walter Dörwald70a6b492004-02-12 17:35:32 +000083 "expected not isrecursive for %r" % (safe,))
Fred Drake43913dd2001-05-14 17:41:20 +000084 verify(pprint.isreadable(safe),
Walter Dörwald70a6b492004-02-12 17:35:32 +000085 "expected isreadable for %r" % (safe,))
Fred Drakeb456e4f2002-12-31 07:16:16 +000086 # PrettyPrinter methods
87 verify(not pp.isrecursive(safe),
Walter Dörwald70a6b492004-02-12 17:35:32 +000088 "expected not isrecursive for %r" % (safe,))
Fred Drakeb456e4f2002-12-31 07:16:16 +000089 verify(pp.isreadable(safe),
Walter Dörwald70a6b492004-02-12 17:35:32 +000090 "expected isreadable for %r" % (safe,))
Fred Drake43913dd2001-05-14 17:41:20 +000091
92 def test_unreadable(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000093 # Not recursive but not readable anyway
Fred Drake43913dd2001-05-14 17:41:20 +000094 verify = self.assert_
Fred Drakeb456e4f2002-12-31 07:16:16 +000095 pp = pprint.PrettyPrinter()
Fred Drake43913dd2001-05-14 17:41:20 +000096 for unreadable in type(3), pprint, pprint.isrecursive:
Fred Drakeb456e4f2002-12-31 07:16:16 +000097 # module-level convenience functions
Fred Drake43913dd2001-05-14 17:41:20 +000098 verify(not pprint.isrecursive(unreadable),
Walter Dörwald70a6b492004-02-12 17:35:32 +000099 "expected not isrecursive for %r" % (unreadable,))
Fred Drake43913dd2001-05-14 17:41:20 +0000100 verify(not pprint.isreadable(unreadable),
Walter Dörwald70a6b492004-02-12 17:35:32 +0000101 "expected not isreadable for %r" % (unreadable,))
Fred Drakeb456e4f2002-12-31 07:16:16 +0000102 # PrettyPrinter methods
103 verify(not pp.isrecursive(unreadable),
Walter Dörwald70a6b492004-02-12 17:35:32 +0000104 "expected not isrecursive for %r" % (unreadable,))
Fred Drakeb456e4f2002-12-31 07:16:16 +0000105 verify(not pp.isreadable(unreadable),
Walter Dörwald70a6b492004-02-12 17:35:32 +0000106 "expected not isreadable for %r" % (unreadable,))
Fred Drake43913dd2001-05-14 17:41:20 +0000107
Tim Peters95b3f782001-05-14 18:39:41 +0000108 def test_same_as_repr(self):
Walter Dörwald7a7ede52003-12-03 20:15:28 +0000109 # Simple objects, small containers and classes that overwrite __repr__
Tim Petersd609b1a2006-06-02 23:22:51 +0000110 # For those the result should be the same as repr().
111 # Ahem. The docs don't say anything about that -- this appears to
112 # be testing an implementation quirk. Starting in Python 2.5, it's
113 # not true for dicts: pprint always sorts dicts by key now; before,
114 # it sorted a dict display if and only if the display required
115 # multiple lines. For that reason, dicts with more than one element
116 # aren't tested here.
Tim Peters95b3f782001-05-14 18:39:41 +0000117 verify = self.assert_
Walter Dörwald7a7ede52003-12-03 20:15:28 +0000118 for simple in (0, 0L, 0+0j, 0.0, "", uni(""),
119 (), tuple2(), tuple3(),
120 [], list2(), list3(),
121 {}, dict2(), dict3(),
122 verify, pprint,
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000123 -6, -6L, -6-6j, -1.5, "x", uni("x"), (3,), [3], {3: 6},
Tim Peters95b3f782001-05-14 18:39:41 +0000124 (1,2), [3,4], {5: 6, 7: 8},
Walter Dörwald7a7ede52003-12-03 20:15:28 +0000125 tuple2((1,2)), tuple3((1,2)), tuple3(range(100)),
126 [3,4], list2([3,4]), list3([3,4]), list3(range(100)),
Tim Petersd609b1a2006-06-02 23:22:51 +0000127 {5: 6, 7: 8}, dict2({5: 6}), dict3({5: 6}),
Tim Peters95b3f782001-05-14 18:39:41 +0000128 range(10, -11, -1)
129 ):
130 native = repr(simple)
131 for function in "pformat", "saferepr":
132 f = getattr(pprint, function)
133 got = f(simple)
134 verify(native == got, "expected %s got %s from pprint.%s" %
135 (native, got, function))
Fred Drake43913dd2001-05-14 17:41:20 +0000136
Barry Warsaw00859c02001-11-28 05:49:39 +0000137 def test_basic_line_wrap(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +0000138 # verify basic line-wrapping operation
Barry Warsaw00859c02001-11-28 05:49:39 +0000139 o = {'RPM_cal': 0,
140 'RPM_cal2': 48059,
141 'Speed_cal': 0,
142 'controldesk_runtime_us': 0,
143 'main_code_runtime_us': 0,
144 'read_io_runtime_us': 0,
145 'write_io_runtime_us': 43690}
146 exp = """\
147{'RPM_cal': 0,
148 'RPM_cal2': 48059,
149 'Speed_cal': 0,
150 'controldesk_runtime_us': 0,
151 'main_code_runtime_us': 0,
152 'read_io_runtime_us': 0,
153 'write_io_runtime_us': 43690}"""
Walter Dörwald7a7ede52003-12-03 20:15:28 +0000154 for type in [dict, dict2]:
155 self.assertEqual(pprint.pformat(type(o)), exp)
156
157 o = range(100)
158 exp = '[%s]' % ',\n '.join(map(str, o))
159 for type in [list, list2]:
160 self.assertEqual(pprint.pformat(type(o)), exp)
161
162 o = tuple(range(100))
163 exp = '(%s)' % ',\n '.join(map(str, o))
164 for type in [tuple, tuple2]:
165 self.assertEqual(pprint.pformat(type(o)), exp)
Barry Warsaw00859c02001-11-28 05:49:39 +0000166
Walter Dörwaldc8de4582003-12-03 20:26:05 +0000167 # indent parameter
168 o = range(100)
169 exp = '[ %s]' % ',\n '.join(map(str, o))
170 for type in [list, list2]:
171 self.assertEqual(pprint.pformat(type(o), indent=4), exp)
172
Tim Petersd609b1a2006-06-02 23:22:51 +0000173 def test_sorted_dict(self):
174 # Starting in Python 2.5, pprint sorts dict displays by key regardless
175 # of how small the dictionary may be.
176 # Before the change, on 32-bit Windows pformat() gave order
177 # 'a', 'c', 'b' here, so this test failed.
178 d = {'a': 1, 'b': 1, 'c': 1}
179 self.assertEqual(pprint.pformat(d), "{'a': 1, 'b': 1, 'c': 1}")
180 self.assertEqual(pprint.pformat([d, d]),
181 "[{'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 1}]")
182
183 # The next one is kind of goofy. The sorted order depends on the
184 # alphabetic order of type names: "int" < "str" < "tuple". Before
185 # Python 2.5, this was in the test_same_as_repr() test. It's worth
186 # keeping around for now because it's one of few tests of pprint
187 # against a crazy mix of types.
188 self.assertEqual(pprint.pformat({"xy\tab\n": (3,), 5: [[]], (): {}}),
189 r"{5: [[]], 'xy\tab\n': (3,), (): {}}")
190
Fred Drakeaee113d2002-04-02 05:08:35 +0000191 def test_subclassing(self):
192 o = {'names with spaces': 'should be presented using repr()',
193 'others.should.not.be': 'like.this'}
194 exp = """\
195{'names with spaces': 'should be presented using repr()',
196 others.should.not.be: like.this}"""
197 self.assertEqual(DottedPrettyPrinter().pformat(o), exp)
198
Raymond Hettinger5310b692008-01-24 21:47:56 +0000199 def test_set_reprs(self):
200 self.assertEqual(pprint.pformat(set()), 'set()')
201 self.assertEqual(pprint.pformat(set(range(3))), 'set([0, 1, 2])')
202 self.assertEqual(pprint.pformat(frozenset()), 'frozenset()')
203 self.assertEqual(pprint.pformat(frozenset(range(3))), 'frozenset([0, 1, 2])')
204 cube_repr_tgt = """\
205{frozenset([]): frozenset([frozenset([2]), frozenset([0]), frozenset([1])]),
206 frozenset([0]): frozenset([frozenset(),
207 frozenset([0, 2]),
208 frozenset([0, 1])]),
209 frozenset([1]): frozenset([frozenset(),
210 frozenset([1, 2]),
211 frozenset([0, 1])]),
212 frozenset([2]): frozenset([frozenset(),
213 frozenset([1, 2]),
214 frozenset([0, 2])]),
215 frozenset([1, 2]): frozenset([frozenset([2]),
216 frozenset([1]),
217 frozenset([0, 1, 2])]),
218 frozenset([0, 2]): frozenset([frozenset([2]),
219 frozenset([0]),
220 frozenset([0, 1, 2])]),
221 frozenset([0, 1]): frozenset([frozenset([0]),
222 frozenset([1]),
223 frozenset([0, 1, 2])]),
224 frozenset([0, 1, 2]): frozenset([frozenset([1, 2]),
225 frozenset([0, 2]),
226 frozenset([0, 1])])}"""
227 cube = test.test_set.cube(3)
228 self.assertEqual(pprint.pformat(cube), cube_repr_tgt)
229 cubo_repr_tgt = """\
230{frozenset([frozenset([0, 2]), frozenset([0])]): frozenset([frozenset([frozenset([0,
231 2]),
232 frozenset([0,
233 1,
234 2])]),
235 frozenset([frozenset([0]),
236 frozenset([0,
237 1])]),
238 frozenset([frozenset(),
239 frozenset([0])]),
240 frozenset([frozenset([2]),
241 frozenset([0,
242 2])])]),
243 frozenset([frozenset([0, 1]), frozenset([1])]): frozenset([frozenset([frozenset([0,
244 1]),
245 frozenset([0,
246 1,
247 2])]),
248 frozenset([frozenset([0]),
249 frozenset([0,
250 1])]),
251 frozenset([frozenset([1]),
252 frozenset([1,
253 2])]),
254 frozenset([frozenset(),
255 frozenset([1])])]),
256 frozenset([frozenset([1, 2]), frozenset([1])]): frozenset([frozenset([frozenset([1,
257 2]),
258 frozenset([0,
259 1,
260 2])]),
261 frozenset([frozenset([2]),
262 frozenset([1,
263 2])]),
264 frozenset([frozenset(),
265 frozenset([1])]),
266 frozenset([frozenset([1]),
267 frozenset([0,
268 1])])]),
269 frozenset([frozenset([1, 2]), frozenset([2])]): frozenset([frozenset([frozenset([1,
270 2]),
271 frozenset([0,
272 1,
273 2])]),
274 frozenset([frozenset([1]),
275 frozenset([1,
276 2])]),
277 frozenset([frozenset([2]),
278 frozenset([0,
279 2])]),
280 frozenset([frozenset(),
281 frozenset([2])])]),
282 frozenset([frozenset([]), frozenset([0])]): frozenset([frozenset([frozenset([0]),
283 frozenset([0,
284 1])]),
285 frozenset([frozenset([0]),
286 frozenset([0,
287 2])]),
288 frozenset([frozenset(),
289 frozenset([1])]),
290 frozenset([frozenset(),
291 frozenset([2])])]),
292 frozenset([frozenset([]), frozenset([1])]): frozenset([frozenset([frozenset(),
293 frozenset([0])]),
294 frozenset([frozenset([1]),
295 frozenset([1,
296 2])]),
297 frozenset([frozenset(),
298 frozenset([2])]),
299 frozenset([frozenset([1]),
300 frozenset([0,
301 1])])]),
302 frozenset([frozenset([2]), frozenset([])]): frozenset([frozenset([frozenset([2]),
303 frozenset([1,
304 2])]),
305 frozenset([frozenset(),
306 frozenset([0])]),
307 frozenset([frozenset(),
308 frozenset([1])]),
309 frozenset([frozenset([2]),
310 frozenset([0,
311 2])])]),
312 frozenset([frozenset([0, 1, 2]), frozenset([0, 1])]): frozenset([frozenset([frozenset([1,
313 2]),
314 frozenset([0,
315 1,
316 2])]),
317 frozenset([frozenset([0,
318 2]),
319 frozenset([0,
320 1,
321 2])]),
322 frozenset([frozenset([0]),
323 frozenset([0,
324 1])]),
325 frozenset([frozenset([1]),
326 frozenset([0,
327 1])])]),
328 frozenset([frozenset([0]), frozenset([0, 1])]): frozenset([frozenset([frozenset(),
329 frozenset([0])]),
330 frozenset([frozenset([0,
331 1]),
332 frozenset([0,
333 1,
334 2])]),
335 frozenset([frozenset([0]),
336 frozenset([0,
337 2])]),
338 frozenset([frozenset([1]),
339 frozenset([0,
340 1])])]),
341 frozenset([frozenset([2]), frozenset([0, 2])]): frozenset([frozenset([frozenset([0,
342 2]),
343 frozenset([0,
344 1,
345 2])]),
346 frozenset([frozenset([2]),
347 frozenset([1,
348 2])]),
349 frozenset([frozenset([0]),
350 frozenset([0,
351 2])]),
352 frozenset([frozenset(),
353 frozenset([2])])]),
354 frozenset([frozenset([0, 1, 2]), frozenset([0, 2])]): frozenset([frozenset([frozenset([1,
355 2]),
356 frozenset([0,
357 1,
358 2])]),
359 frozenset([frozenset([0,
360 1]),
361 frozenset([0,
362 1,
363 2])]),
364 frozenset([frozenset([0]),
365 frozenset([0,
366 2])]),
367 frozenset([frozenset([2]),
368 frozenset([0,
369 2])])]),
370 frozenset([frozenset([1, 2]), frozenset([0, 1, 2])]): frozenset([frozenset([frozenset([0,
371 2]),
372 frozenset([0,
373 1,
374 2])]),
375 frozenset([frozenset([0,
376 1]),
377 frozenset([0,
378 1,
379 2])]),
380 frozenset([frozenset([2]),
381 frozenset([1,
382 2])]),
383 frozenset([frozenset([1]),
384 frozenset([1,
385 2])])])}"""
386
387 cubo = test.test_set.linegraph(cube)
388 self.assertEqual(pprint.pformat(cubo), cubo_repr_tgt)
389
Fred Drakeaee113d2002-04-02 05:08:35 +0000390
391class DottedPrettyPrinter(pprint.PrettyPrinter):
Guido van Rossum32c2ae72002-08-22 19:45:32 +0000392
Fred Drakeaee113d2002-04-02 05:08:35 +0000393 def format(self, object, context, maxlevels, level):
394 if isinstance(object, str):
395 if ' ' in object:
Walter Dörwald70a6b492004-02-12 17:35:32 +0000396 return repr(object), 1, 0
Fred Drakeaee113d2002-04-02 05:08:35 +0000397 else:
398 return object, 0, 0
399 else:
400 return pprint.PrettyPrinter.format(
401 self, object, context, maxlevels, level)
402
403
Fred Drake2e2be372001-09-20 21:33:42 +0000404def test_main():
Fred Drakeb456e4f2002-12-31 07:16:16 +0000405 test.test_support.run_unittest(QueryTestCase)
Fred Drake2e2be372001-09-20 21:33:42 +0000406
407
408if __name__ == "__main__":
409 test_main()