test_compile.py revision 66b1259dbc2cf4aaefd779d76c4a83fe8003bafd
1from test.test_support import verbose, TestFailed 2 3if verbose: 4 print "Testing whether compiler catches assignment to __debug__" 5 6try: 7 compile('__debug__ = 1', '?', 'single') 8except SyntaxError: 9 pass 10 11import __builtin__ 12prev = __builtin__.__debug__ 13setattr(__builtin__, '__debug__', 'sure') 14setattr(__builtin__, '__debug__', prev) 15 16if verbose: 17 print 'Running tests on argument handling' 18 19try: 20 exec 'def f(a, a): pass' 21 raise TestFailed, "duplicate arguments" 22except SyntaxError: 23 pass 24 25if verbose: 26 print "compiling string with syntax error" 27 28try: 29 compile("1+*3", "filename", "exec") 30except SyntaxError, detail: 31 if not detail.filename == "filename": 32 raise TestFailed, "expected 'filename', got %r" % detail.filename 33 34try: 35 exec 'def f(a = 0, a = 1): pass' 36 raise TestFailed, "duplicate keyword arguments" 37except SyntaxError: 38 pass 39 40try: 41 exec 'def f(a): global a; a = 1' 42 raise TestFailed, "variable is global and local" 43except SyntaxError: 44 pass 45 46if verbose: 47 print "testing complex args" 48 49def comp_args((a, b)): 50 print a,b 51 52comp_args((1, 2)) 53 54def comp_args((a, b)=(3, 4)): 55 print a, b 56 57comp_args((1, 2)) 58comp_args() 59 60def comp_args(a, (b, c)): 61 print a, b, c 62 63comp_args(1, (2, 3)) 64 65def comp_args(a=2, (b, c)=(3, 4)): 66 print a, b, c 67 68comp_args(1, (2, 3)) 69comp_args() 70 71try: 72 exec 'def f(a=1, (b, c)): pass' 73 raise TestFailed, "non-default args after default" 74except SyntaxError: 75 pass 76 77if verbose: 78 print "testing bad float literals" 79 80def expect_error(s): 81 try: 82 eval(s) 83 raise TestFailed("%r accepted" % s) 84 except SyntaxError: 85 pass 86 87expect_error("2e") 88expect_error("2.0e+") 89expect_error("1e-") 90expect_error("3-4e/21") 91 92 93if verbose: 94 print "testing literals with leading zeroes" 95 96def expect_same(test_source, expected): 97 got = eval(test_source) 98 if got != expected: 99 raise TestFailed("eval(%r) gave %r, but expected %r" % 100 (test_source, got, expected)) 101 102expect_error("077787") 103expect_error("0xj") 104expect_error("0x.") 105expect_error("0e") 106expect_same("0777", 511) 107expect_same("0777L", 511) 108expect_same("000777", 511) 109expect_same("0xff", 255) 110expect_same("0xffL", 255) 111expect_same("0XfF", 255) 112expect_same("0777.", 777) 113expect_same("0777.0", 777) 114expect_same("000000000000000000000000000000000000000000000000000777e0", 777) 115expect_same("0777e1", 7770) 116expect_same("0e0", 0) 117expect_same("0000E-012", 0) 118expect_same("09.5", 9.5) 119expect_same("0777j", 777j) 120expect_same("00j", 0j) 121expect_same("00.0", 0) 122expect_same("0e3", 0) 123expect_same("090000000000000.", 90000000000000.) 124expect_same("090000000000000.0000000000000000000000", 90000000000000.) 125expect_same("090000000000000e0", 90000000000000.) 126expect_same("090000000000000e-0", 90000000000000.) 127expect_same("090000000000000j", 90000000000000j) 128expect_error("090000000000000") # plain octal literal w/ decimal digit 129expect_error("080000000000000") # plain octal literal w/ decimal digit 130expect_error("000000000000009") # plain octal literal w/ decimal digit 131expect_error("000000000000008") # plain octal literal w/ decimal digit 132expect_same("000000000000007", 7) 133expect_same("000000000000008.", 8.) 134expect_same("000000000000009.", 9.) 135 136# Verify treatment of unary minus on negative numbers SF bug #660455 137import warnings 138warnings.filterwarnings("ignore", "hex/oct constants", FutureWarning) 139# XXX Of course the following test will have to be changed in Python 2.4 140# This test is in a <string> so the filterwarnings() can affect it 141exec """ 142expect_same("0xffffffff", -1) 143expect_same("-0xffffffff", 1) 144""" 145