
    daf]\                        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ej2                        Z G d dej2                        Z G d dej2                        Z G d de      Z G d de      Z G d de      Z G d de      Z  G d de      Z! G d de      Z" G d de      Z# G d de      Z$ G d  d!e      Z% G d" d#e      Z& G d$ d%e      Z' G d& d'e      Z( G d( d)e      Z) G d* d+ej2                        Z* G d, d-e      Z+ G d. d/e      Z, G d0 d1e      Z- G d2 d3ej2                        Z.d4 Z/e0d5k(  r ejb                          yy)6aF  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                       e Zd Zd Zy)
TestDriverc                 B   d}t        j                  |      }| j                  |j                  d   j                  d   j                  t
        j                         | j                  |j                  d   j                  d   j                  t
        j                         y )Nzprint 1
print 2
r   r   )r   parse_stringassertEqualchildrentypesyms
print_stmt)selfsts      8/root/Python-3.12.4/Lib/test/test_lib2to3/test_parser.pytest_formfeedzTestDriver.test_formfeed#   sq    ("A//277IA//277I    N)__name__
__module____qualname__r    r   r   r   r   !   s    Jr   r   c                       e Zd Zd Zd Z ej                  ej                  du d       ej                  ej                  dv d      d               Z
d Zy)	TestPgen2Cachingc                 P    t        j                  t        j                  dd       y )NFTsaveforce)pgen2_driverload_grammarr   grammar_pathr   s    r   test_load_grammar_from_txt_filez0TestPgen2Caching.test_load_grammar_from_txt_file+   s    !!'"6"6U$Or   c                 z   t        j                         }	 t        j                  j	                  |t        j                  j                  t        j                              }t        j                  t        j                  |       t        j                  |      }t        j                  |dd       | j                  t        j                  j                  |             t        j                  |       t        j                  |dd       t        j                   |       y # t        j                   |       w xY w)NTr    F)tempfilemkdtempospathjoinbasenamer   r%   shutilcopyr#   _generate_pickle_namer$   
assertTrueexistsunlinkrmtree)r   tmpdirgrammar_copypickle_names       r   test_load_grammar_from_picklez.TestPgen2Caching.test_load_grammar_from_pickle.   s     !!#	"77<<BGG,,W-A-ABDLKK,,l;&<<\JK%%lTJOOBGGNN;78IIl#%%leLMM&!FMM&!s   C7D# #D:Nzsys.executable required>   wasi
emscriptenzrequires working subprocessc                 B   t        j                         }t        j                  j	                  |d      }	 t        j
                  |       t        j                  j                  t        j                        }t        j                  j	                  ||      }t        j                  j	                  ||      }t        j                  t        j                  |       t        j                  t        j                  |       t        j                  |      }t        j                  |      }| j                  ||       t        j                  |dd       | j                  t        j                  j!                  |             t#        t        j$                        }d|d<   d|d}	t&        j(                  dd	|	g}
t+        j,                  |
|
       | j                  t        j                  j!                  |             t/        |d      5 }t/        |d      5 }| j1                  |j3                         |j3                         d       d d d        d d d        t        j4                  |       y # 1 sw Y   'xY w# 1 sw Y   +xY w# t        j4                  |       w xY w)NsubdirTr    randomPYTHONHASHSEEDzL
from lib2to3.pgen2 import driver as pgen2_driver
pgen2_driver.load_grammar(z%, save=True, force=True)
            z#-Wignore:lib2to3:DeprecationWarningz-c)envrbzGGrammar caches generated using different hash seeds were not identical.)msg)r)   r*   r+   r,   r-   mkdirr.   r   r%   r/   r0   r#   r1   assertNotEqualr$   r2   r3   dictenvironsys
executable
subprocess
check_callopenr   readr5   )r   r6   	tmpsubdirgrammar_baser7   grammar_sub_copyr8   pickle_sub_namesub_envcodecmd
pickle_f_1
pickle_f_2s                r   !test_load_grammar_from_subprocessz2TestPgen2Caching.test_load_grammar_from_subprocess@   s   
 !!#GGLL2	%	"HHY77++G,@,@AL77<<=L!ww||I|DKK,,l;KK,,.>?&<<\JK*@@%'O_= %%lTJOOBGGNN;78 2::&G(0G$% $&D >>8C !!3G4OOBGGNN?;<k4( ,J$/,3=  OO%z'8+ ! ,, , MM&!, , , , MM&!s<   GJ I;1I/	I;J /I8	4I;;J J Jc                 :   t         dz    G d d       G fdd      } |       t        j                  <   | j                  t        j
                  t        j                         t        j                  d      }| j                  |j                  d       y )Nz
.load_testc                       e Zd Zd Zy)=TestPgen2Caching.test_load_packaged_grammar.<locals>.MyLoaderc                 0    t        j                  ddi      S )Nelephant   )pickledumps)r   wheres     r   get_datazFTestPgen2Caching.test_load_packaged_grammar.<locals>.MyLoader.get_dataq   s    ||Z$455r   N)r   r   r   r`   r   r   r   MyLoaderrY   p   s    6r   ra   c                   X    e Zd ZdZej
                  j                  W  W               Zy)=TestPgen2Caching.test_load_packaged_grammar.<locals>.MyModuleparsertestmoduleN)r   r   r   __file__	importlibutilspec_from_loader__spec__)ra   modnames   r   MyModulerc   s   s     )H ~~66w
KHr   rk   zGrammar.txtr\   )
r   rG   modules
addCleanupoperatordelitemr#   load_packaged_grammarr   r[   )r   rk   gra   rj   s      @@r   test_load_packaged_grammarz+TestPgen2Caching.test_load_packaged_grammarn   su    \)	6 	6	L 	L  (zG((#++w?..wFR(r   )r   r   r   r'   r9   unittestskipIfrG   rH   platformrV   rr   r   r   r   r   r   *   sb    P"$ X__S^^t+-FGX__..0M(" H("T)r   r   c                       e Zd Zd Zd Zy)GrammarTestc                 .    t        j                  |       y )N)r   r   r   rR   s     r   validatezGrammarTest.validate}   s    T"r   c                 Z    	 | j                  |       t        d      # t        $ r Y y w xY w)Nz Syntax shouldn't have been valid)rz   AssertionErrorr   ry   s     r   invalid_syntaxzGrammarTest.invalid_syntax   s6    	EMM$ !!CDD  		s    	**N)r   r   r   rz   r}   r   r   r   rw   rw   |   s    #Er   rw   c                       e Zd Zd Zy)TestMatrixMultiplicationc                 H    | j                  d       | j                  d       y )Nza @ bza @= brz   r&   s    r   #test_matrix_multiplication_operatorz<TestMatrixMultiplication.test_matrix_multiplication_operator   s    ghr   N)r   r   r   r   r   r   r   r   r      s     r   r   c                       e Zd Zd Zy)TestYieldFromc                 j    | j                  d       | j                  d       | j                  d       y )Nzyield from xz(yield from x) + yz
yield fromrz   r}   r&   s    r   test_yield_fromzTestYieldFrom.test_yield_from   s)    n%*+L)r   N)r   r   r   r   r   r   r   r   r      s    *r   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestAsyncAwaitc                 z   | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d	       | j                  d
       | j                  d       y )NzLasync def foo():
                             await x
                      zYasync def foo():
                             [i async for i in b]
                      zasync 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&   s    r   test_await_exprzTestAsyncAwait.test_await_expr   s      	 	  	 	  	 	  	 	  	 	  	 	;<  	
 	I& . 	/ 	  	r   c                 j    | j                  d       | j                  d       | j                  d       y )Nz	async = 1z	await = 1zdef async(): passr   r&   s    r   test_async_varzTestAsyncAwait.test_async_var   s'    o&o&-.r   c                 &    | j                  d       y )NzDasync def foo():
                             async for a in b: passr   r&   s    r   test_async_forzTestAsyncAwait.test_async_for   s     7 	8r   c                 H    | j                  d       | j                  d       y )Nz@async def foo():
                             async with a: passz@def foo():
                                   async with a: passr   r&   s    r   test_async_withzTestAsyncAwait.test_async_with   s(     3 	4 	 9 	:r   c                 H    | j                  d       | j                  d       y )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&   s    r   test_async_generatorz#TestAsyncAwait.test_async_generator   s&    ?	
 	?	
r   N)r   r   r   r   r   r   r   r   r   r   r   r   r      s    /b/
8:
r   r   c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestRaiseChangesc                 &    | j                  d       y )Nraiser   r&   s    r   test_2x_style_1z TestRaiseChanges.test_2x_style_1   s    gr   c                 &    | j                  d       y )Nz
raise E, Vr   r&   s    r   test_2x_style_2z TestRaiseChanges.test_2x_style_2       l#r   c                 &    | j                  d       y )Nzraise E, V, Tr   r&   s    r   test_2x_style_3z TestRaiseChanges.test_2x_style_3       o&r   c                 &    | j                  d       y )Nzraise E, V, T, Zr}   r&   s    r   test_2x_style_invalid_1z(TestRaiseChanges.test_2x_style_invalid_1   s    ./r   c                 &    | j                  d       y )Nzraise E1 from E2r   r&   s    r   test_3x_stylezTestRaiseChanges.test_3x_style       ()r   c                 &    | j                  d       y )Nzraise E, V from E1r   r&   s    r   test_3x_style_invalid_1z(TestRaiseChanges.test_3x_style_invalid_1   s    01r   c                 &    | j                  d       y )Nzraise E from E1, E2r   r&   s    r   test_3x_style_invalid_2z(TestRaiseChanges.test_3x_style_invalid_2   s    12r   c                 &    | j                  d       y )Nzraise from E1, E2r   r&   s    r   test_3x_style_invalid_3z(TestRaiseChanges.test_3x_style_invalid_3   s    /0r   c                 &    | j                  d       y )Nzraise E fromr   r&   s    r   test_3x_style_invalid_4z(TestRaiseChanges.test_3x_style_invalid_4   s    N+r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s/    $'0*231,r   r   c                       e 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d Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"y!)"TestUnpackingGeneralizationsc                 &    | j                  d       y )Nzfunc(1, *(2, 3), 4)r   r&   s    r   test_mid_positional_starz5TestUnpackingGeneralizations.test_mid_positional_star      /0r   c                 &    | j                  d       y )Nz,func(**{'eggs':'scrambled', 'spam':'fried'})r   r&   s    r   test_double_star_dict_literalz:TestUnpackingGeneralizations.test_double_star_dict_literal  s    HIr   c                 &    | j                  d       y )Nz*func(spam='fried', **{'eggs':'scrambled'})r   r&   s    r   ,test_double_star_dict_literal_after_keywordszITestUnpackingGeneralizations.test_double_star_dict_literal_after_keywords
  s    FGr   c                 H    | j                  d       | j                  d       y )Nzfunc(**{'a':2} or {})zfunc(**() or {})r   r&   s    r   test_double_star_expressionz8TestUnpackingGeneralizations.test_double_star_expression  s    12,-r   c                 &    | j                  d       y )Nzfunc(*[] or [2])r   r&   s    r   test_star_expressionz1TestUnpackingGeneralizations.test_star_expression  s    ,-r   c                 &    | j                  d       y )Nz[*{2}, 3, *[4]]r   r&   s    r   test_list_displayz.TestUnpackingGeneralizations.test_list_display      +,r   c                 &    | j                  d       y )Nz{*{2}, 3, *[4]}r   r&   s    r   test_set_displayz-TestUnpackingGeneralizations.test_set_display  r   r   c                 &    | j                  d       y )Nz{**{}}r   r&   s    r   test_dict_display_1z0TestUnpackingGeneralizations.test_dict_display_1  r   r   c                 &    | j                  d       y )Nz{**{}, 3:4, **{5:6, 7:8}}r   r&   s    r   test_dict_display_2z0TestUnpackingGeneralizations.test_dict_display_2  s    56r   c                 &    | j                  d       y )Nzfunc(* [] or [1])r   r&   s    r   test_complex_star_expressionz9TestUnpackingGeneralizations.test_complex_star_expression   s    )*r   c                 &    | j                  d       y )Nz5func(**{1: 3} if False else {x: x for x in range(3)})r   r&   s    r   #test_complex_double_star_expressionz@TestUnpackingGeneralizations.test_complex_double_star_expression#  s    MNr   c                 &    | j                  d       y )Nzf(a, *b, *c, d)r   r&   s    r   test_argument_unpacking_1z6TestUnpackingGeneralizations.test_argument_unpacking_1&  r   r   c                 &    | j                  d       y )Nzf(**a, **b)r   r&   s    r   test_argument_unpacking_2z6TestUnpackingGeneralizations.test_argument_unpacking_2)      '(r   c                 &    | j                  d       y )Nzf(2, *a, *b, **b, **c, **d)r   r&   s    r   test_argument_unpacking_3z6TestUnpackingGeneralizations.test_argument_unpacking_3,      78r   c                 H    | j                  d       | j                  d       y )Nzdef f(a, b): call(a, b)zdef f(a, b,): call(a, b,)r   r&   s    r   test_trailing_commas_1z3TestUnpackingGeneralizations.test_trailing_commas_1/      /012r   c                 H    | j                  d       | j                  d       y )Nzdef f(a, *b): call(a, *b)zdef f(a, *b,): call(a, *b,)r   r&   s    r   test_trailing_commas_2z3TestUnpackingGeneralizations.test_trailing_commas_23  s    1234r   c                 H    | j                  d       | j                  d       y )Nzdef f(a, b=1): call(a, b=1)zdef f(a, b=1,): call(a, b=1,)r   r&   s    r   test_trailing_commas_3z3TestUnpackingGeneralizations.test_trailing_commas_37      3456r   c                 H    | j                  d       | j                  d       y )Nzdef f(a, **b): call(a, **b)zdef f(a, **b,): call(a, **b,)r   r&   s    r   test_trailing_commas_4z3TestUnpackingGeneralizations.test_trailing_commas_4;  r   r   c                 H    | j                  d       | j                  d       y )Nzdef f(*a, b=1): call(*a, b=1)zdef f(*a, b=1,): call(*a, b=1,)r   r&   s    r   test_trailing_commas_5z3TestUnpackingGeneralizations.test_trailing_commas_5?      5678r   c                 H    | j                  d       | j                  d       y )Nzdef f(*a, **b): call(*a, **b)zdef f(*a, **b,): call(*a, **b,)r   r&   s    r   test_trailing_commas_6z3TestUnpackingGeneralizations.test_trailing_commas_6C  r   r   c                 H    | j                  d       | j                  d       y )Nzdef f(*, b=1): call(*b)zdef f(*, b=1,): call(*b,)r   r&   s    r   test_trailing_commas_7z3TestUnpackingGeneralizations.test_trailing_commas_7G  r   r   c                 H    | j                  d       | j                  d       y )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&   s    r   test_trailing_commas_8z3TestUnpackingGeneralizations.test_trailing_commas_8K      789:r   c                 H    | j                  d       | j                  d       y )Nzdef f(a=1, **b): call(a=1, **b)z!def f(a=1, **b,): call(a=1, **b,)r   r&   s    r   test_trailing_commas_9z3TestUnpackingGeneralizations.test_trailing_commas_9O  r   r   c                 H    | j                  d       | j                  d       y )Nzf = lambda a, b: call(a, b)zf = lambda a, b,: call(a, b,)r   r&   s    r   test_trailing_commas_lambda_1z:TestUnpackingGeneralizations.test_trailing_commas_lambda_1S  r   r   c                 H    | j                  d       | j                  d       y )Nzf = lambda a, *b: call(a, *b)zf = lambda a, *b,: call(a, *b,)r   r&   s    r   test_trailing_commas_lambda_2z:TestUnpackingGeneralizations.test_trailing_commas_lambda_2W  r   r   c                 H    | j                  d       | j                  d       y )Nzf = lambda a, b=1: call(a, b=1)z!f = lambda a, b=1,: call(a, b=1,)r   r&   s    r   test_trailing_commas_lambda_3z:TestUnpackingGeneralizations.test_trailing_commas_lambda_3[  r   r   c                 H    | j                  d       | j                  d       y )Nzf = lambda a, **b: call(a, **b)z!f = lambda a, **b,: call(a, **b,)r   r&   s    r   test_trailing_commas_lambda_4z:TestUnpackingGeneralizations.test_trailing_commas_lambda_4_  r   r   c                 H    | j                  d       | j                  d       y )Nz!f = lambda *a, b=1: call(*a, b=1)z#f = lambda *a, b=1,: call(*a, b=1,)r   r&   s    r   test_trailing_commas_lambda_5z:TestUnpackingGeneralizations.test_trailing_commas_lambda_5c      9:;<r   c                 H    | j                  d       | j                  d       y )Nz!f = lambda *a, **b: call(*a, **b)z#f = lambda *a, **b,: call(*a, **b,)r   r&   s    r   test_trailing_commas_lambda_6z:TestUnpackingGeneralizations.test_trailing_commas_lambda_6g  r   r   c                 H    | j                  d       | j                  d       y )Nzf = lambda *, b=1: call(*b)zf = lambda *, b=1,: call(*b,)r   r&   s    r   test_trailing_commas_lambda_7z:TestUnpackingGeneralizations.test_trailing_commas_lambda_7k  r   r   c                 H    | j                  d       | j                  d       y )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&   s    r   test_trailing_commas_lambda_8z:TestUnpackingGeneralizations.test_trailing_commas_lambda_8o      ;<=>r   c                 H    | j                  d       | j                  d       y )Nz#f = lambda a=1, **b: call(a=1, **b)z%f = lambda a=1, **b,: call(a=1, **b,)r   r&   s    r   test_trailing_commas_lambda_9z:TestUnpackingGeneralizations.test_trailing_commas_lambda_9s  r   r   N)#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   r   r   r   r   r   r   r   r   r   r   r     s    1JH..--$7+O-)93577993;;79;;==7??r   r   c                       e 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d Zy)TestFunctionAnnotationsc                 &    | j                  d       y )Nzdef f(x) -> list: passr   r&   s    r   test_1zTestFunctionAnnotations.test_1z      23r   c                 &    | j                  d       y )Nzdef f(x:int): passr   r&   s    r   test_2zTestFunctionAnnotations.test_2}  s    ./r   c                 &    | j                  d       y )Nzdef f(*x:str): passr   r&   s    r   test_3zTestFunctionAnnotations.test_3  r   r   c                 &    | j                  d       y )Nzdef f(**x:float): passr   r&   s    r   test_4zTestFunctionAnnotations.test_4  r   r   c                 &    | j                  d       y )Nzdef f(x, y:1+2): passr   r&   s    r   test_5zTestFunctionAnnotations.test_5  s    12r   c                 &    | j                  d       y )Nzdef f(a, (b:1, c:2, d)): passr   r&   s    r   test_6zTestFunctionAnnotations.test_6  s    9:r   c                 &    | j                  d       y )Nz/def f(a, (b:1, c:2, d), e:3=4, f=5, *g:6): passr   r&   s    r   test_7zTestFunctionAnnotations.test_7  s    KLr   c                 *    d}| j                  |       y )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   s     r   test_8zTestFunctionAnnotations.test_8  s    Gar   c                 *    d}| j                  |       y )Nzdef f(
          a: str,
          b: int,
          *,
          c: bool = False,
          **kwargs,
        ) -> None:
            call(c=c, **kwargs,)r   r  s     r   test_9zTestFunctionAnnotations.test_9  s    $ 	ar   c                 *    d}| j                  |       y )Nz@def f(
          a: str,
        ) -> None:
            call(a,)r   r  s     r   test_10zTestFunctionAnnotations.test_10  s     	ar   c                 *    d}| j                  |       y )NzGdef f(
          a: str = '',
        ) -> None:
            call(a=a,)r   r  s     r   test_11zTestFunctionAnnotations.test_11  s     	ar   c                 *    d}| j                  |       y )NzHdef f(
          *args: str,
        ) -> None:
            call(*args,)r   r  s     r   test_12zTestFunctionAnnotations.test_12  s     	ar   c                 H    | j                  d       | j                  d       y )Nz)def f(a: str, b: int) -> None: call(a, b)z+def f(a: str, b: int,) -> None: call(a, b,)r   r&   s    r   test_13zTestFunctionAnnotations.test_13  s    ABCDr   c                 H    | j                  d       | j                  d       y )Nz+def f(a: str, *b: int) -> None: call(a, *b)z-def f(a: str, *b: int,) -> None: call(a, *b,)r   r&   s    r   test_14zTestFunctionAnnotations.test_14  s    CDEFr   c                 H    | j                  d       | j                  d       y )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&   s    r   test_15zTestFunctionAnnotations.test_15      EFGHr   c                 H    | j                  d       | j                  d       y )Nz-def f(a: str, **b: int) -> None: call(a, **b)z/def f(a: str, **b: int,) -> None: call(a, **b,)r   r&   s    r   test_16zTestFunctionAnnotations.test_16  r  r   c                 H    | j                  d       | j                  d       y )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&   s    r   test_17zTestFunctionAnnotations.test_17      GHIJr   c                 H    | j                  d       | j                  d       y )Nz/def f(*a: str, **b: int) -> None: call(*a, **b)z1def f(*a: str, **b: int,) -> None: call(*a, **b,)r   r&   s    r   test_18zTestFunctionAnnotations.test_18  r   r   c                 H    | j                  d       | j                  d       y )Nz$def f(*, b: int=1) -> None: call(*b)z&def f(*, b: int=1,) -> None: call(*b,)r   r&   s    r   test_19zTestFunctionAnnotations.test_19  s    <=>?r   c                 H    | j                  d       | j                  d       y )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&   s    r   test_20zTestFunctionAnnotations.test_20      JKLMr   c                 H    | j                  d       | j                  d       y )Nz2def f(a: str='', **b: int) -> None: call(a=a, **b)z4def f(a: str='', **b: int,) -> None: call(a=a, **b,)r   r&   s    r   test_21zTestFunctionAnnotations.test_21  r'  r   N)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   y  su    40143;M
	EGIIKK@NNr   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestVarAnnotationsc                 &    | j                  d       y )Nzvar1: int = 5r   r&   s    r   r   zTestVarAnnotations.test_1  r   r   c                 &    | j                  d       y )Nzvar2: [int, str]r   r&   s    r   r   zTestVarAnnotations.test_2  r   r   c                 &    | j                  d       y )NzCdef f():
    st: str = 'Hello'
    a.b: int = (1, 2)
    return st
r   r&   s    r   r  zTestVarAnnotations.test_3  s     ( 	)r   c                 &    | j                  d       y )Nz$def fbad():
    x: int
    print(x)
r   r&   s    r   r  zTestVarAnnotations.test_4  s     ' 	(r   c                 &    | j                  d       y )Nzeclass C:
    x: int
    s: str = 'attr'
    z = 2
    def __init__(self, x):
        self.x: int = x
r   r&   s    r   r  zTestVarAnnotations.test_5  s     2 	3r   c                 &    | j                  d       y )Nzlst: List[int] = []r   r&   s    r   r  zTestVarAnnotations.test_6  r   r   N)	r   r   r   r   r   r  r  r  r  r   r   r   r+  r+    s     '*)(
3-r   r+  c                       e Zd Zd Zd Zy)
TestExceptc                 *    d}| j                  |       y )NzP
            try:
                x
            except E as N:
                yr   r  s     r   test_newzTestExcept.test_new      
 	ar   c                 *    d}| j                  |       y )NzN
            try:
                x
            except E, N:
                yr   r  s     r   test_oldzTestExcept.test_old  r6  r   N)r   r   r   r5  r8  r   r   r   r3  r3    s    r   r3  c                       e Zd ZdZd Zy)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                     | j                   D ]P  }dj                  ||d         }| j                  |       dj                  ||d         }| j                  |       R y )Nz{p}spamspamspam{s})pr   z{p}{s}{s}eggs{s}{s}{s})prefixesformatrz   )r   presingletriples       r   test_litzTestStringLiterals.test_lit  s_    == 	"C)003#b'0BFMM&!-44sc"g4FFMM&!		"r   N)r   r   r   r@  rE  r   r   r   r:  r:  
  s    
%H"r   r:  c                   $    e Zd Zd Zd Zd Zd Zy)TestSetLiteralc                 &    | j                  d       y )Nzx = {'one'}r   r&   s    r   r   zTestSetLiteral.test_1!  r   r   c                 &    | j                  d       y )Nzx = {'one', 1,}r   r&   s    r   r   zTestSetLiteral.test_2$  r   r   c                 &    | j                  d       y )Nzx = {'one', 'two', 'three'}r   r&   s    r   r  zTestSetLiteral.test_3'  r   r   c                 &    | j                  d       y )Nzx = {2, 3, 4,}r   r&   s    r   r  zTestSetLiteral.test_4*  s    *+r   N)r   r   r   r   r   r  r  r   r   r   rG  rG     s    )-9,r   rG  c                       e Zd Zd Zy)TestIdentifierc                     | j                  d       | j                  d       | j                  d       | j                  d       y )Nu!   Örter = 'places'
grün = 'green'u   蟒 = a蟒 = 锦蛇 = 1u   µ = aµ = µµ = 1uA   𝔘𝔫𝔦𝔠𝔬𝔡𝔢 = a_𝔘𝔫𝔦𝔠𝔬𝔡𝔢 = 1r   r&   s    r   test_non_ascii_identifiersz)TestIdentifier.test_non_ascii_identifiers1  s6    :;/0+,YZr   N)r   r   r   rO  r   r   r   rM  rM  0  s    [r   rM  c                       e Zd Zd Zd Zy)TestNumericLiteralsc                 H    | j                  d       | j                  d       y )N0o77777777777770o7324528887r   r&   s    r   test_new_octal_notationz+TestNumericLiterals.test_new_octal_notation9  s    +,./r   c                 H    | j                  d       | j                  d       y )N0b101010	0b0101021r   r&   s    r   test_new_binary_notationz,TestNumericLiterals.test_new_binary_notation=  s    n%O,r   N)r   r   r   rU  rY  r   r   r   rQ  rQ  8  s    0-r   rQ  c                       e Zd Zd Zy)TestClassDefc                     | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       y )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&   s    r   test_new_syntaxzTestClassDef.test_new_syntaxC  sC    *+/0239:?@r   N)r   r   r   r]  r   r   r   r[  r[  B  s    Ar   r[  c                   "    e Zd ZdZd Zd Zd Zy)TestParserIdempotencyz,A cut-down version of pytree_idempotency.py.c           	         t         j                  j                  rt        d|        t	        |d      5 }t        j                  |j                        d   }d d d        | j                  d|z         t	        |d|      5 }|j                         }d d d        	 t        j                        }t              }|k7  r+t        t!        |||             | j                  d
|z         y y # 1 sw Y   xY w# 1 sw Y   gxY w# t        $ rH 	 t        j                        }n.# t        $ r"}| j                  d|d|d	       Y d }~nd }~ww xY wY w xY w)NzParse file: rA   r   zcan't detect encoding for %sr)encodingzParseError on file z ()zIdempotency failed: %s)testr   verboseprintrK   r   detect_encodingreadlineassertIsNotNonerL   r   r   r   r   failstr
diff_texts)r   filepathfprb  sourcetreeerrnews           r   
parse_filez TestParserIdempotency.parse_fileO  sA   <<L
+,(D! 	@R//<Q?H	@X;hF	H(C(3 	rWWYF		J&&v.D $i&=*VS(34II.9: 	@ 	@	 	  	JJ0==fE J		(CHIIJ	JsS   #C.C:D .C7:D	ED&%E&	E/EEEEEc                     t        j                         D ].  }| j                  |      5  | j                  |       d d d        0 y # 1 sw Y   ;xY w)N)rm  )r   all_project_filessubTestrs  )r   rm  s     r   test_all_project_filesz,TestParserIdempotency.test_all_project_filesd  sN    113 	*Hx0 *)* *	** *s   AA	c                     t        j                  d       t        j                  d       t        j                  d       t        j                  d       y )Nza, *b, c = x
z[*a, b] = x
z(z, *y, w) = m
zfor *z, m in d: pass
r   r   r&   s    r   test_extended_unpackingz-TestParserIdempotency.test_extended_unpackingi  s=    ,-O,./45r   N)r   r   r   __doc__rs  rw  rz  r   r   r   r_  r_  K  s    6;**
6r   r_  c                   $    e Zd Zd Zd Zd Zd Zy)TestLiteralsc                 Z    t        j                  t        j                  |      dz          y )Nz

)r   r   r   dedentr  s     r   rz   zTestLiterals.validater  s    GNN1-67r   c                 *    d}| j                  |       y )Nu   
            md5test(b"ª" * 80,
                    (b"Test Using Larger Than Block-Size Key "
                     b"and Larger Than One Block-Size Data"),
                    "6f630fad67cda0ee1fb1f562db3aa53e")
            r   r  s     r   test_multiline_bytes_literalsz*TestLiterals.test_multiline_bytes_literalsu       	ar   c                 *    d}| j                  |       y )Nz
            b"""
            <?xml version="1.0" encoding="UTF-8"?>
            <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN">
            """
            r   r  s     r   'test_multiline_bytes_tripquote_literalsz4TestLiterals.test_multiline_bytes_tripquote_literals~  r  r   c                 *    d}| j                  |       y )Nu   
            md5test("ª" * 80,
                    ("Test Using Larger Than Block-Size Key "
                     "and Larger Than One Block-Size Data"),
                    "6f630fad67cda0ee1fb1f562db3aa53e")
            r   r  s     r   test_multiline_str_literalsz(TestLiterals.test_multiline_str_literals  r  r   N)r   r   r   rz   r  r  r  r   r   r   r}  r}  p  s    8r   r}  c                   (    e Zd ZdZd Zd Zd Zd Zy)TestNamedAssignmentsz"Also known as the walrus operator.c                 .    t        j                  d       y )Nzif f := x(): pass
ry  r&   s    r   test_named_assignment_ifz-TestNamedAssignments.test_named_assignment_if  s    12r   c                 .    t        j                  d       y )Nzwhile f := x(): pass
ry  r&   s    r   test_named_assignment_whilez0TestNamedAssignments.test_named_assignment_while  s    45r   c                 .    t        j                  d       y )Nz0any((lastNum := num) == 1 for num in [1, 2, 3])
ry  r&   s    r   test_named_assignment_generatorz4TestNamedAssignments.test_named_assignment_generator  s    OPr   c                 .    t        j                  d       y )Nz-[(lastNum := num) == 1 for num in [1, 2, 3]]
ry  r&   s    r   test_named_assignment_listcompz3TestNamedAssignments.test_named_assignment_listcomp  s    LMr   N)r   r   r   r{  r  r  r  r  r   r   r   r  r    s    ,36QNr   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestPositionalOnlyArgsc                 .    t        j                  d       y )Nz!def one_pos_only_arg(a, /): pass
ry  r&   s    r   test_one_pos_only_argz,TestPositionalOnlyArgs.test_one_pos_only_arg  s    @Ar   c                 .    t        j                  d       y )Nz4def all_markers(a, b=2, /, c, d=4, *, e=5, f): pass
ry  r&   s    r   test_all_markersz'TestPositionalOnlyArgs.test_all_markers  s    G	Ir   c                 .    t        j                  d       y )Nzdef all_markers_with_args_and_kwargs(
                           aa, b, /, _cc, d, *args, e, f_f, **kwargs,
                   ):
                       pass
ry  r&   s    r   test_all_with_args_and_kwargsz4TestPositionalOnlyArgs.test_all_with_args_and_kwargs  s    !	"r   c                 .    t        j                  d       y )Nz,lambda a, b, /, c, d, *args, e, f, **kw: kw
ry  r&   s    r   test_lambda_soupz'TestPositionalOnlyArgs.test_lambda_soup  s    ?	Ar   c                 .    t        j                  d       y )Nzdef func(a,b,/,*,g,e=3): pass
ry  r&   s    r   test_only_positional_or_keywordz6TestPositionalOnlyArgs.test_only_positional_or_keyword  s    =>r   N)r   r   r   r  r  r  r  r  r   r   r   r  r    s    BI"A?r   r  c                       e Zd Zd Zy)TestPickleableExceptionc                 2   t        ddd d      }t        t        j                  dz         D ]  }t        j                  t        j
                  ||            }| j                  |j                  |j                         | j                  |j                  |j                         | j                  |j                  |j                         | j                  |j                  |j                         | j                  |j                  |j                          y )NrB      )r   contextr   )protocol)r   ranger]   HIGHEST_PROTOCOLloadsr^   r   argsrB   r   valuer  )r   rq  protoerr2s       r   test_ParseErrorz'TestPickleableException.test_ParseError  s    48622Q67 	8E<<S5 ABDSXXtyy1SWWdhh/SXXtyy1SYY

3S[[$,,7	8r   N)r   r   r   r  r   r   r   r  r    s    8r   r  c           	      z    | j                         } |j                         }t        j                  | |||ddd      S )Nz
(original)z(reserialized) )lineterm)
splitlinesdifflibunified_diff)abfilenames      r   rl  rl    s<    	A	A1h ,.>)+- -r   __main__)2r{  r  r   r   r   r  rf   rn   r+   r]   r/   rI   rG   r)   test.supportrd  rs   lib2to3.pgen2r#   r   lib2to3.pgen2.parser   lib2to3.pygramr	   r   TestCaser   r   rw   r   r   r   r   r   r   r+  r3  r:  rG  rM  rQ  r[  r_  r}  r  r  r  rl  r   mainr   r   r   <module>r     s    6    	    
    1 " * 1J!! JO)w'' O)d
E'"" 
E {  *K *J
[ J
Z,{ ,@r?; r?l]Nk ]NB- -< $" ",,[ , [[ [-+ -A; A"6G,, "6J; BN; N ?[ ?0	8h// 	8- zHMMO r   