14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Python test set -- part 1, grammar. 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# This just tests whether the parser accepts them all. 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# NOTE: When you run this test as a script from the command line, you 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# get warnings about certain hex/oct constants. Since those are 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# issued by the parser, you can't suppress them by adding a 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# filterwarnings() call to this module. Therefore, to shut up the 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# regression test, the filterwarnings() call has been added to 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# regrtest.py. 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test.test_support import run_unittest, check_syntax_error 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport sys 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# testing import * 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom sys import * 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TokenTests(unittest.TestCase): 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testBackslash(self): 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Backslash means line continuation: 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 \ 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm + 1 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(x, 2, 'backslash for line continuation') 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Backslash does not means continuation in comments :\ 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 0 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(x, 0, 'backslash ending comment') 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testPlainIntegers(self): 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(0xff, 255) 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(0377, 255) 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(2147483647, 017777777777) 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "0x" is not a valid literal 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(SyntaxError, eval, "0x") 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from sys import maxint 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if maxint == 2147483647: 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(-2147483647-1, -020000000000) 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # XXX -2147483648 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assert_(037777777777 > 0) 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assert_(0xffffffff > 0) 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for s in '2147483648', '040000000000', '0x100000000': 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = eval(s) 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except OverflowError: 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail("OverflowError on huge integer literal %r" % s) 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif maxint == 9223372036854775807: 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(-9223372036854775807-1, -01000000000000000000000) 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assert_(01777777777777777777777 > 0) 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assert_(0xffffffffffffffff > 0) 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for s in '9223372036854775808', '02000000000000000000000', \ 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '0x10000000000000000': 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = eval(s) 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except OverflowError: 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail("OverflowError on huge integer literal %r" % s) 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail('Weird maxint value %r' % maxint) 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testLongIntegers(self): 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 0L 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 0l 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 0xffffffffffffffffL 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 0xffffffffffffffffl 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 077777777777777777L 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 077777777777777777l 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 123456789012345678901234567890L 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 123456789012345678901234567890l 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testFloats(self): 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 3.14 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 314. 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 0.314 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # XXX x = 000.314 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = .314 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 3e14 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 3E14 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 3e-14 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 3e+14 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 3.e14 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = .3e14 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 3.1e4 824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testStringLiterals(self): 844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = ''; y = ""; self.assert_(len(x) == 0 and x == y) 854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = '\''; y = "'"; self.assert_(len(x) == 1 and x == y and ord(x) == 39) 864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = '"'; y = "\""; self.assert_(len(x) == 1 and x == y and ord(x) == 34) 874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = "doesn't \"shrink\" does it" 884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm y = 'doesn\'t "shrink" does it' 894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assert_(len(x) == 24 and x == y) 904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = "does \"shrink\" doesn't it" 914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm y = 'does "shrink" doesn\'t it' 924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assert_(len(x) == 24 and x == y) 934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = """ 944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmThe "quick" 954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmbrown fox 964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmjumps over 974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmthe 'lazy' dog. 984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm""" 994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm y = '\nThe "quick"\nbrown fox\njumps over\nthe \'lazy\' dog.\n' 1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(x, y) 1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm y = ''' 1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmThe "quick" 1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmbrown fox 1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmjumps over 1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmthe 'lazy' dog. 1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm''' 1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(x, y) 1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm y = "\n\ 1094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmThe \"quick\"\n\ 1104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmbrown fox\n\ 1114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmjumps over\n\ 1124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmthe 'lazy' dog.\n\ 1134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm" 1144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(x, y) 1154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm y = '\n\ 1164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmThe \"quick\"\n\ 1174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmbrown fox\n\ 1184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmjumps over\n\ 1194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmthe \'lazy\' dog.\n\ 1204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm' 1214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(x, y) 1224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass GrammarTests(unittest.TestCase): 1254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE 1274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # XXX can't test in a script -- this rule is only used when interactive 1284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # file_input: (NEWLINE | stmt)* ENDMARKER 1304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Being tested as this very moment this very module 1314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # expr_input: testlist NEWLINE 1334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # XXX Hard to test -- used only in calls to input() 1344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testEvalInput(self): 1364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # testlist ENDMARKER 1374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = eval('1, 0 or 1') 1384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testFuncdef(self): 1404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### 'def' NAME parameters ':' suite 1414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### parameters: '(' [varargslist] ')' 1424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### varargslist: (fpdef ['=' test] ',')* ('*' NAME [',' ('**'|'*' '*') NAME] 1434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### | ('**'|'*' '*') NAME) 1444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### | fpdef ['=' test] (',' fpdef ['=' test])* [','] 1454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### fpdef: NAME | '(' fplist ')' 1464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### fplist: fpdef (',' fpdef)* [','] 1474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### arglist: (argument ',')* (argument | *' test [',' '**' test] | '**' test) 1484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### argument: [test '='] test # Really [keyword '='] test 1494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f1(): pass 1504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f1() 1514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f1(*()) 1524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f1(*(), **{}) 1534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f2(one_argument): pass 1544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f3(two, arguments): pass 1554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f4(two, (compound, (argument, list))): pass 1564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f5((compound, first), two): pass 1574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(f2.func_code.co_varnames, ('one_argument',)) 1584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(f3.func_code.co_varnames, ('two', 'arguments')) 1594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if sys.platform.startswith('java'): 1604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(f4.func_code.co_varnames, 1614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('two', '(compound, (argument, list))', 'compound', 'argument', 1624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'list',)) 1634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(f5.func_code.co_varnames, 1644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('(compound, first)', 'two', 'compound', 'first')) 1654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 1664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(f4.func_code.co_varnames, 1674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('two', '.1', 'compound', 'argument', 'list')) 1684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(f5.func_code.co_varnames, 1694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('.0', 'two', 'compound', 'first')) 1704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def a1(one_arg,): pass 1714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def a2(two, args,): pass 1724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def v0(*rest): pass 1734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def v1(a, *rest): pass 1744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def v2(a, b, *rest): pass 1754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def v3(a, (b, c), *rest): return a, b, c, rest 1764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f1() 1784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f2(1) 1794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f2(1,) 1804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f3(1, 2) 1814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f3(1, 2,) 1824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f4(1, (2, (3, 4))) 1834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v0() 1844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v0(1) 1854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v0(1,) 1864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v0(1,2) 1874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v0(1,2,3,4,5,6,7,8,9,0) 1884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v1(1) 1894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v1(1,) 1904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v1(1,2) 1914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v1(1,2,3) 1924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v1(1,2,3,4,5,6,7,8,9,0) 1934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v2(1,2) 1944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v2(1,2,3) 1954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v2(1,2,3,4) 1964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v2(1,2,3,4,5,6,7,8,9,0) 1974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v3(1,(2,3)) 1984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v3(1,(2,3),4) 1994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm v3(1,(2,3),4,5,6,7,8,9,0) 2004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ceval unpacks the formal arguments into the first argcount names; 2024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # thus, the names nested inside tuples must appear after these names. 2034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if sys.platform.startswith('java'): 2044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(v3.func_code.co_varnames, ('a', '(b, c)', 'rest', 'b', 'c')) 2054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 2064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(v3.func_code.co_varnames, ('a', '.1', 'rest', 'b', 'c')) 2074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(v3(1, (2, 3), 4), (1, 2, 3, (4,))) 2084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def d01(a=1): pass 2094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d01() 2104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d01(1) 2114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d01(*(1,)) 2124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d01(**{'a':2}) 2134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def d11(a, b=1): pass 2144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d11(1) 2154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d11(1, 2) 2164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d11(1, **{'b':2}) 2174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def d21(a, b, c=1): pass 2184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d21(1, 2) 2194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d21(1, 2, 3) 2204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d21(*(1, 2, 3)) 2214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d21(1, *(2, 3)) 2224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d21(1, 2, *(3,)) 2234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d21(1, 2, **{'c':3}) 2244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def d02(a=1, b=2): pass 2254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d02() 2264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d02(1) 2274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d02(1, 2) 2284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d02(*(1, 2)) 2294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d02(1, *(2,)) 2304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d02(1, **{'b':2}) 2314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d02(**{'a': 1, 'b': 2}) 2324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def d12(a, b=1, c=2): pass 2334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d12(1) 2344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d12(1, 2) 2354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d12(1, 2, 3) 2364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def d22(a, b, c=1, d=2): pass 2374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d22(1, 2) 2384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d22(1, 2, 3) 2394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d22(1, 2, 3, 4) 2404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def d01v(a=1, *rest): pass 2414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d01v() 2424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d01v(1) 2434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d01v(1, 2) 2444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d01v(*(1, 2, 3, 4)) 2454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d01v(*(1,)) 2464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d01v(**{'a':2}) 2474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def d11v(a, b=1, *rest): pass 2484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d11v(1) 2494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d11v(1, 2) 2504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d11v(1, 2, 3) 2514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def d21v(a, b, c=1, *rest): pass 2524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d21v(1, 2) 2534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d21v(1, 2, 3) 2544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d21v(1, 2, 3, 4) 2554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d21v(*(1, 2, 3, 4)) 2564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d21v(1, 2, **{'c': 3}) 2574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def d02v(a=1, b=2, *rest): pass 2584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d02v() 2594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d02v(1) 2604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d02v(1, 2) 2614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d02v(1, 2, 3) 2624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d02v(1, *(2, 3, 4)) 2634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d02v(**{'a': 1, 'b': 2}) 2644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def d12v(a, b=1, c=2, *rest): pass 2654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d12v(1) 2664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d12v(1, 2) 2674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d12v(1, 2, 3) 2684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d12v(1, 2, 3, 4) 2694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d12v(*(1, 2, 3, 4)) 2704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d12v(1, 2, *(3, 4, 5)) 2714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d12v(1, *(2,), **{'c': 3}) 2724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def d22v(a, b, c=1, d=2, *rest): pass 2734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d22v(1, 2) 2744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d22v(1, 2, 3) 2754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d22v(1, 2, 3, 4) 2764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d22v(1, 2, 3, 4, 5) 2774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d22v(*(1, 2, 3, 4)) 2784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d22v(1, 2, *(3, 4, 5)) 2794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d22v(1, *(2, 3), **{'d': 4}) 2804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def d31v((x)): pass 2814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d31v(1) 2824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def d32v((x,)): pass 2834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d32v((1,)) 2844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # keyword arguments after *arglist 2864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f(*args, **kwargs): 2874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return args, kwargs 2884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(f(1, x=2, *[3, 4], y=5), ((1, 3, 4), 2894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm {'x':2, 'y':5})) 2904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(SyntaxError, eval, "f(1, *(2,3), 4)") 2914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(SyntaxError, eval, "f(1, x=2, *(3,4), x=5)") 2924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Check ast errors in *args and *kwargs 2944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_syntax_error(self, "f(*g(1=2))") 2954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_syntax_error(self, "f(**g(1=2))") 2964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testLambdef(self): 2984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### lambdef: 'lambda' [varargslist] ':' test 2994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l1 = lambda : 0 3004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(l1(), 0) 3014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l2 = lambda : a[d] # XXX just testing the expression 3024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l3 = lambda : [2 < x for x in [-1, 3, 0L]] 3034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(l3(), [0, 1, 0]) 3044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l4 = lambda x = lambda y = lambda z=1 : z : y() : x() 3054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(l4(), 1) 3064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l5 = lambda x, y, z=2: x + y + z 3074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(l5(1, 2), 5) 3084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(l5(1, 2, 3), 6) 3094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_syntax_error(self, "lambda x: x = 2") 3104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_syntax_error(self, "lambda (None,): None") 3114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### stmt: simple_stmt | compound_stmt 3134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Tested below 3144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testSimpleStmt(self): 3164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### simple_stmt: small_stmt (';' small_stmt)* [';'] 3174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1; pass; del x 3184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def foo(): 3194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # verify statements that end with semi-colons 3204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1; pass; del x; 3214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm foo() 3224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### small_stmt: expr_stmt | print_stmt | pass_stmt | del_stmt | flow_stmt | import_stmt | global_stmt | access_stmt | exec_stmt 3244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Tested below 3254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testExprStmt(self): 3274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # (exprlist '=')* exprlist 3284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1 3294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1, 2, 3 3304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 3314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1, 2, 3 3324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = y = z = 1, 2, 3 3334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x, y, z = 1, 2, 3 3344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm abc = a, b, c = x, y, z = xyz = 1, 2, (3, 4) 3354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_syntax_error(self, "x + 1 = 1") 3374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_syntax_error(self, "a + 1 = b + 2") 3384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testPrintStmt(self): 3404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 'print' (test ',')* [test] 3414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import StringIO 3424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Can't test printing to real stdout without comparing output 3444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # which is not available in unittest. 3454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm save_stdout = sys.stdout 3464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sys.stdout = StringIO.StringIO() 3474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print 1, 2, 3 3494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print 1, 2, 3, 3504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print 3514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print 0 or 1, 0 or 1, 3524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print 0 or 1 3534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 'print' '>>' test ',' 3554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print >> sys.stdout, 1, 2, 3 3564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print >> sys.stdout, 1, 2, 3, 3574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print >> sys.stdout 3584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print >> sys.stdout, 0 or 1, 0 or 1, 3594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print >> sys.stdout, 0 or 1 3604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # test printing to an instance 3624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Gulp: 3634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def write(self, msg): pass 3644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm gulp = Gulp() 3664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print >> gulp, 1, 2, 3 3674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print >> gulp, 1, 2, 3, 3684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print >> gulp 3694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print >> gulp, 0 or 1, 0 or 1, 3704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print >> gulp, 0 or 1 3714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # test print >> None 3734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def driver(): 3744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm oldstdout = sys.stdout 3754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sys.stdout = Gulp() 3764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 3774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm tellme(Gulp()) 3784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm tellme() 3794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm finally: 3804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sys.stdout = oldstdout 3814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # we should see this once 3834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def tellme(file=sys.stdout): 3844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print >> file, 'hello world' 3854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm driver() 3874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # we should not see this at all 3894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def tellme(file=None): 3904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print >> file, 'goodbye universe' 3914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm driver() 3934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(sys.stdout.getvalue(), '''\ 3954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm1 2 3 3964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm1 2 3 3974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm1 1 1 3984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm1 2 3 3994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm1 2 3 4004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm1 1 1 4014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmhello world 4024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm''') 4034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sys.stdout = save_stdout 4044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # syntax errors 4064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_syntax_error(self, 'print ,') 4074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_syntax_error(self, 'print >> x,') 4084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testDelStmt(self): 4104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 'del' exprlist 4114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm abc = [1,2,3] 4124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x, y, z = abc 4134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm xyz = x, y, z 4144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm del abc 4164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm del x, y, (z, xyz) 4174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testPassStmt(self): 4194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 'pass' 4204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 4214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt 4234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Tested below 4244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testBreakStmt(self): 4264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 'break' 4274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm while 1: break 4284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testContinueStmt(self): 4304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 'continue' 4314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm i = 1 4324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm while i: i = 0; continue 4334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msg = "" 4354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm while not msg: 4364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msg = "ok" 4374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 4384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm continue 4394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msg = "continue failed to continue inside try" 4404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except: 4414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msg = "continue inside try called except block" 4424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if msg != "ok": 4434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail(msg) 4444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msg = "" 4464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm while not msg: 4474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msg = "finally block not called" 4484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 4494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm continue 4504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm finally: 4514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msg = "ok" 4524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if msg != "ok": 4534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail(msg) 4544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_break_continue_loop(self): 4564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # This test warrants an explanation. It is a test specifically for SF bugs 4574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # #463359 and #462937. The bug is that a 'break' statement executed or 4584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # exception raised inside a try/except inside a loop, *after* a continue 4594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # statement has been executed in that loop, will cause the wrong number of 4604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # arguments to be popped off the stack and the instruction pointer reset to 4614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # a very small number (usually 0.) Because of this, the following test 4624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # *must* written as a function, and the tracking vars *must* be function 4634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # arguments with default values. Otherwise, the test will loop and loop. 4644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_inner(extra_burning_oil = 1, count=0): 4664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm big_hippo = 2 4674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm while big_hippo: 4684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm count += 1 4694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 4704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if extra_burning_oil and big_hippo == 1: 4714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm extra_burning_oil -= 1 4724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm break 4734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm big_hippo -= 1 4744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm continue 4754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except: 4764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise 4774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if count > 2 or big_hippo <> 1: 4784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail("continue then break in try/except in loop broken!") 4794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_inner() 4804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testReturn(self): 4824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 'return' [testlist] 4834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def g1(): return 4844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def g2(): return 1 4854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm g1() 4864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = g2() 4874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_syntax_error(self, "class foo:return 1") 4884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testYield(self): 4904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_syntax_error(self, "class foo:yield 1") 4914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testRaise(self): 4934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 'raise' test [',' test] 4944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: raise RuntimeError, 'just testing' 4954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except RuntimeError: pass 4964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: raise KeyboardInterrupt 4974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except KeyboardInterrupt: pass 4984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testImport(self): 5004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 'import' dotted_as_names 5014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import sys 5024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import time, sys 5034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 'from' dotted_name 'import' ('*' | '(' import_as_names ')' | import_as_names) 5044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from time import time 5054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from time import (time) 5064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # not testable inside a function, but already done at top of the module 5074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # from sys import * 5084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from sys import path, argv 5094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from sys import (path, argv) 5104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from sys import (path, argv,) 5114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testGlobal(self): 5134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 'global' NAME (',' NAME)* 5144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm global a 5154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm global a, b 5164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm global one, two, three, four, five, six, seven, eight, nine, ten 5174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testExec(self): 5194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 'exec' expr ['in' expr [',' expr]] 5204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm z = None 5214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm del z 5224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec 'z=1+1\n' 5234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if z != 2: self.fail('exec \'z=1+1\'\\n') 5244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm del z 5254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec 'z=1+1' 5264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if z != 2: self.fail('exec \'z=1+1\'') 5274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm z = None 5284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm del z 5294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import types 5304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if hasattr(types, "UnicodeType"): 5314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec r"""if 1: 5324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec u'z=1+1\n' 5334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if z != 2: self.fail('exec u\'z=1+1\'\\n') 5344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm del z 5354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec u'z=1+1' 5364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if z != 2: self.fail('exec u\'z=1+1\'')""" 5374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm g = {} 5384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec 'z = 1' in g 5394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if g.has_key('__builtins__'): del g['__builtins__'] 5404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if g != {'z': 1}: self.fail('exec \'z = 1\' in g') 5414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm g = {} 5424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l = {} 5434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import warnings 5454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm warnings.filterwarnings("ignore", "global statement", module="<string>") 5464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec 'global a; a = 1; b = 2' in g, l 5474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if g.has_key('__builtins__'): del g['__builtins__'] 5484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if l.has_key('__builtins__'): del l['__builtins__'] 5494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if (g, l) != ({'a':1}, {'b':2}): 5504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail('exec ... in g (%s), l (%s)' %(g,l)) 5514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testAssert(self): 5534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # assert_stmt: 'assert' test [',' test] 5544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm assert 1 5554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm assert 1, 1 5564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm assert lambda x:x 5574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm assert 1, lambda x:x+1 5584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 5594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm assert 0, "msg" 5604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except AssertionError, e: 5614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(e.args[0], "msg") 5624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 5634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if __debug__: 5644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail("AssertionError not raised by assert 0") 5654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef 5674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Tested below 5684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testIf(self): 5704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] 5714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1: pass 5724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1: pass 5734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: pass 5744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 0: pass 5754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif 0: pass 5764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 0: pass 5774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif 0: pass 5784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif 0: pass 5794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif 0: pass 5804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: pass 5814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testWhile(self): 5834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 'while' test ':' suite ['else' ':' suite] 5844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm while 0: pass 5854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm while 0: pass 5864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: pass 5874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Issue1920: "while 0" is optimized away, 5894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ensure that the "else" clause is still present. 5904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 0 5914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm while 0: 5924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 5934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 5944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 2 5954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(x, 2) 5964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testFor(self): 5984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 'for' exprlist 'in' exprlist ':' suite ['else' ':' suite] 5994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for i in 1, 2, 3: pass 6004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for i, j, k in (): pass 6014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: pass 6024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Squares: 6034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(self, max): 6044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.max = max 6054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.sofar = [] 6064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __len__(self): return len(self.sofar) 6074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __getitem__(self, i): 6084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not 0 <= i < self.max: raise IndexError 6094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm n = len(self.sofar) 6104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm while n <= i: 6114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.sofar.append(n*n) 6124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm n = n+1 6134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self.sofar[i] 6144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm n = 0 6154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for x in Squares(10): n = n+x 6164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if n != 285: 6174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail('for over growing sequence') 6184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = [] 6204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for x, in [(1,), (2,), (3,)]: 6214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.append(x) 6224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result, [1, 2, 3]) 6234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testTry(self): 6254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### try_stmt: 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite] 6264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### | 'try' ':' suite 'finally' ':' suite 6274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### except_clause: 'except' [expr [('as' | ',') expr]] 6284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 6294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1/0 6304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except ZeroDivisionError: 6314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 6324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 6334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 6344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1/0 6354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except EOFError: pass 6364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except TypeError as msg: pass 6374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except RuntimeError, msg: pass 6384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except: pass 6394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: pass 6404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1/0 6414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except (EOFError, TypeError, ZeroDivisionError): pass 6424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1/0 6434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except (EOFError, TypeError, ZeroDivisionError), msg: pass 6444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: pass 6454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm finally: pass 6464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testSuite(self): 6484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # simple_stmt | NEWLINE INDENT NEWLINE* (stmt NEWLINE*)+ DEDENT 6494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1: pass 6504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1: 6514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 6524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1: 6534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 6544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 6554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 6564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 6574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 6584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 6594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 6604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 6614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testTest(self): 6634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### and_test ('or' and_test)* 6644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### and_test: not_test ('and' not_test)* 6654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### not_test: 'not' not_test | comparison 6664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not 1: pass 6674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1 and 1: pass 6684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1 or 1: pass 6694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not not not 1: pass 6704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not 1 and 1 and 1: pass 6714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1 and 1 or 1 and 1 and 1 or not 1 and 1: pass 6724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testComparison(self): 6744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### comparison: expr (comp_op expr)* 6754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' 6764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1: pass 6774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = (1 == 1) 6784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1 == 1: pass 6794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1 != 1: pass 6804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1 <> 1: pass 6814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1 < 1: pass 6824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1 > 1: pass 6834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1 <= 1: pass 6844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1 >= 1: pass 6854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1 is 1: pass 6864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1 is not 1: pass 6874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1 in (): pass 6884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1 not in (): pass 6894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 1 < 1 > 1 == 1 >= 1 <= 1 <> 1 != 1 in 1 not in 1 is 1 is not 1: pass 6904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testBinaryMaskOps(self): 6924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 & 1 6934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 ^ 1 6944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 | 1 6954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testShiftOps(self): 6974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 << 1 6984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 >> 1 6994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 << 1 >> 1 7004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testAdditiveOps(self): 7024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 7034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 + 1 7044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 - 1 - 1 7054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 - 1 + 1 - 1 + 1 7064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testMultiplicativeOps(self): 7084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 * 1 7094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 / 1 7104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 % 1 7114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 1 / 1 * 1 % 1 7124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testUnaryOps(self): 7144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = +1 7154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = -1 7164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = ~1 7174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = ~1 ^ 1 & 1 | 1 & 1 ^ -1 7184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = -1*1/1 + 1*1 - ---1*1 7194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testSelectors(self): 7214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### trailer: '(' [testlist] ')' | '[' subscript ']' | '.' NAME 7224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### subscript: expr | [expr] ':' [expr] 7234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import sys, time 7254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm c = sys.path[0] 7264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = time.time() 7274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = sys.modules['time'].time() 7284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a = '01234' 7294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm c = a[0] 7304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm c = a[-1] 7314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm s = a[0:5] 7324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm s = a[:5] 7334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm s = a[0:] 7344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm s = a[:] 7354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm s = a[-5:] 7364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm s = a[:-1] 7374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm s = a[-4:-3] 7384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # A rough test of SF bug 1333982. http://python.org/sf/1333982 7394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # The testing here is fairly incomplete. 7404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Test cases should include: commas with 1 and 2 colons 7414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d = {} 7424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d[1] = 1 7434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d[1,] = 2 7444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d[1,2] = 3 7454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d[1,2,3] = 4 7464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm L = list(d) 7474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm L.sort() 7484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEquals(str(L), '[1, (1,), (1, 2), (1, 2, 3)]') 7494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testAtoms(self): 7514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### atom: '(' [testlist] ')' | '[' [testlist] ']' | '{' [dictmaker] '}' | '`' testlist '`' | NAME | NUMBER | STRING 7524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### dictmaker: test ':' test (',' test ':' test)* [','] 7534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = (1) 7554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = (1 or 2 or 3) 7564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = (1 or 2 or 3, 2, 3) 7574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = [] 7594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = [1] 7604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = [1 or 2 or 3] 7614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = [1 or 2 or 3, 2, 3] 7624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = [] 7634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = {} 7654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = {'one': 1} 7664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = {'one': 1,} 7674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = {'one' or 'two': 1 or 2} 7684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = {'one': 1, 'two': 2} 7694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = {'one': 1, 'two': 2,} 7704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6} 7714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = `x` 7734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = `1 or 2 or 3` 7744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(`1,2`, '(1, 2)') 7754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = x 7774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 'x' 7784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 123 7794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### exprlist: expr (',' expr)* [','] 7814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### testlist: test (',' test)* [','] 7824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # These have been exercised enough above 7834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testClassdef(self): 7854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 'class' NAME ['(' [testlist] ')'] ':' suite 7864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class B: pass 7874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class B2(): pass 7884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class C1(B): pass 7894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class C2(B): pass 7904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class D(C1, C2, B): pass 7914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class C: 7924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def meth1(self): pass 7934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def meth2(self, arg): pass 7944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def meth3(self, a1, a2): pass 7954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE 7964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # decorators: decorator+ 7974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # decorated: decorators (classdef | funcdef) 7984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def class_decorator(x): 7994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x.decorated = True 8004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return x 8014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @class_decorator 8024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class G: 8034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 8044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(G.decorated, True) 8054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testListcomps(self): 8074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # list comprehension tests 8084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm nums = [1, 2, 3, 4, 5] 8094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm strs = ["Apple", "Banana", "Coconut"] 8104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm spcs = [" Apple", " Banana ", "Coco nut "] 8114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual([s.strip() for s in spcs], ['Apple', 'Banana', 'Coco nut']) 8134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual([3 * x for x in nums], [3, 6, 9, 12, 15]) 8144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual([x for x in nums if x > 2], [3, 4, 5]) 8154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual([(i, s) for i in nums for s in strs], 8164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [(1, 'Apple'), (1, 'Banana'), (1, 'Coconut'), 8174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (2, 'Apple'), (2, 'Banana'), (2, 'Coconut'), 8184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (3, 'Apple'), (3, 'Banana'), (3, 'Coconut'), 8194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (4, 'Apple'), (4, 'Banana'), (4, 'Coconut'), 8204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (5, 'Apple'), (5, 'Banana'), (5, 'Coconut')]) 8214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual([(i, s) for i in nums for s in [f for f in strs if "n" in f]], 8224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [(1, 'Banana'), (1, 'Coconut'), (2, 'Banana'), (2, 'Coconut'), 8234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (3, 'Banana'), (3, 'Coconut'), (4, 'Banana'), (4, 'Coconut'), 8244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (5, 'Banana'), (5, 'Coconut')]) 8254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual([(lambda a:[a**i for i in range(a+1)])(j) for j in range(5)], 8264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [[1], [1, 1], [1, 2, 4], [1, 3, 9, 27], [1, 4, 16, 64, 256]]) 8274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_in_func(l): 8294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return [None < x < 3 for x in l if x > 2] 8304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(test_in_func(nums), [False, False, False]) 8324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nested_front(): 8344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual([[y for y in [x, x + 1]] for x in [1,3,5]], 8354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [[1, 2], [3, 4], [5, 6]]) 8364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_nested_front() 8384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_syntax_error(self, "[i, s for i in nums for s in strs]") 8404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_syntax_error(self, "[x if y]") 8414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suppliers = [ 8434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (1, "Boeing"), 8444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (2, "Ford"), 8454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (3, "Macdonalds") 8464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 8474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parts = [ 8494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (10, "Airliner"), 8504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (20, "Engine"), 8514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (30, "Cheeseburger") 8524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 8534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suppart = [ 8554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (1, 10), (1, 20), (2, 20), (3, 30) 8564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 8574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = [ 8594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (sname, pname) 8604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for (sno, sname) in suppliers 8614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for (pno, pname) in parts 8624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for (sp_sno, sp_pno) in suppart 8634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if sno == sp_sno and pno == sp_pno 8644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 8654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(x, [('Boeing', 'Airliner'), ('Boeing', 'Engine'), ('Ford', 'Engine'), 8674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('Macdonalds', 'Cheeseburger')]) 8684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testGenexps(self): 8704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # generator expression tests 8714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm g = ([x for x in range(10)] for x in range(1)) 8724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(g.next(), [x for x in range(10)]) 8734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 8744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm g.next() 8754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail('should produce StopIteration exception') 8764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except StopIteration: 8774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 8784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a = 1 8804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 8814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm g = (a for d in a) 8824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm g.next() 8834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail('should produce TypeError') 8844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except TypeError: 8854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 8864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(list((x, y) for x in 'abcd' for y in 'abcd'), [(x, y) for x in 'abcd' for y in 'abcd']) 8884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(list((x, y) for x in 'ab' for y in 'xy'), [(x, y) for x in 'ab' for y in 'xy']) 8894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a = [x for x in range(10)] 8914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm b = (x for x in (y for y in a)) 8924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(sum(b), sum([x for x in range(10)])) 8934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(sum(x**2 for x in range(10)), sum([x**2 for x in range(10)])) 8954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(sum(x*x for x in range(10) if x%2), sum([x*x for x in range(10) if x%2])) 8964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(sum(x for x in (y for y in range(10))), sum([x for x in range(10)])) 8974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(sum(x for x in (y for y in (z for z in range(10)))), sum([x for x in range(10)])) 8984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(sum(x for x in [y for y in (z for z in range(10))]), sum([x for x in range(10)])) 8994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(sum(x for x in (y for y in (z for z in range(10) if True)) if True), sum([x for x in range(10)])) 9004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(sum(x for x in (y for y in (z for z in range(10) if True) if False) if True), 0) 9014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_syntax_error(self, "foo(x for x in range(10), 100)") 9024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_syntax_error(self, "foo(100, x for x in range(10))") 9034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testComprehensionSpecials(self): 9054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # test for outmost iterable precomputation 9064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 10; g = (i for i in range(x)); x = 5 9074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(list(g)), 10) 9084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # This should hold, since we're only precomputing outmost iterable. 9104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 10; t = False; g = ((i,j) for i in range(x) if t for j in range(x)) 9114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = 5; t = True; 9124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual([(i,j) for i in range(10) for j in range(5)], list(g)) 9134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Grammar allows multiple adjacent 'if's in listcomps and genexps, 9154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # even though it's silly. Make sure it works (ifelse broke this.) 9164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual([ x for x in range(10) if x % 2 if x % 3 ], [1, 5, 7]) 9174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(list(x for x in range(10) if x % 2 if x % 3), [1, 5, 7]) 9184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # verify unpacking single element tuples in listcomp/genexp. 9204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual([x for x, in [(4,), (5,), (6,)]], [4, 5, 6]) 9214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(list(x for x, in [(7,), (8,), (9,)]), [7, 8, 9]) 9224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_with_statement(self): 9244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class manager(object): 9254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __enter__(self): 9264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return (1, 2) 9274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __exit__(self, *args): 9284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 9294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with manager(): 9314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 9324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with manager() as x: 9334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 9344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with manager() as (x, y): 9354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 9364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with manager(), manager(): 9374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 9384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with manager() as x, manager() as y: 9394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 9404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with manager() as x, manager(): 9414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 9424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testIfElseExpr(self): 9444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Test ifelse expressions in various cases 9454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _checkeval(msg, ret): 9464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "helper to check that evaluation of expressions is done correctly" 9474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print x 9484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return ret 9494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual([ x() for x in lambda: True, lambda: False if x() ], [True]) 9514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual([ x() for x in (lambda: True, lambda: False) if x() ], [True]) 9524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual([ x(False) for x in (lambda x: False if x else True, lambda x: True if x else False) if x(False) ], [True]) 9534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((5 if 1 else _checkeval("check 1", 0)), 5) 9544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((_checkeval("check 2", 0) if 0 else 5), 5) 9554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((5 and 6 if 0 else 1), 1) 9564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(((5 and 6) if 0 else 1), 1) 9574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((5 and (6 if 1 else 1)), 6) 9584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((0 or _checkeval("check 3", 2) if 0 else 3), 3) 9594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((1 or _checkeval("check 4", 2) if 1 else _checkeval("check 5", 3)), 1) 9604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((0 or 5 if 1 else _checkeval("check 6", 3)), 5) 9614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((not 5 if 1 else 1), False) 9624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((not 5 if 0 else 1), 1) 9634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((6 + 1 if 1 else 2), 7) 9644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((6 - 1 if 1 else 2), 5) 9654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((6 * 2 if 1 else 4), 12) 9664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((6 / 2 if 1 else 3), 3) 9674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((6 < 4 if 0 else 2), 2) 9684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_main(): 9714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm run_unittest(TokenTests, GrammarTests) 9724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == '__main__': 9744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_main() 975