o
    DDi                     @   s@   d dl mZ d dlmZ d dlZd dlmZ G dd deZdS )    )dedent)OptionalN)UnitTestc                   @   s>   e Zd ZdddZdddZdddZdd	d
ZdddZdS )DeepReplaceTestreturnNc                 C   s`   d}d}t t|}t |jd t jjd }t ||t  t j}| 	|j
t| d S )N
            pass
        
            break
        r   )cstparse_moduler   ensure_typebodySimpleStatementLinedeep_replaceBreakModuleassertEqualcode)selfold_codenew_codemodule	pass_stmt
new_module r   W/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/tests/test_deep_replace.pytest_deep_replace_simple   s   z(DeepReplaceTest.test_deep_replace_simplec                 C   s   d}d}t t|}t |jd t j}t t |jt jjd t j}t t |jt jjd t j}t ||t jt dt 	 t j
t  fddt j}| |jt| d S )Nzq
            def a():
                def b():
                    def c():
                        pass
        zZ
            def a():
                def b():
                    def d(): break
        r   dr   )nameparamsr   )r	   r
   r   r   r   FunctionDefIndentedBlockr   Name
ParametersSimpleStatementSuiter   r   r   r   r   r   r   r   	outer_fun
middle_fun	inner_funr   r   r   r   test_deep_replace_complex   s,   z)DeepReplaceTest.test_deep_replace_complexc                 C   sX   d}d}t t|}||t jt  ft jt  fdfd}| |j	t| d S )Nr   r   r   )headerr   )
r	   r
   r   r   r   	EmptyLiner   r   r   r   )r   r   r   r   r   r   r   r   test_deep_replace_identity>   s   z*DeepReplaceTest.test_deep_replace_identityc                 C   s   d}d}t t|}t |jd t j}t t |jt jjd t j}t t |jt jjd t j}t ||t j}| 	|j
t| d S )N
            def a():
                def b():
                    def c():
                        print("Hello, world!")
        zP
            def a():
                def b():
                    pass
        r   )r	   r
   r   r   r   r    r!   deep_remover   r   r   r%   r   r   r   test_deep_remove_complexP   s   z(DeepReplaceTest.test_deep_remove_complexc                 C   s|   d}d}G dd dt j}t t|}| }|| |j}|d us'J dt |j|ddt j}| 	|j
t| d S )Nr-   z
            def a():
                def b():
                    def c():
                        print("Goodbye, world!")
        c                       s2   e Zd Zd fddZdejddfddZ  ZS )	zBDeepReplaceTest.test_with_deep_changes_complex.<locals>.NodeFinderr   Nc                    s   t    d | _d S N)super__init__node)r   	__class__r   r   r2   z   s   

zKDeepReplaceTest.test_with_deep_changes_complex.<locals>.NodeFinder.__init__r3   c                 S   s
   || _ d S r0   )r3   )r   r3   r   r   r   visit_SimpleString~   s   
zUDeepReplaceTest.test_with_deep_changes_complex.<locals>.NodeFinder.visit_SimpleStringr   N)__name__
__module____qualname__r2   r	   SimpleStringr6   __classcell__r   r   r4   r   
NodeFinderv   s    r=   zExpected to find a string node!z"Goodbye, world!")value)r	   
CSTVisitorr
   r   visitr3   r   with_deep_changesr   r   r   )r   r   r   r=   r   node_finderr3   r   r   r   r   test_with_deep_changes_complexh   s   
z.DeepReplaceTest.test_with_deep_changes_complexr7   )r8   r9   r:   r   r)   r,   r/   rC   r   r   r   r   r      s    


"
r   )	textwrapr   typingr   libcstr	   libcst.testing.utilsr   r   r   r   r   r   <module>   s
   