blob: ad3a19396a865627474e24170212e4fb3270646c [file] [log] [blame]
Tim Petersa814db52001-05-14 07:05:58 +00001import pprint
Benjamin Petersonee8712c2008-05-20 21:35:26 +00002import test.support
Fred Drake43913dd2001-05-14 17:41:20 +00003import unittest
Christian Heimes969fe572008-01-25 11:23:10 +00004import test.test_set
Raymond Hettingera7da1662009-11-19 01:07:05 +00005import random
Tim Petersa814db52001-05-14 07:05:58 +00006
Walter Dörwald7a7ede52003-12-03 20:15:28 +00007# list, tuple and dict subclasses that do or don't overwrite __repr__
8class list2(list):
9 pass
Thomas Wouters4d70c3d2006-06-08 14:42:34 +000010
Walter Dörwald7a7ede52003-12-03 20:15:28 +000011class list3(list):
12 def __repr__(self):
13 return list.__repr__(self)
Thomas Wouters4d70c3d2006-06-08 14:42:34 +000014
Walter Dörwald7a7ede52003-12-03 20:15:28 +000015class tuple2(tuple):
16 pass
Thomas Wouters4d70c3d2006-06-08 14:42:34 +000017
Walter Dörwald7a7ede52003-12-03 20:15:28 +000018class tuple3(tuple):
19 def __repr__(self):
20 return tuple.__repr__(self)
Thomas Wouters4d70c3d2006-06-08 14:42:34 +000021
Walter Dörwald7a7ede52003-12-03 20:15:28 +000022class dict2(dict):
23 pass
Thomas Wouters4d70c3d2006-06-08 14:42:34 +000024
Walter Dörwald7a7ede52003-12-03 20:15:28 +000025class dict3(dict):
26 def __repr__(self):
27 return dict.__repr__(self)
Tim Petersa814db52001-05-14 07:05:58 +000028
Raymond Hettingera7da1662009-11-19 01:07:05 +000029class Unorderable:
30 def __repr__(self):
31 return str(id(self))
32
Fred Drake43913dd2001-05-14 17:41:20 +000033class QueryTestCase(unittest.TestCase):
Tim Petersa814db52001-05-14 07:05:58 +000034
Fred Drake43913dd2001-05-14 17:41:20 +000035 def setUp(self):
Guido van Rossum805365e2007-05-07 22:24:25 +000036 self.a = list(range(100))
37 self.b = list(range(200))
Fred Drake43913dd2001-05-14 17:41:20 +000038 self.a[-12] = self.b
Tim Petersa814db52001-05-14 07:05:58 +000039
Fred Drake43913dd2001-05-14 17:41:20 +000040 def test_basic(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000041 # Verify .isrecursive() and .isreadable() w/o recursion
Fred Drakeb456e4f2002-12-31 07:16:16 +000042 pp = pprint.PrettyPrinter()
Walter Dörwald5de48bd2007-06-11 21:38:39 +000043 for safe in (2, 2.0, 2j, "abc", [3], (2,2), {3: 3}, "yaddayadda",
Fred Drake43913dd2001-05-14 17:41:20 +000044 self.a, self.b):
Fred Drakeb456e4f2002-12-31 07:16:16 +000045 # module-level convenience functions
Ezio Melottib19f43d2010-01-24 20:59:24 +000046 self.assertFalse(pprint.isrecursive(safe),
47 "expected not isrecursive for %r" % (safe,))
48 self.assertTrue(pprint.isreadable(safe),
49 "expected isreadable for %r" % (safe,))
Fred Drakeb456e4f2002-12-31 07:16:16 +000050 # PrettyPrinter methods
Ezio Melottib19f43d2010-01-24 20:59:24 +000051 self.assertFalse(pp.isrecursive(safe),
52 "expected not isrecursive for %r" % (safe,))
53 self.assertTrue(pp.isreadable(safe),
54 "expected isreadable for %r" % (safe,))
Tim Petersa814db52001-05-14 07:05:58 +000055
Fred Drake43913dd2001-05-14 17:41:20 +000056 def test_knotted(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000057 # Verify .isrecursive() and .isreadable() w/ recursion
Fred Drake43913dd2001-05-14 17:41:20 +000058 # Tie a knot.
59 self.b[67] = self.a
60 # Messy dict.
61 self.d = {}
62 self.d[0] = self.d[1] = self.d[2] = self.d
Tim Petersa814db52001-05-14 07:05:58 +000063
Fred Drakeb456e4f2002-12-31 07:16:16 +000064 pp = pprint.PrettyPrinter()
Tim Petersa814db52001-05-14 07:05:58 +000065
Fred Drake43913dd2001-05-14 17:41:20 +000066 for icky in self.a, self.b, self.d, (self.d, self.d):
Ezio Melottib19f43d2010-01-24 20:59:24 +000067 self.assertTrue(pprint.isrecursive(icky), "expected isrecursive")
68 self.assertFalse(pprint.isreadable(icky), "expected not isreadable")
69 self.assertTrue(pp.isrecursive(icky), "expected isrecursive")
70 self.assertFalse(pp.isreadable(icky), "expected not isreadable")
Fred Drake43913dd2001-05-14 17:41:20 +000071
72 # Break the cycles.
73 self.d.clear()
74 del self.a[:]
75 del self.b[:]
76
77 for safe in self.a, self.b, self.d, (self.d, self.d):
Fred Drakeb456e4f2002-12-31 07:16:16 +000078 # module-level convenience functions
Ezio Melottib19f43d2010-01-24 20:59:24 +000079 self.assertFalse(pprint.isrecursive(safe),
80 "expected not isrecursive for %r" % (safe,))
81 self.assertTrue(pprint.isreadable(safe),
82 "expected isreadable for %r" % (safe,))
Fred Drakeb456e4f2002-12-31 07:16:16 +000083 # PrettyPrinter methods
Ezio Melottib19f43d2010-01-24 20:59:24 +000084 self.assertFalse(pp.isrecursive(safe),
85 "expected not isrecursive for %r" % (safe,))
86 self.assertTrue(pp.isreadable(safe),
87 "expected isreadable for %r" % (safe,))
Fred Drake43913dd2001-05-14 17:41:20 +000088
89 def test_unreadable(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000090 # Not recursive but not readable anyway
Fred Drakeb456e4f2002-12-31 07:16:16 +000091 pp = pprint.PrettyPrinter()
Fred Drake43913dd2001-05-14 17:41:20 +000092 for unreadable in type(3), pprint, pprint.isrecursive:
Fred Drakeb456e4f2002-12-31 07:16:16 +000093 # module-level convenience functions
Ezio Melottib19f43d2010-01-24 20:59:24 +000094 self.assertFalse(pprint.isrecursive(unreadable),
95 "expected not isrecursive for %r" % (unreadable,))
96 self.assertFalse(pprint.isreadable(unreadable),
97 "expected not isreadable for %r" % (unreadable,))
Fred Drakeb456e4f2002-12-31 07:16:16 +000098 # PrettyPrinter methods
Ezio Melottib19f43d2010-01-24 20:59:24 +000099 self.assertFalse(pp.isrecursive(unreadable),
100 "expected not isrecursive for %r" % (unreadable,))
101 self.assertFalse(pp.isreadable(unreadable),
102 "expected not isreadable for %r" % (unreadable,))
Fred Drake43913dd2001-05-14 17:41:20 +0000103
Tim Peters95b3f782001-05-14 18:39:41 +0000104 def test_same_as_repr(self):
Walter Dörwald7a7ede52003-12-03 20:15:28 +0000105 # Simple objects, small containers and classes that overwrite __repr__
Thomas Wouters4d70c3d2006-06-08 14:42:34 +0000106 # For those the result should be the same as repr().
107 # Ahem. The docs don't say anything about that -- this appears to
108 # be testing an implementation quirk. Starting in Python 2.5, it's
109 # not true for dicts: pprint always sorts dicts by key now; before,
110 # it sorted a dict display if and only if the display required
111 # multiple lines. For that reason, dicts with more than one element
112 # aren't tested here.
Walter Dörwald5de48bd2007-06-11 21:38:39 +0000113 for simple in (0, 0, 0+0j, 0.0, "", b"",
Walter Dörwald7a7ede52003-12-03 20:15:28 +0000114 (), tuple2(), tuple3(),
115 [], list2(), list3(),
116 {}, dict2(), dict3(),
Ezio Melottib19f43d2010-01-24 20:59:24 +0000117 self.assertTrue, pprint,
Walter Dörwald5de48bd2007-06-11 21:38:39 +0000118 -6, -6, -6-6j, -1.5, "x", b"x", (3,), [3], {3: 6},
Benjamin Petersond23f8222009-04-05 19:13:16 +0000119 (1,2), [3,4], {5: 6},
Walter Dörwald7a7ede52003-12-03 20:15:28 +0000120 tuple2((1,2)), tuple3((1,2)), tuple3(range(100)),
121 [3,4], list2([3,4]), list3([3,4]), list3(range(100)),
Benjamin Petersond23f8222009-04-05 19:13:16 +0000122 dict2({5: 6}), dict3({5: 6}),
Tim Peters95b3f782001-05-14 18:39:41 +0000123 range(10, -11, -1)
124 ):
125 native = repr(simple)
126 for function in "pformat", "saferepr":
127 f = getattr(pprint, function)
128 got = f(simple)
Ezio Melottib19f43d2010-01-24 20:59:24 +0000129 self.assertEqual(native, got,
130 "expected %s got %s from pprint.%s" %
131 (native, got, function))
Fred Drake43913dd2001-05-14 17:41:20 +0000132
Barry Warsaw00859c02001-11-28 05:49:39 +0000133 def test_basic_line_wrap(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +0000134 # verify basic line-wrapping operation
Barry Warsaw00859c02001-11-28 05:49:39 +0000135 o = {'RPM_cal': 0,
136 'RPM_cal2': 48059,
137 'Speed_cal': 0,
138 'controldesk_runtime_us': 0,
139 'main_code_runtime_us': 0,
140 'read_io_runtime_us': 0,
141 'write_io_runtime_us': 43690}
142 exp = """\
143{'RPM_cal': 0,
144 'RPM_cal2': 48059,
145 'Speed_cal': 0,
146 'controldesk_runtime_us': 0,
147 'main_code_runtime_us': 0,
148 'read_io_runtime_us': 0,
149 'write_io_runtime_us': 43690}"""
Walter Dörwald7a7ede52003-12-03 20:15:28 +0000150 for type in [dict, dict2]:
151 self.assertEqual(pprint.pformat(type(o)), exp)
152
153 o = range(100)
154 exp = '[%s]' % ',\n '.join(map(str, o))
155 for type in [list, list2]:
156 self.assertEqual(pprint.pformat(type(o)), exp)
157
158 o = tuple(range(100))
159 exp = '(%s)' % ',\n '.join(map(str, o))
160 for type in [tuple, tuple2]:
161 self.assertEqual(pprint.pformat(type(o)), exp)
Barry Warsaw00859c02001-11-28 05:49:39 +0000162
Walter Dörwaldc8de4582003-12-03 20:26:05 +0000163 # indent parameter
164 o = range(100)
165 exp = '[ %s]' % ',\n '.join(map(str, o))
166 for type in [list, list2]:
167 self.assertEqual(pprint.pformat(type(o), indent=4), exp)
168
Georg Brandl3ccb7872008-07-16 03:00:45 +0000169 def test_nested_indentations(self):
170 o1 = list(range(10))
171 o2 = dict(first=1, second=2, third=3)
172 o = [o1, o2]
173 expected = """\
174[ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
175 { 'first': 1,
176 'second': 2,
177 'third': 3}]"""
178 self.assertEqual(pprint.pformat(o, indent=4, width=42), expected)
179
Thomas Wouters4d70c3d2006-06-08 14:42:34 +0000180 def test_sorted_dict(self):
181 # Starting in Python 2.5, pprint sorts dict displays by key regardless
182 # of how small the dictionary may be.
183 # Before the change, on 32-bit Windows pformat() gave order
184 # 'a', 'c', 'b' here, so this test failed.
185 d = {'a': 1, 'b': 1, 'c': 1}
186 self.assertEqual(pprint.pformat(d), "{'a': 1, 'b': 1, 'c': 1}")
187 self.assertEqual(pprint.pformat([d, d]),
188 "[{'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 1}]")
189
190 # The next one is kind of goofy. The sorted order depends on the
191 # alphabetic order of type names: "int" < "str" < "tuple". Before
192 # Python 2.5, this was in the test_same_as_repr() test. It's worth
193 # keeping around for now because it's one of few tests of pprint
194 # against a crazy mix of types.
195 self.assertEqual(pprint.pformat({"xy\tab\n": (3,), 5: [[]], (): {}}),
196 r"{5: [[]], 'xy\tab\n': (3,), (): {}}")
197
Fred Drakeaee113d2002-04-02 05:08:35 +0000198 def test_subclassing(self):
199 o = {'names with spaces': 'should be presented using repr()',
200 'others.should.not.be': 'like.this'}
201 exp = """\
202{'names with spaces': 'should be presented using repr()',
203 others.should.not.be: like.this}"""
204 self.assertEqual(DottedPrettyPrinter().pformat(o), exp)
205
Christian Heimes969fe572008-01-25 11:23:10 +0000206 def test_set_reprs(self):
207 self.assertEqual(pprint.pformat(set()), 'set()')
208 self.assertEqual(pprint.pformat(set(range(3))), '{0, 1, 2}')
209 self.assertEqual(pprint.pformat(frozenset()), 'frozenset()')
210 self.assertEqual(pprint.pformat(frozenset(range(3))), 'frozenset({0, 1, 2})')
211 cube_repr_tgt = """\
212{frozenset(): frozenset({frozenset({2}), frozenset({0}), frozenset({1})}),
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000213 frozenset({0}): frozenset({frozenset(),
Christian Heimes969fe572008-01-25 11:23:10 +0000214 frozenset({0, 2}),
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000215 frozenset({0, 1})}),
216 frozenset({1}): frozenset({frozenset(),
Christian Heimes969fe572008-01-25 11:23:10 +0000217 frozenset({1, 2}),
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000218 frozenset({0, 1})}),
219 frozenset({2}): frozenset({frozenset(),
Christian Heimes969fe572008-01-25 11:23:10 +0000220 frozenset({1, 2}),
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000221 frozenset({0, 2})}),
222 frozenset({1, 2}): frozenset({frozenset({2}),
Christian Heimes969fe572008-01-25 11:23:10 +0000223 frozenset({1}),
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000224 frozenset({0, 1, 2})}),
225 frozenset({0, 2}): frozenset({frozenset({2}),
Christian Heimes969fe572008-01-25 11:23:10 +0000226 frozenset({0}),
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000227 frozenset({0, 1, 2})}),
228 frozenset({0, 1}): frozenset({frozenset({0}),
Christian Heimes969fe572008-01-25 11:23:10 +0000229 frozenset({1}),
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000230 frozenset({0, 1, 2})}),
231 frozenset({0, 1, 2}): frozenset({frozenset({1, 2}),
Christian Heimes969fe572008-01-25 11:23:10 +0000232 frozenset({0, 2}),
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000233 frozenset({0, 1})})}"""
Christian Heimes969fe572008-01-25 11:23:10 +0000234 cube = test.test_set.cube(3)
235 self.assertEqual(pprint.pformat(cube), cube_repr_tgt)
236 cubo_repr_tgt = """\
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000237{frozenset({frozenset({0, 2}), frozenset({0})}): frozenset({frozenset({frozenset({0,
238 2}),
239 frozenset({0,
Christian Heimes969fe572008-01-25 11:23:10 +0000240 1,
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000241 2})}),
242 frozenset({frozenset({0}),
243 frozenset({0,
244 1})}),
245 frozenset({frozenset(),
246 frozenset({0})}),
247 frozenset({frozenset({2}),
248 frozenset({0,
249 2})})}),
250 frozenset({frozenset({0, 1}), frozenset({1})}): frozenset({frozenset({frozenset({0,
251 1}),
252 frozenset({0,
Christian Heimes969fe572008-01-25 11:23:10 +0000253 1,
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000254 2})}),
255 frozenset({frozenset({0}),
256 frozenset({0,
257 1})}),
258 frozenset({frozenset({1}),
259 frozenset({1,
260 2})}),
261 frozenset({frozenset(),
262 frozenset({1})})}),
263 frozenset({frozenset({1, 2}), frozenset({1})}): frozenset({frozenset({frozenset({1,
264 2}),
265 frozenset({0,
Christian Heimes969fe572008-01-25 11:23:10 +0000266 1,
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000267 2})}),
268 frozenset({frozenset({2}),
269 frozenset({1,
270 2})}),
271 frozenset({frozenset(),
272 frozenset({1})}),
273 frozenset({frozenset({1}),
274 frozenset({0,
275 1})})}),
276 frozenset({frozenset({1, 2}), frozenset({2})}): frozenset({frozenset({frozenset({1,
277 2}),
278 frozenset({0,
Christian Heimes969fe572008-01-25 11:23:10 +0000279 1,
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000280 2})}),
281 frozenset({frozenset({1}),
282 frozenset({1,
283 2})}),
284 frozenset({frozenset({2}),
285 frozenset({0,
286 2})}),
287 frozenset({frozenset(),
288 frozenset({2})})}),
289 frozenset({frozenset(), frozenset({0})}): frozenset({frozenset({frozenset({0}),
290 frozenset({0,
291 1})}),
292 frozenset({frozenset({0}),
293 frozenset({0,
294 2})}),
295 frozenset({frozenset(),
296 frozenset({1})}),
297 frozenset({frozenset(),
298 frozenset({2})})}),
299 frozenset({frozenset(), frozenset({1})}): frozenset({frozenset({frozenset(),
300 frozenset({0})}),
301 frozenset({frozenset({1}),
302 frozenset({1,
303 2})}),
304 frozenset({frozenset(),
305 frozenset({2})}),
306 frozenset({frozenset({1}),
307 frozenset({0,
308 1})})}),
309 frozenset({frozenset({2}), frozenset()}): frozenset({frozenset({frozenset({2}),
310 frozenset({1,
311 2})}),
312 frozenset({frozenset(),
313 frozenset({0})}),
314 frozenset({frozenset(),
315 frozenset({1})}),
316 frozenset({frozenset({2}),
317 frozenset({0,
318 2})})}),
319 frozenset({frozenset({0, 1, 2}), frozenset({0, 1})}): frozenset({frozenset({frozenset({1,
320 2}),
321 frozenset({0,
Christian Heimes969fe572008-01-25 11:23:10 +0000322 1,
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000323 2})}),
324 frozenset({frozenset({0,
325 2}),
326 frozenset({0,
Christian Heimes969fe572008-01-25 11:23:10 +0000327 1,
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000328 2})}),
329 frozenset({frozenset({0}),
330 frozenset({0,
331 1})}),
332 frozenset({frozenset({1}),
333 frozenset({0,
334 1})})}),
335 frozenset({frozenset({0}), frozenset({0, 1})}): frozenset({frozenset({frozenset(),
336 frozenset({0})}),
337 frozenset({frozenset({0,
338 1}),
339 frozenset({0,
Christian Heimes969fe572008-01-25 11:23:10 +0000340 1,
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000341 2})}),
342 frozenset({frozenset({0}),
343 frozenset({0,
344 2})}),
345 frozenset({frozenset({1}),
346 frozenset({0,
347 1})})}),
348 frozenset({frozenset({2}), frozenset({0, 2})}): frozenset({frozenset({frozenset({0,
349 2}),
350 frozenset({0,
Christian Heimes969fe572008-01-25 11:23:10 +0000351 1,
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000352 2})}),
353 frozenset({frozenset({2}),
354 frozenset({1,
355 2})}),
356 frozenset({frozenset({0}),
357 frozenset({0,
358 2})}),
359 frozenset({frozenset(),
360 frozenset({2})})}),
361 frozenset({frozenset({0, 1, 2}), frozenset({0, 2})}): frozenset({frozenset({frozenset({1,
362 2}),
363 frozenset({0,
Christian Heimes969fe572008-01-25 11:23:10 +0000364 1,
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000365 2})}),
366 frozenset({frozenset({0,
367 1}),
368 frozenset({0,
Christian Heimes969fe572008-01-25 11:23:10 +0000369 1,
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000370 2})}),
371 frozenset({frozenset({0}),
372 frozenset({0,
373 2})}),
374 frozenset({frozenset({2}),
375 frozenset({0,
376 2})})}),
377 frozenset({frozenset({1, 2}), frozenset({0, 1, 2})}): frozenset({frozenset({frozenset({0,
378 2}),
379 frozenset({0,
Christian Heimes969fe572008-01-25 11:23:10 +0000380 1,
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000381 2})}),
382 frozenset({frozenset({0,
383 1}),
384 frozenset({0,
Christian Heimes969fe572008-01-25 11:23:10 +0000385 1,
Raymond Hettinger4b8db412008-01-31 01:10:03 +0000386 2})}),
387 frozenset({frozenset({2}),
388 frozenset({1,
389 2})}),
390 frozenset({frozenset({1}),
391 frozenset({1,
392 2})})})}"""
Christian Heimes969fe572008-01-25 11:23:10 +0000393
394 cubo = test.test_set.linegraph(cube)
395 self.assertEqual(pprint.pformat(cubo), cubo_repr_tgt)
396
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000397 def test_depth(self):
398 nested_tuple = (1, (2, (3, (4, (5, 6)))))
399 nested_dict = {1: {2: {3: {4: {5: {6: 6}}}}}}
400 nested_list = [1, [2, [3, [4, [5, [6, []]]]]]]
401 self.assertEqual(pprint.pformat(nested_tuple), repr(nested_tuple))
402 self.assertEqual(pprint.pformat(nested_dict), repr(nested_dict))
403 self.assertEqual(pprint.pformat(nested_list), repr(nested_list))
404
405 lv1_tuple = '(1, (...))'
406 lv1_dict = '{1: {...}}'
407 lv1_list = '[1, [...]]'
408 self.assertEqual(pprint.pformat(nested_tuple, depth=1), lv1_tuple)
409 self.assertEqual(pprint.pformat(nested_dict, depth=1), lv1_dict)
410 self.assertEqual(pprint.pformat(nested_list, depth=1), lv1_list)
411
Raymond Hettingera7da1662009-11-19 01:07:05 +0000412 def test_sort_unorderable_values(self):
413 # Issue 3976: sorted pprints fail for unorderable values.
414 n = 20
415 keys = [Unorderable() for i in range(n)]
416 random.shuffle(keys)
417 skeys = sorted(keys, key=id)
418 clean = lambda s: s.replace(' ', '').replace('\n','')
419
420 self.assertEqual(clean(pprint.pformat(set(keys))),
421 '{' + ','.join(map(repr, skeys)) + '}')
422 self.assertEqual(clean(pprint.pformat(frozenset(keys))),
423 'frozenset({' + ','.join(map(repr, skeys)) + '})')
424 self.assertEqual(clean(pprint.pformat(dict.fromkeys(keys))),
425 '{' + ','.join('%r:None' % k for k in skeys) + '}')
Fred Drakeaee113d2002-04-02 05:08:35 +0000426
427class DottedPrettyPrinter(pprint.PrettyPrinter):
Guido van Rossum32c2ae72002-08-22 19:45:32 +0000428
Fred Drakeaee113d2002-04-02 05:08:35 +0000429 def format(self, object, context, maxlevels, level):
430 if isinstance(object, str):
431 if ' ' in object:
Walter Dörwald70a6b492004-02-12 17:35:32 +0000432 return repr(object), 1, 0
Fred Drakeaee113d2002-04-02 05:08:35 +0000433 else:
434 return object, 0, 0
435 else:
436 return pprint.PrettyPrinter.format(
437 self, object, context, maxlevels, level)
438
439
Fred Drake2e2be372001-09-20 21:33:42 +0000440def test_main():
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000441 test.support.run_unittest(QueryTestCase)
Fred Drake2e2be372001-09-20 21:33:42 +0000442
443
444if __name__ == "__main__":
445 test_main()