blob: 1a2009c6ebef5956dedb391e09f2049c5b53adf6 [file] [log] [blame]
Raymond Hettinger8a99b502003-06-23 13:36:57 +00001import unittest
Raymond Hettinger8a99b502003-06-23 13:36:57 +00002import sys
Georg Brandlfc8eef32008-03-28 12:11:56 +00003import _ast
Raymond Hettinger8a99b502003-06-23 13:36:57 +00004from test import test_support
Peter Schneider-Kampfdee0f02000-07-25 22:15:45 +00005
Raymond Hettinger8a99b502003-06-23 13:36:57 +00006class TestSpecifics(unittest.TestCase):
Jeremy Hylton778e2652001-11-09 19:50:08 +00007
Benjamin Petersone36199b2009-11-12 23:39:44 +00008 def test_no_ending_newline(self):
9 compile("hi", "<test>", "exec")
10 compile("hi\r", "<test>", "exec")
11
12 def test_empty(self):
13 compile("", "<test>", "exec")
14
15 def test_other_newlines(self):
16 compile("\r\n", "<test>", "exec")
17 compile("\r", "<test>", "exec")
18 compile("hi\r\nstuff\r\ndef f():\n pass\r", "<test>", "exec")
19 compile("this_is\rreally_old_mac\rdef f():\n pass", "<test>", "exec")
20
Raymond Hettinger8a99b502003-06-23 13:36:57 +000021 def test_debug_assignment(self):
22 # catch assignments to __debug__
23 self.assertRaises(SyntaxError, compile, '__debug__ = 1', '?', 'single')
24 import __builtin__
25 prev = __builtin__.__debug__
26 setattr(__builtin__, '__debug__', 'sure')
27 setattr(__builtin__, '__debug__', prev)
Jeremy Hylton778e2652001-11-09 19:50:08 +000028
Raymond Hettinger8a99b502003-06-23 13:36:57 +000029 def test_argument_handling(self):
30 # detect duplicate positional and keyword arguments
31 self.assertRaises(SyntaxError, eval, 'lambda a,a:0')
32 self.assertRaises(SyntaxError, eval, 'lambda a,a=1:0')
33 self.assertRaises(SyntaxError, eval, 'lambda a=1,a=1:0')
34 try:
35 exec 'def f(a, a): pass'
36 self.fail("duplicate arguments")
37 except SyntaxError:
38 pass
39 try:
40 exec 'def f(a = 0, a = 1): pass'
41 self.fail("duplicate keyword arguments")
42 except SyntaxError:
43 pass
44 try:
45 exec 'def f(a): global a; a = 1'
46 self.fail("variable is global and local")
47 except SyntaxError:
48 pass
Jeremy Hylton778e2652001-11-09 19:50:08 +000049
Raymond Hettinger8a99b502003-06-23 13:36:57 +000050 def test_syntax_error(self):
51 self.assertRaises(SyntaxError, compile, "1+*3", "filename", "exec")
Peter Schneider-Kampfdee0f02000-07-25 22:15:45 +000052
Georg Brandle06cf452007-06-07 13:23:24 +000053 def test_none_keyword_arg(self):
54 self.assertRaises(SyntaxError, compile, "f(None=1)", "<string>", "exec")
55
Raymond Hettinger8a99b502003-06-23 13:36:57 +000056 def test_duplicate_global_local(self):
57 try:
58 exec 'def f(a): global a; a = 1'
59 self.fail("variable is global and local")
60 except SyntaxError:
61 pass
Peter Schneider-Kampfdee0f02000-07-25 22:15:45 +000062
Raymond Hettinger66bd2332004-08-02 08:30:07 +000063 def test_exec_with_general_mapping_for_locals(self):
64
65 class M:
66 "Test mapping interface versus possible calls from eval()."
67 def __getitem__(self, key):
68 if key == 'a':
69 return 12
70 raise KeyError
71 def __setitem__(self, key, value):
72 self.results = (key, value)
73 def keys(self):
74 return list('xyz')
75
76 m = M()
77 g = globals()
78 exec 'z = a' in g, m
79 self.assertEqual(m.results, ('z', 12))
80 try:
81 exec 'z = b' in g, m
82 except NameError:
83 pass
84 else:
85 self.fail('Did not detect a KeyError')
86 exec 'z = dir()' in g, m
87 self.assertEqual(m.results, ('z', list('xyz')))
88 exec 'z = globals()' in g, m
89 self.assertEqual(m.results, ('z', g))
90 exec 'z = locals()' in g, m
91 self.assertEqual(m.results, ('z', m))
92 try:
93 exec 'z = b' in m
94 except TypeError:
95 pass
96 else:
97 self.fail('Did not validate globals as a real dict')
98
99 class A:
100 "Non-mapping"
101 pass
102 m = A()
103 try:
104 exec 'z = a' in g, m
105 except TypeError:
106 pass
107 else:
108 self.fail('Did not validate locals as a mapping')
109
110 # Verify that dict subclasses work as well
111 class D(dict):
112 def __getitem__(self, key):
113 if key == 'a':
114 return 12
115 return dict.__getitem__(self, key)
116 d = D()
117 exec 'z = a' in g, d
118 self.assertEqual(d['z'], 12)
119
Neal Norwitz6ab080c2005-10-24 00:08:10 +0000120 def test_extended_arg(self):
121 longexpr = 'x = x or ' + '-x' * 2500
122 code = '''
123def f(x):
124 %s
125 %s
126 %s
127 %s
128 %s
129 %s
130 %s
131 %s
132 %s
133 %s
134 # the expressions above have no effect, x == argument
135 while x:
136 x -= 1
137 # EXTENDED_ARG/JUMP_ABSOLUTE here
138 return x
139''' % ((longexpr,)*10)
140 exec code
141 self.assertEqual(f(5), 0)
142
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000143 def test_complex_args(self):
Senthil Kumarance8e33a2010-01-08 19:04:16 +0000144
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000145 def comp_args((a, b)):
146 return a,b
147 self.assertEqual(comp_args((1, 2)), (1, 2))
Thomas Heller6b17abf2002-07-09 09:23:27 +0000148
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000149 def comp_args((a, b)=(3, 4)):
150 return a, b
151 self.assertEqual(comp_args((1, 2)), (1, 2))
152 self.assertEqual(comp_args(), (3, 4))
Jeremy Hylton047e2c92001-01-19 03:25:56 +0000153
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000154 def comp_args(a, (b, c)):
155 return a, b, c
156 self.assertEqual(comp_args(1, (2, 3)), (1, 2, 3))
Jeremy Hylton121b6eb2001-02-19 23:53:42 +0000157
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000158 def comp_args(a=2, (b, c)=(3, 4)):
159 return a, b, c
160 self.assertEqual(comp_args(1, (2, 3)), (1, 2, 3))
161 self.assertEqual(comp_args(), (2, 3, 4))
Jeremy Hylton121b6eb2001-02-19 23:53:42 +0000162
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000163 def test_argument_order(self):
164 try:
165 exec 'def f(a=1, (b, c)): pass'
166 self.fail("non-default args after default")
167 except SyntaxError:
168 pass
Jeremy Hylton121b6eb2001-02-19 23:53:42 +0000169
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000170 def test_float_literals(self):
171 # testing bad float literals
172 self.assertRaises(SyntaxError, eval, "2e")
173 self.assertRaises(SyntaxError, eval, "2.0e+")
174 self.assertRaises(SyntaxError, eval, "1e-")
175 self.assertRaises(SyntaxError, eval, "3-4e/21")
Jeremy Hylton121b6eb2001-02-19 23:53:42 +0000176
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000177 def test_indentation(self):
178 # testing compile() of indented block w/o trailing newline"
179 s = """
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000180if 1:
181 if 2:
182 pass"""
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000183 compile(s, "<string>", "exec")
184
Neal Norwitzed657552006-07-10 00:04:44 +0000185 # This test is probably specific to CPython and may not generalize
186 # to other implementations. We are trying to ensure that when
187 # the first line of code starts after 256, correct line numbers
188 # in tracebacks are still produced.
189 def test_leading_newlines(self):
190 s256 = "".join(["\n"] * 256 + ["spam"])
191 co = compile(s256, 'fn', 'exec')
192 self.assertEqual(co.co_firstlineno, 257)
193 self.assertEqual(co.co_lnotab, '')
194
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000195 def test_literals_with_leading_zeroes(self):
196 for arg in ["077787", "0xj", "0x.", "0e", "090000000000000",
Eric Smith9ff19b52008-03-17 17:32:20 +0000197 "080000000000000", "000000000000009", "000000000000008",
198 "0b42", "0BADCAFE", "0o123456789", "0b1.1", "0o4.2",
Amaury Forgeot d'Arc52167212008-04-24 18:07:05 +0000199 "0b101j2", "0o153j2", "0b100e1", "0o777e1", "0o8", "0o78"]:
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000200 self.assertRaises(SyntaxError, eval, arg)
201
202 self.assertEqual(eval("0777"), 511)
203 self.assertEqual(eval("0777L"), 511)
204 self.assertEqual(eval("000777"), 511)
205 self.assertEqual(eval("0xff"), 255)
206 self.assertEqual(eval("0xffL"), 255)
207 self.assertEqual(eval("0XfF"), 255)
208 self.assertEqual(eval("0777."), 777)
209 self.assertEqual(eval("0777.0"), 777)
210 self.assertEqual(eval("000000000000000000000000000000000000000000000000000777e0"), 777)
211 self.assertEqual(eval("0777e1"), 7770)
212 self.assertEqual(eval("0e0"), 0)
213 self.assertEqual(eval("0000E-012"), 0)
214 self.assertEqual(eval("09.5"), 9.5)
215 self.assertEqual(eval("0777j"), 777j)
216 self.assertEqual(eval("00j"), 0j)
217 self.assertEqual(eval("00.0"), 0)
218 self.assertEqual(eval("0e3"), 0)
219 self.assertEqual(eval("090000000000000."), 90000000000000.)
220 self.assertEqual(eval("090000000000000.0000000000000000000000"), 90000000000000.)
221 self.assertEqual(eval("090000000000000e0"), 90000000000000.)
222 self.assertEqual(eval("090000000000000e-0"), 90000000000000.)
223 self.assertEqual(eval("090000000000000j"), 90000000000000j)
224 self.assertEqual(eval("000000000000007"), 7)
225 self.assertEqual(eval("000000000000008."), 8.)
226 self.assertEqual(eval("000000000000009."), 9.)
Eric Smith9ff19b52008-03-17 17:32:20 +0000227 self.assertEqual(eval("0b101010"), 42)
228 self.assertEqual(eval("-0b000000000010"), -2)
229 self.assertEqual(eval("0o777"), 511)
230 self.assertEqual(eval("-0o0000010"), -8)
Mark Dickinson64b7e502008-07-16 09:40:03 +0000231 self.assertEqual(eval("020000000000.0"), 20000000000.0)
232 self.assertEqual(eval("037777777777e0"), 37777777777.0)
233 self.assertEqual(eval("01000000000000000000000.0"),
234 1000000000000000000000.0)
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000235
236 def test_unary_minus(self):
237 # Verify treatment of unary minus on negative numbers SF bug #660455
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000238 if sys.maxint == 2147483647:
239 # 32-bit machine
240 all_one_bits = '0xffffffff'
241 self.assertEqual(eval(all_one_bits), 4294967295L)
242 self.assertEqual(eval("-" + all_one_bits), -4294967295L)
243 elif sys.maxint == 9223372036854775807:
244 # 64-bit machine
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000245 all_one_bits = '0xffffffffffffffff'
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000246 self.assertEqual(eval(all_one_bits), 18446744073709551615L)
247 self.assertEqual(eval("-" + all_one_bits), -18446744073709551615L)
248 else:
249 self.fail("How many bits *does* this machine have???")
Neil Schemenauer6ec6ab02006-07-09 21:19:29 +0000250 # Verify treatment of contant folding on -(sys.maxint+1)
251 # i.e. -2147483648 on 32 bit platforms. Should return int, not long.
Ezio Melottib0f5adc2010-01-24 16:58:36 +0000252 self.assertIsInstance(eval("%s" % (-sys.maxint - 1)), int)
253 self.assertIsInstance(eval("%s" % (-sys.maxint - 2)), long)
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000254
Neal Norwitz28746ab2006-07-09 22:14:42 +0000255 if sys.maxint == 9223372036854775807:
256 def test_32_63_bit_values(self):
257 a = +4294967296 # 1 << 32
258 b = -4294967296 # 1 << 32
259 c = +281474976710656 # 1 << 48
260 d = -281474976710656 # 1 << 48
261 e = +4611686018427387904 # 1 << 62
262 f = -4611686018427387904 # 1 << 62
263 g = +9223372036854775807 # 1 << 63 - 1
264 h = -9223372036854775807 # 1 << 63 - 1
265
266 for variable in self.test_32_63_bit_values.func_code.co_consts:
267 if variable is not None:
Ezio Melottib0f5adc2010-01-24 16:58:36 +0000268 self.assertIsInstance(variable, int)
Neal Norwitz28746ab2006-07-09 22:14:42 +0000269
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000270 def test_sequence_unpacking_error(self):
271 # Verify sequence packing/unpacking with "or". SF bug #757818
272 i,j = (1, -1) or (-1, 1)
273 self.assertEqual(i, 1)
274 self.assertEqual(j, -1)
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000275
Raymond Hettinger11a70c72004-07-17 21:46:25 +0000276 def test_none_assignment(self):
277 stmts = [
278 'None = 0',
279 'None += 0',
280 '__builtins__.None = 0',
281 'def None(): pass',
282 'class None: pass',
283 '(a, None) = 0, 0',
284 'for None in range(10): pass',
285 'def f(None): pass',
Benjamin Peterson565e1b62009-06-13 03:46:30 +0000286 'import None',
287 'import x as None',
288 'from x import None',
289 'from x import y as None'
Raymond Hettinger11a70c72004-07-17 21:46:25 +0000290 ]
291 for stmt in stmts:
292 stmt += "\n"
293 self.assertRaises(SyntaxError, compile, stmt, 'tmp', 'single')
294 self.assertRaises(SyntaxError, compile, stmt, 'tmp', 'exec')
Benjamin Peterson565e1b62009-06-13 03:46:30 +0000295 # This is ok.
296 compile("from None import x", "tmp", "exec")
Benjamin Petersond1f5a592009-06-13 13:06:21 +0000297 compile("from x import None as y", "tmp", "exec")
298 compile("import None as x", "tmp", "exec")
Tim Petersd507dab2001-08-30 20:51:59 +0000299
Anthony Baxter1a4ddae2004-08-31 10:07:13 +0000300 def test_import(self):
301 succeed = [
302 'import sys',
303 'import os, sys',
Neal Norwitzfb48afa2006-07-08 05:31:37 +0000304 'import os as bar',
305 'import os.path as bar',
Anthony Baxter1a4ddae2004-08-31 10:07:13 +0000306 'from __future__ import nested_scopes, generators',
307 'from __future__ import (nested_scopes,\ngenerators)',
308 'from __future__ import (nested_scopes,\ngenerators,)',
309 'from sys import stdin, stderr, stdout',
310 'from sys import (stdin, stderr,\nstdout)',
311 'from sys import (stdin, stderr,\nstdout,)',
312 'from sys import (stdin\n, stderr, stdout)',
313 'from sys import (stdin\n, stderr, stdout,)',
314 'from sys import stdin as si, stdout as so, stderr as se',
315 'from sys import (stdin as si, stdout as so, stderr as se)',
316 'from sys import (stdin as si, stdout as so, stderr as se,)',
317 ]
318 fail = [
319 'import (os, sys)',
320 'import (os), (sys)',
321 'import ((os), (sys))',
322 'import (sys',
323 'import sys)',
324 'import (os,)',
Neal Norwitzfb48afa2006-07-08 05:31:37 +0000325 'import os As bar',
326 'import os.path a bar',
Georg Brandl9575fb22006-07-08 12:15:27 +0000327 'from sys import stdin As stdout',
328 'from sys import stdin a stdout',
Anthony Baxter1a4ddae2004-08-31 10:07:13 +0000329 'from (sys) import stdin',
330 'from __future__ import (nested_scopes',
331 'from __future__ import nested_scopes)',
332 'from __future__ import nested_scopes,\ngenerators',
333 'from sys import (stdin',
334 'from sys import stdin)',
335 'from sys import stdin, stdout,\nstderr',
336 'from sys import stdin si',
337 'from sys import stdin,'
338 'from sys import (*)',
339 'from sys import (stdin,, stdout, stderr)',
340 'from sys import (stdin, stdout),',
341 ]
342 for stmt in succeed:
343 compile(stmt, 'tmp', 'exec')
344 for stmt in fail:
345 self.assertRaises(SyntaxError, compile, stmt, 'tmp', 'exec')
346
Raymond Hettinger9047c8f2004-10-24 00:10:06 +0000347 def test_for_distinct_code_objects(self):
348 # SF bug 1048870
349 def f():
350 f1 = lambda x=1: x
351 f2 = lambda x=2: x
352 return f1, f2
353 f1, f2 = f()
354 self.assertNotEqual(id(f1.func_code), id(f2.func_code))
355
Benjamin Peterson0dee9c12010-03-17 20:41:42 +0000356 def test_lambda_doc(self):
357 l = lambda: "foo"
358 self.assertIsNone(l.__doc__)
359
Neal Norwitze98ccf62006-03-23 05:39:47 +0000360 def test_unicode_encoding(self):
361 code = u"# -*- coding: utf-8 -*-\npass\n"
362 self.assertRaises(SyntaxError, compile, code, "tmp", "exec")
363
Nick Coghlaneadee9a2006-03-13 12:31:58 +0000364 def test_subscripts(self):
365 # SF bug 1448804
366 # Class to make testing subscript results easy
367 class str_map(object):
368 def __init__(self):
369 self.data = {}
370 def __getitem__(self, key):
371 return self.data[str(key)]
372 def __setitem__(self, key, value):
373 self.data[str(key)] = value
374 def __delitem__(self, key):
375 del self.data[str(key)]
376 def __contains__(self, key):
377 return str(key) in self.data
378 d = str_map()
379 # Index
380 d[1] = 1
381 self.assertEqual(d[1], 1)
382 d[1] += 1
383 self.assertEqual(d[1], 2)
384 del d[1]
Ezio Melottiaa980582010-01-23 23:04:36 +0000385 self.assertNotIn(1, d)
Nick Coghlaneadee9a2006-03-13 12:31:58 +0000386 # Tuple of indices
387 d[1, 1] = 1
388 self.assertEqual(d[1, 1], 1)
389 d[1, 1] += 1
390 self.assertEqual(d[1, 1], 2)
391 del d[1, 1]
Ezio Melottiaa980582010-01-23 23:04:36 +0000392 self.assertNotIn((1, 1), d)
Nick Coghlaneadee9a2006-03-13 12:31:58 +0000393 # Simple slice
394 d[1:2] = 1
395 self.assertEqual(d[1:2], 1)
396 d[1:2] += 1
397 self.assertEqual(d[1:2], 2)
398 del d[1:2]
Ezio Melottiaa980582010-01-23 23:04:36 +0000399 self.assertNotIn(slice(1, 2), d)
Nick Coghlaneadee9a2006-03-13 12:31:58 +0000400 # Tuple of simple slices
401 d[1:2, 1:2] = 1
402 self.assertEqual(d[1:2, 1:2], 1)
403 d[1:2, 1:2] += 1
404 self.assertEqual(d[1:2, 1:2], 2)
405 del d[1:2, 1:2]
Ezio Melottiaa980582010-01-23 23:04:36 +0000406 self.assertNotIn((slice(1, 2), slice(1, 2)), d)
Nick Coghlaneadee9a2006-03-13 12:31:58 +0000407 # Extended slice
408 d[1:2:3] = 1
409 self.assertEqual(d[1:2:3], 1)
410 d[1:2:3] += 1
411 self.assertEqual(d[1:2:3], 2)
412 del d[1:2:3]
Ezio Melottiaa980582010-01-23 23:04:36 +0000413 self.assertNotIn(slice(1, 2, 3), d)
Nick Coghlaneadee9a2006-03-13 12:31:58 +0000414 # Tuple of extended slices
415 d[1:2:3, 1:2:3] = 1
416 self.assertEqual(d[1:2:3, 1:2:3], 1)
417 d[1:2:3, 1:2:3] += 1
418 self.assertEqual(d[1:2:3, 1:2:3], 2)
419 del d[1:2:3, 1:2:3]
Ezio Melottiaa980582010-01-23 23:04:36 +0000420 self.assertNotIn((slice(1, 2, 3), slice(1, 2, 3)), d)
Nick Coghlaneadee9a2006-03-13 12:31:58 +0000421 # Ellipsis
422 d[...] = 1
423 self.assertEqual(d[...], 1)
424 d[...] += 1
425 self.assertEqual(d[...], 2)
426 del d[...]
Ezio Melottiaa980582010-01-23 23:04:36 +0000427 self.assertNotIn(Ellipsis, d)
Nick Coghlaneadee9a2006-03-13 12:31:58 +0000428 # Tuple of Ellipses
429 d[..., ...] = 1
430 self.assertEqual(d[..., ...], 1)
431 d[..., ...] += 1
432 self.assertEqual(d[..., ...], 2)
433 del d[..., ...]
Ezio Melottiaa980582010-01-23 23:04:36 +0000434 self.assertNotIn((Ellipsis, Ellipsis), d)
Nick Coghlaneadee9a2006-03-13 12:31:58 +0000435
Jeremy Hylton37075c52007-02-27 01:01:59 +0000436 def test_mangling(self):
437 class A:
438 def f():
439 __mangled = 1
440 __not_mangled__ = 2
441 import __mangled_mod
442 import __package__.module
443
Ezio Melottiaa980582010-01-23 23:04:36 +0000444 self.assertIn("_A__mangled", A.f.func_code.co_varnames)
445 self.assertIn("__not_mangled__", A.f.func_code.co_varnames)
446 self.assertIn("_A__mangled_mod", A.f.func_code.co_varnames)
447 self.assertIn("__package__", A.f.func_code.co_varnames)
Jeremy Hylton37075c52007-02-27 01:01:59 +0000448
Georg Brandlfc8eef32008-03-28 12:11:56 +0000449 def test_compile_ast(self):
450 fname = __file__
451 if fname.lower().endswith(('pyc', 'pyo')):
452 fname = fname[:-1]
453 with open(fname, 'r') as f:
454 fcontents = f.read()
455 sample_code = [
456 ['<assign>', 'x = 5'],
457 ['<print1>', 'print 1'],
458 ['<printv>', 'print v'],
459 ['<printTrue>', 'print True'],
460 ['<printList>', 'print []'],
461 ['<ifblock>', """if True:\n pass\n"""],
462 ['<forblock>', """for n in [1, 2, 3]:\n print n\n"""],
463 ['<deffunc>', """def foo():\n pass\nfoo()\n"""],
464 [fname, fcontents],
465 ]
466
467 for fname, code in sample_code:
468 co1 = compile(code, '%s1' % fname, 'exec')
469 ast = compile(code, '%s2' % fname, 'exec', _ast.PyCF_ONLY_AST)
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000470 self.assertTrue(type(ast) == _ast.Module)
Georg Brandlfc8eef32008-03-28 12:11:56 +0000471 co2 = compile(ast, '%s3' % fname, 'exec')
472 self.assertEqual(co1, co2)
Georg Brandlf2bfd542008-03-29 13:24:23 +0000473 # the code object's filename comes from the second compilation step
474 self.assertEqual(co2.co_filename, '%s3' % fname)
475
476 # raise exception when node type doesn't match with compile mode
477 co1 = compile('print 1', '<string>', 'exec', _ast.PyCF_ONLY_AST)
478 self.assertRaises(TypeError, compile, co1, '<ast>', 'eval')
479
480 # raise exception when node type is no start node
481 self.assertRaises(TypeError, compile, _ast.If(), '<ast>', 'exec')
482
483 # raise exception when node has invalid children
484 ast = _ast.Module()
485 ast.body = [_ast.BoolOp()]
486 self.assertRaises(TypeError, compile, ast, '<ast>', 'exec')
Georg Brandlfc8eef32008-03-28 12:11:56 +0000487
488
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000489def test_main():
490 test_support.run_unittest(TestSpecifics)
Tim Petersd507dab2001-08-30 20:51:59 +0000491
Raymond Hettinger8a99b502003-06-23 13:36:57 +0000492if __name__ == "__main__":
493 test_main()