14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao"Test the functionality of Python classes implementing operators." 24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport unittest 44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom test import test_support 64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotestmeths = [ 84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Binary operations 104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "add", 114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "radd", 124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "sub", 134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "rsub", 144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "mul", 154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "rmul", 164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "div", 174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "rdiv", 184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "mod", 194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "rmod", 204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "divmod", 214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "rdivmod", 224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "pow", 234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "rpow", 244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "rshift", 254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "rrshift", 264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "lshift", 274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "rlshift", 284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "and", 294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "rand", 304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "or", 314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "ror", 324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "xor", 334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "rxor", 344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# List/dict operations 364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "contains", 374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "getitem", 384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "getslice", 394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "setitem", 404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "setslice", 414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "delitem", 424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "delslice", 434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Unary operations 454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "neg", 464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "pos", 474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "abs", 484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# generic operations 504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "init", 514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# These need to return something other than None 544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# "coerce", 554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# "hash", 564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# "str", 574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# "repr", 584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# "int", 594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# "long", 604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# "float", 614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# "oct", 624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# "hex", 634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# These are separate because they can influence the test of other methods. 654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# "getattr", 664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# "setattr", 674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# "delattr", 684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 694adfde8bc82dd39f59e0445588c3e599ada477dJosh GaocallLst = [] 704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef trackCall(f): 714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def track(*args, **kwargs): 724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst.append((f.__name__, args)) 734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return f(*args, **kwargs) 744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return track 754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass AllTests: 774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao trackCall = trackCall 784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @trackCall 804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __coerce__(self, *args): 814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return (self,) + args 824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @trackCall 844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __hash__(self, *args): 854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return hash(id(self)) 864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @trackCall 884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __str__(self, *args): 894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return "AllTests" 904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @trackCall 924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __repr__(self, *args): 934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return "AllTests" 944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @trackCall 964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __int__(self, *args): 974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 1 984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @trackCall 1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __float__(self, *args): 1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 1.0 1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @trackCall 1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __long__(self, *args): 1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 1L 1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @trackCall 1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __oct__(self, *args): 1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return '01' 1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @trackCall 1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __hex__(self, *args): 1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return '0x1' 1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @trackCall 1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __cmp__(self, *args): 1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 0 1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Synthesize all the other AllTests methods from the names in testmeths. 1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaomethod_template = """\ 1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao@trackCall 1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef __%(method)s__(self, *args): 1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao""" 1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofor method in testmeths: 1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao exec method_template % locals() in AllTests.__dict__ 1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodel method, method_template 1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass ClassTests(unittest.TestCase): 1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def setUp(self): 1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def assertCallStack(self, expected_calls): 1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao actualCallList = callLst[:] # need to copy because the comparison below will add 1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # additional calls to callLst 1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if expected_calls != actualCallList: 1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("Expected call list:\n %s\ndoes not match actual call list\n %s" % 1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (expected_calls, actualCallList)) 1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testInit(self): 1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao foo = AllTests() 1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__init__", (foo,))]) 1464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testBinaryOps(self): 1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme = AllTests() 1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Binary operations 1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme + 1 1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__add__", (testme, 1))]) 1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 + testme 1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__radd__", (testme, 1))]) 1584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme - 1 1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__sub__", (testme, 1))]) 1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 1644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 - testme 1654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__rsub__", (testme, 1))]) 1664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 1684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme * 1 1694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__mul__", (testme, 1))]) 1704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 1724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 * testme 1734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__rmul__", (testme, 1))]) 1744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if 1/2 == 0: 1764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 1774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme / 1 1784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__div__", (testme, 1))]) 1794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 1824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 / testme 1834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__rdiv__", (testme, 1))]) 1844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 1864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme % 1 1874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__mod__", (testme, 1))]) 1884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 1904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 % testme 1914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__rmod__", (testme, 1))]) 1924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 1954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao divmod(testme,1) 1964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__divmod__", (testme, 1))]) 1974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 1994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao divmod(1, testme) 2004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__rdivmod__", (testme, 1))]) 2014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme ** 1 2044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__pow__", (testme, 1))]) 2054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 ** testme 2084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__rpow__", (testme, 1))]) 2094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme >> 1 2124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__rshift__", (testme, 1))]) 2134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 >> testme 2164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__rrshift__", (testme, 1))]) 2174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme << 1 2204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__lshift__", (testme, 1))]) 2214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 << testme 2244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__rlshift__", (testme, 1))]) 2254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme & 1 2284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__and__", (testme, 1))]) 2294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 & testme 2324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__rand__", (testme, 1))]) 2334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme | 1 2364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__or__", (testme, 1))]) 2374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 | testme 2404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__ror__", (testme, 1))]) 2414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme ^ 1 2444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__xor__", (testme, 1))]) 2454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 ^ testme 2484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ("__rxor__", (testme, 1))]) 2494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testListAndDictOps(self): 2514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme = AllTests() 2524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # List/dict operations 2544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class Empty: pass 2564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 2584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 in Empty() 2594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail('failed, should have raised TypeError') 2604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except TypeError: 2614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 2624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 in testme 2654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__contains__', (testme, 1))]) 2664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme[1] 2694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__getitem__', (testme, 1))]) 2704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme[1] = 1 2734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__setitem__', (testme, 1, 1))]) 2744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del testme[1] 2774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__delitem__', (testme, 1))]) 2784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme[:42] 2814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__getslice__', (testme, 0, 42))]) 2824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme[:42] = "The Answer" 2854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__setslice__', (testme, 0, 42, "The Answer"))]) 2864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del testme[:42] 2894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__delslice__', (testme, 0, 42))]) 2904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme[2:1024:10] 2934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__getitem__', (testme, slice(2, 1024, 10)))]) 2944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 2964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme[2:1024:10] = "A lot" 2974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__setitem__', (testme, slice(2, 1024, 10), 2984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "A lot"))]) 2994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 3004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del testme[2:1024:10] 3014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__delitem__', (testme, slice(2, 1024, 10)))]) 3024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 3044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme[:42, ..., :24:, 24, 100] 3054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__getitem__', (testme, (slice(None, 42, None), 3064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Ellipsis, 3074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao slice(None, 24, None), 3084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24, 100)))]) 3094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 3104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme[:42, ..., :24:, 24, 100] = "Strange" 3114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__setitem__', (testme, (slice(None, 42, None), 3124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Ellipsis, 3134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao slice(None, 24, None), 3144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24, 100), "Strange"))]) 3154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 3164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del testme[:42, ..., :24:, 24, 100] 3174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__delitem__', (testme, (slice(None, 42, None), 3184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Ellipsis, 3194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao slice(None, 24, None), 3204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24, 100)))]) 3214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Now remove the slice hooks to see if converting normal slices to 3234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # slice object works. 3244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao getslice = AllTests.__getslice__ 3264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del AllTests.__getslice__ 3274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao setslice = AllTests.__setslice__ 3284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del AllTests.__setslice__ 3294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao delslice = AllTests.__delslice__ 3304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del AllTests.__delslice__ 3314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # XXX when using new-style classes the slice testme[:42] produces 3334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # slice(None, 42, None) instead of slice(0, 42, None). py3k will have 3344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # to change this test. 3354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 3364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme[:42] 3374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__getitem__', (testme, slice(0, 42, None)))]) 3384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 3404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme[:42] = "The Answer" 3414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__setitem__', (testme, slice(0, 42, None), 3424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "The Answer"))]) 3434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 3444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del testme[:42] 3454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__delitem__', (testme, slice(0, 42, None)))]) 3464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Restore the slice methods, or the tests will fail with regrtest -R. 3484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao AllTests.__getslice__ = getslice 3494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao AllTests.__setslice__ = setslice 3504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao AllTests.__delslice__ = delslice 3514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @test_support.cpython_only 3544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testDelItem(self): 3554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class A: 3564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ok = False 3574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __delitem__(self, key): 3584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ok = True 3594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = A() 3604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Subtle: we need to call PySequence_SetItem, not PyMapping_SetItem. 3614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from _testcapi import sequence_delitem 3624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao sequence_delitem(a, 2) 3634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(a.ok) 3644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testUnaryOps(self): 3674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme = AllTests() 3684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 3704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -testme 3714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__neg__', (testme,))]) 3724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 3734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao +testme 3744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__pos__', (testme,))]) 3754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 3764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao abs(testme) 3774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__abs__', (testme,))]) 3784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 3794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int(testme) 3804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__int__', (testme,))]) 3814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 3824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao long(testme) 3834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__long__', (testme,))]) 3844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 3854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao float(testme) 3864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__float__', (testme,))]) 3874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 3884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao oct(testme) 3894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__oct__', (testme,))]) 3904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 3914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao hex(testme) 3924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__hex__', (testme,))]) 3934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testMisc(self): 3964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme = AllTests() 3974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 3994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao hash(testme) 4004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__hash__', (testme,))]) 4014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 4034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao repr(testme) 4044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__repr__', (testme,))]) 4054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 4074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao str(testme) 4084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__str__', (testme,))]) 4094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 4114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme == 1 4124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (testme, 1))]) 4134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 4154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme < 1 4164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (testme, 1))]) 4174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 4194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme > 1 4204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (testme, 1))]) 4214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 4234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao eval('testme <> 1') # XXX kill this in py3k 4244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (testme, 1))]) 4254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 4274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme != 1 4284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (testme, 1))]) 4294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 4314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 == testme 4324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (1, testme))]) 4334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 4354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 < testme 4364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (1, testme))]) 4374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 4394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 > testme 4404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (1, testme))]) 4414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 4434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao eval('1 <> testme') 4444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (1, testme))]) 4454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 4474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 != testme 4484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (1, testme))]) 4494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testGetSetAndDel(self): 4524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Interfering tests 4534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class ExtraTests(AllTests): 4544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @trackCall 4554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __getattr__(self, *args): 4564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return "SomeVal" 4574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @trackCall 4594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __setattr__(self, *args): 4604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 4614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @trackCall 4634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __delattr__(self, *args): 4644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 4654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme = ExtraTests() 4674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 4694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme.spam 4704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__getattr__', (testme, "spam"))]) 4714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 4734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme.eggs = "spam, spam, spam and ham" 4744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__setattr__', (testme, "eggs", 4754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "spam, spam, spam and ham"))]) 4764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 4784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del testme.cardinal 4794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__delattr__', (testme, "cardinal"))]) 4804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testDel(self): 4824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = [] 4834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class DelTest: 4854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __del__(self): 4864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x.append("crab people, crab people") 4874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testme = DelTest() 4884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del testme 4894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import gc 4904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao gc.collect() 4914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(["crab people, crab people"], x) 4924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testBadTypeReturned(self): 4944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # return values of some method are type-checked 4954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class BadTypeClass: 4964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __int__(self): 4974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return None 4984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao __float__ = __int__ 4994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao __long__ = __int__ 5004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao __str__ = __int__ 5014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao __repr__ = __int__ 5024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao __oct__ = __int__ 5034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao __hex__ = __int__ 5044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for f in [int, float, long, str, repr, oct, hex]: 5064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, f, BadTypeClass()) 5074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testMixIntsAndLongs(self): 5094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # mixing up ints and longs is okay 5104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class IntLongMixClass: 5114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @trackCall 5124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __int__(self): 5134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 42L 5144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @trackCall 5164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __long__(self): 5174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 64 5184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao mixIntAndLong = IntLongMixClass() 5204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 5224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao as_int = int(mixIntAndLong) 5234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(type(as_int), long) 5244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(as_int, 42L) 5254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__int__', (mixIntAndLong,))]) 5264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao callLst[:] = [] 5284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao as_long = long(mixIntAndLong) 5294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(type(as_long), long) 5304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(as_long, 64) 5314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertCallStack([('__long__', (mixIntAndLong,))]) 5324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testHashStuff(self): 5344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test correct errors from hash() on objects with comparisons but 5354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # no __hash__ 5364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class C0: 5384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 5394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao hash(C0()) # This should work; the next two should raise TypeError 5414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class C1: 5434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __cmp__(self, other): return 0 5444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, hash, C1()) 5464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class C2: 5484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __eq__(self, other): return 1 5494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, hash, C2()) 5514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testSFBug532646(self): 5544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test for SF bug 532646 5554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class A: 5574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 5584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao A.__call__ = A() 5594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = A() 5604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 5624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a() # This should not segfault 5634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except RuntimeError: 5644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 5654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 5664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("Failed to raise RuntimeError") 5674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testForExceptionsRaisedInInstanceGetattr2(self): 5694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Tests for exceptions raised in instance_getattr2(). 5704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def booh(self): 5724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise AttributeError("booh") 5734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class A: 5754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = property(booh) 5764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 5774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao A().a # Raised AttributeError: A instance has no attribute 'a' 5784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except AttributeError, x: 5794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if str(x) != "booh": 5804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("attribute error for A().a got masked: %s" % x) 5814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class E: 5834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao __eq__ = property(booh) 5844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao E() == E() # In debug mode, caused a C-level assert() to fail 5854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class I: 5874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao __init__ = property(booh) 5884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 5894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # In debug mode, printed XXX undetected error and 5904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # raises AttributeError 5914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao I() 5924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except AttributeError, x: 5934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 5944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 5954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("attribute error for I.__init__ got masked") 5964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testHashComparisonOfMethods(self): 5984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test comparison and hash of methods 5994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class A: 6004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, x): 6014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.x = x 6024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def f(self): 6034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 6044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def g(self): 6054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 6064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __eq__(self, other): 6074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self.x == other.x 6084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __hash__(self): 6094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self.x 6104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class B(A): 6114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 6124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a1 = A(1) 6144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a2 = A(2) 6154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a1.f, a1.f) 6164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(a1.f, a2.f) 6174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(a1.f, a1.g) 6184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a1.f, A(1).f) 6194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(hash(a1.f), hash(a1.f)) 6204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(hash(a1.f), hash(A(1).f)) 6214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(A.f, a1.f) 6234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(A.f, A.g) 6244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(B.f, A.f) 6254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(hash(B.f), hash(A.f)) 6264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # the following triggers a SystemError in 2.4 6284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = A(hash(A.f.im_func)^(-1)) 6294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao hash(a.f) 6304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testAttrSlots(self): 6324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class C: 6334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 6344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for c in C, C(): 6354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, type(c).__getattribute__, c, []) 6364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, type(c).__setattr__, c, [], []) 6374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef test_main(): 6394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with test_support.check_py3k_warnings( 6404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (".+__(get|set|del)slice__ has been removed", DeprecationWarning), 6414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ("classic int division", DeprecationWarning), 6424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ("<> not supported", DeprecationWarning)): 6434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_support.run_unittest(ClassTests) 6444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif __name__=='__main__': 6464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_main() 647