o
    DDiZ                     @   s|   d dl mZ d dlmZmZm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ZG dd	 d	eZdS )
    )dedent)SequenceSetTupleN)matches)UnitTestc                   @   s   e Zd Zdedeejejf fddZ	dee
e
f dee
e
f dej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	S )MatchersMetadataTestcodereturnc                 C   sD   t t|}t |}t t |jjd t jjd t jj	|fS )Nr   )
cstparse_moduler   MetadataWrapperensure_typemodulebodySimpleStatementLineExprvalue)selfr	   r   wrapper r   j/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/matchers/tests/test_matchers_with_metadata.py_make_fixture   s   
z"MatchersMetadataTest._make_fixturestartendc                 C   s2   t jt j|d |d dt j|d |d ddS )Nr      )linecolumn)r   r   )meta	CodeRangeCodePosition)r   r   r   r   r   r   _make_coderange    s   z$MatchersMetadataTest._make_coderangeNc                 C   s   |  d\}}| t|tjdttj| ddd|d |  d\}}| t|tj	ttj| ddttj| dd	d
|d d S )Nfoor   r   )r      r   metadatametadata_resolvera + br   r   r      r      leftright)
r   
assertTruer   mNameMatchMetadatar   PositionProviderr!   BinaryOperationr   noder   r   r   r   test_simple_matcher_true(   >   



z-MatchersMetadataTest.test_simple_matcher_truec                 C   s   |  d\}}| t|tjdttj| ddd|d |  d\}}| t|tj	ttj| ddttj| d	d
d|d d S )Nr"   )   r   )r<   r$   r%   r'   z	foo + barr#   r*   r+   r-   r/   )
r   assertFalser   r3   r4   r5   r   r6   r!   r7   r8   r   r   r   test_simple_matcher_falseK   r;   z.MatchersMetadataTest.test_simple_matcher_falsec                 C   s\  t jt t tj| ddt tj| ddd}| d\}}| t	|||d | d\}}| t	|||d | d\}}| 
t	|||d t jt t tj| ddt tjtjjd}| d\}}| t	|||d | d	\}}| 
t	|||d t jt t tjtjjd}| d\}}| t	|||d d S 
Nr#   r*   r   r<   r0   r)   r'   12 + 3123 + 4ab + cd)r3   r7   OneOfr5   r   r6   r!   r   r2   r   r=   AllOfExpressionContextProviderExpressionContextLOADDoesNotMatchSTOREr   matcherr9   r   r   r   r   test_predicate_logicn   sN   



z)MatchersMetadataTest.test_predicate_logicc              	   C   sP  t jt tj| ddt tj| ddB d}| d\}}| t|||d | d\}}| t|||d | d\}}| 	t|||d t jt tj| ddt tj
tjj@ d}| d\}}| t|||d | d	\}}| 	t|||d t jt tj
tjj d}| d\}}| t|||d d S r?   )r3   r7   r5   r   r6   r!   r   r2   r   r=   rG   rH   rI   rK   rL   r   r   r   test_predicate_logic_operators   sH   



	z3MatchersMetadataTest.test_predicate_logic_operatorsc                 C   s  t jt jt t tj| ddt tj| dddd}| d\}}| 	t
|||d t jt jt t tj| ddt tj| dddd}| d\}}| 	t
|||d | d	\}}| t
|||d t jt jt t tj| ddt tjtjjdd}| d\}}| 	t
|||d | d
\}}| t
|||d t jt jt t tjtjjdd}| d\}}| 	t
|||d d S Nr#   r*   r@   r&   rA   r)   r'   rB   rC   rD   )r3   r7   r4   rE   r5   r   r6   r!   r   r2   r   Integerr=   rF   rG   rH   rI   rJ   rK   rL   r   r   r   "test_predicate_logic_on_attributes   s|   






	z7MatchersMetadataTest.test_predicate_logic_on_attributesc              
   C   s  t jt jt tj| ddt tj| ddB dd}| d\}}| t	|||d t jt j
t tj| ddt tj| ddB dd}| d\}}| t	|||d | d	\}}| t	|||d t jt jt tj| ddt tjtjj@ dd}| d\}}| t	|||d | d
\}}| t	|||d t jt jt tjtjj dd}| d\}}| t	|||d d S rP   )r3   r7   r4   r5   r   r6   r!   r   r2   r   rR   r=   rG   rH   rI   rK   rL   r   r   r   ,test_predicate_logic_operators_on_attributes  sj   




	zAMatchersMetadataTest.test_predicate_logic_operators_on_attributesc              
   C   s   t d}t |}t |jjd t j}| t|t	jt	
tjdd d|d | t|t	jt	
tjdd d|d d S )N1from typing import List

def foo() -> None: pass
r   c                 S      t dd | D S )Nc                 s       | ]}|j d v V  qdS >   barbazr"   Nname.0nr   r   r   	<genexpr>Y      

VMatchersMetadataTest.test_lambda_metadata_matcher.<locals>.<lambda>.<locals>.<genexpr>any	qualnamesr   r   r   <lambda>Y      zCMatchersMetadataTest.test_lambda_metadata_matcher.<locals>.<lambda>r[   r'   c                 S   rV   )Nc                 s   rW   )>   rY   rZ   Nr[   r]   r   r   r   r`   h  ra   rb   rc   re   r   r   r   rg   h  rh   r   r   r   r   r   r   FunctionDefr2   r   r3   MatchMetadataIfTruer   QualifiedNameProviderr=   r   r   r   functiondefr   r   r   test_lambda_metadata_matcherK  s:   
z1MatchersMetadataTest.test_lambda_metadata_matcherc              	   C   sr   t d}t |jd t j}| jtdd t|tjt	t
jdd d W d    d S 1 s2w   Y  d S )NrU   r   zHQualifiedNameProvider is not resolved; did you forget a MetadataWrapper?)msgc                 S   rV   )Nc                 s   rW   rX   r[   r]   r   r   r   r`     ra   zoMatchersMetadataTest.test_lambda_metadata_matcher_with_unresolved_metadata.<locals>.<lambda>.<locals>.<genexpr>rc   re   r   r   r   rg     rh   z\MatchersMetadataTest.test_lambda_metadata_matcher_with_unresolved_metadata.<locals>.<lambda>r[   )r   r   r   r   rj   assertRaisesLookupErrorr   r3   rk   r   rl   )r   r   rn   r   r   r   5test_lambda_metadata_matcher_with_unresolved_metadataq  s$   "zJMatchersMetadataTest.test_lambda_metadata_matcher_with_unresolved_metadatac              
   C   sl   G dd dt jt }td}t|}t|jjd tj	}| 
t|tj	t|dd d|d d S )	Nc                   @   s   e Zd ZdZdS )zXMatchersMetadataTest.test_lambda_metadata_matcher_with_no_metadata.<locals>.VoidProviderzA dummy metadata providerN)__name__
__module____qualname____doc__r   r   r   r   VoidProvider  s    rx   rU   r   c                 S   s   dS )NTr   )_r   r   r   rg     s    zTMatchersMetadataTest.test_lambda_metadata_matcher_with_no_metadata.<locals>.<lambda>r[   r'   )r   BatchableMetadataProviderobjectr   r   r   r   r   r   rj   r=   r   r3   rk   )r   rx   r   r   rn   r   r   r   -test_lambda_metadata_matcher_with_no_metadata  s   
zBMatchersMetadataTest.test_lambda_metadata_matcher_with_no_metadatac                 C   s   t d}t |}t |jjd t j}| t|t	jt	
tjdd t	
tjdd B d|d | t|t	jt	
tjdd t	
tjd	d @ d|d | t|t	jt	
tjd
d  t	
tjdd @ d|d d S )Nz1from typing import List

def bar() -> None: pass
r   c                 S   rV   )Nc                 s       | ]}|j d kV  qdS r"   Nr[   r]   r   r   r   r`         `MatchersMetadataTest.test_lambda_metadata_matcher_operators.<locals>.<lambda>.<locals>.<genexpr>rc   re   r   r   r   rg         zMMatchersMetadataTest.test_lambda_metadata_matcher_operators.<locals>.<lambda>c                 S   rV   )Nc                 s   r}   rY   Nr[   r]   r   r   r   r`     r   r   rc   re   r   r   r   rg     r   r[   r'   c                 S   rV   )Nc                 s   r}   r~   r[   r]   r   r   r   r`     r   r   rc   re   r   r   r   rg     r   c                 S   rV   )Nc                 s   r}   r   r[   r]   r   r   r   r`     r   r   rc   re   r   r   r   rg     r   c                 S   rV   )Nc                 s   r}   r~   r[   r]   r   r   r   r`     r   r   rc   re   r   r   r   rg     r   c                 S   rV   )Nc                 s   r}   r   r[   r]   r   r   r   r`     r   r   rc   re   r   r   r   rg     r   ri   rm   r   r   r   &test_lambda_metadata_matcher_operators  sp   


z;MatchersMetadataTest.test_lambda_metadata_matcher_operatorsr
   N)rt   ru   rv   strr   r   BaseExpressionr   r   r   intr   r!   r:   r>   rN   rO   rS   rT   ro   rs   r|   r   r   r   r   r   r      s.    





#
#
.
0
E
:
&
r   c                   @   sH   e Zd ZdedejfddZdddZddd	Zdd
dZ	dddZ
dS )MatchersVisitorMetadataTestr	   r
   c                 C   s   t t t|S N)r   r   r   r   )r   r	   r   r   r   r     s   z)MatchersVisitorMetadataTest._make_fixtureNc                 C   B   G dd dt j}| d}| }|| | |jh d d S )Nc                       J   e Zd ZU ejfZeej ed< d	 fddZ	de
jddfddZ  ZS )
zIMatchersVisitorMetadataTest.test_matches_on_visitors.<locals>.TestVisitorMETADATA_DEPENDENCIESr
   Nc                       t    t | _d S r   super__init__setmatch_namesr   	__class__r   r   r        
zRMatchersVisitorMetadataTest.test_matches_on_visitors.<locals>.TestVisitor.__init__r9   c                 S   8   |  |tjttjtjjdr| j	|j
 d S d S NrQ   r   r3   r4   r5   r   rG   rH   rK   r   addr   r   r9   r   r   r   
visit_Name     
zTMatchersVisitorMetadataTest.test_matches_on_visitors.<locals>.TestVisitor.visit_Namer   rt   ru   rv   r   rG   r   r   	ProviderT__annotations__r   r   r4   r   __classcell__r   r   r   r   TestVisitor  
   
 r   
            a = 1 + 2
            b = 3 + 4 + d + e
            def foo() -> str:
                c = "baz"
                return c
            def bar() -> int:
                return b
            del foo
            del bar
        >   abcrY   r"   r3   MatcherDecoratableVisitorr   visitassertEqualr   r   r   r   visitorr   r   r   test_matches_on_visitors     
z4MatchersVisitorMetadataTest.test_matches_on_visitorsc                 C   r   )Nc                       r   )
zQMatchersVisitorMetadataTest.test_matches_on_transformers.<locals>.TestTransformerr   r
   Nc                    r   r   r   r   r   r   r   r     r   zZMatchersVisitorMetadataTest.test_matches_on_transformers.<locals>.TestTransformer.__init__r9   c                 S   r   r   r   r   r   r   r   r     r   z\MatchersVisitorMetadataTest.test_matches_on_transformers.<locals>.TestTransformer.visit_Namer   r   r   r   r   r   TestTransformer	  r   r   r   >   r   r   r   rY   r"   r3   MatcherDecoratableTransformerr   r   r   r   r   r   r   r   r   r   r   test_matches_on_transformers  r   z8MatchersVisitorMetadataTest.test_matches_on_transformersc                 C   r   )Nc                       j   e Zd ZU ejfZeej ed< d
 fddZ	e
e
je
ejejjddejddfdd	Z  ZS )zSMatchersVisitorMetadataTest.test_matches_decorator_on_visitors.<locals>.TestVisitorr   r
   Nc                    r   r   r   r   r   r   r   r   7  r   z\MatchersVisitorMetadataTest.test_matches_decorator_on_visitors.<locals>.TestVisitor.__init__rQ   r9   c                 S      | j |j d S r   r   r   r   r   r   r   r   _visit_assignments;     	zfMatchersVisitorMetadataTest.test_matches_decorator_on_visitors.<locals>.TestVisitor._visit_assignmentsr   rt   ru   rv   r   rG   r   r   r   r   r   r3   r   r4   r5   rH   rK   r   r   r   r   r   r   r   r   2     
 
r   r   >   r   r   r   rY   r"   r   r   r   r   r   "test_matches_decorator_on_visitors0     
z>MatchersVisitorMetadataTest.test_matches_decorator_on_visitorsc                 C   r   )Nc                       r   )z[MatchersVisitorMetadataTest.test_matches_decorator_on_transformers.<locals>.TestTransformerr   r
   Nc                    r   r   r   r   r   r   r   r   _  r   zdMatchersVisitorMetadataTest.test_matches_decorator_on_transformers.<locals>.TestTransformer.__init__rQ   r9   c                 S   r   r   r   r   r   r   r   r   c  r   znMatchersVisitorMetadataTest.test_matches_decorator_on_transformers.<locals>.TestTransformer._visit_assignmentsr   r   r   r   r   r   r   Z  r   r   r   >   r   r   r   rY   r"   r   r   r   r   r   &test_matches_decorator_on_transformersX  r   zBMatchersVisitorMetadataTest.test_matches_decorator_on_transformersr   )rt   ru   rv   r   r   r   r   r   r   r   r   r   r   r   r   r     s    

)
)(r   )textwrapr   typingr   r   r   libcstr   libcst.matchersmatchersr3   libcst.metadatar&   r   r   libcst.testing.utilsr   r   r   r   r   r   r   <module>   s      M