##// END OF EJS Templates
ENH: Add tests for set and frozenset pretty-printing.
Robert Kern -
Show More
@@ -1,94 +1,108 b''
1 1 """Tests for IPython.lib.pretty.
2 2 """
3 3 #-----------------------------------------------------------------------------
4 4 # Copyright (c) 2011, the IPython Development Team.
5 5 #
6 6 # Distributed under the terms of the Modified BSD License.
7 7 #
8 8 # The full license is in the file COPYING.txt, distributed with this software.
9 9 #-----------------------------------------------------------------------------
10 10
11 11 #-----------------------------------------------------------------------------
12 12 # Imports
13 13 #-----------------------------------------------------------------------------
14 14 from __future__ import print_function
15 15
16 16 # Third-party imports
17 17 import nose.tools as nt
18 18
19 19 # Our own imports
20 20 from IPython.lib import pretty
21 21 from IPython.testing.decorators import skip_without
22 22
23 23 #-----------------------------------------------------------------------------
24 24 # Classes and functions
25 25 #-----------------------------------------------------------------------------
26 26
27 27 class MyList(object):
28 28 def __init__(self, content):
29 29 self.content = content
30 30 def _repr_pretty_(self, p, cycle):
31 31 if cycle:
32 32 p.text("MyList(...)")
33 33 else:
34 34 with p.group(3, "MyList(", ")"):
35 35 for (i, child) in enumerate(self.content):
36 36 if i:
37 37 p.text(",")
38 38 p.breakable()
39 39 else:
40 40 p.breakable("")
41 41 p.pretty(child)
42 42
43 43
44 44 class MyDict(dict):
45 45 def _repr_pretty_(self, p, cycle):
46 46 p.text("MyDict(...)")
47 47
48 48
49 49 class Dummy1(object):
50 50 def _repr_pretty_(self, p, cycle):
51 51 p.text("Dummy1(...)")
52 52
53 53 class Dummy2(Dummy1):
54 54 _repr_pretty_ = None
55 55
56 56
57 57 def test_indentation():
58 58 """Test correct indentation in groups"""
59 59 count = 40
60 60 gotoutput = pretty.pretty(MyList(range(count)))
61 61 expectedoutput = "MyList(\n" + ",\n".join(" %d" % i for i in range(count)) + ")"
62 62
63 63 nt.assert_equal(gotoutput, expectedoutput)
64 64
65 65
66 66 def test_dispatch():
67 67 """
68 68 Test correct dispatching: The _repr_pretty_ method for MyDict
69 69 must be found before the registered printer for dict.
70 70 """
71 71 gotoutput = pretty.pretty(MyDict())
72 72 expectedoutput = "MyDict(...)"
73 73
74 74 nt.assert_equal(gotoutput, expectedoutput)
75 75
76 76
77 77 def test_callability_checking():
78 78 """
79 79 Test that the _repr_pretty_ method is tested for callability and skipped if
80 80 not.
81 81 """
82 82 gotoutput = pretty.pretty(Dummy2())
83 83 expectedoutput = "Dummy1(...)"
84 84
85 85 nt.assert_equal(gotoutput, expectedoutput)
86 86
87
88 def test_sets():
89 """
90 Test that set and frozenset use Python 3 formatting.
91 """
92 objects = [set(), frozenset(), set([1]), frozenset([1]), set([1,2]),
93 frozenset([1,2])]
94 expected = ['set()', 'frozenset()', '{1}', 'frozenset({1})', '{1, 2}',
95 'frozenset({1, 2})']
96 for obj, expected_output in zip(objects, expected):
97 got_output = pretty.pretty(obj)
98 yield nt.assert_equal, got_output, expected_output
99
100
87 101 @skip_without('xxlimited')
88 102 def test_pprint_heap_allocated_type():
89 103 """
90 104 Test that pprint works for heap allocated types.
91 105 """
92 106 import xxlimited
93 107 output = pretty.pretty(xxlimited.Null)
94 108 nt.assert_equal(output, 'xxlimited.Null')
General Comments 0
You need to be logged in to leave comments. Login now