o
    DD©i=  ć                   @   sL   d dl mZ d dlZd dlmZ d dlmZ	 d dl
mZ G dd deZdS )é    )ŚTupleN)ŚUnitTestc                   @   sŌ   e Z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'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 )(ŚMatchersExtractTestŚstartŚendŚreturnc                 C   s2   t jt j|d |d dt j|d |d ddS )Nr   é   )ŚlineŚcolumn)r   r   )ŚmetaŚ	CodeRangeŚCodePosition)Śselfr   r   © r   ś[/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/matchers/tests/test_extract.pyŚ_make_coderange   s   žz#MatchersExtractTest._make_coderangeNc                 C   sd   t  tjjt jt jt  ” ddd”}|  |” t  tj	j
t jt jt  ” ddd”}|  |” d S )NŚfunc©Śname©r   )ŚmŚextractŚcstŚRemovalSentinelŚREMOVEŚCallŚSaveMatchedNodeŚNameŚassertIsNoneŚMaybeSentinelŚDEFAULT)r   Śnothingr   r   r   Śtest_extract_sentinel   s   ž
žz)MatchersExtractTest.test_extract_sentinelc              
   C   sT   t  d”}t |tjtjt t ” ”t t ” ”gddd”}|  	|d|i” d S )Nśa + b[c], d(e, f * g)©ŚelementsŚnoder   )
r   Śparse_expressionr   r   r   r   ŚElementŚBinaryOperationr   ŚassertEqual©r   Ś
expressionŚnodesr   r   r   Śtest_extract_tautology$   s   
"žžz*MatchersExtractTest.test_extract_tautologyc                 C   sĀ   t  d”}t |tjt tjt t ” d”d”t t 	” ”gd”}t  
t  
|t j”jd jt j”j}|  |d|i” t |tjt tjt t ” d”d”t t 	” ”gd”}|  |” d S )Nr#   Śleft©r/   r$   r   )r   r'   r   r   r   r(   r)   r   r   r   Śensure_typer%   Śvaluer/   r*   Ś	Subscriptr   ©r   r,   r-   Śextracted_noder   r   r   Śtest_extract_simple/   s:   
’ü’žžż’ü’žz'MatchersExtractTest.test_extract_simplec                 C   s°   t  d”}t |tjt tjt t ” d”d”t tj	t t ” d”d”gd”}t  
t  
|t j”jd jt j”j}t  
t  
|t j”jd jt j	”j}|  |||d	” d S )
Nr#   r/   r0   r   r   r$   r   r   ©r/   r   )r   r'   r   r   r   r(   r)   r   r   r   r1   r%   r2   r/   r   r*   )r   r,   r-   Śextracted_node_leftŚextracted_node_funcr   r   r   Śtest_extract_multipleQ   s2   
’ü’žžż’ž
’z)MatchersExtractTest.test_extract_multiplec                 C   s|  t  d”}t |tjt tjt t ” d”d”t tj	t t ” d”t t 
” d”B d”gd”}t  t  |t j”jd jt j”j}t  t  |t j”jd	 jt j	”j}|  |||d
” t  d”}t |tjt tjt t ” d”d”t tj	t t ” d”t t 
” d”B d”gd”}t  t  |t j”jd jt j”j}t  t  |t j”jd	 jt j	”j}|  |||d” d S )Nr#   r/   r0   r   Śattrr   r$   r   r   r7   za + b[c], d.z(e, f * g))r/   r;   )r   r'   r   r   r   r(   r)   r   r   r   Ś	Attributer1   r%   r2   r/   r   r*   )r   r,   r-   r8   r9   Śextracted_node_attrr   r   r   Śtest_extract_predicatesi   s|   
’’’’ü’žžż’ž
’
’’’’ü’žžż’ž
’z+MatchersExtractTest.test_extract_predicatesc                 C   s(  t  d”}t  |”}t  t  |jjd t j”jd t j”j}t	j
|t	jt	 t	jt	jt	 t	 tj|  dd””d”dd”t	 t	 ” ”gd|d	}t  t  |t j”jd jt j”j}|  |d|i” t	j
|t	jt	 t	jt	jt	 t	 tj|  dd
””d”dd”t	 t	 ” ”gd|d	}|  |” d S )Nr#   r   )r   r   )r   r   r/   )Śmetadatar0   r$   )Śmetadata_resolver)r   é   )r   Śparse_moduleŚMetadataWrapperr1   ŚmoduleŚbodyŚSimpleStatementLineŚExprr2   r   r   r   r(   r)   r   r   ŚMatchMetadatar   ŚPositionProviderr   r   r%   r/   r*   r   )r   rD   Śwrapperr,   r-   r5   r   r   r   Śtest_extract_metadata¢   st   

žż
žū’’’ņ’ģžż
žū’’’ņ’ģz)MatchersExtractTest.test_extract_metadatac                 C   s   t  d”}t |tjt ” t t tjt 	t t 
” d””t ” gdd””gd”}t  |t j”jd j}|  |d|i” d S )Nr#   r   ©Śargsr$   r   )r   r'   r   r   r   Ś	DoNotCarer(   r   r   ŚArgr   r1   r%   r2   r*   r4   r   r   r   Śtest_extract_precedence_parentą   s(   
ž’ł’ž’žz2MatchersExtractTest.test_extract_precedence_parentc                 C   s   t  d”}t |tjt ” t tjt t 	t ” d””t t 	t ” d””gd”gd”}t  
t  
|t j”jd jt j”jd j}|  |d|i” d S ©Nr#   ŚargrL   r$   r   )r   r'   r   r   r   rN   r(   r   rO   r   r1   r%   r2   rM   r*   r4   r   r   r   Ś test_extract_precedence_sequenceų   s.   
ž’’ž’ž’żūz4MatchersExtractTest.test_extract_precedence_sequencec                 C   s   t  d”}t |tjt ” t tjt t 	t 
t ” d”””gd”gd”}t  t  |t j”jd jt j”jd j}|  |d|i” d S rQ   )r   r'   r   r   r   rN   r(   r   Ś
ZeroOrMorerO   r   r1   r%   r2   rM   r*   r4   r   r   r   Ś)test_extract_precedence_sequence_wildcard  s0   
’’’’ž’ž’żūz=MatchersExtractTest.test_extract_precedence_sequence_wildcardc                 C   sd   t  d”}t |tjt ” t tjt ” t 	t 
t t ” d”””gd”gd”}|  |i ” d S )Nr#   rR   rL   r$   )r   r'   r   r   r   rN   r(   r   rT   Ś	ZeroOrOnerO   r   r<   r*   r+   r   r   r   Śtest_extract_optional_wildcard/  s$   
’ž’’ž’žz2MatchersExtractTest.test_extract_optional_wildcardc              
   C   sb   t  d”}t |tjt t ” d”t t ” d”tjtjdddgd”}|  	|ddd” d S )	Nś[3]Śhead1Śhead2Ś3©r2   r$   r   )rY   rZ   )
r   r'   r   r   ŚListr   rT   r(   ŚIntegerr*   r+   r   r   r   Ś#test_extract_optional_wildcard_headE  s   
ż’ž
z7MatchersExtractTest.test_extract_optional_wildcard_headc              
   C   sb   t  d”}t |tjtjtjdddt t ” d”t t ” d”gd”}|  	|ddd” d S )	NrX   r[   r\   Śtail1Śtail2r$   r   )r`   ra   )
r   r'   r   r   r]   r(   r^   r   rT   r*   r+   r   r   r   Ś#test_extract_optional_wildcard_tailS  s   
ż’ž
z7MatchersExtractTest.test_extract_optional_wildcard_tailc                 C   s   t  d”}t |tjt ” t tjt ” t ” t t 	t 
t ” d”””gd”gd”}t  t  |t j”jd jt j”jd j}|  |d|i” d S )Nśa + b[c], d(e, f * g, h.i.j)rR   rL   r$   r   rA   )r   r'   r   r   r   rN   r(   r   rV   rO   r   r<   r1   r%   r2   rM   r*   r4   r   r   r   Ś&test_extract_optional_wildcard_presenta  s4   
’ż’’ž’ž’żūz:MatchersExtractTest.test_extract_optional_wildcard_presentc                 C   sx   t  d”}t |tjt ” t tjt t 	” gd”d”gd”}t  
t  
|t j”jd jt j”j}|  |d|i” d S ©Nrc   rM   rL   r$   r   )r   r'   r   r   r   rN   r(   r   r   rT   r1   r%   r2   rM   r*   ©r   r,   r-   Śextracted_seqr   r   r   Śtest_extract_sequence  s   
ž’ž	’žz)MatchersExtractTest.test_extract_sequencec                 C   sŹ   t  d”}t |tjt ” t tjt t 	” d”gd”gd”}t
t  t  |t j”jd jt j”j}|  |d|i” t |tjt ” t tjt t 	t t ” ””d”gd”gd”}|  |” d S re   )r   r'   r   r   r   rN   r(   r   r   rT   Śtupler1   r%   r2   rM   r*   rO   r3   r   rf   r   r   r   Śtest_extract_sequence_element  s@   
ž’ž	’ż’’’’ž’žz1MatchersExtractTest.test_extract_sequence_elementc                 C   s   t  d”}t |tjt t ” d”t tjtjdddd”t t ” d”fd”}t  	|t j”j
}|  |t|d d |d t|d	d  d
” d S )Nz
1, 2, 3, 4Śheadr[   r\   ŚelementŚtailr$   rA   é   )rk   rl   rm   )r   r'   r   r   r   r   rT   r(   r^   r1   r%   r*   ri   )r   r,   r-   Śtuple_elementsr   r   r   Ś(test_extract_sequence_multiple_wildcards¶  s$   
ż’ž
żžz<MatchersExtractTest.test_extract_sequence_multiple_wildcards)r   N)Ś__name__Ś
__module__Ś__qualname__r   Śintr   r   r   r"   r.   r6   r:   r>   rK   rP   rS   rU   rW   r_   rb   rd   rh   rj   rp   r   r   r   r   r      s0    
’
’
ž



"

9
>







'r   )Śtypingr   Ślibcstr   Ślibcst.matchersŚmatchersr   Ślibcst.metadatar?   r   Ślibcst.testing.utilsr   r   r   r   r   r   Ś<module>   s   