o
    noi                     @   s   d dl 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
mZmZmZ d dlmZmZ d dlmZ d	ed
eeef fddZG dd deZG dd deZdS )    )TupleN)parse_module)BatchableCSTVisitor)
CSTVisitor)	CodeRangeMetadataWrapperPositionProvider#WhitespaceInclusivePositionProvider)PositionProvidingCodegenState0WhitespaceInclusivePositionProvidingCodegenState)UnitTeststatereturnc                 C   s   | j | jfS N)linecolumn)r    r   `/home/ubuntu/.local/lib/python3.10/site-packages/libcst/metadata/tests/test_position_provider.pyposition   s   r   c                   @   s4   e Zd ZdddZdddZdddZdd	d
ZdS )PositionProviderTestr   Nc                    s4   |  G  fdddt }ttd}||  dS )z}
        Sets 2 metadata entries for every node:
            SimpleProvider -> 1
            DependentProvider - > 2
        c                       *   e Zd ZefZdejddf fddZdS )zDPositionProviderTest.test_visitor_provider.<locals>.DependentVisitornoder   Nc                         | t|tdd d S N   r   r      assertEqualget_metadatar   r   selfr   testr   r   
visit_Pass,      zOPositionProviderTest.test_visitor_provider.<locals>.DependentVisitor.visit_Pass__name__
__module____qualname__r   METADATA_DEPENDENCIEScstPassr%   r   r#   r   r   DependentVisitor)       r.   passNr   r   r   visit)r"   r.   wrapperr   r#   r   test_visitor_provider!   s   z*PositionProviderTest.test_visitor_providerc                    sP   | t dd G  fdddt}ttd|  ttd|  d S )Nr   r      c                       sF   e Zd ZefZdejddf fddZdejddf fddZ	dS )zCPositionProviderTest.test_equal_range.<locals>.EqualPositionVisitorr   r   Nc                        | t|  d S r   r   r    r   r!   expected_ranger$   r   r   visit_Equal;      zOPositionProviderTest.test_equal_range.<locals>.EqualPositionVisitor.visit_Equalc                    r7   r   r8   r!   r9   r   r   visit_NotEqual@   r<   zRPositionProviderTest.test_equal_range.<locals>.EqualPositionVisitor.visit_NotEqual)
r(   r)   r*   r   r+   r,   Equalr;   NotEqualr=   r   r9   r   r   EqualPositionVisitor8   s    r@   zvar == 1zvar != 1)r   r   r   r   r2   )r"   r@   r   r9   r   test_equal_range4   s
   
z%PositionProviderTest.test_equal_rangec                    s6   |  G  fdddt }ttd}|| g d S )Nc                       r   )z@PositionProviderTest.test_batchable_provider.<locals>.ABatchabler   r   Nc                    r   r   r   r!   r#   r   r   r%   N   r&   zKPositionProviderTest.test_batchable_provider.<locals>.ABatchable.visit_Passr'   r   r#   r   r   
ABatchableK   r/   rB   r0   )r   r   r   visit_batched)r"   rB   r3   r   r#   r   test_batchable_providerH   s   z,PositionProviderTest.test_batchable_providerc                    s8   |  G  fdddt }d}tt|}||  d S )Nc                       sB   e Zd ZefZdejddf fddZdejddf fddZ	dS )zYPositionProviderTest.test_match_statement_position_metadata.<locals>.MatchPositionVisitorr   r   Nc                    r   )N   r         r   r!   r#   r   r   visit_Match\   s   
zePositionProviderTest.test_match_statement_position_metadata.<locals>.MatchPositionVisitor.visit_Matchc                    s   t |jtjr!|jjr!|jjjdkr! | t|t	dd d S t |jtjrB|jjrB|jjjdkrB | t|t	dd d S t |jtjr\|jjs^ | t|t	dd d S d S d S )	Nb)   r   )rL   rI   c)r   r   )r   rI   )rH   r   rG   )

isinstancepatternr,   MatchAsnamevaluer   r    r   r   r!   r#   r   r   visit_MatchCaseb   s0   


ziPositionProviderTest.test_match_statement_position_metadata.<locals>.MatchPositionVisitor.visit_MatchCase)
r(   r)   r*   r   r+   r,   MatchrJ   	MatchCaserS   r   r#   r   r   MatchPositionVisitorY   s    rV   zB
match status:
    case b: pass
    case c: pass
    case _: pass
r1   )r"   rV   coder3   r   r#   r   &test_match_statement_position_metadataV   s
   "z;PositionProviderTest.test_match_statement_position_metadatar   N)r(   r)   r*   r4   rA   rD   rX   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S )!PositionProvidingCodegenStateTestr   Nc                 C   s"   t ddt }| t|d d S )N    
r   )r   r	   r   r   r"   r   r   r   r   test_codegen_initial_position   s   z?PositionProvidingCodegenStateTest.test_codegen_initial_positionc                 C   ,   t ddt }|d | t|d d S )Nr[   r\   1234r   r   r	   	add_tokenr   r   r]   r   r   r   test_codegen_add_token   
   
z8PositionProvidingCodegenStateTest.test_codegen_add_tokenc                 C   r_   )Nr[   r\   z	1234
1234)rF   r   ra   r]   r   r   r   test_codegen_add_tokens   rd   z9PositionProvidingCodegenStateTest.test_codegen_add_tokensc                 C   s,   t ddt }|d | t|d d S )Nr[   r\   rE   ra   r]   r   r   r   test_codegen_add_newline   rd   z:PositionProvidingCodegenStateTest.test_codegen_add_newlinec                 C   s6   t ddt }||j |  | t|d d S )Nr[   r\   r   )r   r	   increase_indentdefault_indentadd_indent_tokensr   r   r]   r   r   r   test_codegen_add_indent_tokens   s   z@PositionProvidingCodegenStateTest.test_codegen_add_indent_tokensc                 C   sV   t ddt }||j ||j ||j |  |  | t|d d S )Nr[   r\   )r      )r   r	   rg   rh   decrease_indentri   r   r   r]   r   r   r   test_codegen_decrease_indent   s   z>PositionProvidingCodegenStateTest.test_codegen_decrease_indentc                 C      t  }tddt }|| |d || |d W d    n1 s*w   Y  |d || | |j	j
| tdd d S )Nr[   r\    r0   r   r5   )r,   r-   r   r	   before_codegenrb   record_syntactic_positionafter_codegenr   provider	_computedr   r"   r   r   r   r   r   "test_whitespace_inclusive_position   s   



zDPositionProvidingCodegenStateTest.test_whitespace_inclusive_positionc                 C   rn   )Nr[   r\   ro   r0   )r   r   )r   rH   )r,   r-   r
   r   rp   rb   rq   rr   r   rs   rt   r   ru   r   r   r   test_position   s   



z/PositionProvidingCodegenStateTest.test_positionrY   )r(   r)   r*   r^   rc   re   rf   rj   rm   rv   rw   r   r   r   r   rZ      s    






rZ   )typingr   libcstr,   r   libcst._batched_visitorr   libcst._visitorsr   libcst.metadatar   r   r   r	   !libcst.metadata.position_providerr
   r   libcst.testing.utilsr   intr   r   rZ   r   r   r   r   <module>   s   

f