o
    DDi                     @   sT   d dl m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 )    )Optional)MockN)BatchableMetadataProviderMetadataWrapperVisitorMetadataProvider)UnitTestc                	   @   st   e Zd ZdddZdddZdddZdd	d
Zededede	edf fddZ
dddZdddZdddZdS )MetadataWrapperTestreturnNc                 C   s6   t d}t|}| |j| | |j| d S Npass)cstparse_moduler   
assertTruemoduledeep_equalsassertIsNotselfmmw r   d/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/metadata/tests/test_metadata_wrapper.pytest_copies_tree   s   
z$MetadataWrapperTest.test_copies_treec                 C   s(   t d}t|dd}| |j| d S Nr   T)unsafe_skip_copy)r   r   r   assertIsr   r   r   r   r   test_unsafe_skip_copy   s   
z)MetadataWrapperTest.test_unsafe_skip_copyc                 C   sB   t d}t|}t|}| || | || | || d S r
   )r   r   r   assertEqualassertNotEqual)r   r   mw1mw2r   r   r   test_equality_by_identity   s   
z-MetadataWrapperTest.test_equality_by_identityc                 C   s   t d}t|}t|dd}t|dd}| t|t| | t|t| | t|t| | t|t| | t|t| | t|t| d S r   )r   r   r   r   hashr   )r   r   r   r    mw3r   r   r   test_hash_by_identity'   s   
z)MetadataWrapperTest.test_hash_by_identityargskwargs.c                  O   s   | |fS Nr   )r%   r&   r   r   r   ignore_args3   s   zMetadataWrapperTest.ignore_argsc                    s   G  fdddt d  }td}t|} td || W d    n1 s+w   Y  G  fdddt t }t }t|||id}t|j	j
d tjj
d } ||| | d S )	Nc                       s   e Zd Z jZdS )zFMetadataWrapperTest.test_metadata_cache.<locals>.DummyMetadataProviderN)__name__
__module____qualname__r(   	gen_cacher   r   r   r   DummyMetadataProvider8   s    
r.   r   z9Cache is required for initializing DummyMetadataProvider.c                       sD   e Zd ZjZdeddf fddZdejde	e
 fddZ  ZS )	zLMetadataWrapperTest.test_metadata_cache.<locals>.SimpleCacheMetadataProvidercacher	   Nc                    s   t  | || _d S r'   )super__init__r/   )r   r/   	__class__r   r   r1   E   s   
zUMetadataWrapperTest.test_metadata_cache.<locals>.SimpleCacheMetadataProvider.__init__nodec                 S   s   |  || j d S r'   )set_metadatar/   r   r4   r   r   r   
visit_PassI   s   zWMetadataWrapperTest.test_metadata_cache.<locals>.SimpleCacheMetadataProvider.visit_Pass)r)   r*   r+   r(   r,   objectr1   r   Passr   boolr7   __classcell__r   r-   r2   r   SimpleCacheMetadataProviderB   s     r<   )r/   r   )r   r   r   r   assertRaisesRegex	Exceptionresolver8   ensure_typer   bodySimpleStatementLiner   )r   r.   r   r   r<   cached_data	pass_noder   r-   r   test_metadata_cache7   s   

z'MetadataWrapperTest.test_metadata_cachec                    s\   t   G  fdddtt }td}t|}||  j  ||  j  dS )I
        Tests that resolving the same provider twice is a no-op
        c                       $   e Zd Zdejddf fddZdS )zBMetadataWrapperTest.test_resolve_provider_twice.<locals>.ProviderAr4   r	   Nc                           d S r'   	visited_ar6   mockr   r   r7   Z      zMMetadataWrapperTest.test_resolve_provider_twice.<locals>.ProviderA.visit_Passr)   r*   r+   r   r9   r7   r   rK   r   r   	ProviderAY       rO   r   N)	r   r   r:   r   r   r   r?   rJ   assert_called_once)r   rO   r   wrapperr   rK   r   test_resolve_provider_twiceS   s   



z/MetadataWrapperTest.test_resolve_provider_twicec                    s   t  G fdddtt  G  fdddtt }td}t|}|  j  || j  j	  |  j  j	  dS )rF   c                       rG   )zLMetadataWrapperTest.test_resolve_dependent_provider_twice.<locals>.ProviderAr4   r	   Nc                    rH   r'   rI   r6   rK   r   r   r7   m   rM   zWMetadataWrapperTest.test_resolve_dependent_provider_twice.<locals>.ProviderA.visit_PassrN   r   rK   r   r   rO   l   rP   rO   c                       s*   e Zd Z fZdejddffddZdS )zLMetadataWrapperTest.test_resolve_dependent_provider_twice.<locals>.ProviderBr4   r	   Nc                    rH   r'   )	visited_br6   rK   r   r   r7   s   rM   zWMetadataWrapperTest.test_resolve_dependent_provider_twice.<locals>.ProviderB.visit_Pass)r)   r*   r+   METADATA_DEPENDENCIESr   r9   r7   r   rO   rL   r   r   	ProviderBp   s    rW   r   N)
r   r   r:   r   r   r   r?   rJ   rQ   rT   )r   rW   r   rR   r   rV   r   %test_resolve_dependent_provider_twicef   s   







z9MetadataWrapperTest.test_resolve_dependent_provider_twice)r	   N)r)   r*   r+   r   r   r!   r$   staticmethodr8   tupler(   rE   rS   rX   r   r   r   r   r      s    



 

r   )typingr   unittest.mockr   libcstr   libcst.metadatar   r   r   libcst.testing.utilsr   r   r   r   r   r   <module>   s   