B
    v9aÉ   ã            	   @   sþ   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	m
Z
mZ eƒ  ej e
d¡Zej e¡ d dlZW dQ R X 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G dd„ de jƒZ G dd„ de ƒZ!G dd„ de ƒZ"e#dkrúe  $¡  dS )é    N)ÚbasepathÚtoolsdirÚskip_if_missingÚparserc          	   C   sL   t | dƒ}t |j¡d }W d Q R X t | d|d}| ¡ }W d Q R X |S )NÚrbr   Úr)Úencoding)ÚopenÚtokenizeÚdetect_encodingÚreadlineÚread)ÚfilenameZpyfiler   Úsource© r   ú"/usr/lib/python3.7/test_unparse.pyÚread_pyfile   s
    r   zQdef f():
    for x in range(10):
        break
    else:
        y = 2
    z = 3
zIdef g():
    while True:
        break
    else:
        y = 2
    z = 3
zQfrom . import fred
from .. import barney
from .australia import shrimp as prawns
zzdef f():
    x = 1
    def g():
        nonlocal x
        x = 2
        y = 7
        def h():
            nonlocal x, y
zOtry:
    1 / 0
except ZeroDivisionError as e:
    raise ArithmeticError from e
z@f1(arg)
@f2
class Foo: pass
z=if cond1:
    suite1
elif cond2:
    suite2
else:
    suite3
z,if cond1:
    suite1
elif cond2:
    suite2
zctry:
    suite1
except ex1:
    suite2
except ex2:
    suite3
else:
    suite4
finally:
    suite5
zwith f():
    suite1
zwith f() as x:
    suite1
z$with f() as x, g() as y:
    suite1
c               @   s   e Zd Zdd„ Zddd„ZdS )ÚASTTestCasec             C   s   |   t |¡t |¡¡ d S )N)ZassertEqualÚastÚdump)ÚselfÚast1Úast2r   r   r   ÚassertASTEqual{   s    zASTTestCase.assertASTEqualÚinternalc             C   sL   t ||dtjƒ}t ¡ }t ||¡ | ¡ }t ||dtjƒ}|  ||¡ d S )NÚexec)	Úcompiler   ZPyCF_ONLY_ASTÚioÚStringIOÚunparseZUnparserÚgetvaluer   )r   Úcode1r   r   Zunparse_bufferÚcode2r   r   r   r   Úcheck_roundtrip~   s    zASTTestCase.check_roundtripN)r   )Ú__name__Ú
__module__Ú__qualname__r   r#   r   r   r   r   r   z   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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=S )>ÚUnparseTestCasec             C   s   |   d¡ |   d¡ d S )Nzf'{f"{0}"*3}'zf'{f"{y}"*3}')r#   )r   r   r   r   Útest_fstrings‰   s    
zUnparseTestCase.test_fstringsc             C   s   |   d¡ d S )Nzdel x, y, z)r#   )r   r   r   r   Útest_del_statementŽ   s    z"UnparseTestCase.test_del_statementc             C   s   |   d¡ |   d¡ d S )Nz45 << 2z13 >> 7)r#   )r   r   r   r   Útest_shifts‘   s    
zUnparseTestCase.test_shiftsc             C   s   |   t¡ d S )N)r#   Úfor_else)r   r   r   r   Útest_for_else•   s    zUnparseTestCase.test_for_elsec             C   s   |   t¡ d S )N)r#   Ú
while_else)r   r   r   r   Útest_while_else˜   s    zUnparseTestCase.test_while_elsec             C   s6   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )Nz(-1)**7z(-1.)**8z(-1j)**6znot True or FalsezTrue or not False)r#   )r   r   r   r   Útest_unary_parens›   s
    



z!UnparseTestCase.test_unary_parensc             C   s   |   d¡ d S )Nz3 .__abs__())r#   )r   r   r   r   Útest_integer_parens¢   s    z#UnparseTestCase.test_integer_parensc             C   s,   |   d¡ |   d¡ |   d¡ |   d¡ d S )NZ1e1000z-1e1000Z1e1000jz-1e1000j)r#   )r   r   r   r   Útest_huge_float¥   s    


zUnparseTestCase.test_huge_floatc             C   s    |   tdƒ¡ |   tdƒ¡ d S )Ni   €lûÿÿÿ         )r#   Ústr)r   r   r   r   Útest_min_int«   s    zUnparseTestCase.test_min_intc             C   s,   |   d¡ |   d¡ |   d¡ |   d¡ d S )NZ7jz-7jZ0jz-0j)r#   )r   r   r   r   Útest_imaginary_literals¯   s    


z'UnparseTestCase.test_imaginary_literalsc             C   s   |   d¡ d S )Nz(lambda: int)())r#   )r   r   r   r   Útest_lambda_parenthesesµ   s    z'UnparseTestCase.test_lambda_parenthesesc             C   s   |   d¡ |   d¡ d S )Nz
1 < 4 <= 5za is b is c is not d)r#   )r   r   r   r   Útest_chained_comparisons¸   s    
z(UnparseTestCase.test_chained_comparisonsc             C   s|   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d	¡ |   d
¡ |   d¡ |   d¡ d S )Nzdef f(): passzdef f(a): passzdef f(b = 2): passzdef f(a, b): passzdef f(a, b = 2): passzdef f(a = 5, b = 2): passzdef f(*, a = 1, b = 2): passzdef f(*, a = 1, b): passzdef f(*, a, b = 2): passz&def f(a, b = None, *, c, **kwds): passz'def f(a=2, *args, c=5, d, **kwds): passzdef f(*args, **kwargs): pass)r#   )r   r   r   r   Útest_function_arguments¼   s    










z'UnparseTestCase.test_function_argumentsc             C   s   |   t¡ d S )N)r#   Úrelative_import)r   r   r   r   Útest_relative_importÊ   s    z$UnparseTestCase.test_relative_importc             C   s   |   t¡ d S )N)r#   Únonlocal_ex)r   r   r   r   Útest_nonlocalÍ   s    zUnparseTestCase.test_nonlocalc             C   s   |   t¡ d S )N)r#   Ú
raise_from)r   r   r   r   Útest_raise_fromÐ   s    zUnparseTestCase.test_raise_fromc             C   s   |   d¡ d S )Nzb'123')r#   )r   r   r   r   Ú
test_bytesÓ   s    zUnparseTestCase.test_bytesc             C   s6   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )Nzdef f(a : int): passzdef f(a: int = 5): passzdef f(*args: [int]): passzdef f(**kwargs: dict): passzdef f() -> None: pass)r#   )r   r   r   r   Útest_annotationsÖ   s
    



z UnparseTestCase.test_annotationsc             C   s   |   d¡ d S )Nz{'a', 'b', 'c'})r#   )r   r   r   r   Útest_set_literalÝ   s    z UnparseTestCase.test_set_literalc             C   s   |   d¡ d S )Nz{x for x in range(5)})r#   )r   r   r   r   Útest_set_comprehensionà   s    z&UnparseTestCase.test_set_comprehensionc             C   s   |   d¡ d S )Nz{x: x*x for x in range(10)})r#   )r   r   r   r   Útest_dict_comprehensionã   s    z'UnparseTestCase.test_dict_comprehensionc             C   s   |   t¡ d S )N)r#   Úclass_decorator)r   r   r   r   Útest_class_decoratorsæ   s    z%UnparseTestCase.test_class_decoratorsc             C   s   |   d¡ d S )Nz(class A(metaclass=type, *[], **{}): pass)r#   )r   r   r   r   Útest_class_definitioné   s    z%UnparseTestCase.test_class_definitionc             C   s   |   t¡ |   t¡ d S )N)r#   Úelif1Úelif2)r   r   r   r   Ú
test_elifsì   s    
zUnparseTestCase.test_elifsc             C   s   |   t¡ d S )N)r#   Útry_except_finally)r   r   r   r   Útest_try_except_finallyð   s    z'UnparseTestCase.test_try_except_finallyc             C   s,   |   d¡ |   d¡ |   d¡ |   d¡ d S )Nza, *b, c = seqza, (*b, c) = seqza, *b[0], c = seqza, *(b, c) = seq)r#   )r   r   r   r   Útest_starred_assignmentó   s    


z'UnparseTestCase.test_starred_assignmentc             C   s   |   t¡ d S )N)r#   Úwith_simple)r   r   r   r   Útest_with_simpleù   s    z UnparseTestCase.test_with_simplec             C   s   |   t¡ d S )N)r#   Úwith_as)r   r   r   r   Útest_with_asü   s    zUnparseTestCase.test_with_asc             C   s   |   t¡ d S )N)r#   Úwith_two_items)r   r   r   r   Útest_with_two_itemsÿ   s    z#UnparseTestCase.test_with_two_itemsc             C   s   |   d¡ |   d¡ d S )Nz{**{'y': 2}, 'x': 1}z{**{'y': 2}, **{'x': 1}})r#   )r   r   r   r   Útest_dict_unpacking_in_dict  s    
z+UnparseTestCase.test_dict_unpacking_in_dictN)!r$   r%   r&   r(   r)   r*   r,   r.   r/   r0   r1   r3   r4   r5   r6   r7   r9   r;   r=   r>   r?   r@   rA   rB   rD   rE   rH   rJ   rK   rM   rO   rQ   rR   r   r   r   r   r'   †   s<   r'   c               @   s6   e Zd ZdZdej dd¡fZedd„ ƒZ	dd„ Z
dS )ÚDirectoryTestCaseNZLibÚtestc             C   s   | j d k	r| j S g }xX| jD ]N}tj t|¡}x:t |¡D ],}| d¡r:| d¡s:| 	tj ||¡¡ q:W qW t
j d¡s†t |d¡}|| _ |S )Nz.pyZbadZcpué
   )ÚNAMESÚtest_directoriesÚosÚpathÚjoinr   ÚlistdirÚendswithÚ
startswithÚappendrT   ÚsupportZis_resource_enabledÚrandomZsample)ÚclsÚnamesÚdZtest_dirÚnr   r   r   Ú	get_names  s    
zDirectoryTestCase.get_namesc          
   C   s‚   |   ¡ }xt|D ]l}tjjr&td| ƒ tj |¡dkrPtjjrtd|› dƒ q| j|d t	|ƒ}|  
|¡ W d Q R X qW d S )Nz
Testing %s)ztest_fstring.pyz	Skipping z: see issue 28002)r   )re   rT   r_   ÚverboseÚprintrX   rY   ÚbasenameZsubTestr   r#   )r   rb   r   r   r   r   r   Ú
test_files#  s    
zDirectoryTestCase.test_files)r$   r%   r&   rV   rX   rY   rZ   rW   Úclassmethodre   ri   r   r   r   r   rS     s   rS   Ú__main__)%ZunittestZtest.supportrT   r   rX   r`   r
   r   Ztest.test_toolsr   r   r   rY   rZ   Zparser_pathr_   ZDirsOnSysPathr   r   r+   r-   r8   r:   r<   rC   rF   rG   rI   rL   rN   rP   ZTestCaser   r'   rS   r$   Úmainr   r   r   r   Ú<module>   s<   		 0