• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1"""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):
8SyntaxError: name 'x' is parameter and global
9
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
30>>> obj.None = 1
31Traceback (most recent call last):
32SyntaxError: invalid syntax
33
34>>> None = 1
35Traceback (most recent call last):
36SyntaxError: can't assign to keyword
37
38>>> f() = 1
39Traceback (most recent call last):
40SyntaxError: can't assign to function call
41
42>>> del f()
43Traceback (most recent call last):
44SyntaxError: can't delete function call
45
46>>> a + 1 = 2
47Traceback (most recent call last):
48SyntaxError: can't assign to operator
49
50>>> (x for x in x) = 1
51Traceback (most recent call last):
52SyntaxError: can't assign to generator expression
53
54>>> 1 = 1
55Traceback (most recent call last):
56SyntaxError: can't assign to literal
57
58>>> "abc" = 1
59Traceback (most recent call last):
60SyntaxError: can't assign to literal
61
62>>> b"" = 1
63Traceback (most recent call last):
64SyntaxError: can't assign to literal
65
66>>> `1` = 1
67Traceback (most recent call last):
68SyntaxError: invalid syntax
69
70If the left-hand side of an assignment is a list or tuple, an illegal
71expression inside that contain should still cause a syntax error.
72This test just checks a couple of cases rather than enumerating all of
73them.
74
75>>> (a, "b", c) = (1, 2, 3)
76Traceback (most recent call last):
77SyntaxError: can't assign to literal
78
79>>> [a, b, c + 1] = [1, 2, 3]
80Traceback (most recent call last):
81SyntaxError: can't assign to operator
82
83>>> a if 1 else b = 1
84Traceback (most recent call last):
85SyntaxError: can't assign to conditional expression
86
87From compiler_complex_args():
88
89>>> def f(None=1):
90...     pass
91Traceback (most recent call last):
92SyntaxError: invalid syntax
93
94
95From ast_for_arguments():
96
97>>> def f(x, y=1, z):
98...     pass
99Traceback (most recent call last):
100SyntaxError: non-default argument follows default argument
101
102>>> def f(x, None):
103...     pass
104Traceback (most recent call last):
105SyntaxError: invalid syntax
106
107>>> def f(*None):
108...     pass
109Traceback (most recent call last):
110SyntaxError: invalid syntax
111
112>>> def f(**None):
113...     pass
114Traceback (most recent call last):
115SyntaxError: invalid syntax
116
117
118From ast_for_funcdef():
119
120>>> def None(x):
121...     pass
122Traceback (most recent call last):
123SyntaxError: invalid syntax
124
125
126From ast_for_call():
127
128>>> def f(it, *varargs, **kwargs):
129...     return list(it)
130>>> L = range(10)
131>>> f(x for x in L)
132[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
133>>> f(x for x in L, 1)
134Traceback (most recent call last):
135SyntaxError: Generator expression must be parenthesized
136>>> f(x for x in L, y=1)
137Traceback (most recent call last):
138SyntaxError: Generator expression must be parenthesized
139>>> f(x for x in L, *[])
140Traceback (most recent call last):
141SyntaxError: Generator expression must be parenthesized
142>>> f(x for x in L, **{})
143Traceback (most recent call last):
144SyntaxError: Generator expression must be parenthesized
145>>> f(L, x for x in L)
146Traceback (most recent call last):
147SyntaxError: Generator expression must be parenthesized
148>>> f(x for x in L, y for y in L)
149Traceback (most recent call last):
150SyntaxError: Generator expression must be parenthesized
151>>> f(x for x in L,)
152Traceback (most recent call last):
153SyntaxError: Generator expression must be parenthesized
154>>> f((x for x in L), 1)
155[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
156>>> class C(x for x in L):
157...     pass
158Traceback (most recent call last):
159SyntaxError: invalid syntax
160
161>>> def g(*args, **kwargs):
162...     print(args, sorted(kwargs.items()))
163>>> g(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
164...   20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
165...   38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
166...   56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
167...   74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
168...   92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
169...   108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
170...   122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
171...   136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
172...   150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
173...   164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
174...   178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
175...   192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
176...   206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
177...   220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
178...   234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
179...   248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
180...   262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
181...   276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
182...   290, 291, 292, 293, 294, 295, 296, 297, 298, 299)  # doctest: +ELLIPSIS
183(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ..., 297, 298, 299) []
184
185>>> g(a000=0, a001=1, a002=2, a003=3, a004=4, a005=5, a006=6, a007=7, a008=8,
186...   a009=9, a010=10, a011=11, a012=12, a013=13, a014=14, a015=15, a016=16,
187...   a017=17, a018=18, a019=19, a020=20, a021=21, a022=22, a023=23, a024=24,
188...   a025=25, a026=26, a027=27, a028=28, a029=29, a030=30, a031=31, a032=32,
189...   a033=33, a034=34, a035=35, a036=36, a037=37, a038=38, a039=39, a040=40,
190...   a041=41, a042=42, a043=43, a044=44, a045=45, a046=46, a047=47, a048=48,
191...   a049=49, a050=50, a051=51, a052=52, a053=53, a054=54, a055=55, a056=56,
192...   a057=57, a058=58, a059=59, a060=60, a061=61, a062=62, a063=63, a064=64,
193...   a065=65, a066=66, a067=67, a068=68, a069=69, a070=70, a071=71, a072=72,
194...   a073=73, a074=74, a075=75, a076=76, a077=77, a078=78, a079=79, a080=80,
195...   a081=81, a082=82, a083=83, a084=84, a085=85, a086=86, a087=87, a088=88,
196...   a089=89, a090=90, a091=91, a092=92, a093=93, a094=94, a095=95, a096=96,
197...   a097=97, a098=98, a099=99, a100=100, a101=101, a102=102, a103=103,
198...   a104=104, a105=105, a106=106, a107=107, a108=108, a109=109, a110=110,
199...   a111=111, a112=112, a113=113, a114=114, a115=115, a116=116, a117=117,
200...   a118=118, a119=119, a120=120, a121=121, a122=122, a123=123, a124=124,
201...   a125=125, a126=126, a127=127, a128=128, a129=129, a130=130, a131=131,
202...   a132=132, a133=133, a134=134, a135=135, a136=136, a137=137, a138=138,
203...   a139=139, a140=140, a141=141, a142=142, a143=143, a144=144, a145=145,
204...   a146=146, a147=147, a148=148, a149=149, a150=150, a151=151, a152=152,
205...   a153=153, a154=154, a155=155, a156=156, a157=157, a158=158, a159=159,
206...   a160=160, a161=161, a162=162, a163=163, a164=164, a165=165, a166=166,
207...   a167=167, a168=168, a169=169, a170=170, a171=171, a172=172, a173=173,
208...   a174=174, a175=175, a176=176, a177=177, a178=178, a179=179, a180=180,
209...   a181=181, a182=182, a183=183, a184=184, a185=185, a186=186, a187=187,
210...   a188=188, a189=189, a190=190, a191=191, a192=192, a193=193, a194=194,
211...   a195=195, a196=196, a197=197, a198=198, a199=199, a200=200, a201=201,
212...   a202=202, a203=203, a204=204, a205=205, a206=206, a207=207, a208=208,
213...   a209=209, a210=210, a211=211, a212=212, a213=213, a214=214, a215=215,
214...   a216=216, a217=217, a218=218, a219=219, a220=220, a221=221, a222=222,
215...   a223=223, a224=224, a225=225, a226=226, a227=227, a228=228, a229=229,
216...   a230=230, a231=231, a232=232, a233=233, a234=234, a235=235, a236=236,
217...   a237=237, a238=238, a239=239, a240=240, a241=241, a242=242, a243=243,
218...   a244=244, a245=245, a246=246, a247=247, a248=248, a249=249, a250=250,
219...   a251=251, a252=252, a253=253, a254=254, a255=255, a256=256, a257=257,
220...   a258=258, a259=259, a260=260, a261=261, a262=262, a263=263, a264=264,
221...   a265=265, a266=266, a267=267, a268=268, a269=269, a270=270, a271=271,
222...   a272=272, a273=273, a274=274, a275=275, a276=276, a277=277, a278=278,
223...   a279=279, a280=280, a281=281, a282=282, a283=283, a284=284, a285=285,
224...   a286=286, a287=287, a288=288, a289=289, a290=290, a291=291, a292=292,
225...   a293=293, a294=294, a295=295, a296=296, a297=297, a298=298, a299=299)
226...  # doctest: +ELLIPSIS
227() [('a000', 0), ('a001', 1), ('a002', 2), ..., ('a298', 298), ('a299', 299)]
228
229>>> class C:
230...     def meth(self, *args):
231...         return args
232>>> obj = C()
233>>> obj.meth(
234...   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
235...   20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
236...   38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
237...   56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
238...   74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
239...   92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
240...   108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
241...   122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
242...   136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
243...   150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
244...   164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
245...   178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
246...   192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
247...   206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
248...   220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
249...   234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
250...   248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
251...   262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
252...   276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
253...   290, 291, 292, 293, 294, 295, 296, 297, 298, 299)  # doctest: +ELLIPSIS
254(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ..., 297, 298, 299)
255
256>>> f(lambda x: x[0] = 3)
257Traceback (most recent call last):
258SyntaxError: lambda cannot contain assignment
259
260The grammar accepts any test (basically, any expression) in the
261keyword slot of a call site.  Test a few different options.
262
263>>> f(x()=2)
264Traceback (most recent call last):
265SyntaxError: keyword can't be an expression
266>>> f(a or b=1)
267Traceback (most recent call last):
268SyntaxError: keyword can't be an expression
269>>> f(x.y=1)
270Traceback (most recent call last):
271SyntaxError: keyword can't be an expression
272
273
274More set_context():
275
276>>> (x for x in x) += 1
277Traceback (most recent call last):
278SyntaxError: can't assign to generator expression
279>>> None += 1
280Traceback (most recent call last):
281SyntaxError: can't assign to keyword
282>>> f() += 1
283Traceback (most recent call last):
284SyntaxError: can't assign to function call
285
286
287Test continue in finally in weird combinations.
288
289continue in for loop under finally should be ok.
290
291    >>> def test():
292    ...     try:
293    ...         pass
294    ...     finally:
295    ...         for abc in range(10):
296    ...             continue
297    ...     print(abc)
298    >>> test()
299    9
300
301Start simple, a continue in a finally should not be allowed.
302
303    >>> def test():
304    ...    for abc in range(10):
305    ...        try:
306    ...            pass
307    ...        finally:
308    ...            continue
309    Traceback (most recent call last):
310      ...
311    SyntaxError: 'continue' not supported inside 'finally' clause
312
313This is essentially a continue in a finally which should not be allowed.
314
315    >>> def test():
316    ...    for abc in range(10):
317    ...        try:
318    ...            pass
319    ...        finally:
320    ...            try:
321    ...                continue
322    ...            except:
323    ...                pass
324    Traceback (most recent call last):
325      ...
326    SyntaxError: 'continue' not supported inside 'finally' clause
327
328    >>> def foo():
329    ...     try:
330    ...         pass
331    ...     finally:
332    ...         continue
333    Traceback (most recent call last):
334      ...
335    SyntaxError: 'continue' not supported inside 'finally' clause
336
337    >>> def foo():
338    ...     for a in ():
339    ...       try:
340    ...           pass
341    ...       finally:
342    ...           continue
343    Traceback (most recent call last):
344      ...
345    SyntaxError: 'continue' not supported inside 'finally' clause
346
347    >>> def foo():
348    ...     for a in ():
349    ...         try:
350    ...             pass
351    ...         finally:
352    ...             try:
353    ...                 continue
354    ...             finally:
355    ...                 pass
356    Traceback (most recent call last):
357      ...
358    SyntaxError: 'continue' not supported inside 'finally' clause
359
360    >>> def foo():
361    ...  for a in ():
362    ...   try: pass
363    ...   finally:
364    ...    try:
365    ...     pass
366    ...    except:
367    ...     continue
368    Traceback (most recent call last):
369      ...
370    SyntaxError: 'continue' not supported inside 'finally' clause
371
372There is one test for a break that is not in a loop.  The compiler
373uses a single data structure to keep track of try-finally and loops,
374so we need to be sure that a break is actually inside a loop.  If it
375isn't, there should be a syntax error.
376
377   >>> try:
378   ...     print(1)
379   ...     break
380   ...     print(2)
381   ... finally:
382   ...     print(3)
383   Traceback (most recent call last):
384     ...
385   SyntaxError: 'break' outside loop
386
387This raises a SyntaxError, it used to raise a SystemError.
388Context for this change can be found on issue #27514
389
390In 2.5 there was a missing exception and an assert was triggered in a debug
391build.  The number of blocks must be greater than CO_MAXBLOCKS.  SF #1565514
392
393   >>> while 1:
394   ...  while 2:
395   ...   while 3:
396   ...    while 4:
397   ...     while 5:
398   ...      while 6:
399   ...       while 8:
400   ...        while 9:
401   ...         while 10:
402   ...          while 11:
403   ...           while 12:
404   ...            while 13:
405   ...             while 14:
406   ...              while 15:
407   ...               while 16:
408   ...                while 17:
409   ...                 while 18:
410   ...                  while 19:
411   ...                   while 20:
412   ...                    while 21:
413   ...                     while 22:
414   ...                      break
415   Traceback (most recent call last):
416     ...
417   SyntaxError: too many statically nested blocks
418
419Misuse of the nonlocal and global statement can lead to a few unique syntax errors.
420
421   >>> def f():
422   ...     print(x)
423   ...     global x
424   Traceback (most recent call last):
425     ...
426   SyntaxError: name 'x' is used prior to global declaration
427
428   >>> def f():
429   ...     x = 1
430   ...     global x
431   Traceback (most recent call last):
432     ...
433   SyntaxError: name 'x' is assigned to before global declaration
434
435   >>> def f(x):
436   ...     global x
437   Traceback (most recent call last):
438     ...
439   SyntaxError: name 'x' is parameter and global
440
441   >>> def f():
442   ...     x = 1
443   ...     def g():
444   ...         print(x)
445   ...         nonlocal x
446   Traceback (most recent call last):
447     ...
448   SyntaxError: name 'x' is used prior to nonlocal declaration
449
450   >>> def f():
451   ...     x = 1
452   ...     def g():
453   ...         x = 2
454   ...         nonlocal x
455   Traceback (most recent call last):
456     ...
457   SyntaxError: name 'x' is assigned to before nonlocal declaration
458
459   >>> def f(x):
460   ...     nonlocal x
461   Traceback (most recent call last):
462     ...
463   SyntaxError: name 'x' is parameter and nonlocal
464
465   >>> def f():
466   ...     global x
467   ...     nonlocal x
468   Traceback (most recent call last):
469     ...
470   SyntaxError: name 'x' is nonlocal and global
471
472   >>> def f():
473   ...     nonlocal x
474   Traceback (most recent call last):
475     ...
476   SyntaxError: no binding for nonlocal 'x' found
477
478From SF bug #1705365
479   >>> nonlocal x
480   Traceback (most recent call last):
481     ...
482   SyntaxError: nonlocal declaration not allowed at module level
483
484From https://bugs.python.org/issue25973
485   >>> class A:
486   ...     def f(self):
487   ...         nonlocal __x
488   Traceback (most recent call last):
489     ...
490   SyntaxError: no binding for nonlocal '_A__x' found
491
492
493This tests assignment-context; there was a bug in Python 2.5 where compiling
494a complex 'if' (one with 'elif') would fail to notice an invalid suite,
495leading to spurious errors.
496
497   >>> if 1:
498   ...   x() = 1
499   ... elif 1:
500   ...   pass
501   Traceback (most recent call last):
502     ...
503   SyntaxError: can't assign to function call
504
505   >>> if 1:
506   ...   pass
507   ... elif 1:
508   ...   x() = 1
509   Traceback (most recent call last):
510     ...
511   SyntaxError: can't assign to function call
512
513   >>> if 1:
514   ...   x() = 1
515   ... elif 1:
516   ...   pass
517   ... else:
518   ...   pass
519   Traceback (most recent call last):
520     ...
521   SyntaxError: can't assign to function call
522
523   >>> if 1:
524   ...   pass
525   ... elif 1:
526   ...   x() = 1
527   ... else:
528   ...   pass
529   Traceback (most recent call last):
530     ...
531   SyntaxError: can't assign to function call
532
533   >>> if 1:
534   ...   pass
535   ... elif 1:
536   ...   pass
537   ... else:
538   ...   x() = 1
539   Traceback (most recent call last):
540     ...
541   SyntaxError: can't assign to function call
542
543Make sure that the old "raise X, Y[, Z]" form is gone:
544   >>> raise X, Y
545   Traceback (most recent call last):
546     ...
547   SyntaxError: invalid syntax
548   >>> raise X, Y, Z
549   Traceback (most recent call last):
550     ...
551   SyntaxError: invalid syntax
552
553
554>>> f(a=23, a=234)
555Traceback (most recent call last):
556   ...
557SyntaxError: keyword argument repeated
558
559>>> {1, 2, 3} = 42
560Traceback (most recent call last):
561SyntaxError: can't assign to literal
562
563Corner-cases that used to fail to raise the correct error:
564
565    >>> def f(*, x=lambda __debug__:0): pass
566    Traceback (most recent call last):
567    SyntaxError: assignment to keyword
568
569    >>> def f(*args:(lambda __debug__:0)): pass
570    Traceback (most recent call last):
571    SyntaxError: assignment to keyword
572
573    >>> def f(**kwargs:(lambda __debug__:0)): pass
574    Traceback (most recent call last):
575    SyntaxError: assignment to keyword
576
577    >>> with (lambda *:0): pass
578    Traceback (most recent call last):
579    SyntaxError: named arguments must follow bare *
580
581Corner-cases that used to crash:
582
583    >>> def f(**__debug__): pass
584    Traceback (most recent call last):
585    SyntaxError: assignment to keyword
586
587    >>> def f(*xx, __debug__): pass
588    Traceback (most recent call last):
589    SyntaxError: assignment to keyword
590
591"""
592
593import re
594import unittest
595
596from test import support
597
598class SyntaxTestCase(unittest.TestCase):
599
600    def _check_error(self, code, errtext,
601                     filename="<testcase>", mode="exec", subclass=None, lineno=None, offset=None):
602        """Check that compiling code raises SyntaxError with errtext.
603
604        errtest is a regular expression that must be present in the
605        test of the exception raised.  If subclass is specified it
606        is the expected subclass of SyntaxError (e.g. IndentationError).
607        """
608        try:
609            compile(code, filename, mode)
610        except SyntaxError as err:
611            if subclass and not isinstance(err, subclass):
612                self.fail("SyntaxError is not a %s" % subclass.__name__)
613            mo = re.search(errtext, str(err))
614            if mo is None:
615                self.fail("SyntaxError did not contain '%r'" % (errtext,))
616            self.assertEqual(err.filename, filename)
617            if lineno is not None:
618                self.assertEqual(err.lineno, lineno)
619            if offset is not None:
620                self.assertEqual(err.offset, offset)
621        else:
622            self.fail("compile() did not raise SyntaxError")
623
624    def test_assign_call(self):
625        self._check_error("f() = 1", "assign")
626
627    def test_assign_del(self):
628        self._check_error("del f()", "delete")
629
630    def test_global_param_err_first(self):
631        source = """if 1:
632            def error(a):
633                global a  # SyntaxError
634            def error2():
635                b = 1
636                global b  # SyntaxError
637            """
638        self._check_error(source, "parameter and global", lineno=3)
639
640    def test_nonlocal_param_err_first(self):
641        source = """if 1:
642            def error(a):
643                nonlocal a  # SyntaxError
644            def error2():
645                b = 1
646                global b  # SyntaxError
647            """
648        self._check_error(source, "parameter and nonlocal", lineno=3)
649
650    def test_break_outside_loop(self):
651        self._check_error("break", "outside loop")
652
653    def test_unexpected_indent(self):
654        self._check_error("foo()\n bar()\n", "unexpected indent",
655                          subclass=IndentationError)
656
657    def test_no_indent(self):
658        self._check_error("if 1:\nfoo()", "expected an indented block",
659                          subclass=IndentationError)
660
661    def test_bad_outdent(self):
662        self._check_error("if 1:\n  foo()\n bar()",
663                          "unindent does not match .* level",
664                          subclass=IndentationError)
665
666    def test_kwargs_last(self):
667        self._check_error("int(base=10, '2')",
668                          "positional argument follows keyword argument")
669
670    def test_kwargs_last2(self):
671        self._check_error("int(**{'base': 10}, '2')",
672                          "positional argument follows "
673                          "keyword argument unpacking")
674
675    def test_kwargs_last3(self):
676        self._check_error("int(**{'base': 10}, *['2'])",
677                          "iterable argument unpacking follows "
678                          "keyword argument unpacking")
679
680def test_main():
681    support.run_unittest(SyntaxTestCase)
682    from test import test_syntax
683    support.run_doctest(test_syntax, verbosity=True)
684
685if __name__ == "__main__":
686    test_main()
687