blob: 27d6b5208470c13cbae54434badeea55f1168695 [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
Tim Petersa814db52001-05-14 07:05:58 +00004
Martin v. Löwis339d0f72001-08-17 18:39:25 +00005try:
6 uni = unicode
7except NameError:
Fred Drakeb456e4f2002-12-31 07:16:16 +00008 def uni(x):
9 return x
Martin v. Löwis339d0f72001-08-17 18:39:25 +000010
Walter Dörwald7a7ede52003-12-03 20:15:28 +000011# list, tuple and dict subclasses that do or don't overwrite __repr__
12class list2(list):
13 pass
14class list3(list):
15 def __repr__(self):
16 return list.__repr__(self)
17class tuple2(tuple):
18 pass
19class tuple3(tuple):
20 def __repr__(self):
21 return tuple.__repr__(self)
22class dict2(dict):
23 pass
24class dict3(dict):
25 def __repr__(self):
26 return dict.__repr__(self)
Tim Petersa814db52001-05-14 07:05:58 +000027
Fred Drake43913dd2001-05-14 17:41:20 +000028class QueryTestCase(unittest.TestCase):
Tim Petersa814db52001-05-14 07:05:58 +000029
Fred Drake43913dd2001-05-14 17:41:20 +000030 def setUp(self):
31 self.a = range(100)
32 self.b = range(200)
33 self.a[-12] = self.b
Tim Petersa814db52001-05-14 07:05:58 +000034
Fred Drake43913dd2001-05-14 17:41:20 +000035 def test_basic(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000036 # Verify .isrecursive() and .isreadable() w/o recursion
Fred Drake43913dd2001-05-14 17:41:20 +000037 verify = self.assert_
Fred Drakeb456e4f2002-12-31 07:16:16 +000038 pp = pprint.PrettyPrinter()
Martin v. Löwis339d0f72001-08-17 18:39:25 +000039 for safe in (2, 2.0, 2j, "abc", [3], (2,2), {3: 3}, uni("yaddayadda"),
Fred Drake43913dd2001-05-14 17:41:20 +000040 self.a, self.b):
Fred Drakeb456e4f2002-12-31 07:16:16 +000041 # module-level convenience functions
Fred Drake43913dd2001-05-14 17:41:20 +000042 verify(not pprint.isrecursive(safe),
Walter Dörwald70a6b492004-02-12 17:35:32 +000043 "expected not isrecursive for %r" % (safe,))
Fred Drake43913dd2001-05-14 17:41:20 +000044 verify(pprint.isreadable(safe),
Walter Dörwald70a6b492004-02-12 17:35:32 +000045 "expected isreadable for %r" % (safe,))
Fred Drakeb456e4f2002-12-31 07:16:16 +000046 # PrettyPrinter methods
47 verify(not pp.isrecursive(safe),
Walter Dörwald70a6b492004-02-12 17:35:32 +000048 "expected not isrecursive for %r" % (safe,))
Fred Drakeb456e4f2002-12-31 07:16:16 +000049 verify(pp.isreadable(safe),
Walter Dörwald70a6b492004-02-12 17:35:32 +000050 "expected isreadable for %r" % (safe,))
Tim Petersa814db52001-05-14 07:05:58 +000051
Fred Drake43913dd2001-05-14 17:41:20 +000052 def test_knotted(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000053 # Verify .isrecursive() and .isreadable() w/ recursion
Fred Drake43913dd2001-05-14 17:41:20 +000054 # Tie a knot.
55 self.b[67] = self.a
56 # Messy dict.
57 self.d = {}
58 self.d[0] = self.d[1] = self.d[2] = self.d
Tim Petersa814db52001-05-14 07:05:58 +000059
Fred Drake43913dd2001-05-14 17:41:20 +000060 verify = self.assert_
Fred Drakeb456e4f2002-12-31 07:16:16 +000061 pp = pprint.PrettyPrinter()
Tim Petersa814db52001-05-14 07:05:58 +000062
Fred Drake43913dd2001-05-14 17:41:20 +000063 for icky in self.a, self.b, self.d, (self.d, self.d):
64 verify(pprint.isrecursive(icky), "expected isrecursive")
65 verify(not pprint.isreadable(icky), "expected not isreadable")
Fred Drakeb456e4f2002-12-31 07:16:16 +000066 verify(pp.isrecursive(icky), "expected isrecursive")
67 verify(not pp.isreadable(icky), "expected not isreadable")
Fred Drake43913dd2001-05-14 17:41:20 +000068
69 # Break the cycles.
70 self.d.clear()
71 del self.a[:]
72 del self.b[:]
73
74 for safe in self.a, self.b, self.d, (self.d, self.d):
Fred Drakeb456e4f2002-12-31 07:16:16 +000075 # module-level convenience functions
Fred Drake43913dd2001-05-14 17:41:20 +000076 verify(not pprint.isrecursive(safe),
Walter Dörwald70a6b492004-02-12 17:35:32 +000077 "expected not isrecursive for %r" % (safe,))
Fred Drake43913dd2001-05-14 17:41:20 +000078 verify(pprint.isreadable(safe),
Walter Dörwald70a6b492004-02-12 17:35:32 +000079 "expected isreadable for %r" % (safe,))
Fred Drakeb456e4f2002-12-31 07:16:16 +000080 # PrettyPrinter methods
81 verify(not pp.isrecursive(safe),
Walter Dörwald70a6b492004-02-12 17:35:32 +000082 "expected not isrecursive for %r" % (safe,))
Fred Drakeb456e4f2002-12-31 07:16:16 +000083 verify(pp.isreadable(safe),
Walter Dörwald70a6b492004-02-12 17:35:32 +000084 "expected isreadable for %r" % (safe,))
Fred Drake43913dd2001-05-14 17:41:20 +000085
86 def test_unreadable(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000087 # Not recursive but not readable anyway
Fred Drake43913dd2001-05-14 17:41:20 +000088 verify = self.assert_
Fred Drakeb456e4f2002-12-31 07:16:16 +000089 pp = pprint.PrettyPrinter()
Fred Drake43913dd2001-05-14 17:41:20 +000090 for unreadable in type(3), pprint, pprint.isrecursive:
Fred Drakeb456e4f2002-12-31 07:16:16 +000091 # module-level convenience functions
Fred Drake43913dd2001-05-14 17:41:20 +000092 verify(not pprint.isrecursive(unreadable),
Walter Dörwald70a6b492004-02-12 17:35:32 +000093 "expected not isrecursive for %r" % (unreadable,))
Fred Drake43913dd2001-05-14 17:41:20 +000094 verify(not pprint.isreadable(unreadable),
Walter Dörwald70a6b492004-02-12 17:35:32 +000095 "expected not isreadable for %r" % (unreadable,))
Fred Drakeb456e4f2002-12-31 07:16:16 +000096 # PrettyPrinter methods
97 verify(not pp.isrecursive(unreadable),
Walter Dörwald70a6b492004-02-12 17:35:32 +000098 "expected not isrecursive for %r" % (unreadable,))
Fred Drakeb456e4f2002-12-31 07:16:16 +000099 verify(not pp.isreadable(unreadable),
Walter Dörwald70a6b492004-02-12 17:35:32 +0000100 "expected not isreadable for %r" % (unreadable,))
Fred Drake43913dd2001-05-14 17:41:20 +0000101
Tim Peters95b3f782001-05-14 18:39:41 +0000102 def test_same_as_repr(self):
Walter Dörwald7a7ede52003-12-03 20:15:28 +0000103 # Simple objects, small containers and classes that overwrite __repr__
104 # For those the result should be the same as repr()
Tim Peters95b3f782001-05-14 18:39:41 +0000105 verify = self.assert_
Walter Dörwald7a7ede52003-12-03 20:15:28 +0000106 for simple in (0, 0L, 0+0j, 0.0, "", uni(""),
107 (), tuple2(), tuple3(),
108 [], list2(), list3(),
109 {}, dict2(), dict3(),
110 verify, pprint,
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000111 -6, -6L, -6-6j, -1.5, "x", uni("x"), (3,), [3], {3: 6},
Tim Peters95b3f782001-05-14 18:39:41 +0000112 (1,2), [3,4], {5: 6, 7: 8},
Walter Dörwald7a7ede52003-12-03 20:15:28 +0000113 tuple2((1,2)), tuple3((1,2)), tuple3(range(100)),
114 [3,4], list2([3,4]), list3([3,4]), list3(range(100)),
115 {5: 6, 7: 8}, dict2({5: 6, 7: 8}), dict3({5: 6, 7: 8}),
116 dict3([(x,x) for x in range(100)]),
Tim Peters95b3f782001-05-14 18:39:41 +0000117 {"xy\tab\n": (3,), 5: [[]], (): {}},
118 range(10, -11, -1)
119 ):
120 native = repr(simple)
121 for function in "pformat", "saferepr":
122 f = getattr(pprint, function)
123 got = f(simple)
124 verify(native == got, "expected %s got %s from pprint.%s" %
125 (native, got, function))
Fred Drake43913dd2001-05-14 17:41:20 +0000126
Barry Warsaw00859c02001-11-28 05:49:39 +0000127 def test_basic_line_wrap(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +0000128 # verify basic line-wrapping operation
Barry Warsaw00859c02001-11-28 05:49:39 +0000129 o = {'RPM_cal': 0,
130 'RPM_cal2': 48059,
131 'Speed_cal': 0,
132 'controldesk_runtime_us': 0,
133 'main_code_runtime_us': 0,
134 'read_io_runtime_us': 0,
135 'write_io_runtime_us': 43690}
136 exp = """\
137{'RPM_cal': 0,
138 'RPM_cal2': 48059,
139 'Speed_cal': 0,
140 'controldesk_runtime_us': 0,
141 'main_code_runtime_us': 0,
142 'read_io_runtime_us': 0,
143 'write_io_runtime_us': 43690}"""
Walter Dörwald7a7ede52003-12-03 20:15:28 +0000144 for type in [dict, dict2]:
145 self.assertEqual(pprint.pformat(type(o)), exp)
146
147 o = range(100)
148 exp = '[%s]' % ',\n '.join(map(str, o))
149 for type in [list, list2]:
150 self.assertEqual(pprint.pformat(type(o)), exp)
151
152 o = tuple(range(100))
153 exp = '(%s)' % ',\n '.join(map(str, o))
154 for type in [tuple, tuple2]:
155 self.assertEqual(pprint.pformat(type(o)), exp)
Barry Warsaw00859c02001-11-28 05:49:39 +0000156
Walter Dörwaldc8de4582003-12-03 20:26:05 +0000157 # indent parameter
158 o = range(100)
159 exp = '[ %s]' % ',\n '.join(map(str, o))
160 for type in [list, list2]:
161 self.assertEqual(pprint.pformat(type(o), indent=4), exp)
162
Fred Drakeaee113d2002-04-02 05:08:35 +0000163 def test_subclassing(self):
164 o = {'names with spaces': 'should be presented using repr()',
165 'others.should.not.be': 'like.this'}
166 exp = """\
167{'names with spaces': 'should be presented using repr()',
168 others.should.not.be: like.this}"""
169 self.assertEqual(DottedPrettyPrinter().pformat(o), exp)
170
171
172class DottedPrettyPrinter(pprint.PrettyPrinter):
Guido van Rossum32c2ae72002-08-22 19:45:32 +0000173
Fred Drakeaee113d2002-04-02 05:08:35 +0000174 def format(self, object, context, maxlevels, level):
175 if isinstance(object, str):
176 if ' ' in object:
Walter Dörwald70a6b492004-02-12 17:35:32 +0000177 return repr(object), 1, 0
Fred Drakeaee113d2002-04-02 05:08:35 +0000178 else:
179 return object, 0, 0
180 else:
181 return pprint.PrettyPrinter.format(
182 self, object, context, maxlevels, level)
183
184
Fred Drake2e2be372001-09-20 21:33:42 +0000185def test_main():
Fred Drakeb456e4f2002-12-31 07:16:16 +0000186 test.test_support.run_unittest(QueryTestCase)
Fred Drake2e2be372001-09-20 21:33:42 +0000187
188
189if __name__ == "__main__":
190 test_main()