##// END OF EJS Templates
Fix EvalFormatter test for Python 3.4...
Thomas Kluyver -
Show More
@@ -1,171 +1,177 b''
1 1 # encoding: utf-8
2 2 """Tests for IPython.utils.text"""
3 3 from __future__ import print_function
4 4
5 5 #-----------------------------------------------------------------------------
6 6 # Copyright (C) 2011 The IPython Development Team
7 7 #
8 8 # Distributed under the terms of the BSD License. The full license is in
9 9 # the file COPYING, distributed as part of this software.
10 10 #-----------------------------------------------------------------------------
11 11
12 12 #-----------------------------------------------------------------------------
13 13 # Imports
14 14 #-----------------------------------------------------------------------------
15 15
16 16 import os
17 17 import math
18 18 import random
19 import sys
19 20
20 21 import nose.tools as nt
21 22
22 23 from IPython.utils import text
23 24
24 25 #-----------------------------------------------------------------------------
25 26 # Globals
26 27 #-----------------------------------------------------------------------------
27 28
28 29 def test_columnize():
29 30 """Basic columnize tests."""
30 31 size = 5
31 32 items = [l*size for l in 'abc']
32 33 out = text.columnize(items, displaywidth=80)
33 34 nt.assert_equal(out, 'aaaaa bbbbb ccccc\n')
34 35 out = text.columnize(items, displaywidth=12)
35 36 nt.assert_equal(out, 'aaaaa ccccc\nbbbbb\n')
36 37 out = text.columnize(items, displaywidth=10)
37 38 nt.assert_equal(out, 'aaaaa\nbbbbb\nccccc\n')
38 39
39 40 def test_columnize_random():
40 41 """Test with random input to hopfully catch edge case """
41 42 for nitems in [random.randint(2,70) for i in range(2,20)]:
42 43 displaywidth = random.randint(20,200)
43 44 rand_len = [random.randint(2,displaywidth) for i in range(nitems)]
44 45 items = ['x'*l for l in rand_len]
45 46 out = text.columnize(items, displaywidth=displaywidth)
46 47 longer_line = max([len(x) for x in out.split('\n')])
47 48 longer_element = max(rand_len)
48 49 if longer_line > displaywidth:
49 50 print("Columnize displayed something lager than displaywidth : %s " % longer_line)
50 51 print("longer element : %s " % longer_element)
51 52 print("displaywidth : %s " % displaywidth)
52 53 print("number of element : %s " % nitems)
53 54 print("size of each element :\n %s" % rand_len)
54 55 assert False
55 56
56 57 def test_columnize_medium():
57 58 """Test with inputs than shouldn't be wider tahn 80 """
58 59 size = 40
59 60 items = [l*size for l in 'abc']
60 61 out = text.columnize(items, displaywidth=80)
61 62 nt.assert_equal(out, '\n'.join(items+['']))
62 63
63 64 def test_columnize_long():
64 65 """Test columnize with inputs longer than the display window"""
65 66 size = 11
66 67 items = [l*size for l in 'abc']
67 68 out = text.columnize(items, displaywidth=size-1)
68 69 nt.assert_equal(out, '\n'.join(items+['']))
69 70
70 71 def eval_formatter_check(f):
71 72 ns = dict(n=12, pi=math.pi, stuff='hello there', os=os, u=u"cafΓ©", b="cafΓ©")
72 73 s = f.format("{n} {n//4} {stuff.split()[0]}", **ns)
73 74 nt.assert_equal(s, "12 3 hello")
74 75 s = f.format(' '.join(['{n//%i}'%i for i in range(1,8)]), **ns)
75 76 nt.assert_equal(s, "12 6 4 3 2 2 1")
76 77 s = f.format('{[n//i for i in range(1,8)]}', **ns)
77 78 nt.assert_equal(s, "[12, 6, 4, 3, 2, 2, 1]")
78 79 s = f.format("{stuff!s}", **ns)
79 80 nt.assert_equal(s, ns['stuff'])
80 81 s = f.format("{stuff!r}", **ns)
81 82 nt.assert_equal(s, repr(ns['stuff']))
82 83
83 84 # Check with unicode:
84 85 s = f.format("{u}", **ns)
85 86 nt.assert_equal(s, ns['u'])
86 87 # This decodes in a platform dependent manner, but it shouldn't error out
87 88 s = f.format("{b}", **ns)
88 89
89 90 nt.assert_raises(NameError, f.format, '{dne}', **ns)
90 91
91 92 def eval_formatter_slicing_check(f):
92 93 ns = dict(n=12, pi=math.pi, stuff='hello there', os=os)
93 94 s = f.format(" {stuff.split()[:]} ", **ns)
94 95 nt.assert_equal(s, " ['hello', 'there'] ")
95 96 s = f.format(" {stuff.split()[::-1]} ", **ns)
96 97 nt.assert_equal(s, " ['there', 'hello'] ")
97 98 s = f.format("{stuff[::2]}", **ns)
98 99 nt.assert_equal(s, ns['stuff'][::2])
99 100
100 101 nt.assert_raises(SyntaxError, f.format, "{n:x}", **ns)
101 102
102 103 def eval_formatter_no_slicing_check(f):
103 104 ns = dict(n=12, pi=math.pi, stuff='hello there', os=os)
104 105
105 106 s = f.format('{n:x} {pi**2:+f}', **ns)
106 107 nt.assert_equal(s, "c +9.869604")
107 108
108 109 s = f.format('{stuff[slice(1,4)]}', **ns)
109 110 nt.assert_equal(s, 'ell')
110 111
111 nt.assert_raises(SyntaxError, f.format, "{a[:]}")
112 if sys.version_info >= (3, 4):
113 # String formatting has changed in Python 3.4, so this now works.
114 s = f.format("{a[:]}", a=[1, 2])
115 nt.assert_equal(s, "[1, 2]")
116 else:
117 nt.assert_raises(SyntaxError, f.format, "{a[:]}")
112 118
113 119 def test_eval_formatter():
114 120 f = text.EvalFormatter()
115 121 eval_formatter_check(f)
116 122 eval_formatter_no_slicing_check(f)
117 123
118 124 def test_full_eval_formatter():
119 125 f = text.FullEvalFormatter()
120 126 eval_formatter_check(f)
121 127 eval_formatter_slicing_check(f)
122 128
123 129 def test_dollar_formatter():
124 130 f = text.DollarFormatter()
125 131 eval_formatter_check(f)
126 132 eval_formatter_slicing_check(f)
127 133
128 134 ns = dict(n=12, pi=math.pi, stuff='hello there', os=os)
129 135 s = f.format("$n", **ns)
130 136 nt.assert_equal(s, "12")
131 137 s = f.format("$n.real", **ns)
132 138 nt.assert_equal(s, "12")
133 139 s = f.format("$n/{stuff[:5]}", **ns)
134 140 nt.assert_equal(s, "12/hello")
135 141 s = f.format("$n $$HOME", **ns)
136 142 nt.assert_equal(s, "12 $HOME")
137 143 s = f.format("${foo}", foo="HOME")
138 144 nt.assert_equal(s, "$HOME")
139 145
140 146
141 147 def test_long_substr():
142 148 data = ['hi']
143 149 nt.assert_equal(text.long_substr(data), 'hi')
144 150
145 151
146 152 def test_long_substr2():
147 153 data = ['abc', 'abd', 'abf', 'ab']
148 154 nt.assert_equal(text.long_substr(data), 'ab')
149 155
150 156 def test_long_substr_empty():
151 157 data = []
152 158 nt.assert_equal(text.long_substr(data), '')
153 159
154 160 def test_strip_email():
155 161 src = """\
156 162 >> >>> def f(x):
157 163 >> ... return x+1
158 164 >> ...
159 165 >> >>> zz = f(2.5)"""
160 166 cln = """\
161 167 >>> def f(x):
162 168 ... return x+1
163 169 ...
164 170 >>> zz = f(2.5)"""
165 171 nt.assert_equal(text.strip_email_quotes(src), cln)
166 172
167 173
168 174 def test_strip_email2():
169 175 src = '> > > list()'
170 176 cln = 'list()'
171 177 nt.assert_equal(text.strip_email_quotes(src), cln)
General Comments 0
You need to be logged in to leave comments. Login now