o
    gr                     @   sN   	 d dl Z d dlZd dlmZ G dd dejZdd Zedkr%e  dS dS )    N)supportc                   @   s  e Zd Z		d=ddZdd Zdd	 Zd
d Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Z
dd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zejd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zejd;d< Z dS )>SyntaxTestCase
<testcase>execNc
              
   C   s  	 zt ||| W np tyy }
 zd|r t|
|s | d|j  t|t|
}|d u r4| d|f  | |
j	| |d urF| |
j
| |d urQ| |
j| |d ur\| |
j| |	d urn| |
j|	 W Y d }
~
d S W Y d }
~
d S d }
~
ww | d d S )NzSyntaxError is not a %szSyntaxError did not contain %rz#compile() did not raise SyntaxError)compileSyntaxError
isinstancefail__name__researchstrZassertEqualfilenamelinenooffset
end_lineno
end_offset)selfcodeZerrtextr   modesubclassr   r   r   r   errmo r   F/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_syntax.py_check_error  s,   zSyntaxTestCase._check_errorc                 C      | j dddd d S )Nzprint(end1 + end2 = ' ')z=expression cannot contain assignment, perhaps you meant "=="?   )r   r   r   r   r   r   test_expression_with_assignment  
   
z.SyntaxTestCase.test_expression_with_assignmentc                 C   r   )Nzf{}invalid syntaxZsingle)r   r   r   r   r   r   1test_curly_brace_after_primary_raises_immediately   s   z@SyntaxTestCase.test_curly_brace_after_primary_raises_immediatelyc                 C      |  dd d S )Nzf() = 1Zassignr   r   r   r   r   test_assign_call#     zSyntaxTestCase.test_assign_callc                 C   sH  |  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   r   r   r   test_assign_del&  s6   zSyntaxTestCase.test_assign_delc                 C      d}| j |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   sourcer   r   r   test_global_param_err_firstE     z*SyntaxTestCase.test_global_param_err_firstc                 C   r(   )Nzif 1:
            def error(a):
                nonlocal a  # SyntaxError
            def error2():
                b = 1
                global b  # SyntaxError
            zparameter and nonlocalr)   r*   r   r+   r   r   r   test_nonlocal_param_err_firstO  r.   z,SyntaxTestCase.test_nonlocal_param_err_firstc                 C   r$   )Nbreakoutside loopr   r   r   r   r   test_break_outside_loopY  r&   z&SyntaxTestCase.test_break_outside_loopc                 C   p   |  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   r   r   r   test_yield_outside_function\  s   z*SyntaxTestCase.test_yield_outside_functionc                 C   r3   )Nzif 0: returnr4   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   r   r   r   test_return_outside_functioni  s   z+SyntaxTestCase.test_return_outside_functionc                 C   @   |  dd |  dd |  dd |  dd |  dd d S )Nzif 0: breakr1   zif 0: break
else:  x=1zif 1: pass
else: breakzclass C:
  if 0: breakz#class C:
  if 1: pass
  else: breakr   r   r   r   r   r2   w     c                 C   r7   )Nzif 0: continueznot properly in loopzif 0: continue
else:  x=1zif 1: pass
else: continuezclass C:
  if 0: continuez&class C:
  if 1: pass
  else: continuer   r   r   r   r   test_continue_outside_loop  r8   z)SyntaxTestCase.test_continue_outside_loopc                 C      | j ddtd d S )Nzfoo()
 bar()
zunexpected indentr   r   IndentationErrorr   r   r   r   test_unexpected_indent     
z%SyntaxTestCase.test_unexpected_indentc                 C   r:   )Nzif 1:
foo()zexpected an indented blockr;   r<   r   r   r   r   test_no_indent  r?   zSyntaxTestCase.test_no_indentc                 C   r:   )Nzif 1:
  foo()
 bar()z unindent does not match .* levelr;   r<   r   r   r   r   test_bad_outdent  s   
zSyntaxTestCase.test_bad_outdentc                 C   r$   )Nzint(base=10, '2')z,positional argument follows keyword argumentr   r   r   r   r   test_kwargs_last     zSyntaxTestCase.test_kwargs_lastc                 C   r$   )Nzint(**{'base': 10}, '2')z6positional argument follows keyword argument unpackingr   r   r   r   r   test_kwargs_last2  rC   z SyntaxTestCase.test_kwargs_last2c                 C   r$   )Nzint(**{'base': 10}, *['2'])z>iterable argument unpacking follows keyword argument unpackingr   r   r   r   r   test_kwargs_last3  rC   z SyntaxTestCase.test_kwargs_last3c                 C   s   | j d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 parenthesized      5   )r   r   r   r   r   r   r   r   r   test_generator_in_function_call  s   
z.SyntaxTestCase.test_generator_in_function_callc                 C   s6   d}z	t |dd W d S  ty   | d Y d S w )Nz\
pass
        \

pass
<string>r   z8Empty line after a line continuation character is valid.)r   r   r	   )r   sr   r   r   test_empty_line_after_linecont  s   z-SyntaxTestCase.test_empty_line_after_linecontc                 C   sj   d}t dD ]}|d|  d7 }|d|d   d7 }|d|  d7 }q|d d	7 }| |d
 d S )N    z    ztry:
rF   zraise Exception
zexcept Exception as e:
z0                                                pass!too many statically nested blocks)ranger   )r   r   ir   r   r   test_nested_named_except_blocks  s   z.SyntaxTestCase.test_nested_named_except_blocksc                 C      d}|  |d d S )Nzw
def func1():
    if a != b:
        raise ValueError

def func2():
    try
        return 1
    finally:
        pass
zexpected ':'r   r   r   r   r   r   &test_barry_as_flufl_with_syntax_errors  s   z5SyntaxTestCase.test_barry_as_flufl_with_syntax_errorsc                 C   s   | j ddddd d S )Nz	a = 3 \ 46unexpected character after line continuation characterrF   	   )r   r   r   r   r   r   r   -test_invalid_line_continuation_error_position  s   
z<SyntaxTestCase.test_invalid_line_continuation_error_positionc                 C   s   |  dd |  dd d S )Nu   A.Ɗ\ rW   u   A.μ\
zunexpected EOF while parsingr   r   r   r   r   -test_invalid_line_continuation_left_recursive  s   z<SyntaxTestCase.test_invalid_line_continuation_left_recursivec                 C   sH   dD ]}|  |d d| d qdD ]}|  |d d| d qd S )Nz([{z1 + 2\z' was never closedz)]}zunmatched '\'r   )r   Zparenr   r   r   test_error_parenthesis  s
   z%SyntaxTestCase.test_error_parenthesisc                 C      d}t |dd d S )Nz)
def match(x):
    return 1+1

match(34)
rJ   r   r   rU   r   r   r   +test_match_call_does_not_raise_syntax_error     z:SyntaxTestCase.test_match_call_does_not_raise_syntax_errorc                 C   r^   )Nz'
def case(x):
    return 1+1

case(34)
rJ   r   r_   rU   r   r   r   *test_case_call_does_not_raise_syntax_error  ra   z9SyntaxTestCase.test_case_call_does_not_raise_syntax_errorc                 C   r   )Nzcall(
a=1,
a=1
)zkeyword argument repeatedr)   r*   r   r   r   r   r   /test_multiline_compiler_error_points_to_the_end  r!   z>SyntaxTestCase.test_multiline_compiler_error_points_to_the_endc                 C   rT   )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
rP   r   r+   r   r   r   )test_syntax_error_on_deeply_nested_blocks  s   	z8SyntaxTestCase.test_syntax_error_on_deeply_nested_blocks)r   r   NNNNN)!r
   
__module____qualname__r   r    r#   r%   r'   r-   r/   r2   r5   r6   r9   r>   r@   rA   rB   rD   rE   rI   rL   r   Zcpython_onlyrS   rV   rY   rZ   r]   r`   rb   rc   rd   r   r   r   r   r     sD    



			r   c                  C   s(   t t ddlm}  t j| dd d S )Nr   test_syntaxT)	verbosity)r   Zrun_unittestr   testrh   Zrun_doctestrg   r   r   r   	test_main   s   
rk   __main__)r   Zunittestrj   r   ZTestCaser   rk   r
   r   r   r   r   <module>   s(             |  )
