o
    ”7?e,9  ã                   @   sò   d Z ddlmZ ddlmZ ddlmZ ddlZddlZddl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jƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZdd„ Zedkrwe ¡  dS dS )zTests for import_utils.é    )Úabsolute_import)Údivision)Úprint_functionN)Úimport_utils)Ú	ast_utils)Ú
test_utils)Úscopec                   @   ó4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚSplitImportTestc                 C   s¦   d}t  |¡}|jd }t |¡}t |||jd ¡ |  dt	|jƒ¡ |  t j
t|jd ƒ¡ |  dd„ |jd jD ƒddg¡ |  d	d„ |jd jD ƒd
g¡ d S )Núimport aaa, bbb, ccc
r   é   é   c                 S   ó   g | ]}|j ‘qS © ©Úname©Ú.0Úaliasr   r   ú`/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/pasta/augment/import_utils_test.pyÚ
<listcomp>+   ó    z<SplitImportTest.test_split_normal_import.<locals>.<listcomp>ÚaaaÚcccc                 S   r   r   r   r   r   r   r   r   ,   r   Úbbb)ÚastÚparseÚbodyr   Úanalyzer   Úsplit_importÚnamesÚassertEqualÚlenÚImportÚtype©ÚselfÚsrcÚtÚimport_nodeÚscr   r   r   Útest_split_normal_import"   s   


"$z(SplitImportTest.test_split_normal_importc                 C   s®   d}t  |¡}|jd }t |¡}t |||jd ¡ |  dt	|jƒ¡ |  t j
t|jd ƒ¡ |  |jd jd¡ |  |jd jd¡ |  dd„ |jd jD ƒdd	g¡ d S )
Nzfrom aaa import bbb, ccc, ddd
r   r   r   r   c                 S   r   r   r   r   r   r   r   r   9   r   z:SplitImportTest.test_split_from_import.<locals>.<listcomp>r   Zddd)r   r   r   r   r   r   r   r    r!   r"   Ú
ImportFromr$   Úmoduler%   r   r   r   Útest_split_from_import.   s   


&z&SplitImportTest.test_split_from_importc                 C   s¨   d}t  |¡}|jd }t |¡}t |||jd ¡ |  dt	|jƒ¡ |  dd„ |jd jD ƒddg¡ |  d	d„ |jd jD ƒd
g¡ |  |jd jd j
d¡ d S )Nz$import aaa as a, bbb as b, ccc as c
r   r   r   c                 S   r   r   r   r   r   r   r   r   C   r   zASplitImportTest.test_split_imports_with_alias.<locals>.<listcomp>r   r   c                 S   r   r   r   r   r   r   r   r   D   r   r   Úb)r   r   r   r   r   r   r   r    r!   r"   Úasnamer%   r   r   r   Útest_split_imports_with_alias;   s   


" z-SplitImportTest.test_split_imports_with_aliasc                 C   sÈ   d}t  |¡}|jd }|jd }|jd }t |¡}t |||¡ t |||¡ |  dt	|jƒ¡ |  dd„ |jd jD ƒdg¡ |  d	d„ |jd jD ƒd
g¡ |  dd„ |jd jD ƒdg¡ d S )Nr   r   r   r   é   c                 S   r   r   r   r   r   r   r   r   R   r   z?SplitImportTest.test_split_imports_multiple.<locals>.<listcomp>r   c                 S   r   r   r   r   r   r   r   r   S   r   r   c                 S   r   r   r   r   r   r   r   r   T   r   r   )
r   r   r   r    r   r   r   r   r!   r"   )r&   r'   r(   r)   Z	alias_bbbZ	alias_cccr*   r   r   r   Útest_split_imports_multipleG   s   




  $z+SplitImportTest.test_split_imports_multiplec              
   C   sê   d}|D ]n}z\|j dd}t |¡}t |¡}t |tj¡d }t 	|||j
d ¡ t |tj¡}|  dt|jƒ¡ |  dt|ƒ¡ |  dd„ |d j
D ƒd	d
g¡ |  dd„ |d j
D ƒdg¡ W q   |  d|t ¡ f ¡ Y qd S )N)zdef foo():
  {import_stmt}
z#class Foo(object):
  {import_stmt}
z%if foo:
  {import_stmt}
else:
  pass
z%if foo:
  pass
else:
  {import_stmt}
z)if foo:
  pass
elif bar:
  {import_stmt}
z$try:
  {import_stmt}
except:
  pass
z$try:
  pass
except:
  {import_stmt}
z%try:
  pass
finally:
  {import_stmt}
zfor i in foo:
  {import_stmt}
z+for i in foo:
  pass
else:
  {import_stmt}
zwhile foo:
  {import_stmt}
zimport aaa, bbb, ccc)Zimport_stmtr   r   r   c                 S   r   r   r   r   r   r   r   r   p   r   z=SplitImportTest.test_split_nested_imports.<locals>.<listcomp>r   r   c                 S   r   r   r   r   r   r   r   r   r   r   r   z-Failed while executing case:
%s
Caused by:
%s)Úformatr   r   r   r   r   Zfind_nodes_by_typer#   r   r   r    r!   r"   r   ZfailÚ	tracebackÚ
format_exc)r&   Z
test_casesÚtemplater'   r(   r*   r)   Zsplit_import_nodesr   r   r   Útest_split_nested_importsV   s,   

ÿÿ

ÿðz)SplitImportTest.test_split_nested_importsN)Ú__name__Ú
__module__Ú__qualname__r+   r.   r1   r3   r8   r   r   r   r   r
       s    r
   c                   @   r	   )ÚGetUnusedImportsTestc                 C   s2   d}t  |¡}|  t |¡|jd jd g¡ d S )Nzimport a
import b
a.foo()
r   r   ©r   r   ÚassertItemsEqualr   Úget_unused_import_aliasesr   r    ©r&   r'   Útreer   r   r   Útest_normal_importsz   s
   
ÿz(GetUnusedImportsTest.test_normal_importsc                 C   ó2   d}t  |¡}|  t |¡|jd jd g¡ d S )NzIfrom my_module import a
import b
from my_module import c
b.foo()
c.bar()
r   r=   r@   r   r   r   Útest_import_from„   s
   
ÿz%GetUnusedImportsTest.test_import_fromc                 C   rC   )Nz#from my_module import a, b
b.foo()
r   r=   r@   r   r   r   Útest_import_from_alias   s
   
ÿz+GetUnusedImportsTest.test_import_from_aliasc                 C   s@   d}t  |¡}|  t |¡|jd jd |jd jd g¡ d S )Nzqfrom my_module import a as a_mod, b as unused_b_mod
import c as c_mod, d as unused_d_mod
a_mod.foo()
c_mod.foo()
r   r   r=   r@   r   r   r   Útest_import_asname™   s   
ÿÿz'GetUnusedImportsTest.test_import_asnamec                 C   s$   d}t  |¡}|  t |¡g ¡ d S )Nzdef foo():
  import bar
)r   r   r>   r   r?   r@   r   r   r   Útest_dynamic_import¥   s
   
ÿz(GetUnusedImportsTest.test_dynamic_importN)r9   r:   r;   rB   rD   rE   rF   rG   r   r   r   r   r<   x   s    
	r<   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚRemoveImportTestc                 C   ó”   d}t  |¡}t |¡}|jd jd }t ||¡ |  t	|jƒd¡ |  t
|jd ƒt j¡ |  t	|jd jƒd¡ |  |jd jd jd¡ d S )Nzimport a, br   r   Úa)r   r   r   r   r   r    r   Úremove_import_alias_noder!   r"   r$   r#   r   ©r&   r'   rA   r*   Zunused_b_noder   r   r   Útest_remove_just_alias·   ó   

z'RemoveImportTest.test_remove_just_aliasc                 C   rI   )Nzfrom m import a, br   r   rJ   )r   r   r   r   r   r    r   rK   r!   r"   r$   r,   r   rL   r   r   r   Ú"test_remove_just_alias_import_fromÅ   rN   z3RemoveImportTest.test_remove_just_alias_import_fromc                 C   óJ   d}t  |¡}t |¡}|jd jd }t ||¡ |  t	|jƒd¡ d S )Nzimport ar   ©
r   r   r   r   r   r    r   rK   r!   r"   ©r&   r'   rA   r*   Za_noder   r   r   Útest_remove_full_importÓ   ó   

z(RemoveImportTest.test_remove_full_importc                 C   rP   )Nzfrom m import ar   rQ   rR   r   r   r   Útest_remove_full_importfromÞ   rT   z,RemoveImportTest.test_remove_full_importfromN)r9   r:   r;   rM   rO   rS   rU   r   r   r   r   rH   ³   s
    rH   c                   @   s„   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS ) ÚAddImportTestc                 C   ó8   t  d¡}|  dtj|ddd¡ |  dt |¡¡ d S )NÚ úa.b.cF©Úfrom_importúimport a.b.c
©r   r   r!   r   Z
add_importÚpastaÚdump©r&   rA   r   r   r   Útest_add_normal_importì   ó
   
ÿz$AddImportTest.test_add_normal_importc              	   C   ó:   t  d¡}|  dtj|dddd¡ |  dt |¡¡ d S )NrX   ÚdrY   F©r0   r[   zimport a.b.c as d
r]   r`   r   r   r   Ú"test_add_normal_import_with_asnameò   ó   
þz0AddImportTest.test_add_normal_import_with_asnamec                 C   ó8   t  d¡}|  dtj|ddd¡ |  dt |¡¡ d S )NrX   ÚcrY   TrZ   úfrom a.b import c
r]   r`   r   r   r   Útest_add_from_importú   rb   z"AddImportTest.test_add_from_importc              	   C   rc   )NrX   rd   rY   Tre   úfrom a.b import c as d
r]   r`   r   r   r   Ú test_add_from_import_with_asname   rg   z.AddImportTest.test_add_from_import_with_asnamec                 C   rW   )NrX   ÚfooTrZ   zimport foo
r]   r`   r   r   r   Ú test_add_single_name_from_import  rb   z.AddImportTest.test_add_single_name_from_importc              	   C   rc   )NrX   Úbarrn   Tre   zimport foo as bar
r]   r`   r   r   r   Ú,test_add_single_name_from_import_with_asname  rg   z:AddImportTest.test_add_single_name_from_import_with_asnamec                 C   ó4   t  d¡}|  dt |d¡¡ |  dt |¡¡ d S )Núfrom a.b import cri   rY   rj   r]   r`   r   r   r   Útest_add_existing_import  ó   
z&AddImportTest.test_add_existing_importc                 C   rr   )Núfrom a.b import c as drd   rY   rl   r]   r`   r   r   r   Ú test_add_existing_import_aliased  ru   z.AddImportTest.test_add_existing_import_aliasedc                 C   rh   )Nrv   rd   rY   Úe)r0   rl   r]   r`   r   r   r   Ú,test_add_existing_import_aliased_with_asname   s   
z:AddImportTest.test_add_existing_import_aliased_with_asnamec                 C   rW   )Nzimport a.b.cúa.bFrZ   r\   r]   r`   r   r   r   Ú&test_add_existing_import_normal_import%  rb   z4AddImportTest.test_add_existing_import_normal_importc                 C   sP   t  d¡}|  dtj|ddd¡ |  dtj|ddd¡ |  dt |¡¡ d S )Nzimport a.b.c as drz   FrZ   rd   rY   zimport a.b
import a.b.c as d
r]   r`   r   r   r   Ú.test_add_existing_import_normal_import_aliased+  s   
ÿÿz<AddImportTest.test_add_existing_import_normal_import_aliasedc                 C   rh   )Núdef c(): pass
Úc_1rY   TrZ   z)from a.b import c as c_1
def c():
  pass
r]   r`   r   r   r   Útest_add_import_with_conflict3  s   
ÿ
ÿz+AddImportTest.test_add_import_with_conflictc              	   C   s:   t  d¡}|  dtj|dddd¡ |  dt |¡¡ d S )Nr}   r~   rz   ri   Tre   z'from a import b as c_1
def c():
  pass
r]   r`   r   r   r   Ú)test_add_import_with_asname_with_conflict:  s   
ÿ
ÿz7AddImportTest.test_add_import_with_asname_with_conflictc                 C   sb   t  d¡}|  dtj|ddd¡ |  dt |¡¡ |  dtj|dd	d¡ |  d
t |¡¡ d S )Nrs   Úxza.b.xF)Zmerge_from_importsz$from a.b import x
from a.b import c
Úyza.b.yTz'from a.b import x, y
from a.b import c
r]   r`   r   r   r   Útest_merge_from_importA  s   
ÿÿÿÿz$AddImportTest.test_merge_from_importc                 C   s4   t  d¡}|  dt |d¡¡ |  dt |¡¡ d S )Nz'Docstring.'rJ   z'Docstring.'
import a
r]   r`   r   r   r   Útest_add_import_after_docstringP  ru   z-AddImportTest.test_add_import_after_docstringN)r9   r:   r;   ra   rf   rk   rm   ro   rq   rt   rw   ry   r{   r|   r   r€   rƒ   r„   r   r   r   r   rV   ê   s     rV   c                   @   r	   )ÚRemoveDuplicatesTestc                 C   sœ   d}t  |¡}|  t |¡¡ |  t|jƒd¡ |  |jd jd j	d¡ |  |jd jd j	d¡ |  |jd jd j	d¡ |  |jd	 jd j	d
¡ d S )Nz.
import a
import b
import c
import b
import d
é   r   rJ   r   r/   r   ri   r2   rd   ©
r   r   Ú
assertTruer   Úremove_duplicatesr!   r"   r   r    r   r@   r   r   r   Útest_remove_duplicatesW  s   
z+RemoveDuplicatesTest.test_remove_duplicatesc                 C   s  d}t  |¡}|  t |¡¡ |  t|jƒd¡ |  t|jd jƒd¡ |  |jd jd j	d¡ |  |jd jd j	d¡ |  t|jd jƒd¡ |  |jd jd j	d¡ |  t|jd jƒd¡ |  |jd jd j	d	¡ |  |jd jd j	d
¡ |  |jd jd j	d¡ d S )Nz+
import a, b
import b, c
import d, a, e, f
r2   r   r   rJ   r   r/   ri   rd   rx   Úfr‡   r@   r   r   r   Útest_remove_duplicates_multipleh  s   
z4RemoveDuplicatesTest.test_remove_duplicates_multiplec                 C   sš   d}t  |¡}|  t |¡¡ |  t|jƒd¡ |  t|jd jƒd¡ |  |jd jd j	d¡ |  |jd jd j	d¡ |  |jd jd j	d¡ d S )	Nz
import a, b, c
import b, c
r   r   r2   rJ   r/   r   ri   r‡   r@   r   r   r   Ú!test_remove_duplicates_empty_node|  s   
z6RemoveDuplicatesTest.test_remove_duplicates_empty_nodec                 C   s4   d}t  |¡}|  t |¡¡ |  t|jƒd¡ d S )Nz
import a.b
from a import b
r   )r   r   ZassertFalser   r‰   r!   r"   r   r@   r   r   r   Ú&test_remove_duplicates_normal_and_fromŠ  s   
z;RemoveDuplicatesTest.test_remove_duplicates_normal_and_fromc                 C   s‚   d}t  |¡}|  t |¡¡ |  t|jƒd¡ |  |jd jd j	d ¡ |  |jd jd j	d¡ |  |jd jd j	d¡ d S )Nz8
import a
import a as ax
import a as ax2
import a as ax
r2   r   r   Úaxr   Zax2)
r   r   rˆ   r   r‰   r!   r"   r   r    r0   r@   r   r   r   Útest_remove_duplicates_aliases“  s   
z3RemoveDuplicatesTest.test_remove_duplicates_aliasesN)r9   r:   r;   rŠ   rŒ   r   rŽ   r   r   r   r   r   r…   V  s    	r…   c                  C   s\   t  ¡ } |  t  t¡¡ |  t  t¡¡ |  t  t¡¡ |  t  t¡¡ |  t  t¡¡ | S )N)	ÚunittestZ	TestSuiteZaddTestsZ	makeSuiter
   r<   rH   rV   r…   )Úresultr   r   r   Úsuite¢  s   r“   Ú__main__)Ú__doc__Ú
__future__r   r   r   r   r5   r‘   r^   Zpasta.augmentr   Z
pasta.baser   r   r   ZTestCaser
   r<   rH   rV   r…   r“   r9   Úmainr   r   r   r   Ú<module>   s*   X;7lL	ÿ