2 Test cases for the repr module
10 from test_support
import run_unittest
11 from repr import repr as r
# Don't shadow builtin repr
14 def nestedTuple(nesting
):
16 for i
in range(nesting
):
20 class ReprTests(unittest
.TestCase
):
22 def test_string(self
):
23 eq
= self
.assertEquals
25 eq(r("abcdefghijklmnop"),"'abcdefghijklmnop'")
28 expected
= `s`
[:13] + "..." + `s`
[-14:]
31 eq(r("\"'"), repr("\"'"))
33 expected
= `s`
[:13] + "..." + `s`
[-14:]
36 def test_container(self
):
37 eq
= self
.assertEquals
38 # Tuples give up after 6 elements
41 eq(r((1, 2, 3)), "(1, 2, 3)")
42 eq(r((1, 2, 3, 4, 5, 6)), "(1, 2, 3, 4, 5, 6)")
43 eq(r((1, 2, 3, 4, 5, 6, 7)), "(1, 2, 3, 4, 5, 6, ...)")
45 # Lists give up after 6 as well
48 eq(r([1, 2, 3]), "[1, 2, 3]")
49 eq(r([1, 2, 3, 4, 5, 6]), "[1, 2, 3, 4, 5, 6]")
50 eq(r([1, 2, 3, 4, 5, 6, 7]), "[1, 2, 3, 4, 5, 6, ...]")
52 # Dictionaries give up after 4.
54 d
= {'alice': 1, 'bob': 2, 'charles': 3, 'dave': 4}
55 eq(r(d
), "{'alice': 1, 'bob': 2, 'charles': 3, 'dave': 4}")
57 eq(r(d
), "{'alice': 1, 'arthur': 1, 'bob': 2, 'charles': 3, ...}")
59 def test_numbers(self
):
60 eq
= self
.assertEquals
62 eq(r(123L), repr(123L))
63 eq(r(1.0/3), repr(1.0/3))
66 expected
= `n`
[:18] + "..." + `n`
[-19:]
69 def test_instance(self
):
70 eq
= self
.assertEquals
71 i1
= ClassWithRepr("a")
74 i2
= ClassWithRepr("x"*1000)
75 expected
= `i2`
[:13] + "..." + `i2`
[-14:]
78 i3
= ClassWithFailingRepr()
79 eq(r(i3
), ("<ClassWithFailingRepr instance at %x>"%id(i3
)))
81 s
= r(ClassWithFailingRepr
)
82 self
.failUnless(s
.startswith("<class "))
83 self
.failUnless(s
.endswith(">"))
84 self
.failUnless(s
.find("...") == 8)
87 fp
= open(unittest
.__file
__)
88 self
.failUnless(repr(fp
).startswith(
89 "<open file '%s', mode 'r' at 0x" % unittest
.__file
__))
91 self
.failUnless(repr(fp
).startswith(
92 "<closed file '%s', mode 'r' at 0x" % unittest
.__file
__))
94 def test_lambda(self
):
95 self
.failUnless(repr(lambda x
: x
).startswith(
97 # XXX anonymous functions? see func_repr
99 def test_builtin_function(self
):
100 eq
= self
.assertEquals
102 eq(repr(hash), '<built-in function hash>')
104 self
.failUnless(repr(''.split
).startswith(
105 '<built-in method split of str object at 0x'))
107 def test_xrange(self
):
108 eq
= self
.assertEquals
109 eq(repr(xrange(1)), 'xrange(1)')
110 eq(repr(xrange(1, 2)), 'xrange(1, 2)')
111 eq(repr(xrange(1, 2, 3)), 'xrange(1, 4, 3)')
112 # Turn off warnings for deprecated multiplication
114 warnings
.filterwarnings('ignore', category
=DeprecationWarning,
115 module
=ReprTests
.__module
__)
116 eq(repr(xrange(1) * 3), '(xrange(1) * 3)')
118 def test_nesting(self
):
119 eq
= self
.assertEquals
120 # everything is meant to give up after 6 levels.
121 eq(r([[[[[[[]]]]]]]), "[[[[[[[]]]]]]]")
122 eq(r([[[[[[[[]]]]]]]]), "[[[[[[[...]]]]]]]")
124 eq(r(nestedTuple(6)), "(((((((),),),),),),)")
125 eq(r(nestedTuple(7)), "(((((((...),),),),),),)")
127 eq(r({ nestedTuple(5) : nestedTuple(5) }),
128 "{((((((),),),),),): ((((((),),),),),)}")
129 eq(r({ nestedTuple(6) : nestedTuple(6) }),
130 "{((((((...),),),),),): ((((((...),),),),),)}")
132 eq(r([[[[[[{}]]]]]]), "[[[[[[{}]]]]]]")
133 eq(r([[[[[[[{}]]]]]]]), "[[[[[[[...]]]]]]]")
135 def test_buffer(self
):
136 # XXX doesn't test buffers with no b_base or read-write buffers (see
137 # bufferobject.c). The test is fairly incomplete too. Sigh.
139 self
.failUnless(repr(x
).startswith('<read-only buffer for 0x'))
142 # XXX Hmm? How to get at a cell object?
145 def test_descriptors(self
):
146 eq
= self
.assertEquals
148 eq(repr(dict.items
), "<method 'items' of 'dict' objects>")
149 # XXX member descriptors
150 # XXX attribute descriptors
151 # XXX slot descriptors
152 # static and class methods
155 x
= staticmethod(C
.foo
)
156 self
.failUnless(repr(x
).startswith('<staticmethod object at 0x'))
157 x
= classmethod(C
.foo
)
158 self
.failUnless(repr(x
).startswith('<classmethod object at 0x'))
160 def touch(path
, text
=''):
165 def zap(actions
, dirname
, names
):
167 actions
.append(os
.path
.join(dirname
, name
))
169 class LongReprTest(unittest
.TestCase
):
171 longname
= 'areallylongpackageandmodulenametotestreprtruncation'
172 self
.pkgname
= os
.path
.join(longname
)
173 self
.subpkgname
= os
.path
.join(longname
, longname
)
174 # Make the package and subpackage
175 os
.mkdir(self
.pkgname
)
176 touch(os
.path
.join(self
.pkgname
, '__init__'+os
.extsep
+'py'))
177 os
.mkdir(self
.subpkgname
)
178 touch(os
.path
.join(self
.subpkgname
, '__init__'+os
.extsep
+'py'))
179 # Remember where we are
180 self
.here
= os
.getcwd()
181 sys
.path
.insert(0, self
.here
)
185 os
.path
.walk(self
.pkgname
, zap
, actions
)
186 actions
.append(self
.pkgname
)
196 def test_module(self
):
197 eq
= self
.assertEquals
198 touch(os
.path
.join(self
.subpkgname
, self
.pkgname
+ os
.extsep
+ 'py'))
199 from areallylongpackageandmodulenametotestreprtruncation
.areallylongpackageandmodulenametotestreprtruncation
import areallylongpackageandmodulenametotestreprtruncation
200 eq(repr(areallylongpackageandmodulenametotestreprtruncation
),
201 "<module 'areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation' from '%s'>" % areallylongpackageandmodulenametotestreprtruncation
.__file
__)
204 eq
= self
.assertEquals
205 touch(os
.path
.join(self
.subpkgname
, 'foo'+os
.extsep
+'py'), '''\
209 from areallylongpackageandmodulenametotestreprtruncation
.areallylongpackageandmodulenametotestreprtruncation
import foo
211 "<class 'areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation.foo.foo'>")
213 def test_object(self
):
214 # XXX Test the repr of a type with a really long tp_name but with no
215 # tp_repr. WIBNI we had ::Inline? :)
218 def test_class(self
):
219 touch(os
.path
.join(self
.subpkgname
, 'bar'+os
.extsep
+'py'), '''\
223 from areallylongpackageandmodulenametotestreprtruncation
.areallylongpackageandmodulenametotestreprtruncation
import bar
224 self
.failUnless(repr(bar
.bar
).startswith(
225 "<class areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation.bar.bar at 0x"))
227 def test_instance(self
):
228 touch(os
.path
.join(self
.subpkgname
, 'baz'+os
.extsep
+'py'), '''\
232 from areallylongpackageandmodulenametotestreprtruncation
.areallylongpackageandmodulenametotestreprtruncation
import baz
234 self
.failUnless(repr(ibaz
).startswith(
235 "<areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation.baz.baz instance at 0x"))
237 def test_method(self
):
238 eq
= self
.assertEquals
239 touch(os
.path
.join(self
.subpkgname
, 'qux'+os
.extsep
+'py'), '''\
240 class aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:
241 def amethod(self): pass
243 from areallylongpackageandmodulenametotestreprtruncation
.areallylongpackageandmodulenametotestreprtruncation
import qux
244 # Unbound methods first
245 eq(repr(qux
.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
.amethod
),
246 '<unbound method aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.amethod>')
248 iqux
= qux
.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
249 self
.failUnless(repr(iqux
.amethod
).startswith(
250 '<bound method aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.amethod of <areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation.qux.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa instance at 0x'))
252 def test_builtin_function(self
):
253 # XXX test built-in functions and methods with really long names
257 def __init__(self
, s
):
260 return "ClassWithLongRepr(%r)" % self
.s
263 class ClassWithFailingRepr
:
265 raise Exception("This should be caught by Repr.repr_instance")
269 run_unittest(ReprTests
)
271 run_unittest(LongReprTest
)
274 if __name__
== "__main__":