a
    åze¢[  ã                   @   s   d Z ddlmZ ddlmZmZ ddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlmZ ddlmZ dd	lmZ dd
lmZ G dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZ G dd„ deƒZ!G dd„ deƒZ"G dd„ deƒZ#G dd „ d eƒZ$G d!d"„ d"eƒZ%G d#d$„ d$eƒZ&G d%d&„ d&eƒZ'G d'd(„ d(eƒZ(G d)d*„ d*eƒZ)G d+d,„ d,ejƒZ*G d-d.„ d.eƒZ+G d/d0„ d0eƒZ,G d1d2„ d2eƒZ-G d3d4„ d4ejƒZ.d5d6„ Z/e0d7kre 1¡  dS )8aF  Test suite for 2to3's parser and grammar files.

This is the place to add tests for changes to 2to3's grammar, such as those
merging the grammars for Python 2 and 3. In addition to specific tests for
parts of the grammar we've changed, we also make sure we can parse the
test_grammar.py files from both Python 2 and Python 3.
é   )Úsupport)ÚdriverÚdriver_no_print_statementé    N)r   )Útokenizeé   )Ú
ParseError)Úpython_symbolsc                   @   s   e Zd Zdd„ ZdS )Ú
TestDriverc                 C   sJ   d}t  |¡}|  |jd jd jtj¡ |  |jd jd jtj¡ d S )Nzprint 1
print 2
r   r   )r   Úparse_stringÚassertEqualZchildrenÚtypeÚsymsZ
print_stmt)ÚselfÚsÚt© r   ú//usr/lib/python3.9/lib2to3/tests/test_parser.pyÚtest_formfeed#   s    
zTestDriver.test_formfeedN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r
   !   s   r
   c                   @   s>   e Zd Zdd„ Zdd„ Ze ejdu d¡dd„ ƒZ	d	d
„ Z
dS )ÚTestPgen2Cachingc                 C   s   t jtjddd d S )NFT©ÚsaveÚforce)Úpgen2_driverÚload_grammarr   Úgrammar_path©r   r   r   r   Útest_load_grammar_from_txt_file+   s    z0TestPgen2Caching.test_load_grammar_from_txt_filec              	   C   s”   t  ¡ }zztj |tj tj¡¡}t 	tj|¡ t
 |¡}t
j|ddd |  tj |¡¡ t |¡ t
j|ddd W t |¡ nt |¡ 0 d S )NTr   F)ÚtempfileÚmkdtempÚosÚpathÚjoinÚbasenamer   r   ÚshutilÚcopyr   Ú_generate_pickle_namer   Ú
assertTrueÚexistsÚunlinkÚrmtree)r   ÚtmpdirÚgrammar_copyÚpickle_namer   r   r   Útest_load_grammar_from_pickle.   s    ÿ

z.TestPgen2Caching.test_load_grammar_from_pickleNzsys.executable requiredc              	   C   sz  t  ¡ }tj |d¡}zPt |¡ tj tj¡}tj ||¡}tj ||¡}t	 
tj|¡ t	 
tj|¡ t |¡}t |¡}|  ||¡ tj|ddd |  tj |¡¡ ttjƒ}d|d< tjtjdd|f g|d |  tj |¡¡ t|d	ƒT}	t|d	ƒ(}
| j|	 ¡ |
 ¡ d
d W d   ƒ n1 s20    Y  W d   ƒ n1 sR0    Y  W t	 |¡ nt	 |¡ 0 d S )NZsubdirTr   ÚrandomZPYTHONHASHSEEDz-cz{
from lib2to3.pgen2 import driver as pgen2_driver
pgen2_driver.load_grammar(%r, save=True, force=True)
                    )ÚenvÚrbzGGrammar caches generated using different hash seeds were not identical.)Úmsg)r!   r"   r#   r$   r%   Úmkdirr&   r   r   r'   r(   r   r)   ZassertNotEqualr   r*   r+   ÚdictÚenvironÚ
subprocessÚ
check_callÚsysÚ
executableÚopenr   Úreadr-   )r   r.   Z	tmpsubdirZgrammar_baser/   Zgrammar_sub_copyr0   Zpickle_sub_nameZsub_envZ
pickle_f_1Z
pickle_f_2r   r   r   Ú!test_load_grammar_from_subprocess@   sD    

ÿ
ýûÿþHz2TestPgen2Caching.test_load_grammar_from_subprocessc                    sf   t d ‰G dd„ dƒ‰ G ‡ ‡fdd„dƒ}|ƒ tjˆ< |  tjtjˆ¡ t ˆd¡}|  |j	d¡ d S )Nz
.load_testc                   @   s   e Zd Zdd„ ZdS )z=TestPgen2Caching.test_load_packaged_grammar.<locals>.MyLoaderc                 S   s   t  ddi¡S )NÚelephanté   )ÚpickleÚdumps)r   Úwherer   r   r   Úget_datal   s    zFTestPgen2Caching.test_load_packaged_grammar.<locals>.MyLoader.get_dataN)r   r   r   rE   r   r   r   r   ÚMyLoaderk   s   rF   c                       s    e Zd ZdZej ”” ƒ ¡ZdS )z=TestPgen2Caching.test_load_packaged_grammar.<locals>.MyModuleZparsertestmoduleN)r   r   r   Ú__file__Ú	importlibÚutilÚspec_from_loaderÚ__spec__r   ©rF   Úmodnamer   r   ÚMyModulen   s   rN   zGrammar.txtrA   )
r   r;   ÚmodulesZ
addCleanupÚoperatorÚdelitemr   Zload_packaged_grammarr   r@   )r   rN   Úgr   rL   r   Útest_load_packaged_grammari   s    z+TestPgen2Caching.test_load_packaged_grammar)r   r   r   r    r1   ÚunittestZskipIfr;   r<   r?   rS   r   r   r   r   r   *   s
   
(r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚGrammarTestc                 C   s   t  |¡ d S )N)r   r   ©r   Úcoder   r   r   Úvalidatex   s    zGrammarTest.validatec                 C   s.   z|   |¡ W n ty    Y n
0 tdƒ‚d S )Nz Syntax shouldn't have been valid)rX   r   ÚAssertionErrorrV   r   r   r   Úinvalid_syntax{   s
    zGrammarTest.invalid_syntaxN)r   r   r   rX   rZ   r   r   r   r   rU   w   s   rU   c                   @   s   e Zd Zdd„ ZdS )ÚTestMatrixMultiplicationc                 C   s   |   d¡ |   d¡ d S )Nza @ bza @= b©rX   r   r   r   r   Ú#test_matrix_multiplication_operator…   s    
z<TestMatrixMultiplication.test_matrix_multiplication_operatorN)r   r   r   r]   r   r   r   r   r[   „   s   r[   c                   @   s   e Zd Zdd„ ZdS )ÚTestYieldFromc                 C   s"   |   d¡ |   d¡ |  d¡ d S )Nzyield from xz(yield from x) + yz
yield from©rX   rZ   r   r   r   r   Útest_yield_from‹   s    

zTestYieldFrom.test_yield_fromN)r   r   r   r`   r   r   r   r   r^   Š   s   r^   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestAsyncAwaitc                 C   sr   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |  d	¡ |  d
¡ |  d¡ d S )NzLasync def foo():
                             await x
                      zYasync def foo():
                             [i async for i in b]
                      z¼async def foo():
                             {i for i in b
                                async for i in a if await i
                                  for b in i}
                      zdasync def foo():
                             [await i for i in b if await c]
                      zYasync def foo():
                             [ i for i in b if c]
                      zhasync def foo():

            def foo(): pass

            def foo(): pass

            await x
        zasync def foo(): return await azTdef foo():
            def foo(): pass
            async def foo(): await x
        zawait xz5def foo():
                                   await xzedef foo():
            def foo(): pass
            async def foo(): pass
            await x
        r_   r   r   r   r   Útest_await_expr’   s    





	



zTestAsyncAwait.test_await_exprc                 C   s"   |   d¡ |   d¡ |   d¡ d S )Nz	async = 1z	await = 1zdef async(): passr\   r   r   r   r   Útest_async_varÃ   s    

zTestAsyncAwait.test_async_varc                 C   s   |   d¡ d S )NzDasync def foo():
                             async for a in b: passr\   r   r   r   r   Útest_async_forÈ   s    zTestAsyncAwait.test_async_forc                 C   s   |   d¡ |  d¡ d S )Nz@async def foo():
                             async with a: passz@def foo():
                                   async with a: passr_   r   r   r   r   Útest_async_withÌ   s    
zTestAsyncAwait.test_async_withc                 C   s   |   d¡ |   d¡ d S )NzLasync def foo():
                   return (i * 2 async for i in arange(42))zFdef foo():
                   return (i * 2 async for i in arange(42))r\   r   r   r   r   Útest_async_generatorÓ   s    ÿÿz#TestAsyncAwait.test_async_generatorN)r   r   r   rb   rc   rd   re   rf   r   r   r   r   ra   ‘   s
   1ra   c                   @   sT   e Z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S )ÚTestRaiseChangesc                 C   s   |   d¡ d S )NÚraiser\   r   r   r   r   Útest_2x_style_1ß   s    z TestRaiseChanges.test_2x_style_1c                 C   s   |   d¡ d S )Nz
raise E, Vr\   r   r   r   r   Útest_2x_style_2â   s    z TestRaiseChanges.test_2x_style_2c                 C   s   |   d¡ d S )Nzraise E, V, Tr\   r   r   r   r   Útest_2x_style_3å   s    z TestRaiseChanges.test_2x_style_3c                 C   s   |   d¡ d S )Nzraise E, V, T, Z©rZ   r   r   r   r   Útest_2x_style_invalid_1è   s    z(TestRaiseChanges.test_2x_style_invalid_1c                 C   s   |   d¡ d S )Nzraise E1 from E2r\   r   r   r   r   Útest_3x_styleë   s    zTestRaiseChanges.test_3x_stylec                 C   s   |   d¡ d S )Nzraise E, V from E1rl   r   r   r   r   Útest_3x_style_invalid_1î   s    z(TestRaiseChanges.test_3x_style_invalid_1c                 C   s   |   d¡ d S )Nzraise E from E1, E2rl   r   r   r   r   Útest_3x_style_invalid_2ñ   s    z(TestRaiseChanges.test_3x_style_invalid_2c                 C   s   |   d¡ d S )Nzraise from E1, E2rl   r   r   r   r   Útest_3x_style_invalid_3ô   s    z(TestRaiseChanges.test_3x_style_invalid_3c                 C   s   |   d¡ d S )Nzraise E fromrl   r   r   r   r   Útest_3x_style_invalid_4÷   s    z(TestRaiseChanges.test_3x_style_invalid_4N)r   r   r   ri   rj   rk   rm   rn   ro   rp   rq   rr   r   r   r   r   rg   Þ   s   rg   c                   @   s  e Z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d'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAS )BÚTestUnpackingGeneralizationsc                 C   s   |   d¡ d S )Nzfunc(1, *(2, 3), 4)r\   r   r   r   r   Útest_mid_positional_starÿ   s    z5TestUnpackingGeneralizations.test_mid_positional_starc                 C   s   |   d¡ d S )Nz,func(**{'eggs':'scrambled', 'spam':'fried'})r\   r   r   r   r   Útest_double_star_dict_literal  s    z:TestUnpackingGeneralizations.test_double_star_dict_literalc                 C   s   |   d¡ d S )Nz*func(spam='fried', **{'eggs':'scrambled'})r\   r   r   r   r   Ú,test_double_star_dict_literal_after_keywords  s    zITestUnpackingGeneralizations.test_double_star_dict_literal_after_keywordsc                 C   s   |   d¡ |   d¡ d S )Nzfunc(**{'a':2} or {})zfunc(**() or {})r\   r   r   r   r   Útest_double_star_expression  s    
z8TestUnpackingGeneralizations.test_double_star_expressionc                 C   s   |   d¡ d S )Nzfunc(*[] or [2])r\   r   r   r   r   Útest_star_expression  s    z1TestUnpackingGeneralizations.test_star_expressionc                 C   s   |   d¡ d S )Nz[*{2}, 3, *[4]]r\   r   r   r   r   Útest_list_display  s    z.TestUnpackingGeneralizations.test_list_displayc                 C   s   |   d¡ d S )Nz{*{2}, 3, *[4]}r\   r   r   r   r   Útest_set_display  s    z-TestUnpackingGeneralizations.test_set_displayc                 C   s   |   d¡ d S )Nz{**{}}r\   r   r   r   r   Útest_dict_display_1  s    z0TestUnpackingGeneralizations.test_dict_display_1c                 C   s   |   d¡ d S )Nz{**{}, 3:4, **{5:6, 7:8}}r\   r   r   r   r   Útest_dict_display_2  s    z0TestUnpackingGeneralizations.test_dict_display_2c                 C   s   |   d¡ d S )Nzfunc(* [] or [1])r\   r   r   r   r   Útest_complex_star_expression  s    z9TestUnpackingGeneralizations.test_complex_star_expressionc                 C   s   |   d¡ d S )Nz5func(**{1: 3} if False else {x: x for x in range(3)})r\   r   r   r   r   Ú#test_complex_double_star_expression  s    z@TestUnpackingGeneralizations.test_complex_double_star_expressionc                 C   s   |   d¡ d S )Nzf(a, *b, *c, d)r\   r   r   r   r   Útest_argument_unpacking_1!  s    z6TestUnpackingGeneralizations.test_argument_unpacking_1c                 C   s   |   d¡ d S )Nzf(**a, **b)r\   r   r   r   r   Útest_argument_unpacking_2$  s    z6TestUnpackingGeneralizations.test_argument_unpacking_2c                 C   s   |   d¡ d S )Nzf(2, *a, *b, **b, **c, **d)r\   r   r   r   r   Útest_argument_unpacking_3'  s    z6TestUnpackingGeneralizations.test_argument_unpacking_3c                 C   s   |   d¡ |   d¡ d S )Nzdef f(a, b): call(a, b)zdef f(a, b,): call(a, b,)r\   r   r   r   r   Útest_trailing_commas_1*  s    
z3TestUnpackingGeneralizations.test_trailing_commas_1c                 C   s   |   d¡ |   d¡ d S )Nzdef f(a, *b): call(a, *b)zdef f(a, *b,): call(a, *b,)r\   r   r   r   r   Útest_trailing_commas_2.  s    
z3TestUnpackingGeneralizations.test_trailing_commas_2c                 C   s   |   d¡ |   d¡ d S )Nzdef f(a, b=1): call(a, b=1)zdef f(a, b=1,): call(a, b=1,)r\   r   r   r   r   Útest_trailing_commas_32  s    
z3TestUnpackingGeneralizations.test_trailing_commas_3c                 C   s   |   d¡ |   d¡ d S )Nzdef f(a, **b): call(a, **b)zdef f(a, **b,): call(a, **b,)r\   r   r   r   r   Útest_trailing_commas_46  s    
z3TestUnpackingGeneralizations.test_trailing_commas_4c                 C   s   |   d¡ |   d¡ d S )Nzdef f(*a, b=1): call(*a, b=1)zdef f(*a, b=1,): call(*a, b=1,)r\   r   r   r   r   Útest_trailing_commas_5:  s    
z3TestUnpackingGeneralizations.test_trailing_commas_5c                 C   s   |   d¡ |   d¡ d S )Nzdef f(*a, **b): call(*a, **b)zdef f(*a, **b,): call(*a, **b,)r\   r   r   r   r   Útest_trailing_commas_6>  s    
z3TestUnpackingGeneralizations.test_trailing_commas_6c                 C   s   |   d¡ |   d¡ d S )Nzdef f(*, b=1): call(*b)zdef f(*, b=1,): call(*b,)r\   r   r   r   r   Útest_trailing_commas_7B  s    
z3TestUnpackingGeneralizations.test_trailing_commas_7c                 C   s   |   d¡ |   d¡ d S )Nzdef f(a=1, b=2): call(a=1, b=2)z!def f(a=1, b=2,): call(a=1, b=2,)r\   r   r   r   r   Útest_trailing_commas_8F  s    
z3TestUnpackingGeneralizations.test_trailing_commas_8c                 C   s   |   d¡ |   d¡ d S )Nzdef f(a=1, **b): call(a=1, **b)z!def f(a=1, **b,): call(a=1, **b,)r\   r   r   r   r   Útest_trailing_commas_9J  s    
z3TestUnpackingGeneralizations.test_trailing_commas_9c                 C   s   |   d¡ |   d¡ d S )Nzf = lambda a, b: call(a, b)zf = lambda a, b,: call(a, b,)r\   r   r   r   r   Útest_trailing_commas_lambda_1N  s    
z:TestUnpackingGeneralizations.test_trailing_commas_lambda_1c                 C   s   |   d¡ |   d¡ d S )Nzf = lambda a, *b: call(a, *b)zf = lambda a, *b,: call(a, *b,)r\   r   r   r   r   Útest_trailing_commas_lambda_2R  s    
z:TestUnpackingGeneralizations.test_trailing_commas_lambda_2c                 C   s   |   d¡ |   d¡ d S )Nzf = lambda a, b=1: call(a, b=1)z!f = lambda a, b=1,: call(a, b=1,)r\   r   r   r   r   Útest_trailing_commas_lambda_3V  s    
z:TestUnpackingGeneralizations.test_trailing_commas_lambda_3c                 C   s   |   d¡ |   d¡ d S )Nzf = lambda a, **b: call(a, **b)z!f = lambda a, **b,: call(a, **b,)r\   r   r   r   r   Útest_trailing_commas_lambda_4Z  s    
z:TestUnpackingGeneralizations.test_trailing_commas_lambda_4c                 C   s   |   d¡ |   d¡ d S )Nz!f = lambda *a, b=1: call(*a, b=1)z#f = lambda *a, b=1,: call(*a, b=1,)r\   r   r   r   r   Útest_trailing_commas_lambda_5^  s    
z:TestUnpackingGeneralizations.test_trailing_commas_lambda_5c                 C   s   |   d¡ |   d¡ d S )Nz!f = lambda *a, **b: call(*a, **b)z#f = lambda *a, **b,: call(*a, **b,)r\   r   r   r   r   Útest_trailing_commas_lambda_6b  s    
z:TestUnpackingGeneralizations.test_trailing_commas_lambda_6c                 C   s   |   d¡ |   d¡ d S )Nzf = lambda *, b=1: call(*b)zf = lambda *, b=1,: call(*b,)r\   r   r   r   r   Útest_trailing_commas_lambda_7f  s    
z:TestUnpackingGeneralizations.test_trailing_commas_lambda_7c                 C   s   |   d¡ |   d¡ d S )Nz#f = lambda a=1, b=2: call(a=1, b=2)z%f = lambda a=1, b=2,: call(a=1, b=2,)r\   r   r   r   r   Útest_trailing_commas_lambda_8j  s    
z:TestUnpackingGeneralizations.test_trailing_commas_lambda_8c                 C   s   |   d¡ |   d¡ d S )Nz#f = lambda a=1, **b: call(a=1, **b)z%f = lambda a=1, **b,: call(a=1, **b,)r\   r   r   r   r   Útest_trailing_commas_lambda_9n  s    
z:TestUnpackingGeneralizations.test_trailing_commas_lambda_9N)#r   r   r   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   r   r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r   rŽ   r   r   r‘   r’   r“   r   r   r   r   rs   þ   s@   rs   c                   @   s´   e Z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d'd(„ Zd)d*„ Zd+S ),ÚTestFunctionAnnotationsc                 C   s   |   d¡ d S )Nzdef f(x) -> list: passr\   r   r   r   r   Útest_1u  s    zTestFunctionAnnotations.test_1c                 C   s   |   d¡ d S )Nzdef f(x:int): passr\   r   r   r   r   Útest_2x  s    zTestFunctionAnnotations.test_2c                 C   s   |   d¡ d S )Nzdef f(*x:str): passr\   r   r   r   r   Útest_3{  s    zTestFunctionAnnotations.test_3c                 C   s   |   d¡ d S )Nzdef f(**x:float): passr\   r   r   r   r   Útest_4~  s    zTestFunctionAnnotations.test_4c                 C   s   |   d¡ d S )Nzdef f(x, y:1+2): passr\   r   r   r   r   Útest_5  s    zTestFunctionAnnotations.test_5c                 C   s   |   d¡ d S )Nzdef f(a, (b:1, c:2, d)): passr\   r   r   r   r   Útest_6„  s    zTestFunctionAnnotations.test_6c                 C   s   |   d¡ d S )Nz/def f(a, (b:1, c:2, d), e:3=4, f=5, *g:6): passr\   r   r   r   r   Útest_7‡  s    zTestFunctionAnnotations.test_7c                 C   s   d}|   |¡ d S )Nzgdef f(a, (b:1, c:2, d), e:3=4, f=5,
                        *g:6, h:7, i=8, j:9=10, **k:11) -> 12: passr\   ©r   r   r   r   r   Útest_8Š  s    zTestFunctionAnnotations.test_8c                 C   s   d}|   |¡ d S )Nzšdef f(
          a: str,
          b: int,
          *,
          c: bool = False,
          **kwargs,
        ) -> None:
            call(c=c, **kwargs,)r\   rœ   r   r   r   Útest_9  s    zTestFunctionAnnotations.test_9c                 C   s   d}|   |¡ d S )Nz@def f(
          a: str,
        ) -> None:
            call(a,)r\   rœ   r   r   r   Útest_10š  s    zTestFunctionAnnotations.test_10c                 C   s   d}|   |¡ d S )NzGdef f(
          a: str = '',
        ) -> None:
            call(a=a,)r\   rœ   r   r   r   Útest_11¡  s    zTestFunctionAnnotations.test_11c                 C   s   d}|   |¡ d S )NzHdef f(
          *args: str,
        ) -> None:
            call(*args,)r\   rœ   r   r   r   Útest_12¨  s    zTestFunctionAnnotations.test_12c                 C   s   |   d¡ |   d¡ d S )Nz)def f(a: str, b: int) -> None: call(a, b)z+def f(a: str, b: int,) -> None: call(a, b,)r\   r   r   r   r   Útest_13¯  s    
zTestFunctionAnnotations.test_13c                 C   s   |   d¡ |   d¡ d S )Nz+def f(a: str, *b: int) -> None: call(a, *b)z-def f(a: str, *b: int,) -> None: call(a, *b,)r\   r   r   r   r   Útest_14³  s    
zTestFunctionAnnotations.test_14c                 C   s   |   d¡ |   d¡ d S )Nz-def f(a: str, b: int=1) -> None: call(a, b=1)z/def f(a: str, b: int=1,) -> None: call(a, b=1,)r\   r   r   r   r   Útest_15·  s    
zTestFunctionAnnotations.test_15c                 C   s   |   d¡ |   d¡ d S )Nz-def f(a: str, **b: int) -> None: call(a, **b)z/def f(a: str, **b: int,) -> None: call(a, **b,)r\   r   r   r   r   Útest_16»  s    
zTestFunctionAnnotations.test_16c                 C   s   |   d¡ |   d¡ d S )Nz/def f(*a: str, b: int=1) -> None: call(*a, b=1)z1def f(*a: str, b: int=1,) -> None: call(*a, b=1,)r\   r   r   r   r   Útest_17¿  s    
zTestFunctionAnnotations.test_17c                 C   s   |   d¡ |   d¡ d S )Nz/def f(*a: str, **b: int) -> None: call(*a, **b)z1def f(*a: str, **b: int,) -> None: call(*a, **b,)r\   r   r   r   r   Útest_18Ã  s    
zTestFunctionAnnotations.test_18c                 C   s   |   d¡ |   d¡ d S )Nz$def f(*, b: int=1) -> None: call(*b)z&def f(*, b: int=1,) -> None: call(*b,)r\   r   r   r   r   Útest_19Ç  s    
zTestFunctionAnnotations.test_19c                 C   s   |   d¡ |   d¡ d S )Nz2def f(a: str='', b: int=2) -> None: call(a=a, b=2)z4def f(a: str='', b: int=2,) -> None: call(a=a, b=2,)r\   r   r   r   r   Útest_20Ë  s    
zTestFunctionAnnotations.test_20c                 C   s   |   d¡ |   d¡ d S )Nz2def f(a: str='', **b: int) -> None: call(a=a, **b)z4def f(a: str='', **b: int,) -> None: call(a=a, **b,)r\   r   r   r   r   Útest_21Ï  s    
zTestFunctionAnnotations.test_21N)r   r   r   r•   r–   r—   r˜   r™   rš   r›   r   rž   rŸ   r    r¡   r¢   r£   r¤   r¥   r¦   r§   r¨   r©   rª   r   r   r   r   r”   t  s*   r”   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestVarAnnotationsc                 C   s   |   d¡ d S )Nzvar1: int = 5r\   r   r   r   r   r•   Ö  s    zTestVarAnnotations.test_1c                 C   s   |   d¡ d S )Nzvar2: [int, str]r\   r   r   r   r   r–   Ù  s    zTestVarAnnotations.test_2c                 C   s   |   d¡ d S )NzCdef f():
    st: str = 'Hello'
    a.b: int = (1, 2)
    return st
r\   r   r   r   r   r—   Ü  s    zTestVarAnnotations.test_3c                 C   s   |   d¡ d S )Nz$def fbad():
    x: int
    print(x)
r\   r   r   r   r   r˜   â  s    zTestVarAnnotations.test_4c                 C   s   |   d¡ d S )Nzeclass C:
    x: int
    s: str = 'attr'
    z = 2
    def __init__(self, x):
        self.x: int = x
r\   r   r   r   r   r™   ç  s    zTestVarAnnotations.test_5c                 C   s   |   d¡ d S )Nzlst: List[int] = []r\   r   r   r   r   rš   ï  s    zTestVarAnnotations.test_6N)	r   r   r   r•   r–   r—   r˜   r™   rš   r   r   r   r   r«   Õ  s   r«   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú
TestExceptc                 C   s   d}|   |¡ d S )NzP
            try:
                x
            except E as N:
                yr\   rœ   r   r   r   Útest_newô  s    zTestExcept.test_newc                 C   s   d}|   |¡ d S )NzN
            try:
                x
            except E, N:
                yr\   rœ   r   r   r   Útest_oldü  s    zTestExcept.test_oldN)r   r   r   r­   r®   r   r   r   r   r¬   ó  s   r¬   c                   @   s   e Zd ZdZdd„ ZdS )ÚTestStringLiterals)*ú'ú"zr'zr"zR'zR"zu'zu"zU'zU"zb'zb"zB'zB"zf'zf"zF'zF"zur'zur"zUr'zUr"zuR'zuR"zUR'zUR"zbr'zbr"zBr'zBr"zbR'zbR"zBR'zBR"zrb'zrb"zRb'zRb"zrB'zrB"zRB'zRB"c                 C   sH   | j D ]<}dj||d d}|  |¡ dj||d d}|  |¡ qd S )Nz{p}spamspamspam{s}éÿÿÿÿ)Úpr   z{p}{s}{s}eggs{s}{s}{s})ÚprefixesÚformatrX   )r   ÚpreZsingleZtripler   r   r   Útest_lit  s
    

zTestStringLiterals.test_litN)r   r   r   r´   r·   r   r   r   r   r¯     s   r¯   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestSetLiteralc                 C   s   |   d¡ d S )Nzx = {'one'}r\   r   r   r   r   r•     s    zTestSetLiteral.test_1c                 C   s   |   d¡ d S )Nzx = {'one', 1,}r\   r   r   r   r   r–     s    zTestSetLiteral.test_2c                 C   s   |   d¡ d S )Nzx = {'one', 'two', 'three'}r\   r   r   r   r   r—   "  s    zTestSetLiteral.test_3c                 C   s   |   d¡ d S )Nzx = {2, 3, 4,}r\   r   r   r   r   r˜   %  s    zTestSetLiteral.test_4N)r   r   r   r•   r–   r—   r˜   r   r   r   r   r¸     s   r¸   c                   @   s   e Zd Zdd„ ZdS )ÚTestIdentifierc                 C   s,   |   d¡ |   d¡ |   d¡ |   d¡ d S )Nu!   Ã–rter = 'places'
grÃ¼n = 'green'u   èŸ’ = aèŸ’ = é”¦è›‡ = 1u   Âµ = aÂµ = ÂµÂµ = 1uA   ð”˜ð”«ð”¦ð” ð”¬ð”¡ð”¢ = a_ð”˜ð”«ð”¦ð” ð”¬ð”¡ð”¢ = 1r\   r   r   r   r   Útest_non_ascii_identifiers,  s    


z)TestIdentifier.test_non_ascii_identifiersN)r   r   r   rº   r   r   r   r   r¹   +  s   r¹   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestNumericLiteralsc                 C   s   |   d¡ |  d¡ d S )NZ0o7777777777777Z0o7324528887r_   r   r   r   r   Útest_new_octal_notation4  s    
z+TestNumericLiterals.test_new_octal_notationc                 C   s   |   d¡ |  d¡ d S )NZ0b101010Z	0b0101021r_   r   r   r   r   Útest_new_binary_notation8  s    
z,TestNumericLiterals.test_new_binary_notationN)r   r   r   r¼   r½   r   r   r   r   r»   3  s   r»   c                   @   s   e Zd Zdd„ ZdS )ÚTestClassDefc                 C   s6   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )Nzclass B(t=7): passzclass B(t, *args): passzclass B(t, **kwargs): passz!class B(t, *args, **kwargs): passz'class B(t, y=9, *args, **kwargs,): passr\   r   r   r   r   Útest_new_syntax>  s
    



zTestClassDef.test_new_syntaxN)r   r   r   r¿   r   r   r   r   r¾   =  s   r¾   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTestParserIdempotencyz,A cut-down version of pytree_idempotency.py.c                 C   s2  t jjrtd|› ƒ t|dƒ }t |j¡d }W d   ƒ n1 sF0    Y  |  |d| ¡ t|d|d}| 	¡ }W d   ƒ n1 sŒ0    Y  zt
 |¡}W nX tyü   zt |¡}W n6 työ } z|  d||f ¡ W Y d }~n
d }~0 0 Y n0 t|ƒ}||kr.tt|||ƒƒ |  d| ¡ d S )	NzParse file: r4   r   zcan't detect encoding for %sÚr)ÚencodingzParseError on file %s (%s)zIdempotency failed: %s)Útestr   ÚverboseÚprintr=   r   Údetect_encodingÚreadlineZassertIsNotNoner>   r   r   r   r   ZfailÚstrÚ
diff_texts)r   ÚfilepathÚfprÂ   ÚsourceZtreeÚerrÚnewr   r   r   Ú
parse_fileJ  s(    .ÿ&.
z TestParserIdempotency.parse_filec              	   C   sH   t  ¡ D ]:}| j|d |  |¡ W d   ƒ q1 s80    Y  qd S )N)rÊ   )r   Zall_project_filesZsubTestrÏ   )r   rÊ   r   r   r   Útest_all_project_files_  s    z,TestParserIdempotency.test_all_project_filesc                 C   s,   t  d¡ t  d¡ t  d¡ t  d¡ d S )Nza, *b, c = x
z[*a, b] = x
z(z, *y, w) = m
zfor *z, m in d: pass
©r   r   r   r   r   r   Útest_extended_unpackingd  s    


z-TestParserIdempotency.test_extended_unpackingN)r   r   r   Ú__doc__rÏ   rÐ   rÒ   r   r   r   r   rÀ   F  s   rÀ   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestLiteralsc                 C   s   t  t |¡d ¡ d S )Nz

)r   r   r   Údedentrœ   r   r   r   rX   m  s    zTestLiterals.validatec                 C   s   d}|   |¡ d S )Nuâ   
            md5test(b"Âª" * 80,
                    (b"Test Using Larger Than Block-Size Key "
                     b"and Larger Than One Block-Size Data"),
                    "6f630fad67cda0ee1fb1f562db3aa53e")
            r\   rœ   r   r   r   Útest_multiline_bytes_literalsp  s    z*TestLiterals.test_multiline_bytes_literalsc                 C   s   d}|   |¡ d S )Nz¬
            b"""
            <?xml version="1.0" encoding="UTF-8"?>
            <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN">
            """
            r\   rœ   r   r   r   Ú'test_multiline_bytes_tripquote_literalsy  s    z4TestLiterals.test_multiline_bytes_tripquote_literalsc                 C   s   d}|   |¡ d S )Nuß   
            md5test("Âª" * 80,
                    ("Test Using Larger Than Block-Size Key "
                     "and Larger Than One Block-Size Data"),
                    "6f630fad67cda0ee1fb1f562db3aa53e")
            r\   rœ   r   r   r   Útest_multiline_str_literals‚  s    z(TestLiterals.test_multiline_str_literalsN)r   r   r   rX   rÖ   r×   rØ   r   r   r   r   rÔ   k  s   		rÔ   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTestNamedAssignmentsz"Also known as the walrus operator.c                 C   s   t  d¡ d S )Nzif f := x(): pass
rÑ   r   r   r   r   Útest_named_assignment_if  s    z-TestNamedAssignments.test_named_assignment_ifc                 C   s   t  d¡ d S )Nzwhile f := x(): pass
rÑ   r   r   r   r   Útest_named_assignment_while’  s    z0TestNamedAssignments.test_named_assignment_whilec                 C   s   t  d¡ d S )Nz0any((lastNum := num) == 1 for num in [1, 2, 3])
rÑ   r   r   r   r   Útest_named_assignment_generator•  s    z4TestNamedAssignments.test_named_assignment_generatorc                 C   s   t  d¡ d S )Nz-[(lastNum := num) == 1 for num in [1, 2, 3]]
rÑ   r   r   r   r   Útest_named_assignment_listcomp˜  s    z3TestNamedAssignments.test_named_assignment_listcompN)r   r   r   rÓ   rÚ   rÛ   rÜ   rÝ   r   r   r   r   rÙ   Œ  s
   rÙ   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestPositionalOnlyArgsc                 C   s   t  d¡ d S )Nz!def one_pos_only_arg(a, /): pass
rÑ   r   r   r   r   Útest_one_pos_only_argž  s    z,TestPositionalOnlyArgs.test_one_pos_only_argc                 C   s   t  d¡ d S )Nz4def all_markers(a, b=2, /, c, d=4, *, e=5, f): pass
rÑ   r   r   r   r   Útest_all_markers¡  s    ÿz'TestPositionalOnlyArgs.test_all_markersc                 C   s   t  d¡ d S )Nzždef all_markers_with_args_and_kwargs(
                           aa, b, /, _cc, d, *args, e, f_f, **kwargs,
                   ):
                       pass
rÑ   r   r   r   r   Útest_all_with_args_and_kwargs¥  s    ÿz4TestPositionalOnlyArgs.test_all_with_args_and_kwargsc                 C   s   t  d¡ d S )Nz,lambda a, b, /, c, d, *args, e, f, **kw: kw
rÑ   r   r   r   r   Útest_lambda_soup¬  s    ÿz'TestPositionalOnlyArgs.test_lambda_soupc                 C   s   t  d¡ d S )Nzdef func(a,b,/,*,g,e=3): pass
rÑ   r   r   r   r   Útest_only_positional_or_keyword°  s    z6TestPositionalOnlyArgs.test_only_positional_or_keywordN)r   r   r   rß   rà   rá   râ   rã   r   r   r   r   rÞ   œ  s
   rÞ   c                   @   s   e Zd Zdd„ ZdS )ÚTestPickleableExceptionc                 C   sŠ   t ddd dƒ}ttjd ƒD ]h}t tj||d¡}|  |j|j¡ |  |j|j¡ |  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ qd S )Nr5   r   )r   Úcontextr   )Úprotocol)r   ÚrangerB   ÚHIGHEST_PROTOCOLÚloadsrC   r   Úargsr5   r   Úvaluerå   )r   rÍ   ÚprotoZerr2r   r   r   Útest_ParseErrorµ  s    z'TestPickleableException.test_ParseErrorN)r   r   r   rí   r   r   r   r   rä   ´  s   rä   c              	   C   s(   |   ¡ } |  ¡ }tj| |||ddddS )Nz
(original)z(reserialized)Ú )Zlineterm)Ú
splitlinesÚdifflibZunified_diff)ÚaÚbÚfilenamer   r   r   rÉ   À  s    þrÉ   Ú__main__)2rÓ   rî   r   r   r   rð   rH   rP   r#   rB   r'   r9   r;   r!   Ztest.supportrÃ   rT   Zlib2to3.pgen2r   r   Zpgen2.parser   Zlib2to3.pygramr	   r   ZTestCaser
   r   rU   r[   r^   ra   rg   rs   r”   r«   r¬   r¯   r¸   r¹   r»   r¾   rÀ   rÔ   rÙ   rÞ   rä   rÉ   r   Úmainr   r   r   r   Ú<module>   sR   		MM va
	%!
