o
    DD©i .  ã                   @   sP   d dl Z d dlmZ d dlZd dlmZmZmZ d dl	m
Z
 G dd„ de
ƒZdS )é    N)Údedent)Úparse_template_expressionÚparse_template_moduleÚparse_template_statement)ÚUnitTestc                   @   s    e Zd Zdedefdd„Zdejdefdd„Zdd	d
„Zddd„Z	ddd„Z
ddd„Zddd„Zddd„Zddd„Zddd„Zddd„Zddd„Zddd„ZdS ) ÚTemplateTestÚcodeÚreturnc                 C   sV   t |ƒ tj¡}|d  ¡ s|dd … }|d  ¡ s%g |d d… ¢tj‘}tj |¡S )Nr   é   éÿÿÿÿ)r   ÚsplitÚosÚlinesepÚstripÚjoin)Úselfr   Úlines© r   ú[/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/helpers/tests/test_template.pyr      s   
ÿþzTemplateTest.dedentÚnodec                 C   s   t  g ¡ |¡S )N)ÚcstÚModuleÚcode_for_node)r   r   r   r   r   r      s   zTemplateTest.codeNc                 C   s8   t |  d¡t d¡t d¡d}|  |j|  d¡¡ d S )Nz„
                from {module} import {obj}

                def foo() -> {obj}:
                    return {obj}()
                ÚfooÚBar)ÚmoduleÚobjzy
                from foo import Bar

                def foo() -> Bar:
                    return Bar()
                )r   r   r   ÚNameÚassertEqualr   ©r   r   r   r   r   Útest_simple_module"   s   ÿöÿþzTemplateTest.test_simple_modulec                 C   s0   t dt d¡t d¡d}|  |  |¡d¡ d S )Nzassert {test}, {msg}
ÚTruez#"Somehow True is no longer True...")ÚtestÚmsgz1assert True, "Somehow True is no longer True..."
)r   r   r   ÚSimpleStringr   r   ©r   Ú	statementr   r   r   Útest_simple_statement;   s   ýþz"TemplateTest.test_simple_statementc                 C   s^   t dt d¡t d¡tjt ¡ ft d¡t ¡ t d¡t ¡ fdd}|  |  |¡d¡ d S )	Nz{a} + {b} + {c}ÚoneÚtwoÚthreeÚfour)ÚlparÚleftÚoperatorÚrightÚrpar)ÚaÚbÚczone + two + (three * four))	r   r   r   ÚBinaryOperationÚ	LeftParenÚMultiplyÚ
RightParenr   r   ©r   Ú
expressionr   r   r   Útest_simple_expressionF   s    ûüþz#TemplateTest.test_simple_expressionc                 C   sb   t dt d¡t d¡d}|  |  |¡d¡ t dt t d¡¡t d¡d}|  |  |¡d¡ d S )Nzx: {type} = {val}ÚintÚ5)ÚtypeÚvalzx: int = 5
)r   r   r   ÚIntegerr   r   Ú
Annotationr%   r   r   r   Útest_annotationX   s$   ýþýþzTemplateTest.test_annotationc                 C   sx   t dt d¡t d¡t d¡d}|  |  |¡d¡ t dt t d¡¡t t d¡¡t d¡d}|  |  |¡d¡ d S )Nz{a} = {b} = {val}ÚfirstÚsecondr<   )r1   r2   r>   zfirst = second = 5
)r   r   r   r?   r   r   ÚAssignTargetr%   r   r   r   Útest_assign_targeto   s(   üþüþzTemplateTest.test_assign_targetc              	   C   sÔ   t dt d¡d}|  |  |¡d¡ t dt t d¡¡d}|  |  |¡d¡ t dt t t d¡¡f¡d}|  |  |¡d¡ t dtjt t d¡¡t t d¡¡ft t d¡¡d	d}|  |  |¡d
¡ d S )Nzdef foo({arg}): passÚbar)Úargzdef foo(bar): pass
zdef foo({args}): pass)ÚargsÚbazÚrest)ÚparamsÚ
star_kwargz def foo(bar, baz, **rest): pass
)r   r   r   r   r   ÚParamÚ
Parametersr%   r   r   r   Útest_parametersˆ   sN   þþþþÿþþþûþ
þzTemplateTest.test_parametersc                 C   sh   t dt d¡t d¡d}|  |  |¡d¡ t dt t d¡¡t t d¡¡d}|  |  |¡d¡ d S )Nzfoo({arg1}, {arg2})rF   rI   )Úarg1Úarg2zfoo(bar, baz))r   r   r   r   r   ÚArgr%   r   r   r   Ú	test_args¹   s$   ýþýþzTemplateTest.test_argsc                 C   s\   t dtjt d¡t t ¡ f¡dt t t t d¡¡¡f¡t ¡ d}|  	|j
d¡ d S )Nz'{statement1}
{statement2}
{statement3}
r   )r"   ÚbodyrF   )Ú
statement1Ú
statement2Ú
statement3zif foo: pass
bar()
pass
)r   r   ÚIfr   ÚSimpleStatementSuiteÚPassÚSimpleStatementLineÚExprÚCallr   r   r   r   r   r   Útest_statementÐ   s"   ÿþÿõþzTemplateTest.test_statementc                 C   s´   t dtjt ¡ fdd}|  |jd¡ t dtjt t ¡ f¡fdd}|  |jd¡ t dtjt ¡ fdd}|  |jd¡ t dtjt t ¡ f¡fdd}|  |jd¡ d S )Nzif x is True: {suite}
)rT   )Úsuitezif x is True: pass
zif x is True:
    pass
zif x is True:
    {suite}
)r   r   rY   rZ   r   r   ÚIndentedBlockr[   r   r   r   r   Ú
test_suiteå   s\   ÿþþÿÿÿþ
þÿþþÿÿÿþ
þzTemplateTest.test_suitec              
   C   s  t dt d¡d}|  |  |¡d¡ t dt d¡t d¡d}|  |  |¡d¡ t dt t d¡¡d}|  |  |¡d¡ t dt t t d¡¡¡d}|  |  |¡d¡ t d	t t d
¡t d¡¡d}|  |  |¡d¡ t d	t t t d
¡t d¡¡¡d}|  |  |¡d¡ t d	t t d
¡t d¡¡d}|  |  |¡d¡ t d	t t t d
¡t d¡¡¡d}|  |  |¡d¡ t dt t d
¡t d¡¡t t d¡¡d}|  |  |¡d¡ t dt t t d
¡t d¡¡¡t t t d¡¡¡d}|  |  |¡d¡ d S )NzOptional[{type}]r;   )r=   zOptional[int]zTuple[{type1}, {type2}]Ústr)Útype1Útype2zTuple[int, str]zfoo[{slice}]r<   Ú6)Úslicezfoo[5:6]zfoo[{slice1}, {slice2}]Ú7)Úslice1Úslice2zfoo[5:6, 7])	r   r   r   r   r   ÚIndexÚSubscriptElementÚSlicer?   r8   r   r   r   Útest_subscript  s¦   þþýþþþþþþþþþþþþþýþýþzTemplateTest.test_subscriptc                 C   sR   t dt d¡d}|  |  |¡d¡ t dt t d¡¡d}|  |  |¡d¡ d S )Nz@{decorator}
def foo(): pass
rF   )Ú	decoratorz@bar
def foo(): pass
)r   r   r   r   r   Ú	Decoratorr%   r   r   r   Útest_decoratorsw  s    þþþþzTemplateTest.test_decorators)r	   N)Ú__name__Ú
__module__Ú__qualname__rb   r   r   ÚCSTNoder   r    r'   r:   rA   rE   rO   rS   r^   ra   rm   rp   r   r   r   r   r      s    






1


7[r   )r   Útextwrapr   Úlibcstr   Úlibcst.helpersr   r   r   Úlibcst.testing.utilsr   r   r   r   r   r   Ú<module>   s   