blob: e31e583121b4a0108958f05df0f91582c466cb57 [file] [log] [blame]
Tim Petersa814db52001-05-14 07:05:58 +00001import pprint
Fred Drake43913dd2001-05-14 17:41:20 +00002import unittest
Barry Warsaw04f357c2002-07-23 19:04:11 +00003from test import test_support
Tim Petersa814db52001-05-14 07:05:58 +00004
Martin v. Löwis339d0f72001-08-17 18:39:25 +00005try:
6 uni = unicode
7except NameError:
8 def uni(x):return x
9
Tim Petersa814db52001-05-14 07:05:58 +000010
Fred Drake43913dd2001-05-14 17:41:20 +000011class QueryTestCase(unittest.TestCase):
Tim Petersa814db52001-05-14 07:05:58 +000012
Fred Drake43913dd2001-05-14 17:41:20 +000013 def setUp(self):
14 self.a = range(100)
15 self.b = range(200)
16 self.a[-12] = self.b
Tim Petersa814db52001-05-14 07:05:58 +000017
Fred Drake43913dd2001-05-14 17:41:20 +000018 def test_basic(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000019 # Verify .isrecursive() and .isreadable() w/o recursion
Fred Drake43913dd2001-05-14 17:41:20 +000020 verify = self.assert_
Martin v. Löwis339d0f72001-08-17 18:39:25 +000021 for safe in (2, 2.0, 2j, "abc", [3], (2,2), {3: 3}, uni("yaddayadda"),
Fred Drake43913dd2001-05-14 17:41:20 +000022 self.a, self.b):
23 verify(not pprint.isrecursive(safe),
24 "expected not isrecursive for " + `safe`)
25 verify(pprint.isreadable(safe),
26 "expected isreadable for " + `safe`)
Tim Petersa814db52001-05-14 07:05:58 +000027
Fred Drake43913dd2001-05-14 17:41:20 +000028 def test_knotted(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000029 # Verify .isrecursive() and .isreadable() w/ recursion
Fred Drake43913dd2001-05-14 17:41:20 +000030 # Tie a knot.
31 self.b[67] = self.a
32 # Messy dict.
33 self.d = {}
34 self.d[0] = self.d[1] = self.d[2] = self.d
Tim Petersa814db52001-05-14 07:05:58 +000035
Fred Drake43913dd2001-05-14 17:41:20 +000036 verify = self.assert_
Tim Petersa814db52001-05-14 07:05:58 +000037
Fred Drake43913dd2001-05-14 17:41:20 +000038 for icky in self.a, self.b, self.d, (self.d, self.d):
39 verify(pprint.isrecursive(icky), "expected isrecursive")
40 verify(not pprint.isreadable(icky), "expected not isreadable")
41
42 # Break the cycles.
43 self.d.clear()
44 del self.a[:]
45 del self.b[:]
46
47 for safe in self.a, self.b, self.d, (self.d, self.d):
48 verify(not pprint.isrecursive(safe),
49 "expected not isrecursive for " + `safe`)
50 verify(pprint.isreadable(safe),
51 "expected isreadable for " + `safe`)
52
53 def test_unreadable(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000054 # Not recursive but not readable anyway
Fred Drake43913dd2001-05-14 17:41:20 +000055 verify = self.assert_
56 for unreadable in type(3), pprint, pprint.isrecursive:
57 verify(not pprint.isrecursive(unreadable),
58 "expected not isrecursive for " + `unreadable`)
59 verify(not pprint.isreadable(unreadable),
60 "expected not isreadable for " + `unreadable`)
61
Tim Peters95b3f782001-05-14 18:39:41 +000062 def test_same_as_repr(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000063 # Simple objects and small containers that should be same as repr()
Tim Peters95b3f782001-05-14 18:39:41 +000064 verify = self.assert_
Martin v. Löwis339d0f72001-08-17 18:39:25 +000065 for simple in (0, 0L, 0+0j, 0.0, "", uni(""), (), [], {}, verify, pprint,
66 -6, -6L, -6-6j, -1.5, "x", uni("x"), (3,), [3], {3: 6},
Tim Peters95b3f782001-05-14 18:39:41 +000067 (1,2), [3,4], {5: 6, 7: 8},
68 {"xy\tab\n": (3,), 5: [[]], (): {}},
69 range(10, -11, -1)
70 ):
71 native = repr(simple)
72 for function in "pformat", "saferepr":
73 f = getattr(pprint, function)
74 got = f(simple)
75 verify(native == got, "expected %s got %s from pprint.%s" %
76 (native, got, function))
Fred Drake43913dd2001-05-14 17:41:20 +000077
Fred Drake2e2be372001-09-20 21:33:42 +000078
Barry Warsaw00859c02001-11-28 05:49:39 +000079 def test_basic_line_wrap(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000080 # verify basic line-wrapping operation
Barry Warsaw00859c02001-11-28 05:49:39 +000081 o = {'RPM_cal': 0,
82 'RPM_cal2': 48059,
83 'Speed_cal': 0,
84 'controldesk_runtime_us': 0,
85 'main_code_runtime_us': 0,
86 'read_io_runtime_us': 0,
87 'write_io_runtime_us': 43690}
88 exp = """\
89{'RPM_cal': 0,
90 'RPM_cal2': 48059,
91 'Speed_cal': 0,
92 'controldesk_runtime_us': 0,
93 'main_code_runtime_us': 0,
94 'read_io_runtime_us': 0,
95 'write_io_runtime_us': 43690}"""
96 self.assertEqual(pprint.pformat(o), exp)
97
Fred Drakeaee113d2002-04-02 05:08:35 +000098 def test_subclassing(self):
99 o = {'names with spaces': 'should be presented using repr()',
100 'others.should.not.be': 'like.this'}
101 exp = """\
102{'names with spaces': 'should be presented using repr()',
103 others.should.not.be: like.this}"""
104 self.assertEqual(DottedPrettyPrinter().pformat(o), exp)
105
106
107class DottedPrettyPrinter(pprint.PrettyPrinter):
Guido van Rossum32c2ae72002-08-22 19:45:32 +0000108
Fred Drakeaee113d2002-04-02 05:08:35 +0000109 def format(self, object, context, maxlevels, level):
110 if isinstance(object, str):
111 if ' ' in object:
112 return `object`, 1, 0
113 else:
114 return object, 0, 0
115 else:
116 return pprint.PrettyPrinter.format(
117 self, object, context, maxlevels, level)
118
119
Fred Drake2e2be372001-09-20 21:33:42 +0000120def test_main():
121 test_support.run_unittest(QueryTestCase)
122
123
124if __name__ == "__main__":
125 test_main()