summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_repr.py
diff options
context:
space:
mode:
authorFred Drake <fdrake@acm.org>2001-07-19 22:27:56 (GMT)
committerFred Drake <fdrake@acm.org>2001-07-19 22:27:56 (GMT)
commit8e6669ad05fa58226f36379857d8789319c6c496 (patch)
tree47ffaa2ea972508590a974ef0489d5b975504470 /Lib/test/test_repr.py
parent1bc8fab0e770071c8476a92fa0da5c1daa3ad4a1 (diff)
downloadcpython-8e6669ad05fa58226f36379857d8789319c6c496.zip
cpython-8e6669ad05fa58226f36379857d8789319c6c496.tar.gz
cpython-8e6669ad05fa58226f36379857d8789319c6c496.tar.bz2
Test for the repr module, contributed by Nick Mathewson.
This closes SF patch #440826.
Diffstat (limited to 'Lib/test/test_repr.py')
-rw-r--r--Lib/test/test_repr.py108
1 files changed, 108 insertions, 0 deletions
diff --git a/Lib/test/test_repr.py b/Lib/test/test_repr.py
new file mode 100644
index 0000000..9034711
--- /dev/null
+++ b/Lib/test/test_repr.py
@@ -0,0 +1,108 @@
+"""
+ Test cases for the repr module
+ Nick Mathewson
+"""
+
+import unittest
+from test_support import run_unittest
+from repr import repr as r # Don't shadow builtin repr
+
+
+def nestedTuple(nesting):
+ t = ()
+ for i in range(nesting):
+ t = (t,)
+ return t
+
+class ReprTests(unittest.TestCase):
+
+ def test_string(self):
+ eq = self.assertEquals
+ eq(r("abc"), "'abc'")
+ eq(r("abcdefghijklmnop"),"'abcdefghijklmnop'")
+
+ s = "a"*30+"b"*30
+ expected = `s`[:13] + "..." + `s`[-14:]
+ eq(r(s), expected)
+
+ eq(r("\"'"), repr("\"'"))
+ s = "\""*30+"'"*100
+ expected = `s`[:13] + "..." + `s`[-14:]
+ eq(r(s), expected)
+
+ def test_container(self):
+ eq = self.assertEquals
+ # Tuples give up after 6 elements
+ eq(r(()), "()")
+ eq(r((1,)), "(1,)")
+ eq(r((1, 2, 3)), "(1, 2, 3)")
+ eq(r((1, 2, 3, 4, 5, 6)), "(1, 2, 3, 4, 5, 6)")
+ eq(r((1, 2, 3, 4, 5, 6, 7)), "(1, 2, 3, 4, 5, 6, ...)")
+
+ # Lists give up after 6 as well
+ eq(r([]), "[]")
+ eq(r([1]), "[1]")
+ eq(r([1, 2, 3]), "[1, 2, 3]")
+ eq(r([1, 2, 3, 4, 5, 6]), "[1, 2, 3, 4, 5, 6]")
+ eq(r([1, 2, 3, 4, 5, 6, 7]), "[1, 2, 3, 4, 5, 6, ...]")
+
+ # Dictionaries give up after 4.
+ eq(r({}), "{}")
+ d = {'alice': 1, 'bob': 2, 'charles': 3, 'dave': 4}
+ eq(r(d), "{'alice': 1, 'bob': 2, 'charles': 3, 'dave': 4}")
+ d['arthur'] = 1
+ eq(r(d), "{'alice': 1, 'arthur': 1, 'bob': 2, 'charles': 3, ...}")
+
+ def test_numbers(self):
+ eq = self.assertEquals
+ eq(r(123), repr(123))
+ eq(r(123L), repr(123L))
+ eq(r(1.0/3), repr(1.0/3))
+
+ n = 10L**100
+ expected = `n`[:18] + "..." + `n`[-19:]
+ eq(r(n), expected)
+
+ def test_instance(self):
+ eq = self.assertEquals
+ i1 = ClassWithRepr("a")
+ eq(r(i1), repr(i1))
+
+ i2 = ClassWithRepr("x"*1000)
+ expected = `i2`[:13] + "..." + `i2`[-14:]
+ eq(r(i2), expected)
+
+ i3 = ClassWithFailingRepr()
+ eq(r(i3), ("<ClassWithFailingRepr instance at %x>"%id(i3)))
+
+ def test_nesting(self):
+ eq = self.assertEquals
+ # everything is meant to give up after 6 levels.
+ eq(r([[[[[[[]]]]]]]), "[[[[[[[]]]]]]]")
+ eq(r([[[[[[[[]]]]]]]]), "[[[[[[[...]]]]]]]")
+
+ eq(r(nestedTuple(6)), "(((((((),),),),),),)")
+ eq(r(nestedTuple(7)), "(((((((...),),),),),),)")
+
+ eq(r({ nestedTuple(5) : nestedTuple(5) }),
+ "{((((((),),),),),): ((((((),),),),),)}")
+ eq(r({ nestedTuple(6) : nestedTuple(6) }),
+ "{((((((...),),),),),): ((((((...),),),),),)}")
+
+ eq(r([[[[[[{}]]]]]]), "[[[[[[{}]]]]]]")
+ eq(r([[[[[[[{}]]]]]]]), "[[[[[[[...]]]]]]]")
+
+
+class ClassWithRepr:
+ def __init__(self, s):
+ self.s = s
+ def __repr__(self):
+ return "ClassWithLongRepr(%r)" % self.s
+
+
+class ClassWithFailingRepr:
+ def __repr__(self):
+ raise Exception("This should be caught by Repr.repr_instance")
+
+
+run_unittest(ReprTests)