
    z%i                        	 d dl Z d dlZd dlZd dlmZ  G d dej
                        Zd Zedk(  r ej                          yy)    N)supportc                   \   e Zd Z	 	 d%dZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej4                  d        Zd Zd Zd Zd Zd Z d Z!d Z"d  Z#d! Z$ej4                  d"        Z%ej4                  d#        Z&ej4                  d$        Z'y)&SyntaxTestCaseNc
                 f   	 	 t        |||       | j                  d       y # t        $ r}
|r*t        |
|      s| j                  d|j                  z         t        j                  |t        |
            }|| j                  d|       | j                  |
j                  |       || j                  |
j                  |       || j                  |
j                  |       || j                  |
j                  |       |	!| j                  |
j                  |	       Y d }
~
y Y d }
~
y d }
~
ww xY w)Nz#compile() did not raise SyntaxErrorzSyntaxError is not a %szSyntaxError did not contain )compilefailSyntaxError
isinstance__name__researchstrassertEqualfilenamelinenooffset
end_lineno
end_offset)selfcodeerrtextr   modesubclassr   r   r   r   errmos               D/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_syntax.py_check_errorzSyntaxTestCase._check_error  s	   		=D(D)$ II;<#  	=
3 9		3h6G6GGH7CH-Bz		gGHS\\84!  V4!  V4%  <%  << &	=s   " 
D0C5D++D0c                 ,    | j                  ddd       y )Nzprint(end1 + end2 = ' ')z=expression cannot contain assignment, perhaps you meant "=="?   )r   r   r   s    r   test_expression_with_assignmentz.SyntaxTestCase.test_expression_with_assignment  s    &K 	 	
    c                 ,    | j                  ddd       y )Nzf{}invalid syntaxsingler   r    r!   s    r   1test_curly_brace_after_primary_raises_immediatelyz@SyntaxTestCase.test_curly_brace_after_primary_raises_immediately  s    %!1Ar#   c                 (    | j                  dd       y )Nzf() = 1assignr    r!   s    r   test_assign_callzSyntaxTestCase.test_assign_call  s    )X.r#   c                    | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd	       | j                  d
d       | j                  dd	       | j                  dd	       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  d d       | j                  d!d       | j                  d"d#       | j                  d$d       y )%Nzdel (,)r%   zdel 1zcannot delete literalz
del (1, 2)zdel Nonezcannot delete Nonezdel *xzcannot delete starredzdel (*x)zcannot use starred expressionz	del (*x,)z	del [*x,]zdel f()zcannot delete function callzdel f(a, b)z	del o.f()z
del a[0]()z
del x, f()z
del f(), xzdel [a, b, ((c), (d,), e.f())]zdel (a if True else b)zcannot delete conditionalzdel +azcannot delete expressionz	del a, +bz	del a + bzdel (a + b, c)zdel (c[0], a + b)zdel a.b.c + 2zdel a.b.c[0] + 2zdel (a, b, (c, d.e.f + 2))zdel [a, b, (c, d.e.f[0] + 2)]zdel (a := 5)zcannot delete named expressionz
del a += br    r!   s    r   test_assign_delzSyntaxTestCase.test_assign_del  s   )%56'#:;,(?@*&:;($;<*&EF+'>?+'>?)%BC-)FG+'DE,(EF,(EF,(EF:<YZ24OP($>?+'AB+'AB*,FG-/IJ/+EF,.HI68RS9;UV.*JK 	,(89r#   c                 0    d}| j                  |dd       y )Nzif 1:
            def error(a):
                global a  # SyntaxError
            def error2():
                b = 1
                global b  # SyntaxError
            zparameter and global   r   r    r   sources     r   test_global_param_err_firstz*SyntaxTestCase.test_global_param_err_first  s!     	&"8Cr#   c                 0    d}| j                  |dd       y )Nzif 1:
            def error(a):
                nonlocal a  # SyntaxError
            def error2():
                b = 1
                global b  # SyntaxError
            zparameter and nonlocalr/   r0   r    r1   s     r   test_nonlocal_param_err_firstz,SyntaxTestCase.test_nonlocal_param_err_first  s!     	&":1Er#   c                 H   | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  d	d       | j                  d
d       y )Nzif 0: yieldoutside functionzif 0: yield
else:  x=1zif 1: pass
else: yieldzwhile 0: yieldzwhile 0: yield
else:  x=1zclass C:
  if 0: yieldz#class C:
  if 1: pass
  else: yieldzclass C:
  while 0: yieldz(class C:
  while 0: yield
  else:  x = 1r    r!   s    r   test_yield_outside_functionz*SyntaxTestCase.test_yield_outside_function  s    -8JK38JK38JK*8JK68JK38JKA,	.68JKF,	.r#   c                 H   | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  d	d       | j                  d
d       y )Nzif 0: returnr7   zif 0: return
else:  x=1zif 1: pass
else: returnzwhile 0: returnzclass C:
  if 0: returnzclass C:
  while 0: returnz'class C:
  while 0: return
  else:  x=1z$class C:
  if 0: return
  else: x= 1z$class C:
  if 1: pass
  else: returnr    r!   s    r   test_return_outside_functionz+SyntaxTestCase.test_return_outside_function  s    .9KL49KL49KL+9KL49KL79KLE,	.B,	.B,	.r#   c                     d}| j                  d|d       | j                  d|d       | j                  d|d       | j                  d|d       | j                  d	|d       | j                  d
|d       | j                  d|d       y )Nzoutside loopbreak   r0   zif 0: breakzif 0: break
else:  x=1zif 1: pass
else: break   zclass C:
  if 0: breakz#class C:
  if 1: pass
  else: breakr/   zwith object() as obj:
 breakr    r   msgs     r   test_break_outside_loopz&SyntaxTestCase.test_break_outside_loop)  s    '3q1-Q73SC3SC3SCAa 	 	)9a 	 	)r#   c                     d}| j                  d|d       | j                  d|d       | j                  d|d       | j                  d|d       | j                  d	|d
       | j                  d|d       y )Nznot properly in loopzif 0: continuer=   r0   zif 0: continue
else:  x=1zif 1: pass
else: continuer>   zclass C:
  if 0: continuez&class C:
  if 1: pass
  else: continuer/   z"with object() as obj:
    continuer    r?   s     r   test_continue_outside_loopz)SyntaxTestCase.test_continue_outside_loop5  s    $*C:6AF6AF6AFDa 	 	)?a 	 	)r#   c                 4    | j                  ddt               y )Nzfoo()
 bar()
zunexpected indentr   r   IndentationErrorr!   s    r   test_unexpected_indentz%SyntaxTestCase.test_unexpected_indent@  s    +-@#3 	 	5r#   c                 4    | j                  ddt               y )Nzif 1:
foo()zexpected an indented blockrE   rF   r!   s    r   test_no_indentzSyntaxTestCase.test_no_indentD  s    .*F#3 	 	5r#   c                 4    | j                  ddt               y )Nzif 1:
  foo()
 bar()z unindent does not match .* levelrE   rF   r!   s    r   test_bad_outdentzSyntaxTestCase.test_bad_outdentH  s    2<#3 	 	5r#   c                 (    | j                  dd       y )Nzint(base=10, '2')z,positional argument follows keyword argumentr    r!   s    r   test_kwargs_lastzSyntaxTestCase.test_kwargs_lastM  s    -H	Jr#   c                 (    | j                  dd       y )Nzint(**{'base': 10}, '2')z6positional argument follows keyword argument unpackingr    r!   s    r   test_kwargs_last2z SyntaxTestCase.test_kwargs_last2Q  s    47	8r#   c                 (    | j                  dd       y )Nzint(**{'base': 10}, *['2'])z>iterable argument unpacking follows keyword argument unpackingr    r!   s    r   test_kwargs_last3z SyntaxTestCase.test_kwargs_last3V  s    77	8r#   c                 2    | j                  dddddd       y )Nz<foo(x,    y for y in range(3) for z in range(2) if z    , p)z*Generator expression must be parenthesizedr=      5   r   r   r   r   r    r!   s    r   test_generator_in_function_callz.SyntaxTestCase.test_generator_in_function_call[  s%    XF!"q 	 	Lr#   c                 2    | j                  dddddd       y )Nz9try: pass
except ValueError: pass
except* TypeError: pass:cannot have both 'except' and 'except\*' on the same 'try'r/   r=      rV   r    r!   s    r   test_except_then_except_starz+SyntaxTestCase.test_except_then_except_star`  %    WW!"qq 	 	Jr#   c                 2    | j                  dddddd       y )Nz9try: pass
except* ValueError: pass
except TypeError: passrY   r/   r=   r   rV   r    r!   s    r   test_except_star_then_exceptz+SyntaxTestCase.test_except_star_then_excepte  r\   r#   c                     d}	 t        |dd       d}d}	 t        |dd       t        |dd       y # t        $ r | j                  d       Y <w xY w# t        $ r | j                  d       Y y w xY w)Nz\
pass
        \

pass
<string>execz8Empty line after a line continuation character is valid.zN\
def fib(n):
    \
'''Print a Fibonacci series up to n.'''
    \
a, b = 0, 1
zJ\
def fib(n):
    '''Print a Fibonacci series up to n.'''
    a, b = 0, 1
z/Indented statement over multiple lines is valid)r   r	   r   )r   ss1s2s       r   test_empty_line_after_linecontz-SyntaxTestCase.test_empty_line_after_linecontj  s    	RAz6*

	IB
F+B
F+%  	RIIPQ	R&  	IIIGH	Is    1 A AAA.-A.c                 >    d}| j                  t        t        |       y )Nz(\
if x:
    y = 1
  \
  foo = 1
        )assertRaisesrG   ra   r   r   s     r   !test_continuation_bad_indentationz0SyntaxTestCase.test_continuation_bad_indentation  s     	*D$7r#   c                     d}t        d      D ]&  }|d|z   dz  }|d|dz   z   dz  }|d|z   dz  }( |d d	z  }| j                  |d
       y )N    z    ztry:
r=   zraise Exception
zexcept Exception as e:
z0                                                pass!too many statically nested blocks)ranger   )r   r   is      r   test_nested_named_except_blocksz.SyntaxTestCase.test_nested_named_except_blocks  s    r 	:Avaxj''Dvqs|n$566Dvaxj 899D	: 	8*D!!$ CDr#   c                 ,    d}| j                  |d       y )Nzw
def func1():
    if a != b:
        raise ValueError

def func2():
    try
        return 1
    finally:
        pass
zexpected ':'r    rh   s     r   &test_barry_as_flufl_with_syntax_errorsz5SyntaxTestCase.test_barry_as_flufl_with_syntax_errors  s    
 	$/r#   c                     | j                  dddd       | j                  dddd       | j                  ddd	d       y )
Nz	a = 3 \ 46unexpected character after line continuation characterr=   rZ   )r   r   z1,\#
2   z
fgdfgf
1,\#
2
r/   r    r!   s    r   -test_invalid_line_continuation_error_positionz<SyntaxTestCase.test_invalid_line_continuation_error_position  s^    ,R!"1 	 	. 	*R!"1 	 	. 	0R!"1 	 	.r#   c                 L    | j                  dd       | j                  dd       y )Nu   A.Ɗ\ ru   u   A.μ\
zunexpected EOF while parsingr    r!   s    r   -test_invalid_line_continuation_left_recursivez<SyntaxTestCase.test_invalid_line_continuation_left_recursive  s+     	-R	T.8	:r#   c                     dD ]  }| j                  |dz   d| d        dD ]  }| j                  d| dd| d        dD ]  }| j                  |dz   d| d	        d
}| j                  |d       y )Nz([{z1 + 2\z' was never closedza = z 1, 2, 3
b=3z)]}zunmatched '\'zFfunc(
    a=["unclosed], # Need a quote in this comment: "
    b=2,
)
z8parenthesis '\)' does not match opening parenthesis '\['r    )r   parenr   s      r   test_error_parenthesisz%SyntaxTestCase.test_error_parenthesis  s     	OEegoE7:L/MN	O  	[EUG=9RwFX;YZ	[  	IEegougQ/GH	I 	$ \]r#   c                     | j                  dd       | j                  dd       | j                  dd       | j                  dd       y )Nz'blechzunterminated string literalz"blechz'''blechz)unterminated triple-quoted string literalz"""blechr    r!   s    r   test_error_string_literalz(SyntaxTestCase.test_error_string_literal  sF    ($AB($AB*&QR*&QRr#   c                 (    | j                  dd       y )Nzprint("Hello")zinvalid non-printable characterr    r!   s    r   test_invisible_charactersz(SyntaxTestCase.test_invisible_characters  s    .0QRr#   c                 "    d}t        |dd       y )Nz)
def match(x):
    return 1+1

match(34)
r`   ra   r   rh   s     r   +test_match_call_does_not_raise_syntax_errorz:SyntaxTestCase.test_match_call_does_not_raise_syntax_error       	j&)r#   c                 "    d}t        |dd       y )Nz'
def case(x):
    return 1+1

case(34)
r`   ra   r   rh   s     r   *test_case_call_does_not_raise_syntax_errorz9SyntaxTestCase.test_case_call_does_not_raise_syntax_error  r   r#   c                 ,    | j                  ddd       y )Nzcall(
a=1,
a=1
)zkeyword argument repeatedr/   r0   r    r!   s    r   /test_multiline_compiler_error_points_to_the_endz>SyntaxTestCase.test_multiline_compiler_error_points_to_the_end  s    !' 	 	
r#   c                 ,    d}| j                  |d       y )Na  
while 1:
 while 2:
  while 3:
   while 4:
    while 5:
     while 6:
      while 8:
       while 9:
        while 10:
         while 11:
          while 12:
           while 13:
            while 14:
             while 15:
              while 16:
               while 17:
                while 18:
                 while 19:
                  while 20:
                   while 21:
                    while 22:
                     break
rn   r    r1   s     r   )test_syntax_error_on_deeply_nested_blocksz8SyntaxTestCase.test_syntax_error_on_deeply_nested_blocks  s    0 	&"EFr#   c                     ddz  dz   }dD ]I  }| j                  |      5  | j                  t        d      5  t        |d|       d d d        d d d        K y # 1 sw Y   xY w# 1 sw Y   bxY w)N-i 4)ra   evalr&   r'   ztoo complexr`   )subTestassertRaisesRegexMemoryErrorr   )r   r2   r   s      r   #test_error_on_parser_stack_overflowz2SyntaxTestCase.test_error_on_parser_stack_overflow	  sx    v#. 	6D4( 6++KH 6FJ566 6	66 66 6s"   A$AA$A!A$$A-	c                 v    d}| j                  t              5  t        |dd       d d d        y # 1 sw Y   y xY w)Nz,d{{{{{{{{{{{{{{{{{{{{{{{{{```{{{{{{{ef f():yr`   ra   )rg   r	   r   r1   s     r   test_deep_invalid_rulez%SyntaxTestCase.test_deep_invalid_rule%	  s9     @{+ 	0FJ/	0 	0 	0s   /8)z
<testcase>ra   NNNNN)(r   
__module____qualname__r   r"   r(   r+   r-   r3   r5   r8   r:   rA   rC   rH   rJ   rL   rN   rP   rR   rW   r[   r^   re   ri   r   cpython_onlyrq   rs   rw   ry   r~   r   r   r   r   r   r   r   r    r#   r   r   r     s     CGKO=<
B/:>DF..
)	)555
J8
8
L
J
J
I@
8 E E0"	.:^&SS**
  G  GD 6 6 0 0r#   r   c                 L    |j                  t        j                                |S )N)addTestdoctestDocTestSuite)loadertestspatterns      r   
load_testsr   .	  s    	MM'&&()Lr#   __main__)
r   r   unittesttestr   TestCaser   r   r   mainr   r#   r   <module>r      sN   eN= 
   }0X&& }0@
 zHMMO r#   