a 5źdgv…ć@sHddlZddlZddlmZGdd„dejƒZdd„ZedkrDeƒdS)éN)Śsupportc@sŌeZdZd0dd„Zdd„Zdd „Ze e  ”d ”d d „ƒZ d d„Z dd„Z dd„Z dd„Zdd„Zdd„Z dd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zejd(d)„ƒZd*d+„Zd,d-„Zd.d/„ZdS)1ŚSyntaxTestCaseś ŚexecNc CsÄzt|||ƒWn¤ty“}zŒ|r>t||ƒs>| d|j”t |t|ƒ”} | durf| d|f”| |j |”|durŠ| |j |”|dur | |j |”WYd}~nd}~00| d”dS)NzSyntaxError is not a %szSyntaxError did not contain %rz#compile() did not raise SyntaxError) ŚcompileŚ SyntaxErrorŚ isinstanceŚfailŚ__name__ŚreŚsearchŚstrZ assertEqualŚfilenameŚlinenoŚoffset) ŚselfŚcodeZerrtextrŚmodeŚsubclassrrŚerrŚmo©rś,/usr/local/lib/python3.9/test/test_syntax.pyŚ _check_errors$zSyntaxTestCase._check_errorcCs|jdddddS)Nzf{śinvalid syntaxZsingle)r©r©rrrrŚ1test_curly_brace_after_primary_raises_immediately*sz@SyntaxTestCase.test_curly_brace_after_primary_raises_immediatelycCs| dd”dS)Nzf() = 1ZassignrrrrrŚtest_assign_call-szSyntaxTestCase.test_assign_callz3The old parser cannot generate these error messagescCsH| dd”| dd”| dd”| dd”| dd ”| d d ”| d d ”| d d ”| dd”| dd”| dd”| dd”| dd”| dd”| dd”| dd”| dd”| dd”| dd”| dd”| dd”| dd”| dd”| d d”| d!d”| d"d#”| d$d”dS)%Nzdel (,)rzdel 1zdelete literalz del (1, 2)zdel Nonez delete Nonezdel *xzdelete starredzdel (*x)zuse starred expressionz del (*x,)z del [*x,]zdel f()zdelete function callz del f(a, b)z del o.f()z del a[0]()z del x, f()z del f(), xzdel [a, b, ((c), (d,), e.f())]zdel (a if True else b)zdelete conditionalzdel +azdelete operatorz del a, +bz del a + bzdel (a + b, c)zdel (c[0], a + b)z del a.b.c + 2zdel a.b.c[0] + 2zdel (a, b, (c, d.e.f + 2))zdel [a, b, (c, d.e.f[0] + 2)]z del (a := 5)zdelete named expressionz del a += brrrrrŚtest_assign_del0s6                          zSyntaxTestCase.test_assign_delcCsd}|j|ddddS)Nz¬if 1: def error(a): global a # SyntaxError def error2(): b = 1 global b # SyntaxError zparameter and globalé©rr©rŚsourcerrrŚtest_global_param_err_firstPsz*SyntaxTestCase.test_global_param_err_firstcCsd}|j|ddddS)Nz®if 1: def error(a): nonlocal a # SyntaxError def error2(): b = 1 global b # SyntaxError zparameter and nonlocalr r!rr"rrrŚtest_nonlocal_param_err_firstZsz,SyntaxTestCase.test_nonlocal_param_err_firstcCs| dd”dS)NŚbreakś outside looprrrrrŚtest_break_outside_loopdsz&SyntaxTestCase.test_break_outside_loopcCsp| dd”| dd”| dd”| dd”| dd”| dd”| dd”| d d”| d d”dS) Nz if 0: yieldśoutside functionzif 0: yield else: x=1zif 1: pass else: yieldzwhile 0: yieldzwhile 0: yield else: x=1zclass C: if 0: yieldz#class C: if 1: pass else: yieldzclass C: while 0: yieldz(class C: while 0: yield else: x = 1rrrrrŚtest_yield_outside_functiongs      ’ ’z*SyntaxTestCase.test_yield_outside_functioncCsp| dd”| dd”| dd”| dd”| dd”| dd”| dd”| d d”| d d”dS) Nz if 0: returnr)zif 0: return else: x=1zif 1: pass else: returnzwhile 0: returnzclass C: if 0: returnzclass 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: returnrrrrrŚtest_return_outside_functionts      ’’’z+SyntaxTestCase.test_return_outside_functioncCs@| dd”| dd”| dd”| dd”| dd”dS)Nz if 0: breakr'zif 0: break else: x=1zif 1: pass else: breakzclass C: if 0: breakz#class C: if 1: pass else: breakrrrrrr(‚s    ’cCs@| dd”| dd”| dd”| dd”| dd”dS)Nzif 0: continueznot properly in loopzif 0: continue else: x=1zif 1: pass else: continuezclass C: if 0: continuez&class C: if 1: pass else: continuerrrrrŚtest_continue_outside_loopŠs    ’z)SyntaxTestCase.test_continue_outside_loopcCs|jddtddS)Nz foo() bar() zunexpected indent©r©rŚIndentationErrorrrrrŚtest_unexpected_indent’s’z%SyntaxTestCase.test_unexpected_indentcCs|jddtddS)Nz if 1: foo()zexpected an indented blockr-r.rrrrŚtest_no_indent–s’zSyntaxTestCase.test_no_indentcCs|jddtddS)Nzif 1: foo() bar()z unindent does not match .* levelr-r.rrrrŚtest_bad_outdentšsžzSyntaxTestCase.test_bad_outdentcCs| dd”dS)Nzint(base=10, '2')z,positional argument follows keyword argumentrrrrrŚtest_kwargs_lastŸs’zSyntaxTestCase.test_kwargs_lastcCs| dd”dS)Nzint(**{'base': 10}, '2')z6positional argument follows keyword argument unpackingrrrrrŚtest_kwargs_last2£s’z SyntaxTestCase.test_kwargs_last2cCs| dd”dS)Nzint(**{'base': 10}, *['2'])z>iterable argument unpacking follows keyword argument unpackingrrrrrŚtest_kwargs_last3Øs’z SyntaxTestCase.test_kwargs_last3cCs6d}zt|ddƒWnty0| d”Yn0dS)Nz\ pass \ pass zrz8Empty line after a line continuation character is valid.)rrr )rŚsrrrŚtest_empty_line_after_linecont­s  z-SyntaxTestCase.test_empty_line_after_linecontcCsjd}tdƒD]>}|d|›d7}|d|d›d7}|d|›d7}q |d›d 7}| |d ”dS) NŚé z ztry: ézraise Exception zexcept Exception as e: z0 Śpassz!too many statically nested blocks)Śranger)rrŚirrrŚtest_nested_named_except_blocksŗs z.SyntaxTestCase.test_nested_named_except_blockscCsd}| |d”dS)Nzw def func1(): if a != b: raise ValueError def func2(): try return 1 finally: pass rr)rrrrrŚ&test_barry_as_flufl_with_syntax_errorsÄs z5SyntaxTestCase.test_barry_as_flufl_with_syntax_errorscCs|jddddddS)Nz a = 3 \ 4ś6unexpected character after line continuation characterr:é )rrrrrrrŚ-test_invalid_line_continuation_error_positionÕsžzr?rBrCrrrrrs2’       rcCs(t t”ddlm}tj|dddS)Nr©Ś test_syntaxT)Ś verbosity)rZ run_unittestrŚtestrHZ run_doctestrGrrrŚ test_mainās  rKŚ__main__)r rFrJrZTestCaserrKr rrrrŚ s S