18e6669ad05fa58226f36379857d8789319c6c496Fred Drake""" 28e6669ad05fa58226f36379857d8789319c6c496Fred Drake Test cases for the repr module 38e6669ad05fa58226f36379857d8789319c6c496Fred Drake Nick Mathewson 48e6669ad05fa58226f36379857d8789319c6c496Fred Drake""" 58e6669ad05fa58226f36379857d8789319c6c496Fred Drake 60bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsawimport sys 70bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsawimport os 8008b861bf03f515b19ced29b1138a7c9fc910d82Neal Norwitzimport shutil 98e6669ad05fa58226f36379857d8789319c6c496Fred Drakeimport unittest 100bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 11d80b4bfd0b291d543c682d7dac0841de0192a238Ezio Melottifrom test.test_support import run_unittest, check_py3k_warnings 122ee0e8eaec7f6e87664c2c9297633623cbd28868Brett Cannonfrom repr import repr as r # Don't shadow builtin repr 132ee0e8eaec7f6e87664c2c9297633623cbd28868Brett Cannonfrom repr import Repr 148e6669ad05fa58226f36379857d8789319c6c496Fred Drake 158e6669ad05fa58226f36379857d8789319c6c496Fred Drake 168e6669ad05fa58226f36379857d8789319c6c496Fred Drakedef nestedTuple(nesting): 178e6669ad05fa58226f36379857d8789319c6c496Fred Drake t = () 188e6669ad05fa58226f36379857d8789319c6c496Fred Drake for i in range(nesting): 198e6669ad05fa58226f36379857d8789319c6c496Fred Drake t = (t,) 208e6669ad05fa58226f36379857d8789319c6c496Fred Drake return t 218e6669ad05fa58226f36379857d8789319c6c496Fred Drake 228e6669ad05fa58226f36379857d8789319c6c496Fred Drakeclass ReprTests(unittest.TestCase): 238e6669ad05fa58226f36379857d8789319c6c496Fred Drake 248e6669ad05fa58226f36379857d8789319c6c496Fred Drake def test_string(self): 252623a37852153363335956afab010cb0beb7e74eEzio Melotti eq = self.assertEqual 268e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r("abc"), "'abc'") 278e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r("abcdefghijklmnop"),"'abcdefghijklmnop'") 288e6669ad05fa58226f36379857d8789319c6c496Fred Drake 298e6669ad05fa58226f36379857d8789319c6c496Fred Drake s = "a"*30+"b"*30 3070a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald expected = repr(s)[:13] + "..." + repr(s)[-14:] 318e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(s), expected) 32ab9ba27dc066adc6423ea137b9481cf524d10ffdTim Peters 338e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r("\"'"), repr("\"'")) 348e6669ad05fa58226f36379857d8789319c6c496Fred Drake s = "\""*30+"'"*100 3570a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald expected = repr(s)[:13] + "..." + repr(s)[-14:] 368e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(s), expected) 378e6669ad05fa58226f36379857d8789319c6c496Fred Drake 38c161cb995530521711e47425170524921fc1b559Neal Norwitz def test_tuple(self): 392623a37852153363335956afab010cb0beb7e74eEzio Melotti eq = self.assertEqual 40c161cb995530521711e47425170524921fc1b559Neal Norwitz eq(r((1,)), "(1,)") 41c161cb995530521711e47425170524921fc1b559Neal Norwitz 42c161cb995530521711e47425170524921fc1b559Neal Norwitz t3 = (1, 2, 3) 43c161cb995530521711e47425170524921fc1b559Neal Norwitz eq(r(t3), "(1, 2, 3)") 44c161cb995530521711e47425170524921fc1b559Neal Norwitz 45c161cb995530521711e47425170524921fc1b559Neal Norwitz r2 = Repr() 46c161cb995530521711e47425170524921fc1b559Neal Norwitz r2.maxtuple = 2 47c161cb995530521711e47425170524921fc1b559Neal Norwitz expected = repr(t3)[:-2] + "...)" 48c161cb995530521711e47425170524921fc1b559Neal Norwitz eq(r2.repr(t3), expected) 49c161cb995530521711e47425170524921fc1b559Neal Norwitz 508e6669ad05fa58226f36379857d8789319c6c496Fred Drake def test_container(self): 516ee0480521901d3e84769d1590603f89efd456a4Tim Peters from array import array 521453e4aa7587898954acc49e7680a9d65c5d2c74Raymond Hettinger from collections import deque 536ee0480521901d3e84769d1590603f89efd456a4Tim Peters 542623a37852153363335956afab010cb0beb7e74eEzio Melotti eq = self.assertEqual 558e6669ad05fa58226f36379857d8789319c6c496Fred Drake # Tuples give up after 6 elements 568e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(()), "()") 578e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r((1,)), "(1,)") 588e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r((1, 2, 3)), "(1, 2, 3)") 598e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r((1, 2, 3, 4, 5, 6)), "(1, 2, 3, 4, 5, 6)") 608e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r((1, 2, 3, 4, 5, 6, 7)), "(1, 2, 3, 4, 5, 6, ...)") 618e6669ad05fa58226f36379857d8789319c6c496Fred Drake 628e6669ad05fa58226f36379857d8789319c6c496Fred Drake # Lists give up after 6 as well 638e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r([]), "[]") 648e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r([1]), "[1]") 658e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r([1, 2, 3]), "[1, 2, 3]") 668e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r([1, 2, 3, 4, 5, 6]), "[1, 2, 3, 4, 5, 6]") 678e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r([1, 2, 3, 4, 5, 6, 7]), "[1, 2, 3, 4, 5, 6, ...]") 688e6669ad05fa58226f36379857d8789319c6c496Fred Drake 69ba6cd3647ff5bd0415dcdb4649a5e6a7a88c0e72Raymond Hettinger # Sets give up after 6 as well 70ba6cd3647ff5bd0415dcdb4649a5e6a7a88c0e72Raymond Hettinger eq(r(set([])), "set([])") 71ba6cd3647ff5bd0415dcdb4649a5e6a7a88c0e72Raymond Hettinger eq(r(set([1])), "set([1])") 72ba6cd3647ff5bd0415dcdb4649a5e6a7a88c0e72Raymond Hettinger eq(r(set([1, 2, 3])), "set([1, 2, 3])") 73ba6cd3647ff5bd0415dcdb4649a5e6a7a88c0e72Raymond Hettinger eq(r(set([1, 2, 3, 4, 5, 6])), "set([1, 2, 3, 4, 5, 6])") 74ba6cd3647ff5bd0415dcdb4649a5e6a7a88c0e72Raymond Hettinger eq(r(set([1, 2, 3, 4, 5, 6, 7])), "set([1, 2, 3, 4, 5, 6, ...])") 75ba6cd3647ff5bd0415dcdb4649a5e6a7a88c0e72Raymond Hettinger 76ba6cd3647ff5bd0415dcdb4649a5e6a7a88c0e72Raymond Hettinger # Frozensets give up after 6 as well 77ba6cd3647ff5bd0415dcdb4649a5e6a7a88c0e72Raymond Hettinger eq(r(frozenset([])), "frozenset([])") 78ba6cd3647ff5bd0415dcdb4649a5e6a7a88c0e72Raymond Hettinger eq(r(frozenset([1])), "frozenset([1])") 79ba6cd3647ff5bd0415dcdb4649a5e6a7a88c0e72Raymond Hettinger eq(r(frozenset([1, 2, 3])), "frozenset([1, 2, 3])") 80ba6cd3647ff5bd0415dcdb4649a5e6a7a88c0e72Raymond Hettinger eq(r(frozenset([1, 2, 3, 4, 5, 6])), "frozenset([1, 2, 3, 4, 5, 6])") 81ba6cd3647ff5bd0415dcdb4649a5e6a7a88c0e72Raymond Hettinger eq(r(frozenset([1, 2, 3, 4, 5, 6, 7])), "frozenset([1, 2, 3, 4, 5, 6, ...])") 82ba6cd3647ff5bd0415dcdb4649a5e6a7a88c0e72Raymond Hettinger 831453e4aa7587898954acc49e7680a9d65c5d2c74Raymond Hettinger # collections.deque after 6 841453e4aa7587898954acc49e7680a9d65c5d2c74Raymond Hettinger eq(r(deque([1, 2, 3, 4, 5, 6, 7])), "deque([1, 2, 3, 4, 5, 6, ...])") 851453e4aa7587898954acc49e7680a9d65c5d2c74Raymond Hettinger 868e6669ad05fa58226f36379857d8789319c6c496Fred Drake # Dictionaries give up after 4. 878e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r({}), "{}") 888e6669ad05fa58226f36379857d8789319c6c496Fred Drake d = {'alice': 1, 'bob': 2, 'charles': 3, 'dave': 4} 898e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(d), "{'alice': 1, 'bob': 2, 'charles': 3, 'dave': 4}") 908e6669ad05fa58226f36379857d8789319c6c496Fred Drake d['arthur'] = 1 918e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(d), "{'alice': 1, 'arthur': 1, 'bob': 2, 'charles': 3, ...}") 928e6669ad05fa58226f36379857d8789319c6c496Fred Drake 936ee0480521901d3e84769d1590603f89efd456a4Tim Peters # array.array after 5. 946ee0480521901d3e84769d1590603f89efd456a4Tim Peters eq(r(array('i')), "array('i', [])") 956ee0480521901d3e84769d1590603f89efd456a4Tim Peters eq(r(array('i', [1])), "array('i', [1])") 966ee0480521901d3e84769d1590603f89efd456a4Tim Peters eq(r(array('i', [1, 2])), "array('i', [1, 2])") 976ee0480521901d3e84769d1590603f89efd456a4Tim Peters eq(r(array('i', [1, 2, 3])), "array('i', [1, 2, 3])") 986ee0480521901d3e84769d1590603f89efd456a4Tim Peters eq(r(array('i', [1, 2, 3, 4])), "array('i', [1, 2, 3, 4])") 996ee0480521901d3e84769d1590603f89efd456a4Tim Peters eq(r(array('i', [1, 2, 3, 4, 5])), "array('i', [1, 2, 3, 4, 5])") 1006ee0480521901d3e84769d1590603f89efd456a4Tim Peters eq(r(array('i', [1, 2, 3, 4, 5, 6])), 1016ee0480521901d3e84769d1590603f89efd456a4Tim Peters "array('i', [1, 2, 3, 4, 5, ...])") 1026ee0480521901d3e84769d1590603f89efd456a4Tim Peters 1038e6669ad05fa58226f36379857d8789319c6c496Fred Drake def test_numbers(self): 1042623a37852153363335956afab010cb0beb7e74eEzio Melotti eq = self.assertEqual 1058e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(123), repr(123)) 1068e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(123L), repr(123L)) 1078e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(1.0/3), repr(1.0/3)) 1088e6669ad05fa58226f36379857d8789319c6c496Fred Drake 1098e6669ad05fa58226f36379857d8789319c6c496Fred Drake n = 10L**100 11070a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald expected = repr(n)[:18] + "..." + repr(n)[-19:] 1118e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(n), expected) 1128e6669ad05fa58226f36379857d8789319c6c496Fred Drake 1138e6669ad05fa58226f36379857d8789319c6c496Fred Drake def test_instance(self): 1142623a37852153363335956afab010cb0beb7e74eEzio Melotti eq = self.assertEqual 1158e6669ad05fa58226f36379857d8789319c6c496Fred Drake i1 = ClassWithRepr("a") 1168e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(i1), repr(i1)) 117ab9ba27dc066adc6423ea137b9481cf524d10ffdTim Peters 1188e6669ad05fa58226f36379857d8789319c6c496Fred Drake i2 = ClassWithRepr("x"*1000) 11970a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald expected = repr(i2)[:13] + "..." + repr(i2)[-14:] 1208e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(i2), expected) 1218e6669ad05fa58226f36379857d8789319c6c496Fred Drake 1228e6669ad05fa58226f36379857d8789319c6c496Fred Drake i3 = ClassWithFailingRepr() 1238e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(i3), ("<ClassWithFailingRepr instance at %x>"%id(i3))) 1248e6669ad05fa58226f36379857d8789319c6c496Fred Drake 125cf856f9f28e4a2806fa835fb4e0e54582c0a2eddGuido van Rossum s = r(ClassWithFailingRepr) 1265c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(s.startswith("<class ")) 1275c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(s.endswith(">")) 1285c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(s.find("...") == 8) 129cf856f9f28e4a2806fa835fb4e0e54582c0a2eddGuido van Rossum 1300bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_file(self): 1310bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw fp = open(unittest.__file__) 1325c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(repr(fp).startswith( 133b60156e809038ab5f8c59152ddeaa0d44ad9ed6aEzio Melotti "<open file %r, mode 'r' at 0x" % unittest.__file__)) 1340bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw fp.close() 1355c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(repr(fp).startswith( 136b60156e809038ab5f8c59152ddeaa0d44ad9ed6aEzio Melotti "<closed file %r, mode 'r' at 0x" % unittest.__file__)) 1370bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1380bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_lambda(self): 1395c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(repr(lambda x: x).startswith( 140ab541bb98e4b0deebc7baaaf6e9e231cd499b77cNeil Schemenauer "<function <lambda")) 1410bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # XXX anonymous functions? see func_repr 1420bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1430bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_builtin_function(self): 1442623a37852153363335956afab010cb0beb7e74eEzio Melotti eq = self.assertEqual 1450bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # Functions 1460bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(repr(hash), '<built-in function hash>') 1470bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # Methods 1485c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(repr(''.split).startswith( 1490bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw '<built-in method split of str object at 0x')) 1500bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1510bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_xrange(self): 1522623a37852153363335956afab010cb0beb7e74eEzio Melotti eq = self.assertEqual 1530bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(repr(xrange(1)), 'xrange(1)') 1540bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(repr(xrange(1, 2)), 'xrange(1, 2)') 1550bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(repr(xrange(1, 2, 3)), 'xrange(1, 4, 3)') 1560bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1578e6669ad05fa58226f36379857d8789319c6c496Fred Drake def test_nesting(self): 1582623a37852153363335956afab010cb0beb7e74eEzio Melotti eq = self.assertEqual 1598e6669ad05fa58226f36379857d8789319c6c496Fred Drake # everything is meant to give up after 6 levels. 1608e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r([[[[[[[]]]]]]]), "[[[[[[[]]]]]]]") 1618e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r([[[[[[[[]]]]]]]]), "[[[[[[[...]]]]]]]") 1628e6669ad05fa58226f36379857d8789319c6c496Fred Drake 1638e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(nestedTuple(6)), "(((((((),),),),),),)") 1648e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r(nestedTuple(7)), "(((((((...),),),),),),)") 1658e6669ad05fa58226f36379857d8789319c6c496Fred Drake 1668e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r({ nestedTuple(5) : nestedTuple(5) }), 1678e6669ad05fa58226f36379857d8789319c6c496Fred Drake "{((((((),),),),),): ((((((),),),),),)}") 1688e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r({ nestedTuple(6) : nestedTuple(6) }), 1698e6669ad05fa58226f36379857d8789319c6c496Fred Drake "{((((((...),),),),),): ((((((...),),),),),)}") 1708e6669ad05fa58226f36379857d8789319c6c496Fred Drake 1718e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r([[[[[[{}]]]]]]), "[[[[[[{}]]]]]]") 1728e6669ad05fa58226f36379857d8789319c6c496Fred Drake eq(r([[[[[[[{}]]]]]]]), "[[[[[[[...]]]]]]]") 1738e6669ad05fa58226f36379857d8789319c6c496Fred Drake 1740bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_buffer(self): 1750bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # XXX doesn't test buffers with no b_base or read-write buffers (see 1760bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # bufferobject.c). The test is fairly incomplete too. Sigh. 177d80b4bfd0b291d543c682d7dac0841de0192a238Ezio Melotti with check_py3k_warnings(): 178d80b4bfd0b291d543c682d7dac0841de0192a238Ezio Melotti x = buffer('foo') 1795c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(repr(x).startswith('<read-only buffer for 0x')) 1800bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1810bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_cell(self): 18295d721927a4e4c5acb4a7d23bd15a3af1ce26bd2Serhiy Storchaka def get_cell(): 18395d721927a4e4c5acb4a7d23bd15a3af1ce26bd2Serhiy Storchaka x = 42 18495d721927a4e4c5acb4a7d23bd15a3af1ce26bd2Serhiy Storchaka def inner(): 18595d721927a4e4c5acb4a7d23bd15a3af1ce26bd2Serhiy Storchaka return x 18695d721927a4e4c5acb4a7d23bd15a3af1ce26bd2Serhiy Storchaka return inner 18795d721927a4e4c5acb4a7d23bd15a3af1ce26bd2Serhiy Storchaka x = get_cell().__closure__[0] 188227c01a194ff4c83ba395ccf175cd72d882b3da2Zachary Ware self.assertRegexpMatches(repr(x), r'<cell at 0x[0-9A-Fa-f]+: ' 189227c01a194ff4c83ba395ccf175cd72d882b3da2Zachary Ware r'int object at 0x[0-9A-Fa-f]+>') 19095d721927a4e4c5acb4a7d23bd15a3af1ce26bd2Serhiy Storchaka self.assertRegexpMatches(r(x), r'<cell at.*\.\.\..*>') 1910bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 1920bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_descriptors(self): 1932623a37852153363335956afab010cb0beb7e74eEzio Melotti eq = self.assertEqual 1940bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # method descriptors 195a427a2b8d09a756119d424efac85159a0270b503Tim Peters eq(repr(dict.items), "<method 'items' of 'dict' objects>") 1960bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # XXX member descriptors 1970bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # XXX attribute descriptors 1980bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # XXX slot descriptors 1990bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # static and class methods 2000bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw class C: 2010bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def foo(cls): pass 2020bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw x = staticmethod(C.foo) 2035c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(repr(x).startswith('<staticmethod object at 0x')) 2040bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw x = classmethod(C.foo) 2055c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(repr(x).startswith('<classmethod object at 0x')) 2060bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 2078fd3ecf9289942d5544c3943be9bc4e9386908b7Georg Brandl def test_unsortable(self): 2088fd3ecf9289942d5544c3943be9bc4e9386908b7Georg Brandl # Repr.repr() used to call sorted() on sets, frozensets and dicts 2098fd3ecf9289942d5544c3943be9bc4e9386908b7Georg Brandl # without taking into account that not all objects are comparable 2108fd3ecf9289942d5544c3943be9bc4e9386908b7Georg Brandl x = set([1j, 2j, 3j]) 2118fd3ecf9289942d5544c3943be9bc4e9386908b7Georg Brandl y = frozenset(x) 2128fd3ecf9289942d5544c3943be9bc4e9386908b7Georg Brandl z = {1j: 1, 2j: 2} 2138fd3ecf9289942d5544c3943be9bc4e9386908b7Georg Brandl r(x) 2148fd3ecf9289942d5544c3943be9bc4e9386908b7Georg Brandl r(y) 2158fd3ecf9289942d5544c3943be9bc4e9386908b7Georg Brandl r(z) 2168fd3ecf9289942d5544c3943be9bc4e9386908b7Georg Brandl 2170bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsawdef touch(path, text=''): 2180bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw fp = open(path, 'w') 2190bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw fp.write(text) 2200bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw fp.close() 2210bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 2220bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsawclass LongReprTest(unittest.TestCase): 2230bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def setUp(self): 2240bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw longname = 'areallylongpackageandmodulenametotestreprtruncation' 2250bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw self.pkgname = os.path.join(longname) 2260bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw self.subpkgname = os.path.join(longname, longname) 2270bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # Make the package and subpackage 228008b861bf03f515b19ced29b1138a7c9fc910d82Neal Norwitz shutil.rmtree(self.pkgname, ignore_errors=True) 2290bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw os.mkdir(self.pkgname) 230e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum touch(os.path.join(self.pkgname, '__init__'+os.extsep+'py')) 231008b861bf03f515b19ced29b1138a7c9fc910d82Neal Norwitz shutil.rmtree(self.subpkgname, ignore_errors=True) 2320bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw os.mkdir(self.subpkgname) 233e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum touch(os.path.join(self.subpkgname, '__init__'+os.extsep+'py')) 2340bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # Remember where we are 2350bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw self.here = os.getcwd() 2360bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw sys.path.insert(0, self.here) 2370bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 2380bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def tearDown(self): 2390bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw actions = [] 2409ec4aa01f9e1b5f0d8ed94005ac5b14d6ff94ebcBenjamin Peterson for dirpath, dirnames, filenames in os.walk(self.pkgname): 2419ec4aa01f9e1b5f0d8ed94005ac5b14d6ff94ebcBenjamin Peterson for name in dirnames + filenames: 2429ec4aa01f9e1b5f0d8ed94005ac5b14d6ff94ebcBenjamin Peterson actions.append(os.path.join(dirpath, name)) 2430bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw actions.append(self.pkgname) 2440bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw actions.sort() 2450bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw actions.reverse() 2460bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw for p in actions: 2470bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw if os.path.isdir(p): 2480bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw os.rmdir(p) 2490bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw else: 2500bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw os.remove(p) 2510bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw del sys.path[0] 2520bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 2530bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_module(self): 2542623a37852153363335956afab010cb0beb7e74eEzio Melotti eq = self.assertEqual 255e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum touch(os.path.join(self.subpkgname, self.pkgname + os.extsep + 'py')) 2560bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw from areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation import areallylongpackageandmodulenametotestreprtruncation 2570bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(repr(areallylongpackageandmodulenametotestreprtruncation), 258d800ae12f2efa048ee4e9c2558e646c9f3304022Mark Hammond "<module '%s' from '%s'>" % (areallylongpackageandmodulenametotestreprtruncation.__name__, areallylongpackageandmodulenametotestreprtruncation.__file__)) 259707690132fc28773843eb154c8c8c1599c4fe5c8Neal Norwitz eq(repr(sys), "<module 'sys' (built-in)>") 2600bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 2610bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_type(self): 2622623a37852153363335956afab010cb0beb7e74eEzio Melotti eq = self.assertEqual 263e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum touch(os.path.join(self.subpkgname, 'foo'+os.extsep+'py'), '''\ 2640bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsawclass foo(object): 2650bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw pass 2660bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw''') 2670bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw from areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation import foo 2680bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(repr(foo.foo), 269d800ae12f2efa048ee4e9c2558e646c9f3304022Mark Hammond "<class '%s.foo'>" % foo.__name__) 2700bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 2711f70221b861a3714735251d57695b2f472d0599bZachary Ware @unittest.skip('need a suitable object') 2720bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_object(self): 2730bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # XXX Test the repr of a type with a really long tp_name but with no 2740bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # tp_repr. WIBNI we had ::Inline? :) 2750bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw pass 2760bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 2770bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_class(self): 278e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum touch(os.path.join(self.subpkgname, 'bar'+os.extsep+'py'), '''\ 2790bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsawclass bar: 2800bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw pass 2810bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw''') 2820bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw from areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation import bar 283d800ae12f2efa048ee4e9c2558e646c9f3304022Mark Hammond # Module name may be prefixed with "test.", depending on how run. 2845c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(repr(bar.bar).startswith( 285d800ae12f2efa048ee4e9c2558e646c9f3304022Mark Hammond "<class %s.bar at 0x" % bar.__name__)) 2860bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 2870bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_instance(self): 288e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum touch(os.path.join(self.subpkgname, 'baz'+os.extsep+'py'), '''\ 2890bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsawclass baz: 2900bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw pass 2910bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw''') 2920bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw from areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation import baz 2930bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw ibaz = baz.baz() 2945c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(repr(ibaz).startswith( 295d800ae12f2efa048ee4e9c2558e646c9f3304022Mark Hammond "<%s.baz instance at 0x" % baz.__name__)) 2960bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 2970bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_method(self): 2982623a37852153363335956afab010cb0beb7e74eEzio Melotti eq = self.assertEqual 299e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum touch(os.path.join(self.subpkgname, 'qux'+os.extsep+'py'), '''\ 3000bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsawclass aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: 3010bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def amethod(self): pass 3020bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw''') 3030bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw from areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation import qux 3040bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # Unbound methods first 3050bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw eq(repr(qux.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.amethod), 3060bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw '<unbound method aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.amethod>') 3070bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # Bound method next 3080bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw iqux = qux.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa() 3095c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(repr(iqux.amethod).startswith( 310d800ae12f2efa048ee4e9c2558e646c9f3304022Mark Hammond '<bound method aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.amethod of <%s.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa instance at 0x' \ 311d800ae12f2efa048ee4e9c2558e646c9f3304022Mark Hammond % (qux.__name__,) )) 3120bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw 3131f70221b861a3714735251d57695b2f472d0599bZachary Ware @unittest.skip('needs a built-in function with a really long name') 3140bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw def test_builtin_function(self): 3150bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw # XXX test built-in functions and methods with really long names 3160bcf6d8d5436e9223f795a2040e330f43ebc1ce6Barry Warsaw pass 3178e6669ad05fa58226f36379857d8789319c6c496Fred Drake 3188e6669ad05fa58226f36379857d8789319c6c496Fred Drakeclass ClassWithRepr: 3198e6669ad05fa58226f36379857d8789319c6c496Fred Drake def __init__(self, s): 3208e6669ad05fa58226f36379857d8789319c6c496Fred Drake self.s = s 3218e6669ad05fa58226f36379857d8789319c6c496Fred Drake def __repr__(self): 3228e6669ad05fa58226f36379857d8789319c6c496Fred Drake return "ClassWithLongRepr(%r)" % self.s 3238e6669ad05fa58226f36379857d8789319c6c496Fred Drake 3248e6669ad05fa58226f36379857d8789319c6c496Fred Drake 3258e6669ad05fa58226f36379857d8789319c6c496Fred Drakeclass ClassWithFailingRepr: 3268e6669ad05fa58226f36379857d8789319c6c496Fred Drake def __repr__(self): 3278e6669ad05fa58226f36379857d8789319c6c496Fred Drake raise Exception("This should be caught by Repr.repr_instance") 3288e6669ad05fa58226f36379857d8789319c6c496Fred Drake 3298e6669ad05fa58226f36379857d8789319c6c496Fred Drake 3302e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drakedef test_main(): 3312e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake run_unittest(ReprTests) 3329545a23c7ffb35417d451d24cc3b0339627965a7Ronald Oussoren run_unittest(LongReprTest) 3332e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake 3342e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake 3352e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drakeif __name__ == "__main__": 3362e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake test_main() 337