
    <e                        	 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	                     dS dS )    N)supportc                   N   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j        d             Zd Zd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$ej        d$             Z%ej        d%             Z&ej        d&             Z'dS )(SyntaxTestCase
<testcase>execNc
                    	 	 t          |||           |                     d           d S # t          $ r}
|r-t          |
|          s|                     d|j        z             t          j        |t          |
                    }||                     d|           |                     |
j	        |           ||                     |
j
        |           ||                     |
j        |           ||                     |
j        |           |	!|                     |
j        |	           Y d }
~
d S Y d }
~
d S 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               '/usr/lib/python3.11/test/test_syntax.py_check_errorzSyntaxTestCase._check_error0  s{   		=D(D)))$ II;<<<<<#  	= 	= 	= I
3 9 9 I		3h6GGHHH7CHH--Bz			ggGHHHS\8444!  V444!  V444%  <<<%  <<<<<<<<< &%%%%%	=s   + EC:D<<Ec                 6    |                      ddd           d S )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_assignmentN  s2    &K 	 	
 	
 	
 	
 	
    c                 6    |                      ddd           d S )Nzf{}invalid syntaxsingler   r"   r#   s    r   1test_curly_brace_after_primary_raises_immediatelyz@SyntaxTestCase.test_curly_brace_after_primary_raises_immediatelyU  s$    %!1AAAAAr%   c                 2    |                      dd           d S )Nzf() = 1assignr"   r#   s    r   test_assign_callzSyntaxTestCase.test_assign_callX  s    )X.....r%   c                    |                      dd           |                      dd           |                      dd           |                      dd           |                      dd	           |                      d
d           |                      dd	           |                      dd	           |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      d d           |                      d!d           |                      d"d#           |                      d$d           d S )%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66'#:;;;,(?@@@*&:;;;($;<<<*&EFFF+'>???+'>???)%BCCC-)FGGG+'DEEE,(EFFF,(EFFF,(EFFF:<YZZZ24OPPP($>???+'ABBB+'ABBB*,FGGG-/IJJJ/+EFFF,.HIII68RSSS9;UVVV.*JKKK 	,(899999r%   c                 :    d}|                      |dd           d S )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_firstz  s-     	&"8CCCCCr%   c                 :    d}|                      |dd           d S )Nzif 1:
            def error(a):
                nonlocal a  # SyntaxError
            def error2():
                b = 1
                global b  # SyntaxError
            zparameter and nonlocalr1   r2   r"   r3   s     r   test_nonlocal_param_err_firstz,SyntaxTestCase.test_nonlocal_param_err_first  s-     	&":1EEEEEr%   c                    |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      d	d           |                      d
d           d S )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KK38JKKK38JKKK*8JKKK68JKKK38JKKKA,	. 	. 	.68JKKKF,	. 	. 	. 	. 	.r%   c                    |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      dd           |                      d	d           |                      d
d           d S )Nzif 0: returnr9   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LL49KLLL49KLLL+9KLLL49KLLL79KLLLE,	. 	. 	.B,	. 	. 	.B,	. 	. 	. 	. 	.r%   c                 Z   d}|                      d|d           |                      d|d           |                      d|d           |                      d|d           |                      d	|d           |                      d
|d           |                      d|d           d S )Nzoutside loopbreak   r2   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: breakr1   zwith object() as obj:
 breakr"   r   msgs     r   test_break_outside_loopz&SyntaxTestCase.test_break_outside_loop  s    '3q111-Q7773SCCC3SCCC3SCCCAa 	 	) 	) 	)9a 	 	) 	) 	) 	) 	)r%   c                 *   d}|                      d|d           |                      d|d           |                      d|d           |                      d|d           |                      d	|d
           |                      d|d           d S )Nznot properly in loopzif 0: continuer?   r2   zif 0: continue
else:  x=1zif 1: pass
else: continuer@   zclass C:
  if 0: continuez&class C:
  if 1: pass
  else: continuer1   z"with object() as obj:
    continuer"   rA   s     r   test_continue_outside_loopz)SyntaxTestCase.test_continue_outside_loop  s    $*C:::6AFFF6AFFF6AFFFDa 	 	) 	) 	)?a 	 	) 	) 	) 	) 	)r%   c                 @    |                      ddt                     d S )Nzfoo()
 bar()
zunexpected indentr   r   IndentationErrorr#   s    r   test_unexpected_indentz%SyntaxTestCase.test_unexpected_indent  s2    +-@#3 	 	5 	5 	5 	5 	5r%   c                 @    |                      ddt                     d S )Nzif 1:
foo()zexpected an indented blockrG   rH   r#   s    r   test_no_indentzSyntaxTestCase.test_no_indent  s1    .*F#3 	 	5 	5 	5 	5 	5r%   c                 @    |                      ddt                     d S )Nzif 1:
  foo()
 bar()z unindent does not match .* levelrG   rH   r#   s    r   test_bad_outdentzSyntaxTestCase.test_bad_outdent  s2    2<#3 	 	5 	5 	5 	5 	5r%   c                 2    |                      dd           d S )Nzint(base=10, '2')z,positional argument follows keyword argumentr"   r#   s    r   test_kwargs_lastzSyntaxTestCase.test_kwargs_last  s/    -H	J 	J 	J 	J 	Jr%   c                 2    |                      dd           d S )Nzint(**{'base': 10}, '2')z6positional argument follows keyword argument unpackingr"   r#   s    r   test_kwargs_last2z SyntaxTestCase.test_kwargs_last2  s,    47	8 	8 	8 	8 	8r%   c                 2    |                      dd           d S )Nzint(**{'base': 10}, *['2'])z>iterable argument unpacking follows keyword argument unpackingr"   r#   s    r   test_kwargs_last3z SyntaxTestCase.test_kwargs_last3  s,    77	8 	8 	8 	8 	8r%   c                 <    |                      dddddd           d S )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 	L 	L 	L 	Lr%   c                 <    |                      dddddd           d S )Nz9try: pass
except ValueError: pass
except* TypeError: pass:cannot have both 'except' and 'except\*' on the same 'try'r1   r?      rX   r"   r#   s    r   test_except_then_except_starz+SyntaxTestCase.test_except_then_except_star  =    WW!"qq 	 	J 	J 	J 	J 	Jr%   c                 <    |                      dddddd           d S )Nz9try: pass
except* ValueError: pass
except TypeError: passr[   r1   r?   r!   rX   r"   r#   s    r   test_except_star_then_exceptz+SyntaxTestCase.test_except_star_then_except  r^   r%   c                    d}	 t          |dd           n%# t          $ r |                     d           Y nw xY wd}d}	 t          |dd           t          |dd           d S # t          $ r |                     d           Y d S w xY w)Nz\
pass
        \

pass
<string>r   z8Empty 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_linecont  s    	RAz6**** 	R 	R 	RIIPQQQQQ	R
	IB
F+++B
F+++++ 	I 	I 	IIIGHHHHHH	Is    88 "A$ $BBc                 L    d}|                      t          t          |           d S )Nz(\
if x:
    y = 1
  \
  foo = 1
        )assertRaisesrI   r   r   r   s     r   !test_continuation_bad_indentationz0SyntaxTestCase.test_continuation_bad_indentation
  s*     	*D$77777r%   c                     d}t          d          D ]&}|d|z   dz  }|d|dz   z   dz  }|d|z   dz  }'|d d	z  }|                     |d
           d S )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vax''''Dvqs|6666Dvax9999DD8!!!!$ CDDDDDr%   c                 6    d}|                      |d           d S )Nzw
def func1():
    if a != b:
        raise ValueError

def func2():
    try
        return 1
    finally:
        pass
zexpected ':'r"   ri   s     r   &test_barry_as_flufl_with_syntax_errorsz5SyntaxTestCase.test_barry_as_flufl_with_syntax_errors   s'    
 	$/////r%   c                     |                      dddd           |                      dddd           |                      ddd	d           d S )
Nz	a = 3 \ 46unexpected character after line continuation characterr?   r\   )r   r   z1,\#
2   z
fgdfgf
1,\#
2
r1   r"   r#   s    r   -test_invalid_line_continuation_error_positionz<SyntaxTestCase.test_invalid_line_continuation_error_position1  s    ,R!"1 	 	. 	. 	. 	*R!"1 	 	. 	. 	. 	0R!"1 	 	. 	. 	. 	. 	.r%   c                 ^    |                      dd           |                      dd           d S )Nu   A.Ɗ\ rv   u   A.μ\
zunexpected EOF while parsingr"   r#   s    r   -test_invalid_line_continuation_left_recursivez<SyntaxTestCase.test_invalid_line_continuation_left_recursive<  sK     	-R	T 	T 	T.8	: 	: 	: 	: 	:r%   c                    dD ]}|                      |dz   d| d            dD ] }|                      d| dd| d           !dD ]}|                      |dz   d| d	            d
}|                      |d           d S )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_parenthesisD  s     	O 	OEego/ME/M/M/MNNNN 	[ 	[E9U999;Y;Y;Y;YZZZZ 	I 	IEego/Gu/G/G/GHHHH 	$ \]]]]]r%   c                     |                      dd           |                      dd           |                      dd           |                      dd           d S )Nz'blechzunterminated string literalz"blechz'''blechz)unterminated triple-quoted string literalz"""blechr"   r#   s    r   test_error_string_literalz(SyntaxTestCase.test_error_string_literalW  sd    ($ABBB($ABBB*&QRRR*&QRRRRRr%   c                 2    |                      dd           d S )Nzprint("Hello")zinvalid non-printable characterr"   r#   s    r   test_invisible_charactersz(SyntaxTestCase.test_invisible_characters^  s     .0QRRRRRr%   c                 ,    d}t          |dd           d S )Nz)
def match(x):
    return 1+1

match(34)
rb   r   r	   ri   s     r   +test_match_call_does_not_raise_syntax_errorz:SyntaxTestCase.test_match_call_does_not_raise_syntax_errora  #     	j&)))))r%   c                 ,    d}t          |dd           d S )Nz'
def case(x):
    return 1+1

case(34)
rb   r   r   ri   s     r   *test_case_call_does_not_raise_syntax_errorz9SyntaxTestCase.test_case_call_does_not_raise_syntax_errorj  r   r%   c                 6    |                      ddd           d S )Nzcall(
a=1,
a=1
)zkeyword argument repeatedr1   r2   r"   r#   s    r   /test_multiline_compiler_error_points_to_the_endz>SyntaxTestCase.test_multiline_compiler_error_points_to_the_ends  s2    !' 	 	
 	
 	
 	
 	
r%   c                 6    d}|                      |d           d S )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
ro   r"   r3   s     r   )test_syntax_error_on_deeply_nested_blocksz8SyntaxTestCase.test_syntax_error_on_deeply_nested_blocksz  s(    0 	&"EFFFFFr%   c                    ddz  dz   }dD ]s}|                      |          5  |                     t                    5  t          |d|           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   td S )N-i 4)r   evalr(   r)   rb   )subTestrh   MemoryErrorr	   )r   r4   r   s      r   #test_error_on_parser_stack_overflowz2SyntaxTestCase.test_error_on_parser_stack_overflow  s   v#. 	6 	6D4(( 6 6&&{33 6 6FJ5556 6 6 6 6 6 6 6 6 6 6 6 6 6 66 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6s4   A3AA3A  A3#A $A33A7	:A7	c                     d}|                      t                    5  t          |dd           d d d            d S # 1 swxY w Y   d S )Nz,d{{{{{{{{{{{{{{{{{{{{{{{{{```{{{{{{{ef f():yrb   r   )rh   r   r	   r3   s     r   test_deep_invalid_rulez%SyntaxTestCase.test_deep_invalid_rule  s     @{++ 	0 	0FJ///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   <A A )r   r   NNNNN)(r   
__module____qualname__r   r$   r*   r-   r/   r5   r7   r:   r<   rC   rE   rJ   rL   rN   rP   rR   rT   rY   r]   r`   rf   rj   r   cpython_onlyrr   rt   rx   rz   r   r   r   r   r   r   r   r   r    r%   r   r   r   .  s        CGKO= = = =<
 
 
B B B/ / /: : :>D D DF F F. . .. . .
) 
) 
)	) 	) 	)5 5 55 5 55 5 5
J J J8 8 8
8 8 8
L L L
J J J
J J J
I I I@
8 
8 
8 E E E0 0 0"	. 	. 	.: : :^ ^ ^&S S SS S S* * ** * *
 
 
  G  G  GD 6 6 6 0 0 0 0 0r%   r   c                 R    |                     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      s   eN9 
			        }0 }0 }0 }0 }0X& }0 }0 }0@  
 zHMOOOOO r%   