2 Test cases for the repr module
10 from test
.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 from array
import array
39 eq
= self
.assertEquals
40 # Tuples give up after 6 elements
43 eq(r((1, 2, 3)), "(1, 2, 3)")
44 eq(r((1, 2, 3, 4, 5, 6)), "(1, 2, 3, 4, 5, 6)")
45 eq(r((1, 2, 3, 4, 5, 6, 7)), "(1, 2, 3, 4, 5, 6, ...)")
47 # Lists give up after 6 as well
50 eq(r([1, 2, 3]), "[1, 2, 3]")
51 eq(r([1, 2, 3, 4, 5, 6]), "[1, 2, 3, 4, 5, 6]")
52 eq(r([1, 2, 3, 4, 5, 6, 7]), "[1, 2, 3, 4, 5, 6, ...]")
54 # Dictionaries give up after 4.
56 d
= {'alice': 1, 'bob': 2, 'charles': 3, 'dave': 4}
57 eq(r(d
), "{'alice': 1, 'bob': 2, 'charles': 3, 'dave': 4}")
59 eq(r(d
), "{'alice': 1, 'arthur': 1, 'bob': 2, 'charles': 3, ...}")
61 # array.array after 5.
62 eq(r(array('i')), "array('i', [])")
63 eq(r(array('i', [1])), "array('i', [1])")
64 eq(r(array('i', [1, 2])), "array('i', [1, 2])")
65 eq(r(array('i', [1, 2, 3])), "array('i', [1, 2, 3])")
66 eq(r(array('i', [1, 2, 3, 4])), "array('i', [1, 2, 3, 4])")
67 eq(r(array('i', [1, 2, 3, 4, 5])), "array('i', [1, 2, 3, 4, 5])")
68 eq(r(array('i', [1, 2, 3, 4, 5, 6])),
69 "array('i', [1, 2, 3, 4, 5, ...])")
71 def test_numbers(self
):
72 eq
= self
.assertEquals
74 eq(r(123L), repr(123L))
75 eq(r(1.0/3), repr(1.0/3))
78 expected
= `n`
[:18] + "..." + `n`
[-19:]
81 def test_instance(self
):
82 eq
= self
.assertEquals
83 i1
= ClassWithRepr("a")
86 i2
= ClassWithRepr("x"*1000)
87 expected
= `i2`
[:13] + "..." + `i2`
[-14:]
90 i3
= ClassWithFailingRepr()
91 # On some systems (RH10) id() can be a negative number.
94 eq(r(i3
), ("<ClassWithFailingRepr instance at %x>"%(id(i3
)&MAX
)))
96 s
= r(ClassWithFailingRepr
)
97 self
.failUnless(s
.startswith("<class "))
98 self
.failUnless(s
.endswith(">"))
99 self
.failUnless(s
.find("...") == 8)
102 fp
= open(unittest
.__file
__)
103 self
.failUnless(repr(fp
).startswith(
104 "<open file '%s', mode 'r' at 0x" % unittest
.__file
__))
106 self
.failUnless(repr(fp
).startswith(
107 "<closed file '%s', mode 'r' at 0x" % unittest
.__file
__))
109 def test_lambda(self
):
110 self
.failUnless(repr(lambda x
: x
).startswith(
111 "<function <lambda"))
112 # XXX anonymous functions? see func_repr
114 def test_builtin_function(self
):
115 eq
= self
.assertEquals
117 eq(repr(hash), '<built-in function hash>')
119 self
.failUnless(repr(''.split
).startswith(
120 '<built-in method split of str object at 0x'))
122 def test_xrange(self
):
124 eq
= self
.assertEquals
125 eq(repr(xrange(1)), 'xrange(1)')
126 eq(repr(xrange(1, 2)), 'xrange(1, 2)')
127 eq(repr(xrange(1, 2, 3)), 'xrange(1, 4, 3)')
129 def test_nesting(self
):
130 eq
= self
.assertEquals
131 # everything is meant to give up after 6 levels.
132 eq(r([[[[[[[]]]]]]]), "[[[[[[[]]]]]]]")
133 eq(r([[[[[[[[]]]]]]]]), "[[[[[[[...]]]]]]]")
135 eq(r(nestedTuple(6)), "(((((((),),),),),),)")
136 eq(r(nestedTuple(7)), "(((((((...),),),),),),)")
138 eq(r({ nestedTuple(5) : nestedTuple(5) }),
139 "{((((((),),),),),): ((((((),),),),),)}")
140 eq(r({ nestedTuple(6) : nestedTuple(6) }),
141 "{((((((...),),),),),): ((((((...),),),),),)}")
143 eq(r([[[[[[{}]]]]]]), "[[[[[[{}]]]]]]")
144 eq(r([[[[[[[{}]]]]]]]), "[[[[[[[...]]]]]]]")
146 def test_buffer(self
):
147 # XXX doesn't test buffers with no b_base or read-write buffers (see
148 # bufferobject.c). The test is fairly incomplete too. Sigh.
150 self
.failUnless(repr(x
).startswith('<read-only buffer for 0x'))
153 # XXX Hmm? How to get at a cell object?
156 def test_descriptors(self
):
157 eq
= self
.assertEquals
159 eq(repr(dict.items
), "<method 'items' of 'dict' objects>")
160 # XXX member descriptors
161 # XXX attribute descriptors
162 # XXX slot descriptors
163 # static and class methods
166 x
= staticmethod(C
.foo
)
167 self
.failUnless(repr(x
).startswith('<staticmethod object at 0x'))
168 x
= classmethod(C
.foo
)
169 self
.failUnless(repr(x
).startswith('<classmethod object at 0x'))
171 def touch(path
, text
=''):
176 def zap(actions
, dirname
, names
):
178 actions
.append(os
.path
.join(dirname
, name
))
180 class LongReprTest(unittest
.TestCase
):
182 longname
= 'areallylongpackageandmodulenametotestreprtruncation'
183 self
.pkgname
= os
.path
.join(longname
)
184 self
.subpkgname
= os
.path
.join(longname
, longname
)
185 # Make the package and subpackage
186 os
.mkdir(self
.pkgname
)
187 touch(os
.path
.join(self
.pkgname
, '__init__'+os
.extsep
+'py'))
188 os
.mkdir(self
.subpkgname
)
189 touch(os
.path
.join(self
.subpkgname
, '__init__'+os
.extsep
+'py'))
190 # Remember where we are
191 self
.here
= os
.getcwd()
192 sys
.path
.insert(0, self
.here
)
196 os
.path
.walk(self
.pkgname
, zap
, actions
)
197 actions
.append(self
.pkgname
)
207 def test_module(self
):
208 eq
= self
.assertEquals
209 touch(os
.path
.join(self
.subpkgname
, self
.pkgname
+ os
.extsep
+ 'py'))
210 from areallylongpackageandmodulenametotestreprtruncation
.areallylongpackageandmodulenametotestreprtruncation
import areallylongpackageandmodulenametotestreprtruncation
211 eq(repr(areallylongpackageandmodulenametotestreprtruncation
),
212 "<module '%s' from '%s'>" % (areallylongpackageandmodulenametotestreprtruncation
.__name
__, areallylongpackageandmodulenametotestreprtruncation
.__file
__))
213 eq(repr(sys
), "<module 'sys' (built-in)>")
216 eq
= self
.assertEquals
217 touch(os
.path
.join(self
.subpkgname
, 'foo'+os
.extsep
+'py'), '''\
221 from areallylongpackageandmodulenametotestreprtruncation
.areallylongpackageandmodulenametotestreprtruncation
import foo
223 "<class '%s.foo'>" % foo
.__name
__)
225 def test_object(self
):
226 # XXX Test the repr of a type with a really long tp_name but with no
227 # tp_repr. WIBNI we had ::Inline? :)
230 def test_class(self
):
231 touch(os
.path
.join(self
.subpkgname
, 'bar'+os
.extsep
+'py'), '''\
235 from areallylongpackageandmodulenametotestreprtruncation
.areallylongpackageandmodulenametotestreprtruncation
import bar
236 # Module name may be prefixed with "test.", depending on how run.
237 self
.failUnless(repr(bar
.bar
).startswith(
238 "<class %s.bar at 0x" % bar
.__name
__))
240 def test_instance(self
):
241 touch(os
.path
.join(self
.subpkgname
, 'baz'+os
.extsep
+'py'), '''\
245 from areallylongpackageandmodulenametotestreprtruncation
.areallylongpackageandmodulenametotestreprtruncation
import baz
247 self
.failUnless(repr(ibaz
).startswith(
248 "<%s.baz instance at 0x" % baz
.__name
__))
250 def test_method(self
):
251 eq
= self
.assertEquals
252 touch(os
.path
.join(self
.subpkgname
, 'qux'+os
.extsep
+'py'), '''\
253 class aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:
254 def amethod(self): pass
256 from areallylongpackageandmodulenametotestreprtruncation
.areallylongpackageandmodulenametotestreprtruncation
import qux
257 # Unbound methods first
258 eq(repr(qux
.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
.amethod
),
259 '<unbound method aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.amethod>')
261 iqux
= qux
.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
262 self
.failUnless(repr(iqux
.amethod
).startswith(
263 '<bound method aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.amethod of <%s.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa instance at 0x' \
266 def test_builtin_function(self
):
267 # XXX test built-in functions and methods with really long names
271 def __init__(self
, s
):
274 return "ClassWithLongRepr(%r)" % self
.s
277 class ClassWithFailingRepr
:
279 raise Exception("This should be caught by Repr.repr_instance")
283 run_unittest(ReprTests
)
285 run_unittest(LongReprTest
)
288 if __name__
== "__main__":