blob: 0e6559d6b5fef5a6353dc26e63bd863ee6dae211 [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
Tim Petersa814db52001-05-14 07:05:58 +000011
Fred Drake43913dd2001-05-14 17:41:20 +000012class QueryTestCase(unittest.TestCase):
Tim Petersa814db52001-05-14 07:05:58 +000013
Fred Drake43913dd2001-05-14 17:41:20 +000014 def setUp(self):
15 self.a = range(100)
16 self.b = range(200)
17 self.a[-12] = self.b
Tim Petersa814db52001-05-14 07:05:58 +000018
Fred Drake43913dd2001-05-14 17:41:20 +000019 def test_basic(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000020 # Verify .isrecursive() and .isreadable() w/o recursion
Fred Drake43913dd2001-05-14 17:41:20 +000021 verify = self.assert_
Fred Drakeb456e4f2002-12-31 07:16:16 +000022 pp = pprint.PrettyPrinter()
Martin v. Löwis339d0f72001-08-17 18:39:25 +000023 for safe in (2, 2.0, 2j, "abc", [3], (2,2), {3: 3}, uni("yaddayadda"),
Fred Drake43913dd2001-05-14 17:41:20 +000024 self.a, self.b):
Fred Drakeb456e4f2002-12-31 07:16:16 +000025 # module-level convenience functions
Fred Drake43913dd2001-05-14 17:41:20 +000026 verify(not pprint.isrecursive(safe),
27 "expected not isrecursive for " + `safe`)
28 verify(pprint.isreadable(safe),
29 "expected isreadable for " + `safe`)
Fred Drakeb456e4f2002-12-31 07:16:16 +000030 # PrettyPrinter methods
31 verify(not pp.isrecursive(safe),
32 "expected not isrecursive for " + `safe`)
33 verify(pp.isreadable(safe),
34 "expected isreadable for " + `safe`)
Tim Petersa814db52001-05-14 07:05:58 +000035
Fred Drake43913dd2001-05-14 17:41:20 +000036 def test_knotted(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000037 # Verify .isrecursive() and .isreadable() w/ recursion
Fred Drake43913dd2001-05-14 17:41:20 +000038 # Tie a knot.
39 self.b[67] = self.a
40 # Messy dict.
41 self.d = {}
42 self.d[0] = self.d[1] = self.d[2] = self.d
Tim Petersa814db52001-05-14 07:05:58 +000043
Fred Drake43913dd2001-05-14 17:41:20 +000044 verify = self.assert_
Fred Drakeb456e4f2002-12-31 07:16:16 +000045 pp = pprint.PrettyPrinter()
Tim Petersa814db52001-05-14 07:05:58 +000046
Fred Drake43913dd2001-05-14 17:41:20 +000047 for icky in self.a, self.b, self.d, (self.d, self.d):
48 verify(pprint.isrecursive(icky), "expected isrecursive")
49 verify(not pprint.isreadable(icky), "expected not isreadable")
Fred Drakeb456e4f2002-12-31 07:16:16 +000050 verify(pp.isrecursive(icky), "expected isrecursive")
51 verify(not pp.isreadable(icky), "expected not isreadable")
Fred Drake43913dd2001-05-14 17:41:20 +000052
53 # Break the cycles.
54 self.d.clear()
55 del self.a[:]
56 del self.b[:]
57
58 for safe in self.a, self.b, self.d, (self.d, self.d):
Fred Drakeb456e4f2002-12-31 07:16:16 +000059 # module-level convenience functions
Fred Drake43913dd2001-05-14 17:41:20 +000060 verify(not pprint.isrecursive(safe),
61 "expected not isrecursive for " + `safe`)
62 verify(pprint.isreadable(safe),
63 "expected isreadable for " + `safe`)
Fred Drakeb456e4f2002-12-31 07:16:16 +000064 # PrettyPrinter methods
65 verify(not pp.isrecursive(safe),
66 "expected not isrecursive for " + `safe`)
67 verify(pp.isreadable(safe),
68 "expected isreadable for " + `safe`)
Fred Drake43913dd2001-05-14 17:41:20 +000069
70 def test_unreadable(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000071 # Not recursive but not readable anyway
Fred Drake43913dd2001-05-14 17:41:20 +000072 verify = self.assert_
Fred Drakeb456e4f2002-12-31 07:16:16 +000073 pp = pprint.PrettyPrinter()
Fred Drake43913dd2001-05-14 17:41:20 +000074 for unreadable in type(3), pprint, pprint.isrecursive:
Fred Drakeb456e4f2002-12-31 07:16:16 +000075 # module-level convenience functions
Fred Drake43913dd2001-05-14 17:41:20 +000076 verify(not pprint.isrecursive(unreadable),
77 "expected not isrecursive for " + `unreadable`)
78 verify(not pprint.isreadable(unreadable),
79 "expected not isreadable for " + `unreadable`)
Fred Drakeb456e4f2002-12-31 07:16:16 +000080 # PrettyPrinter methods
81 verify(not pp.isrecursive(unreadable),
82 "expected not isrecursive for " + `unreadable`)
83 verify(not pp.isreadable(unreadable),
84 "expected not isreadable for " + `unreadable`)
Fred Drake43913dd2001-05-14 17:41:20 +000085
Tim Peters95b3f782001-05-14 18:39:41 +000086 def test_same_as_repr(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +000087 # Simple objects and small containers that should be same as repr()
Tim Peters95b3f782001-05-14 18:39:41 +000088 verify = self.assert_
Martin v. Löwis339d0f72001-08-17 18:39:25 +000089 for simple in (0, 0L, 0+0j, 0.0, "", uni(""), (), [], {}, verify, pprint,
90 -6, -6L, -6-6j, -1.5, "x", uni("x"), (3,), [3], {3: 6},
Tim Peters95b3f782001-05-14 18:39:41 +000091 (1,2), [3,4], {5: 6, 7: 8},
92 {"xy\tab\n": (3,), 5: [[]], (): {}},
93 range(10, -11, -1)
94 ):
95 native = repr(simple)
96 for function in "pformat", "saferepr":
97 f = getattr(pprint, function)
98 got = f(simple)
99 verify(native == got, "expected %s got %s from pprint.%s" %
100 (native, got, function))
Fred Drake43913dd2001-05-14 17:41:20 +0000101
Fred Drake2e2be372001-09-20 21:33:42 +0000102
Barry Warsaw00859c02001-11-28 05:49:39 +0000103 def test_basic_line_wrap(self):
Guido van Rossum32c2ae72002-08-22 19:45:32 +0000104 # verify basic line-wrapping operation
Barry Warsaw00859c02001-11-28 05:49:39 +0000105 o = {'RPM_cal': 0,
106 'RPM_cal2': 48059,
107 'Speed_cal': 0,
108 'controldesk_runtime_us': 0,
109 'main_code_runtime_us': 0,
110 'read_io_runtime_us': 0,
111 'write_io_runtime_us': 43690}
112 exp = """\
113{'RPM_cal': 0,
114 'RPM_cal2': 48059,
115 'Speed_cal': 0,
116 'controldesk_runtime_us': 0,
117 'main_code_runtime_us': 0,
118 'read_io_runtime_us': 0,
119 'write_io_runtime_us': 43690}"""
120 self.assertEqual(pprint.pformat(o), exp)
121
Fred Drakeaee113d2002-04-02 05:08:35 +0000122 def test_subclassing(self):
123 o = {'names with spaces': 'should be presented using repr()',
124 'others.should.not.be': 'like.this'}
125 exp = """\
126{'names with spaces': 'should be presented using repr()',
127 others.should.not.be: like.this}"""
128 self.assertEqual(DottedPrettyPrinter().pformat(o), exp)
129
130
131class DottedPrettyPrinter(pprint.PrettyPrinter):
Guido van Rossum32c2ae72002-08-22 19:45:32 +0000132
Fred Drakeaee113d2002-04-02 05:08:35 +0000133 def format(self, object, context, maxlevels, level):
134 if isinstance(object, str):
135 if ' ' in object:
136 return `object`, 1, 0
137 else:
138 return object, 0, 0
139 else:
140 return pprint.PrettyPrinter.format(
141 self, object, context, maxlevels, level)
142
143
Fred Drake2e2be372001-09-20 21:33:42 +0000144def test_main():
Fred Drakeb456e4f2002-12-31 07:16:16 +0000145 test.test_support.run_unittest(QueryTestCase)
Fred Drake2e2be372001-09-20 21:33:42 +0000146
147
148if __name__ == "__main__":
149 test_main()