test_repr.py revision ab541bb98e4b0deebc7baaaf6e9e231cd499b77c
18e6669ad05fa58226f36379857d8789319c6c496Fred Drake""" 28e6669ad05fa58226f36379857d8789319c6c496Fred Drake Test cases for the repr module 38e6669ad05fa58226f36379857d8789319c6c496Fred Drake Nick Mathewson 48e6669ad05fa58226f36379857d8789319c6c496Fred Drake""" 58e6669ad05fa58226f36379857d8789319c6c496Fred Drake 60bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsawimport sys 70bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsawimport os 88e6669ad05fa58226f36379857d8789319c6c496Fred Drakeimport unittest 90bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 108e6669ad05fa58226f36379857d8789319c6c496Fred Drakefrom test.test_support import run_unittest 11ab9ba27dc066adc6423ea137b9481cf524d10ffdTim Petersfrom repr import repr as r # Don't shadow builtin repr 128e6669ad05fa58226f36379857d8789319c6c496Fred Drake 138e6669ad05fa58226f36379857d8789319c6c496Fred Drake 148e6669ad05fa58226f36379857d8789319c6c496Fred Drakedef nestedTuple(nesting): 158e6669ad05fa58226f36379857d8789319c6c496Fred Drake t = () 168e6669ad05fa58226f36379857d8789319c6c496Fred Drake for i in range(nesting): 178e6669ad05fa58226f36379857d8789319c6c496Fred Drake t = (t,) 188e6669ad05fa58226f36379857d8789319c6c496Fred Drake return t 198e6669ad05fa58226f36379857d8789319c6c496Fred Drake 208e6669ad05fa58226f36379857d8789319c6c496Fred Drakeclass ReprTests(unittest.TestCase): 218e6669ad05fa58226f36379857d8789319c6c496Fred Drake 228e6669ad05fa58226f36379857d8789319c6c496Fred Drake def test_string(self): 238e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq = self.assertEquals 248e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r("abc"), "'abc'") 258e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r("abcdefghijklmnop"),"'abcdefghijklmnop'") 268e6669ad05fa58226f36379857d8789319c6c496Fred Drake 278e6669ad05fa58226f36379857d8789319c6c496Fred Drake s = "a"*30+"b"*30 288e6669ad05fa58226f36379857d8789319c6c496Fred Drake expected = repr(s)[:13] + "..." + repr(s)[-14:] 298e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(s), expected) 30ab9ba27dc066adc6423ea137b9481cf524d10ffdTim Peters 318e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r("\"'"), repr("\"'")) 328e6669ad05fa58226f36379857d8789319c6c496Fred Drake s = "\""*30+"'"*100 338e6669ad05fa58226f36379857d8789319c6c496Fred Drake expected = repr(s)[:13] + "..." + repr(s)[-14:] 348e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(s), expected) 358e6669ad05fa58226f36379857d8789319c6c496Fred Drake 368e6669ad05fa58226f36379857d8789319c6c496Fred Drake def test_container(self): 378e6669ad05fa58226f36379857d8789319c6c496Fred Drake from array import array 388e6669ad05fa58226f36379857d8789319c6c496Fred Drake from collections import deque 398e6669ad05fa58226f36379857d8789319c6c496Fred Drake 408e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq = self.assertEquals 418e6669ad05fa58226f36379857d8789319c6c496Fred Drake # Tuples give up after 6 elements 428e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(()), "()") 438e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r((1,)), "(1,)") 448e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r((1, 2, 3)), "(1, 2, 3)") 458e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r((1, 2, 3, 4, 5, 6)), "(1, 2, 3, 4, 5, 6)") 468e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r((1, 2, 3, 4, 5, 6, 7)), "(1, 2, 3, 4, 5, 6, ...)") 478e6669ad05fa58226f36379857d8789319c6c496Fred Drake 488e6669ad05fa58226f36379857d8789319c6c496Fred Drake # Lists give up after 6 as well 498e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r([]), "[]") 508e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r([1]), "[1]") 518e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r([1, 2, 3]), "[1, 2, 3]") 528e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r([1, 2, 3, 4, 5, 6]), "[1, 2, 3, 4, 5, 6]") 538e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r([1, 2, 3, 4, 5, 6, 7]), "[1, 2, 3, 4, 5, 6, ...]") 548e6669ad05fa58226f36379857d8789319c6c496Fred Drake 558e6669ad05fa58226f36379857d8789319c6c496Fred Drake # Sets give up after 6 as well 568e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(set([])), "set([])") 578e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(set([1])), "set([1])") 588e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(set([1, 2, 3])), "set([1, 2, 3])") 598e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(set([1, 2, 3, 4, 5, 6])), "set([1, 2, 3, 4, 5, 6])") 608e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(set([1, 2, 3, 4, 5, 6, 7])), "set([1, 2, 3, 4, 5, 6, ...])") 618e6669ad05fa58226f36379857d8789319c6c496Fred Drake 628e6669ad05fa58226f36379857d8789319c6c496Fred Drake # Frozensets give up after 6 as well 638e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(frozenset([])), "frozenset([])") 648e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(frozenset([1])), "frozenset([1])") 658e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(frozenset([1, 2, 3])), "frozenset([1, 2, 3])") 668e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(frozenset([1, 2, 3, 4, 5, 6])), "frozenset([1, 2, 3, 4, 5, 6])") 678e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(frozenset([1, 2, 3, 4, 5, 6, 7])), "frozenset([1, 2, 3, 4, 5, 6, ...])") 688e6669ad05fa58226f36379857d8789319c6c496Fred Drake 698e6669ad05fa58226f36379857d8789319c6c496Fred Drake # collections.deque after 6 708e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(deque([1, 2, 3, 4, 5, 6, 7])), "deque([1, 2, 3, 4, 5, 6, ...])") 718e6669ad05fa58226f36379857d8789319c6c496Fred Drake 728e6669ad05fa58226f36379857d8789319c6c496Fred Drake # Dictionaries give up after 4. 73ab9ba27dc066adc6423ea137b9481cf524d10ffdTim Peters eq(r({}), "{}") 748e6669ad05fa58226f36379857d8789319c6c496Fred Drake d = {'alice': 1, 'bob': 2, 'charles': 3, 'dave': 4} 758e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(d), "{'alice': 1, 'bob': 2, 'charles': 3, 'dave': 4}") 768e6669ad05fa58226f36379857d8789319c6c496Fred Drake d['arthur'] = 1 778e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(d), "{'alice': 1, 'arthur': 1, 'bob': 2, 'charles': 3, ...}") 788e6669ad05fa58226f36379857d8789319c6c496Fred Drake 798e6669ad05fa58226f36379857d8789319c6c496Fred Drake # array.array after 5. 808e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(array('i')), "array('i', [])") 81cf856f9f28e4a2806fa835fb4e0e54582c0a2eddGuido van Rossum eq(r(array('i', [1])), "array('i', [1])") 82cf856f9f28e4a2806fa835fb4e0e54582c0a2eddGuido van Rossum eq(r(array('i', [1, 2])), "array('i', [1, 2])") 83cf856f9f28e4a2806fa835fb4e0e54582c0a2eddGuido van Rossum eq(r(array('i', [1, 2, 3])), "array('i', [1, 2, 3])") 84cf856f9f28e4a2806fa835fb4e0e54582c0a2eddGuido van Rossum eq(r(array('i', [1, 2, 3, 4])), "array('i', [1, 2, 3, 4])") 85cf856f9f28e4a2806fa835fb4e0e54582c0a2eddGuido van Rossum eq(r(array('i', [1, 2, 3, 4, 5])), "array('i', [1, 2, 3, 4, 5])") 860bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(r(array('i', [1, 2, 3, 4, 5, 6])), 870bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw "array('i', [1, 2, 3, 4, 5, ...])") 880bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 890bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_numbers(self): 900bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq = self.assertEquals 910bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(r(123), repr(123)) 920bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(r(123L), repr(123L)) 930bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(r(1.0/3), repr(1.0/3)) 940bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 950bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw n = 10L**100 96dd32138e7dc66633b8804cd8e59ada5f9f5472c1Jeremy Hylton expected = repr(n)[:18] + "..." + repr(n)[-19:] 970bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(r(n), expected) 980bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 990bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_instance(self): 1000bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq = self.assertEquals 1010bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw i1 = ClassWithRepr("a") 1020bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(r(i1), repr(i1)) 1030bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1040bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw i2 = ClassWithRepr("x"*1000) 1050bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw expected = repr(i2)[:13] + "..." + repr(i2)[-14:] 1060bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(r(i2), expected) 1070bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1080bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw i3 = ClassWithFailingRepr() 1090bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(r(i3), ("<ClassWithFailingRepr instance at %x>"%id(i3))) 1100bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1110bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw s = r(ClassWithFailingRepr) 1120bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw self.failUnless(s.startswith("<class ")) 1130bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw self.failUnless(s.endswith(">")) 1140bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw self.failUnless(s.find("...") == 8) 1150bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1160bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_file(self): 1170bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw fp = open(unittest.__file__) 1188e6669ad05fa58226f36379857d8789319c6c496Fred Drake self.failUnless(repr(fp).startswith( 1198e6669ad05fa58226f36379857d8789319c6c496Fred Drake "<open file '%s', mode 'r' at 0x" % unittest.__file__)) 1208e6669ad05fa58226f36379857d8789319c6c496Fred Drake fp.close() 1218e6669ad05fa58226f36379857d8789319c6c496Fred Drake self.failUnless(repr(fp).startswith( 1228e6669ad05fa58226f36379857d8789319c6c496Fred Drake "<closed file '%s', mode 'r' at 0x" % unittest.__file__)) 1238e6669ad05fa58226f36379857d8789319c6c496Fred Drake 1248e6669ad05fa58226f36379857d8789319c6c496Fred Drake def test_lambda(self): 1258e6669ad05fa58226f36379857d8789319c6c496Fred Drake self.failUnless(repr(lambda x: x).startswith( 1268e6669ad05fa58226f36379857d8789319c6c496Fred Drake "<function <lambda")) 1278e6669ad05fa58226f36379857d8789319c6c496Fred Drake # XXX anonymous functions? see func_repr 1288e6669ad05fa58226f36379857d8789319c6c496Fred Drake 1298e6669ad05fa58226f36379857d8789319c6c496Fred Drake def test_builtin_function(self): 1308e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq = self.assertEquals 1318e6669ad05fa58226f36379857d8789319c6c496Fred Drake # Functions 1328e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(repr(hash), '<built-in function hash>') 1338e6669ad05fa58226f36379857d8789319c6c496Fred Drake # Methods 1348e6669ad05fa58226f36379857d8789319c6c496Fred Drake self.failUnless(repr(''.split).startswith( 1350bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw '<built-in method split of str object at 0x')) 1360bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1370bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_xrange(self): 1380bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw import warnings 1390bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq = self.assertEquals 1400bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(repr(xrange(1)), 'xrange(1)') 1410bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(repr(xrange(1, 2)), 'xrange(1, 2)') 1420bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(repr(xrange(1, 2, 3)), 'xrange(1, 4, 3)') 1430bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1440bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_nesting(self): 1450bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq = self.assertEquals 1460bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # everything is meant to give up after 6 levels. 1470bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(r([[[[[[[]]]]]]]), "[[[[[[[]]]]]]]") 1480bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(r([[[[[[[[]]]]]]]]), "[[[[[[[...]]]]]]]") 1490bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1500bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(r(nestedTuple(6)), "(((((((),),),),),),)") 1510bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(r(nestedTuple(7)), "(((((((...),),),),),),)") 1520bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1530bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(r({ nestedTuple(5) : nestedTuple(5) }), 1540bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw "{((((((),),),),),): ((((((),),),),),)}") 1550bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(r({ nestedTuple(6) : nestedTuple(6) }), 1560bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw "{((((((...),),),),),): ((((((...),),),),),)}") 1570bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1580bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(r([[[[[[{}]]]]]]), "[[[[[[{}]]]]]]") 1590bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(r([[[[[[[{}]]]]]]]), "[[[[[[[...]]]]]]]") 1600bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1610bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_buffer(self): 1620bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # XXX doesn't test buffers with no b_base or read-write buffers (see 1630bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # bufferobject.c). The test is fairly incomplete too. Sigh. 1640bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw x = buffer('foo') 1650bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw self.failUnless(repr(x).startswith('<read-only buffer for 0x')) 1660bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1670bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_cell(self): 1680bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # XXX Hmm? How to get at a cell object? 1690bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw pass 1700bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1710bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_descriptors(self): 1720bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq = self.assertEquals 1730bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # method descriptors 1740bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(repr(dict.items), "<method 'items' of 'dict' objects>") 1750bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # XXX member descriptors 1760bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # XXX attribute descriptors 1770bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # XXX slot descriptors 1780bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # static and class methods 1790bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw class C: 1800bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def foo(cls): pass 1810bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw x = staticmethod(C.foo) 1820bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw self.failUnless(repr(x).startswith('<staticmethod object at 0x')) 1830bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw x = classmethod(C.foo) 1840bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw self.failUnless(repr(x).startswith('<classmethod object at 0x')) 1850bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1860bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsawdef touch(path, text=''): 1870bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw fp = open(path, 'w') 1880bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw fp.write(text) 1890bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw fp.close() 1900bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1910bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsawdef zap(actions, dirname, names): 1920bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw for name in names: 1930bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw actions.append(os.path.join(dirname, name)) 1940bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1950bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsawclass LongReprTest(unittest.TestCase): 1960bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def setUp(self): 1970bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw longname = 'areallylongpackageandmodulenametotestreprtruncation' 1980bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw self.pkgname = os.path.join(longname) 1990bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw self.subpkgname = os.path.join(longname, longname) 2000bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # Make the package and subpackage 2010bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw os.mkdir(self.pkgname) 2020bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw touch(os.path.join(self.pkgname, '__init__'+os.extsep+'py')) 2030bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw os.mkdir(self.subpkgname) 2040bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw touch(os.path.join(self.subpkgname, '__init__'+os.extsep+'py')) 2050bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # Remember where we are 2060bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw self.here = os.getcwd() 2070bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw sys.path.insert(0, self.here) 2080bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 2090bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def tearDown(self): 2100bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw actions = [] 2110bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw os.path.walk(self.pkgname, zap, actions) 2120bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw actions.append(self.pkgname) 2130bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw actions.sort() 2140bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw actions.reverse() 2150bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw for p in actions: 2160bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw if os.path.isdir(p): 2170bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw os.rmdir(p) 2180bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw else: 2190bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw os.remove(p) 2200bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw del sys.path[0] 2210bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 2220bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_module(self): 2230bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq = self.assertEquals 2240bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw touch(os.path.join(self.subpkgname, self.pkgname + os.extsep + 'py')) 2250bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw from areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation import areallylongpackageandmodulenametotestreprtruncation 2260bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(repr(areallylongpackageandmodulenametotestreprtruncation), 2270bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw "<module '%s' from '%s'>" % (areallylongpackageandmodulenametotestreprtruncation.__name__, areallylongpackageandmodulenametotestreprtruncation.__file__)) 2280bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(repr(sys), "<module 'sys' (built-in)>") 2290bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 2300bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_type(self): 2310bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq = self.assertEquals 2320bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw touch(os.path.join(self.subpkgname, 'foo'+os.extsep+'py'), '''\ 2330bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsawclass foo(object): 2340bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw pass 2350bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw''') 2360bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw from areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation import foo 2370bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(repr(foo.foo), 2380bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw "<class '%s.foo'>" % foo.__name__) 2390bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 2400bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_object(self): 2410bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # XXX Test the repr of a type with a really long tp_name but with no 2420bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # tp_repr. WIBNI we had ::Inline? :) 2430bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw pass 2440bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 2450bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_class(self): 2460bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw touch(os.path.join(self.subpkgname, 'bar'+os.extsep+'py'), '''\ 2470bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsawclass bar: 2480bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw pass 2490bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw''') 2500bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw from areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation import bar 2510bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # Module name may be prefixed with "test.", depending on how run. 2520bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw self.failUnless(repr(bar.bar).startswith( 2530bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw "<class %s.bar at 0x" % bar.__name__)) 2540bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 2558e6669ad05fa58226f36379857d8789319c6c496Fred Drake def test_instance(self): 2568e6669ad05fa58226f36379857d8789319c6c496Fred Drake touch(os.path.join(self.subpkgname, 'baz'+os.extsep+'py'), '''\ 2578e6669ad05fa58226f36379857d8789319c6c496Fred Drakeclass baz: 2588e6669ad05fa58226f36379857d8789319c6c496Fred Drake pass 2598e6669ad05fa58226f36379857d8789319c6c496Fred Drake''') 2608e6669ad05fa58226f36379857d8789319c6c496Fred Drake from areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation import baz 2618e6669ad05fa58226f36379857d8789319c6c496Fred Drake ibaz = baz.baz() 2628e6669ad05fa58226f36379857d8789319c6c496Fred Drake self.failUnless(repr(ibaz).startswith( 2638e6669ad05fa58226f36379857d8789319c6c496Fred Drake "<%s.baz instance at 0x" % baz.__name__)) 2648e6669ad05fa58226f36379857d8789319c6c496Fred Drake 2658e6669ad05fa58226f36379857d8789319c6c496Fred Drake def test_method(self): 2668e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq = self.assertEquals 2678e6669ad05fa58226f36379857d8789319c6c496Fred Drake touch(os.path.join(self.subpkgname, 'qux'+os.extsep+'py'), '''\ 2682e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drakeclass aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: 2692e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake def amethod(self): pass 2702e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake''') 2712e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake from areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation import qux 2722e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake # Unbound methods first 2732e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake eq(repr(qux.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.amethod), 2742e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake '<unbound method aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.amethod>') 2752e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake # Bound method next 276 iqux = qux.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa() 277 self.failUnless(repr(iqux.amethod).startswith( 278 '<bound method aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.amethod of <%s.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa instance at 0x' \ 279 % (qux.__name__,) )) 280 281 def test_builtin_function(self): 282 # XXX test built-in functions and methods with really long names 283 pass 284 285class ClassWithRepr: 286 def __init__(self, s): 287 self.s = s 288 def __repr__(self): 289 return "ClassWithLongRepr(%r)" % self.s 290 291 292class ClassWithFailingRepr: 293 def __repr__(self): 294 raise Exception("This should be caught by Repr.repr_instance") 295 296 297def test_main(): 298 run_unittest(ReprTests) 299 if os.name != 'mac': 300 run_unittest(LongReprTest) 301 302 303if __name__ == "__main__": 304 test_main() 305