o
    DDiS:                     @   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mZmZ d dlmZ G dd	 d	e
ZG d
d deZdS )    )dedent)castDictOptionalN)parse_module)
CSTVisitor)ExpressionContextExpressionContextProviderMetadataWrapper)UnitTestc                   @   s  e Zd ZefZi i i i i i ddedeeee	 f deee	f deee	f deee	f deee	f deee	f d	d
fddZ
dejd	d
fddZdejd	d
fddZdejd	d
fddZdejd	d
fddZdejd	d
fddZdejd	d
fddZdejd	d
fddZd
S )DependentVisitor)name_to_contextattribute_to_contextsubscript_to_contextstarred_element_to_contexttuple_to_contextlist_to_contexttestr   r   r   r   r   r   returnNc                C   s.   || _ || _|| _|| _|| _|| _|| _d S N)r   r   r   r   r   r   r   )selfr   r   r   r   r   r   r    r   o/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/metadata/tests/test_expression_context_provider.py__init__   s   
zDependentVisitor.__init__nodec                 C   s.   | j | t|d | j|j d|j  d S )NzContext doesn't match for Name )r   assertEqualget_metadatar	   r   valuer   r   r   r   r   
visit_Name+   s
   

zDependentVisitor.visit_Namec                 C   ,   | j | t|| jtg |  d S r   )r   r   r   r	   r   cstModulecode_for_noder   r   r   r   visit_Attribute2   s   
z DependentVisitor.visit_Attributec                 C   r    r   )r   r   r   r	   r   r!   r"   r#   r   r   r   r   visit_Subscript8      
z DependentVisitor.visit_Subscriptc                 C   s,   | j | t|| jttj|jj  d S r   )	r   r   r   r	   r   r   r!   Namer   r   r   r   r   visit_StarredElement?   r&   z%DependentVisitor.visit_StarredElementc                 C   r    r   )r   r   r   r	   r   r!   r"   r#   r   r   r   r   visit_TupleF   r&   zDependentVisitor.visit_Tuplec                 C   r    r   )r   r   r   r	   r   r!   r"   r#   r   r   r   r   
visit_ListM   r&   zDependentVisitor.visit_Listc                 C   s>   | j t | t| W d    d S 1 sw   Y  d S r   )r   assertRaisesKeyErrorr   r	   r   r   r   r   
visit_CallT   s   "zDependentVisitor.visit_Call)__name__
__module____qualname__r	   METADATA_DEPENDENCIESr   r   strr   r   r   r!   r'   r   	Attributer$   	Subscriptr%   StarredElementr(   Tupler)   Listr*   Callr-   r   r   r   r   r      s@    




	

r   c                   @   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/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/d%d&Zd/d'd(Zd/d)d*Zd/d+d,Zd/d-d.ZdS )0ExpressionContextProviderTestr   Nc                 C   s(   t td}|t| dtjid d S )Nar   r   r
   r   visitr   r   LOADr   wrapperr   r   r   test_simple_loadZ      z.ExpressionContextProviderTest.test_simple_loadc                 C   ,   t td}|t| tjtjdd d S )Nza = br:   br;   r
   r   r=   r   r   STOREr>   r?   r   r   r   test_simple_assign`      z0ExpressionContextProviderTest.test_simple_assignc                 C   s   t td}|t| tjd tjd dtjtjdd t td}|t| tjd d tjd d dtjtjtjtjdd d S )Nz	a.b = c.dr:   rE   cd)a.bzc.d)r   r   r   za.b.c = d.e.fr:   rE   rK   rL   ef)rM   za.b.czd.ezd.e.fr
   r   r=   r   r   r>   rG   r?   r   r   r   test_assign_to_attributel   s@   	z6ExpressionContextProviderTest.test_assign_to_attributec              
   C   s   t td}|t| tjtjtjtjdtjtjdd t td}|t| tjd tjtjtjddtjidtjid d S )	Nza[b] = c[d]rJ   )a[b]zc[d]r   r   r   zx.y[start:end, idx])xystartendidxzx.y)r   r   r   r   rQ   r?   r   r   r   test_assign_with_subscript   s8   z8ExpressionContextProviderTest.test_assign_with_subscriptc                 C   rC   )Nza += brD   r;   rF   r?   r   r   r   test_augassign   rI   z,ExpressionContextProviderTest.test_augassignc                 C   s0   t td}|t| tjtjtjdd d S )Nz
a: str = b)r:   rE   r2   r;   rF   r?   r   r   r   test_annassign      z,ExpressionContextProviderTest.test_annassignc                 C   4   t td}|t| tjtjddtjid d S )Nz*a = brD   r:   )r   r   r   rF   r?   r   r   r    test_starred_element_with_assign      z>ExpressionContextProviderTest.test_starred_element_with_assignc                 C   (   t td}|t| dtjid d S )Nzdel ar:   r;   r
   r   r=   r   r   DELr?   r   r   r   test_del_simple   rB   z-ExpressionContextProviderTest.test_del_simplec                 C   s4   t td}|t| tjtjddtjid d S )Nzdel a[b]rD   rS   rT   )r
   r   r=   r   r   r>   rc   r?   r   r   r   test_del_with_subscript   r`   z5ExpressionContextProviderTest.test_del_with_subscriptc                 C   s4   t td}|t| tjtjddtjid d S )Nzdel a, brD   za, br   r   r   rb   r?   r   r   r   test_del_with_tuple   r`   z1ExpressionContextProviderTest.test_del_with_tuplec                 C   r^   )Nza, = brD   za,rf   rF   r?   r   r   r   test_tuple_with_assign   r`   z4ExpressionContextProviderTest.test_tuple_with_assignc              
   C   sD   t td}|t| tjtjtjdtjtjtjtjdd d S )Nz((a, b), c) = ((1, 2), 3))r:   rE   rK   )z(a, b)z((a, b), c)z(1, 2)z((1, 2), 3)rf   rF   r?   r   r   r   test_nested_tuple_with_assign  s   z;ExpressionContextProviderTest.test_nested_tuple_with_assignc                 C   s8   t td}|t| tjtjdtjtjdd d S )Nz	[a] = [b]rD   )z[a]z[b]r   r   r   rF   r?   r   r   r   test_list_with_assign  s   z3ExpressionContextProviderTest.test_list_with_assignc                 C   sP   t td}|t| tjtjtjtjtjtjdtjtjtjtjdd d S )Nz[[a, b], c] = [[d, e], f]rN   )z[a, b]z[[a, b], c]z[d, e]z[[d, e], f]rj   rF   r?   r   r   r   test_nested_list_with_assign+  s$   	z:ExpressionContextProviderTest.test_nested_list_with_assignc              	   C   s<   t td}|t| tjtjtjtjddtjid d S )Nzf(a)[b] = c)r:   rE   rK   rP   zf(a)[b]rT   rQ   r?   r   r   r   test_expressions_with_assignA  s   z:ExpressionContextProviderTest.test_expressions_with_assignc                 C   ra   )Nza()r:   r;   r<   r?   r   r   r   test_invalid_type_for_contextP  rB   z;ExpressionContextProviderTest.test_invalid_type_for_contextc                 C   rC   )Nzwith a() as b:
    passrD   r;   rQ   r?   r   r   r   test_with_asV  rI   z*ExpressionContextProviderTest.test_with_asc                 C   rC   )Nz,try:    ...
except Exception as ex:
    pass)	Exceptionexr;   rQ   r?   r   r   r   test_except_asb  s   z,ExpressionContextProviderTest.test_except_asc                 C   s0   t td}|t| tjtjtjdd d S )Nzfor i in items:
    j = 1)iitemsjr;   rF   r?   r   r   r   test_forp  r]   z&ExpressionContextProviderTest.test_forc              	   C   s<   d}t tt|}|t| tjtjtjtjdd d S )Nz3
        class Foo(Bar):
            x = y
        )FooBarrU   rV   r;   )r
   r   r   r=   r   r   rG   r>   r   coder@   r   r   r   
test_class}  s   z(ExpressionContextProviderTest.test_classc              
   C   s<   d}t t|}|t| tjtjtjtjtjdd d S )Nz!def foo(x: int = y) -> None: pass)foorU   intrV   Noner;   rF   ry   r   r   r   test_function  s   z+ExpressionContextProviderTest.test_functionc                 C   s@   d}t tt|tjddd}|t| tjtj	dd d S )Nz-
        if x := y:
            pass
        z3.8)python_version)config)rU   rV   r;   )
r
   r   r   r!   PartialParserConfigr=   r   r   rG   r>   ry   r   r   r   test_walrus  s   z)ExpressionContextProviderTest.test_walrus)r   N)r.   r/   r0   rA   rH   rR   rZ   r[   r\   r_   rd   re   rg   rh   ri   rk   rl   rm   rn   ro   rr   rv   r{   r   r   r   r   r   r   r9   Y   s.    



'
"















r9   )textwrapr   typingr   r   r   libcstr!   r   libcst._visitorsr   libcst.metadatar   r	   r
   libcst.testing.utilsr   r   r9   r   r   r   r   <module>   s   D