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