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 eq(r(i3
), ("<ClassWithFailingRepr instance at %x>"%id(i3
)))
93 s
= r(ClassWithFailingRepr
)
94 self
.failUnless(s
.startswith("<class "))
95 self
.failUnless(s
.endswith(">"))
96 self
.failUnless(s
.find("...") == 8)
99 fp
= open(unittest
.__file
__)
100 self
.failUnless(repr(fp
).startswith(
101 "<open file '%s', mode 'r' at 0x" % unittest
.__file
__))
103 self
.failUnless(repr(fp
).startswith(
104 "<closed file '%s', mode 'r' at 0x" % unittest
.__file
__))
106 def test_lambda(self
):
107 self
.failUnless(repr(lambda x
: x
).startswith(
108 "<function <lambda"))
109 # XXX anonymous functions? see func_repr
111 def test_builtin_function(self
):
112 eq
= self
.assertEquals
114 eq(repr(hash), '<built-in function hash>')
116 self
.failUnless(repr(''.split
).startswith(
117 '<built-in method split of str object at 0x'))
119 def test_xrange(self
):
121 eq
= self
.assertEquals
122 eq(repr(xrange(1)), 'xrange(1)')
123 eq(repr(xrange(1, 2)), 'xrange(1, 2)')
124 eq(repr(xrange(1, 2, 3)), 'xrange(1, 4, 3)')
126 def test_nesting(self
):
127 eq
= self
.assertEquals
128 # everything is meant to give up after 6 levels.
129 eq(r([[[[[[[]]]]]]]), "[[[[[[[]]]]]]]")
130 eq(r([[[[[[[[]]]]]]]]), "[[[[[[[...]]]]]]]")
132 eq(r(nestedTuple(6)), "(((((((),),),),),),)")
133 eq(r(nestedTuple(7)), "(((((((...),),),),),),)")
135 eq(r({ nestedTuple(5) : nestedTuple(5) }),
136 "{((((((),),),),),): ((((((),),),),),)}")
137 eq(r({ nestedTuple(6) : nestedTuple(6) }),
138 "{((((((...),),),),),): ((((((...),),),),),)}")
140 eq(r([[[[[[{}]]]]]]), "[[[[[[{}]]]]]]")
141 eq(r([[[[[[[{}]]]]]]]), "[[[[[[[...]]]]]]]")
143 def test_buffer(self
):
144 # XXX doesn't test buffers with no b_base or read-write buffers (see
145 # bufferobject.c). The test is fairly incomplete too. Sigh.
147 self
.failUnless(repr(x
).startswith('<read-only buffer for 0x'))
150 # XXX Hmm? How to get at a cell object?
153 def test_descriptors(self
):
154 eq
= self
.assertEquals
156 eq(repr(dict.items
), "<method 'items' of 'dict' objects>")
157 # XXX member descriptors
158 # XXX attribute descriptors
159 # XXX slot descriptors
160 # static and class methods
163 x
= staticmethod(C
.foo
)
164 self
.failUnless(repr(x
).startswith('<staticmethod object at 0x'))
165 x
= classmethod(C
.foo
)
166 self
.failUnless(repr(x
).startswith('<classmethod object at 0x'))
168 def touch(path
, text
=''):
173 def zap(actions
, dirname
, names
):
175 actions
.append(os
.path
.join(dirname
, name
))
177 class LongReprTest(unittest
.TestCase
):
179 longname
= 'areallylongpackageandmodulenametotestreprtruncation'
180 self
.pkgname
= os
.path
.join(longname
)
181 self
.subpkgname
= os
.path
.join(longname
, longname
)
182 # Make the package and subpackage
183 os
.mkdir(self
.pkgname
)
184 touch(os
.path
.join(self
.pkgname
, '__init__'+os
.extsep
+'py'))
185 os
.mkdir(self
.subpkgname
)
186 touch(os
.path
.join(self
.subpkgname
, '__init__'+os
.extsep
+'py'))
187 # Remember where we are
188 self
.here
= os
.getcwd()
189 sys
.path
.insert(0, self
.here
)
193 os
.path
.walk(self
.pkgname
, zap
, actions
)
194 actions
.append(self
.pkgname
)
204 def test_module(self
):
205 eq
= self
.assertEquals
206 touch(os
.path
.join(self
.subpkgname
, self
.pkgname
+ os
.extsep
+ 'py'))
207 from areallylongpackageandmodulenametotestreprtruncation
.areallylongpackageandmodulenametotestreprtruncation
import areallylongpackageandmodulenametotestreprtruncation
208 eq(repr(areallylongpackageandmodulenametotestreprtruncation
),
209 "<module '%s' from '%s'>" % (areallylongpackageandmodulenametotestreprtruncation
.__name
__, areallylongpackageandmodulenametotestreprtruncation
.__file
__))
210 eq(repr(sys
), "<module 'sys' (built-in)>")
213 eq
= self
.assertEquals
214 touch(os
.path
.join(self
.subpkgname
, 'foo'+os
.extsep
+'py'), '''\
218 from areallylongpackageandmodulenametotestreprtruncation
.areallylongpackageandmodulenametotestreprtruncation
import foo
220 "<class '%s.foo'>" % foo
.__name
__)
222 def test_object(self
):
223 # XXX Test the repr of a type with a really long tp_name but with no
224 # tp_repr. WIBNI we had ::Inline? :)
227 def test_class(self
):
228 touch(os
.path
.join(self
.subpkgname
, 'bar'+os
.extsep
+'py'), '''\
232 from areallylongpackageandmodulenametotestreprtruncation
.areallylongpackageandmodulenametotestreprtruncation
import bar
233 # Module name may be prefixed with "test.", depending on how run.
234 self
.failUnless(repr(bar
.bar
).startswith(
235 "<class %s.bar at 0x" % bar
.__name
__))
237 def test_instance(self
):
238 touch(os
.path
.join(self
.subpkgname
, 'baz'+os
.extsep
+'py'), '''\
242 from areallylongpackageandmodulenametotestreprtruncation
.areallylongpackageandmodulenametotestreprtruncation
import baz
244 self
.failUnless(repr(ibaz
).startswith(
245 "<%s.baz instance at 0x" % baz
.__name
__))
247 def test_method(self
):
248 eq
= self
.assertEquals
249 touch(os
.path
.join(self
.subpkgname
, 'qux'+os
.extsep
+'py'), '''\
250 class aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:
251 def amethod(self): pass
253 from areallylongpackageandmodulenametotestreprtruncation
.areallylongpackageandmodulenametotestreprtruncation
import qux
254 # Unbound methods first
255 eq(repr(qux
.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
.amethod
),
256 '<unbound method aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.amethod>')
258 iqux
= qux
.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
259 self
.failUnless(repr(iqux
.amethod
).startswith(
260 '<bound method aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.amethod of <%s.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa instance at 0x' \
263 def test_builtin_function(self
):
264 # XXX test built-in functions and methods with really long names
268 def __init__(self
, s
):
271 return "ClassWithLongRepr(%r)" % self
.s
274 class ClassWithFailingRepr
:
276 raise Exception("This should be caught by Repr.repr_instance")
280 run_unittest(ReprTests
)
282 run_unittest(LongReprTest
)
285 if __name__
== "__main__":