blob: be2a0a28e9c7c7290aa8e673dae763e0fecf2b14 [file] [log] [blame]
Jeremy Hyltonc960f262006-01-27 15:18:39 +00001"""This module tests SyntaxErrors.
2
3Here's an example of the sort of thing that is tested.
4
5>>> def f(x):
6... global x
7Traceback (most recent call last):
Nick Coghlan650f0d02007-04-15 12:05:43 +00008SyntaxError: name 'x' is parameter and global
Jeremy Hyltonc960f262006-01-27 15:18:39 +00009
10The tests are all raise SyntaxErrors. They were created by checking
11each C call that raises SyntaxError. There are several modules that
12raise these exceptions-- ast.c, compile.c, future.c, pythonrun.c, and
13symtable.c.
14
15The parser itself outlaws a lot of invalid syntax. None of these
16errors are tested here at the moment. We should add some tests; since
17there are infinitely many programs with invalid syntax, we would need
18to be judicious in selecting some.
19
20The compiler generates a synthetic module name for code executed by
21doctest. Since all the code comes from the same module, a suffix like
22[1] is appended to the module name, As a consequence, changing the
23order of tests in this module means renumbering all the errors after
24it. (Maybe we should enable the ellipsis option for these tests.)
25
26In ast.c, syntax errors are raised by calling ast_error().
27
28Errors from set_context():
29
Jeremy Hyltonc960f262006-01-27 15:18:39 +000030>>> obj.None = 1
31Traceback (most recent call last):
Guido van Rossume7ba4952007-06-06 23:52:48 +000032SyntaxError: invalid syntax
Jeremy Hyltonc960f262006-01-27 15:18:39 +000033
34>>> None = 1
35Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +000036SyntaxError: assignment to keyword
Jeremy Hyltonc960f262006-01-27 15:18:39 +000037
38It's a syntax error to assign to the empty tuple. Why isn't it an
39error to assign to the empty list? It will always raise some error at
40runtime.
41
42>>> () = 1
43Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +000044SyntaxError: can't assign to ()
Jeremy Hyltonc960f262006-01-27 15:18:39 +000045
46>>> f() = 1
47Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +000048SyntaxError: can't assign to function call
Jeremy Hyltonc960f262006-01-27 15:18:39 +000049
50>>> del f()
51Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +000052SyntaxError: can't delete function call
Jeremy Hyltonc960f262006-01-27 15:18:39 +000053
54>>> a + 1 = 2
55Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +000056SyntaxError: can't assign to operator
Jeremy Hyltonc960f262006-01-27 15:18:39 +000057
58>>> (x for x in x) = 1
59Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +000060SyntaxError: can't assign to generator expression
Jeremy Hyltonc960f262006-01-27 15:18:39 +000061
62>>> 1 = 1
63Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +000064SyntaxError: can't assign to literal
Jeremy Hyltonc960f262006-01-27 15:18:39 +000065
66>>> "abc" = 1
67Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +000068SyntaxError: can't assign to literal
Jeremy Hyltonc960f262006-01-27 15:18:39 +000069
70>>> `1` = 1
71Traceback (most recent call last):
Brett Cannon8933cb42006-08-25 04:12:10 +000072SyntaxError: invalid syntax
Jeremy Hyltonc960f262006-01-27 15:18:39 +000073
74If the left-hand side of an assignment is a list or tuple, an illegal
75expression inside that contain should still cause a syntax error.
76This test just checks a couple of cases rather than enumerating all of
77them.
78
79>>> (a, "b", c) = (1, 2, 3)
80Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +000081SyntaxError: can't assign to literal
Jeremy Hyltonc960f262006-01-27 15:18:39 +000082
83>>> [a, b, c + 1] = [1, 2, 3]
84Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +000085SyntaxError: can't assign to operator
Jeremy Hyltonc960f262006-01-27 15:18:39 +000086
Thomas Wouters477c8d52006-05-27 19:21:47 +000087>>> a if 1 else b = 1
88Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +000089SyntaxError: can't assign to conditional expression
Jeremy Hyltonc960f262006-01-27 15:18:39 +000090
91From compiler_complex_args():
92
93>>> def f(None=1):
94... pass
95Traceback (most recent call last):
Guido van Rossume7ba4952007-06-06 23:52:48 +000096SyntaxError: invalid syntax
Jeremy Hyltonc960f262006-01-27 15:18:39 +000097
98
99From ast_for_arguments():
100
101>>> def f(x, y=1, z):
102... pass
103Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +0000104SyntaxError: non-default argument follows default argument
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000105
106>>> def f(x, None):
107... pass
108Traceback (most recent call last):
Guido van Rossume7ba4952007-06-06 23:52:48 +0000109SyntaxError: invalid syntax
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000110
111>>> def f(*None):
112... pass
113Traceback (most recent call last):
Guido van Rossume7ba4952007-06-06 23:52:48 +0000114SyntaxError: invalid syntax
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000115
116>>> def f(**None):
117... pass
118Traceback (most recent call last):
Guido van Rossume7ba4952007-06-06 23:52:48 +0000119SyntaxError: invalid syntax
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000120
121
122From ast_for_funcdef():
123
124>>> def None(x):
125... pass
126Traceback (most recent call last):
Guido van Rossume7ba4952007-06-06 23:52:48 +0000127SyntaxError: invalid syntax
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000128
129
130From ast_for_call():
131
132>>> def f(it, *varargs):
133... return list(it)
134>>> L = range(10)
135>>> f(x for x in L)
136[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
137>>> f(x for x in L, 1)
138Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +0000139SyntaxError: Generator expression must be parenthesized if not sole argument
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000140>>> f((x for x in L), 1)
141[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
142
143>>> f(i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11,
144... i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22,
145... i23, i24, i25, i26, i27, i28, i29, i30, i31, i32, i33,
146... i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44,
147... i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55,
148... i56, i57, i58, i59, i60, i61, i62, i63, i64, i65, i66,
149... i67, i68, i69, i70, i71, i72, i73, i74, i75, i76, i77,
150... i78, i79, i80, i81, i82, i83, i84, i85, i86, i87, i88,
151... i89, i90, i91, i92, i93, i94, i95, i96, i97, i98, i99,
152... i100, i101, i102, i103, i104, i105, i106, i107, i108,
153... i109, i110, i111, i112, i113, i114, i115, i116, i117,
154... i118, i119, i120, i121, i122, i123, i124, i125, i126,
155... i127, i128, i129, i130, i131, i132, i133, i134, i135,
156... i136, i137, i138, i139, i140, i141, i142, i143, i144,
157... i145, i146, i147, i148, i149, i150, i151, i152, i153,
158... i154, i155, i156, i157, i158, i159, i160, i161, i162,
159... i163, i164, i165, i166, i167, i168, i169, i170, i171,
160... i172, i173, i174, i175, i176, i177, i178, i179, i180,
161... i181, i182, i183, i184, i185, i186, i187, i188, i189,
162... i190, i191, i192, i193, i194, i195, i196, i197, i198,
163... i199, i200, i201, i202, i203, i204, i205, i206, i207,
164... i208, i209, i210, i211, i212, i213, i214, i215, i216,
165... i217, i218, i219, i220, i221, i222, i223, i224, i225,
166... i226, i227, i228, i229, i230, i231, i232, i233, i234,
167... i235, i236, i237, i238, i239, i240, i241, i242, i243,
168... i244, i245, i246, i247, i248, i249, i250, i251, i252,
169... i253, i254, i255)
170Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +0000171SyntaxError: more than 255 arguments
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000172
173The actual error cases counts positional arguments, keyword arguments,
174and generator expression arguments separately. This test combines the
175three.
176
177>>> f(i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11,
178... i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22,
179... i23, i24, i25, i26, i27, i28, i29, i30, i31, i32, i33,
180... i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44,
181... i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55,
182... i56, i57, i58, i59, i60, i61, i62, i63, i64, i65, i66,
183... i67, i68, i69, i70, i71, i72, i73, i74, i75, i76, i77,
184... i78, i79, i80, i81, i82, i83, i84, i85, i86, i87, i88,
185... i89, i90, i91, i92, i93, i94, i95, i96, i97, i98, i99,
186... i100, i101, i102, i103, i104, i105, i106, i107, i108,
187... i109, i110, i111, i112, i113, i114, i115, i116, i117,
188... i118, i119, i120, i121, i122, i123, i124, i125, i126,
189... i127, i128, i129, i130, i131, i132, i133, i134, i135,
190... i136, i137, i138, i139, i140, i141, i142, i143, i144,
191... i145, i146, i147, i148, i149, i150, i151, i152, i153,
192... i154, i155, i156, i157, i158, i159, i160, i161, i162,
193... i163, i164, i165, i166, i167, i168, i169, i170, i171,
194... i172, i173, i174, i175, i176, i177, i178, i179, i180,
195... i181, i182, i183, i184, i185, i186, i187, i188, i189,
196... i190, i191, i192, i193, i194, i195, i196, i197, i198,
197... i199, i200, i201, i202, i203, i204, i205, i206, i207,
198... i208, i209, i210, i211, i212, i213, i214, i215, i216,
199... i217, i218, i219, i220, i221, i222, i223, i224, i225,
200... i226, i227, i228, i229, i230, i231, i232, i233, i234,
201... i235, i236, i237, i238, i239, i240, i241, i242, i243,
202... (x for x in i244), i245, i246, i247, i248, i249, i250, i251,
203... i252=1, i253=1, i254=1, i255=1)
204Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +0000205SyntaxError: more than 255 arguments
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000206
207>>> f(lambda x: x[0] = 3)
208Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +0000209SyntaxError: lambda cannot contain assignment
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000210
211The grammar accepts any test (basically, any expression) in the
212keyword slot of a call site. Test a few different options.
213
214>>> f(x()=2)
215Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +0000216SyntaxError: keyword can't be an expression
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000217>>> f(a or b=1)
218Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +0000219SyntaxError: keyword can't be an expression
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000220>>> f(x.y=1)
221Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +0000222SyntaxError: keyword can't be an expression
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000223
224
Benjamin Peterson87c8d872009-06-11 22:54:11 +0000225More set_context():
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000226
227>>> (x for x in x) += 1
228Traceback (most recent call last):
Benjamin Peterson87c8d872009-06-11 22:54:11 +0000229SyntaxError: can't assign to generator expression
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000230>>> None += 1
231Traceback (most recent call last):
Guido van Rossum33d26892007-08-05 15:29:28 +0000232SyntaxError: assignment to keyword
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000233>>> f() += 1
234Traceback (most recent call last):
Benjamin Peterson87c8d872009-06-11 22:54:11 +0000235SyntaxError: can't assign to function call
Thomas Wouters89f507f2006-12-13 04:49:30 +0000236
237
238Test continue in finally in weird combinations.
239
240continue in for loop under finally shouuld be ok.
241
242 >>> def test():
243 ... try:
244 ... pass
245 ... finally:
246 ... for abc in range(10):
247 ... continue
Guido van Rossum7131f842007-02-09 20:13:25 +0000248 ... print(abc)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000249 >>> test()
250 9
251
252Start simple, a continue in a finally should not be allowed.
253
254 >>> def test():
255 ... for abc in range(10):
256 ... try:
257 ... pass
258 ... finally:
259 ... continue
260 Traceback (most recent call last):
261 ...
Guido van Rossum33d26892007-08-05 15:29:28 +0000262 SyntaxError: 'continue' not supported inside 'finally' clause
Thomas Wouters89f507f2006-12-13 04:49:30 +0000263
264This is essentially a continue in a finally which should not be allowed.
265
266 >>> def test():
267 ... for abc in range(10):
268 ... try:
269 ... pass
270 ... finally:
271 ... try:
272 ... continue
273 ... except:
274 ... pass
275 Traceback (most recent call last):
276 ...
Guido van Rossum33d26892007-08-05 15:29:28 +0000277 SyntaxError: 'continue' not supported inside 'finally' clause
Thomas Wouters89f507f2006-12-13 04:49:30 +0000278
279 >>> def foo():
280 ... try:
281 ... pass
282 ... finally:
283 ... continue
284 Traceback (most recent call last):
285 ...
Guido van Rossum33d26892007-08-05 15:29:28 +0000286 SyntaxError: 'continue' not supported inside 'finally' clause
Thomas Wouters89f507f2006-12-13 04:49:30 +0000287
288 >>> def foo():
289 ... for a in ():
290 ... try:
291 ... pass
292 ... finally:
293 ... continue
294 Traceback (most recent call last):
295 ...
Guido van Rossum33d26892007-08-05 15:29:28 +0000296 SyntaxError: 'continue' not supported inside 'finally' clause
Thomas Wouters89f507f2006-12-13 04:49:30 +0000297
298 >>> def foo():
299 ... for a in ():
300 ... try:
301 ... pass
302 ... finally:
303 ... try:
304 ... continue
305 ... finally:
306 ... pass
307 Traceback (most recent call last):
308 ...
Guido van Rossum33d26892007-08-05 15:29:28 +0000309 SyntaxError: 'continue' not supported inside 'finally' clause
Thomas Wouters89f507f2006-12-13 04:49:30 +0000310
311 >>> def foo():
312 ... for a in ():
313 ... try: pass
314 ... finally:
315 ... try:
316 ... pass
317 ... except:
318 ... continue
319 Traceback (most recent call last):
320 ...
Guido van Rossum33d26892007-08-05 15:29:28 +0000321 SyntaxError: 'continue' not supported inside 'finally' clause
Thomas Wouters89f507f2006-12-13 04:49:30 +0000322
323There is one test for a break that is not in a loop. The compiler
324uses a single data structure to keep track of try-finally and loops,
325so we need to be sure that a break is actually inside a loop. If it
326isn't, there should be a syntax error.
327
328 >>> try:
Guido van Rossum7131f842007-02-09 20:13:25 +0000329 ... print(1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000330 ... break
Guido van Rossum7131f842007-02-09 20:13:25 +0000331 ... print(2)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000332 ... finally:
Guido van Rossum7131f842007-02-09 20:13:25 +0000333 ... print(3)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000334 Traceback (most recent call last):
335 ...
Guido van Rossum33d26892007-08-05 15:29:28 +0000336 SyntaxError: 'break' outside loop
Thomas Wouters89f507f2006-12-13 04:49:30 +0000337
338This should probably raise a better error than a SystemError (or none at all).
339In 2.5 there was a missing exception and an assert was triggered in a debug
340build. The number of blocks must be greater than CO_MAXBLOCKS. SF #1565514
341
342 >>> while 1:
343 ... while 2:
344 ... while 3:
345 ... while 4:
346 ... while 5:
347 ... while 6:
348 ... while 8:
349 ... while 9:
350 ... while 10:
351 ... while 11:
352 ... while 12:
353 ... while 13:
354 ... while 14:
355 ... while 15:
356 ... while 16:
357 ... while 17:
358 ... while 18:
359 ... while 19:
360 ... while 20:
361 ... while 21:
362 ... while 22:
363 ... break
364 Traceback (most recent call last):
365 ...
366 SystemError: too many statically nested blocks
367
Jeremy Hylton81e95022007-02-27 06:50:52 +0000368Misuse of the nonlocal statement can lead to a few unique syntax errors.
369
370 >>> def f(x):
371 ... nonlocal x
372 Traceback (most recent call last):
373 ...
Nick Coghlan650f0d02007-04-15 12:05:43 +0000374 SyntaxError: name 'x' is parameter and nonlocal
Guido van Rossumd8faa362007-04-27 19:54:29 +0000375
Jeremy Hylton81e95022007-02-27 06:50:52 +0000376 >>> def f():
377 ... global x
378 ... nonlocal x
379 Traceback (most recent call last):
380 ...
381 SyntaxError: name 'x' is nonlocal and global
382
383 >>> def f():
384 ... nonlocal x
385 Traceback (most recent call last):
386 ...
387 SyntaxError: no binding for nonlocal 'x' found
388
Nick Coghlan4138bfe2007-04-23 10:14:27 +0000389From SF bug #1705365
390 >>> nonlocal x
391 Traceback (most recent call last):
392 ...
393 SyntaxError: nonlocal declaration not allowed at module level
394
Jeremy Hylton81e95022007-02-27 06:50:52 +0000395TODO(jhylton): Figure out how to test SyntaxWarning with doctest.
396
397## >>> def f(x):
398## ... def f():
399## ... print(x)
400## ... nonlocal x
401## Traceback (most recent call last):
402## ...
403## SyntaxWarning: name 'x' is assigned to before nonlocal declaration
Guido van Rossumd8faa362007-04-27 19:54:29 +0000404
Jeremy Hylton81e95022007-02-27 06:50:52 +0000405## >>> def f():
406## ... x = 1
407## ... nonlocal x
408## Traceback (most recent call last):
409## ...
410## SyntaxWarning: name 'x' is assigned to before nonlocal declaration
411
Guido van Rossumd8faa362007-04-27 19:54:29 +0000412
413This tests assignment-context; there was a bug in Python 2.5 where compiling
414a complex 'if' (one with 'elif') would fail to notice an invalid suite,
415leading to spurious errors.
416
417 >>> if 1:
418 ... x() = 1
419 ... elif 1:
420 ... pass
421 Traceback (most recent call last):
422 ...
Guido van Rossum33d26892007-08-05 15:29:28 +0000423 SyntaxError: can't assign to function call
Guido van Rossumd8faa362007-04-27 19:54:29 +0000424
425 >>> if 1:
426 ... pass
427 ... elif 1:
428 ... x() = 1
429 Traceback (most recent call last):
430 ...
Guido van Rossum33d26892007-08-05 15:29:28 +0000431 SyntaxError: can't assign to function call
Guido van Rossumd8faa362007-04-27 19:54:29 +0000432
433 >>> if 1:
434 ... x() = 1
435 ... elif 1:
436 ... pass
437 ... else:
438 ... pass
439 Traceback (most recent call last):
440 ...
Guido van Rossum33d26892007-08-05 15:29:28 +0000441 SyntaxError: can't assign to function call
Guido van Rossumd8faa362007-04-27 19:54:29 +0000442
443 >>> if 1:
444 ... pass
445 ... elif 1:
446 ... x() = 1
447 ... else:
448 ... pass
449 Traceback (most recent call last):
450 ...
Guido van Rossum33d26892007-08-05 15:29:28 +0000451 SyntaxError: can't assign to function call
Guido van Rossumd8faa362007-04-27 19:54:29 +0000452
453 >>> if 1:
454 ... pass
455 ... elif 1:
456 ... pass
457 ... else:
458 ... x() = 1
459 Traceback (most recent call last):
460 ...
Guido van Rossum33d26892007-08-05 15:29:28 +0000461 SyntaxError: can't assign to function call
Jeremy Hylton81e95022007-02-27 06:50:52 +0000462
Collin Winter828f04a2007-08-31 00:04:24 +0000463Make sure that the old "raise X, Y[, Z]" form is gone:
464 >>> raise X, Y
465 Traceback (most recent call last):
466 ...
467 SyntaxError: invalid syntax
468 >>> raise X, Y, Z
469 Traceback (most recent call last):
470 ...
471 SyntaxError: invalid syntax
472
Benjamin Peterson07a1f942008-07-01 20:03:27 +0000473
474>>> f(a=23, a=234)
475Traceback (most recent call last):
476 ...
477SyntaxError: keyword argument repeated
478
Benjamin Peterson78565b22009-06-28 19:19:51 +0000479>>> del ()
480Traceback (most recent call last):
Benjamin Peterson78565b22009-06-28 19:19:51 +0000481SyntaxError: can't delete ()
482
Benjamin Peterson1b1a1a42010-06-24 00:17:03 +0000483>>> {1, 2, 3} = 42
484Traceback (most recent call last):
485SyntaxError: can't assign to literal
486
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000487"""
488
Jeremy Hylton05ab2e62002-05-31 14:08:29 +0000489import re
490import unittest
Jeremy Hylton42d90162003-07-15 20:24:27 +0000491import warnings
Jeremy Hylton05ab2e62002-05-31 14:08:29 +0000492
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000493from test import support
Jeremy Hylton05ab2e62002-05-31 14:08:29 +0000494
495class SyntaxTestCase(unittest.TestCase):
496
497 def _check_error(self, code, errtext,
Thomas Wouters477c8d52006-05-27 19:21:47 +0000498 filename="<testcase>", mode="exec", subclass=None):
Jeremy Hylton05ab2e62002-05-31 14:08:29 +0000499 """Check that compiling code raises SyntaxError with errtext.
500
501 errtest is a regular expression that must be present in the
Thomas Wouters477c8d52006-05-27 19:21:47 +0000502 test of the exception raised. If subclass is specified it
503 is the expected subclass of SyntaxError (e.g. IndentationError).
Jeremy Hylton05ab2e62002-05-31 14:08:29 +0000504 """
505 try:
506 compile(code, filename, mode)
Guido van Rossumb940e112007-01-10 16:19:56 +0000507 except SyntaxError as err:
Thomas Wouters477c8d52006-05-27 19:21:47 +0000508 if subclass and not isinstance(err, subclass):
509 self.fail("SyntaxError is not a %s" % subclass.__name__)
Jeremy Hylton05ab2e62002-05-31 14:08:29 +0000510 mo = re.search(errtext, str(err))
511 if mo is None:
Walter Dörwald70a6b492004-02-12 17:35:32 +0000512 self.fail("SyntaxError did not contain '%r'" % (errtext,))
Jeremy Hylton05ab2e62002-05-31 14:08:29 +0000513 else:
514 self.fail("compile() did not raise SyntaxError")
515
516 def test_assign_call(self):
517 self._check_error("f() = 1", "assign")
518
519 def test_assign_del(self):
520 self._check_error("del f()", "delete")
521
Jeremy Hylton42d90162003-07-15 20:24:27 +0000522 def test_global_err_then_warn(self):
523 # Bug tickler: The SyntaxError raised for one global statement
524 # shouldn't be clobbered by a SyntaxWarning issued for a later one.
525 source = re.sub('(?m)^ *:', '', """\
526 :def error(a):
527 : global a # SyntaxError
528 :def warning():
529 : b = 1
530 : global b # SyntaxWarning
531 :""")
532 warnings.filterwarnings(action='ignore', category=SyntaxWarning)
533 self._check_error(source, "global")
534 warnings.filters.pop(0)
535
Neal Norwitzfcf44352005-11-27 20:37:43 +0000536 def test_break_outside_loop(self):
537 self._check_error("break", "outside loop")
538
539 def test_delete_deref(self):
540 source = re.sub('(?m)^ *:', '', """\
541 :def foo(x):
542 : def bar():
Georg Brandl88fc6642007-02-09 21:28:07 +0000543 : print(x)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000544 : del x
545 :""")
546 self._check_error(source, "nested scope")
547
Thomas Wouters477c8d52006-05-27 19:21:47 +0000548 def test_unexpected_indent(self):
549 self._check_error("foo()\n bar()\n", "unexpected indent",
550 subclass=IndentationError)
551
552 def test_no_indent(self):
553 self._check_error("if 1:\nfoo()", "expected an indented block",
554 subclass=IndentationError)
555
556 def test_bad_outdent(self):
557 self._check_error("if 1:\n foo()\n bar()",
558 "unindent does not match .* level",
559 subclass=IndentationError)
560
561 def test_kwargs_last(self):
562 self._check_error("int(base=10, '2')", "non-keyword arg")
563
Jeremy Hylton05ab2e62002-05-31 14:08:29 +0000564def test_main():
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000565 support.run_unittest(SyntaxTestCase)
Jeremy Hyltonc960f262006-01-27 15:18:39 +0000566 from test import test_syntax
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000567 support.run_doctest(test_syntax, verbosity=True)
Jeremy Hylton05ab2e62002-05-31 14:08:29 +0000568
569if __name__ == "__main__":
570 test_main()