U
    Ùf,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rêe ¡  dS )zTests for import_utils.é    )Úabsolute_import)Údivision)Úprint_functionN)Úimport_utils)Ú	ast_utils)Ú
test_utils)Úscopec                   @   s4   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   s   g | ]
}|j ‘qS © ©Úname©Ú.0Úaliasr   r   úF/tmp/pip-target-lpfmz8o1/lib/python/pasta/augment/import_utils_test.pyÚ
<listcomp>+   s     z<SplitImportTest.test_split_normal_import.<locals>.<listcomp>ÚaaaÚcccc                 S   s   g | ]
}|j ‘qS r   r   r   r   r   r   r   ,   s     Ú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   s   g | ]
}|j ‘qS r   r   r   r   r   r   r   9   s     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   s   g | ]
}|j ‘qS r   r   r   r   r   r   r   C   s     zASplitImportTest.test_split_imports_with_alias.<locals>.<listcomp>r   r   c                 S   s   g | ]
}|j ‘qS r   r   r   r   r   r   r   D   s     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   s   g | ]
}|j ‘qS r   r   r   r   r   r   r   R   s     z?SplitImportTest.test_split_imports_multiple.<locals>.<listcomp>r   c                 S   s   g | ]
}|j ‘qS r   r   r   r   r   r   r   S   s     r   c                 S   s   g | ]
}|j ‘qS r   r   r   r   r   r   r   T   s     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 ]à}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X 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   s   g | ]
}|j ‘qS r   r   r   r   r   r   r   p   s     z=SplitImportTest.test_split_nested_imports.<locals>.<listcomp>r   r   c                 S   s   g | ]
}|j ‘qS r   r   r   r   r   r   r   r   s     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+   r.   r0   r5   r   r   r   r   r	       s
   r	   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú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   s2   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   s2   d}t  |¡}|  t |¡|jd jd g¡ d S )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)r6   r7   r8   r?   r@   rA   rB   rC   r   r   r   r   r9   x   s
   
	r9   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚRemoveImportTestc                 C   s”   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$   r>   r'   Zunused_b_noder   r   r   Útest_remove_just_alias·   s    

z'RemoveImportTest.test_remove_just_aliasc                 C   s”   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from m import a, br   r   rE   )r   r   r   r   r   r   r   rF   r   r   r!   r)   r   rG   r   r   r   Ú"test_remove_just_alias_import_fromÅ   s    

z3RemoveImportTest.test_remove_just_alias_import_fromc                 C   sJ   d}t  |¡}t |¡}|jd jd }t ||¡ |  t	|jƒd¡ d S )Nzimport ar   ©
r   r   r   r   r   r   r   rF   r   r   ©r#   r$   r>   r'   Za_noder   r   r   Útest_remove_full_importÓ   s    

z(RemoveImportTest.test_remove_full_importc                 C   sJ   d}t  |¡}t |¡}|jd jd }t ||¡ |  t	|jƒd¡ d S )Nzfrom m import ar   rJ   rK   r   r   r   Útest_remove_full_importfromÞ   s    

z,RemoveImportTest.test_remove_full_importfromN)r6   r7   r8   rH   rI   rL   rM   r   r   r   r   rD   ³   s   rD   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   s8   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#   r>   r   r   r   Útest_add_normal_importì   s
    
ÿz$AddImportTest.test_add_normal_importc              	   C   s:   t  d¡}|  dtj|dddd¡ |  dt |¡¡ d S )NrO   ÚdrP   F©r-   rR   zimport a.b.c as d
rT   rW   r   r   r   Ú"test_add_normal_import_with_asnameò   s    
þz0AddImportTest.test_add_normal_import_with_asnamec                 C   s8   t  d¡}|  dtj|ddd¡ |  dt |¡¡ d S )NrO   ÚcrP   TrQ   úfrom a.b import c
rT   rW   r   r   r   Útest_add_from_importú   s
    
ÿz"AddImportTest.test_add_from_importc              	   C   s:   t  d¡}|  dtj|dddd¡ |  dt |¡¡ d S )NrO   rY   rP   TrZ   úfrom a.b import c as d
rT   rW   r   r   r   Ú test_add_from_import_with_asname   s    
þz.AddImportTest.test_add_from_import_with_asnamec                 C   s8   t  d¡}|  dtj|ddd¡ |  dt |¡¡ d S )NrO   ÚfooTrQ   zimport foo
rT   rW   r   r   r   Ú test_add_single_name_from_import  s
    
ÿz.AddImportTest.test_add_single_name_from_importc              	   C   s:   t  d¡}|  dtj|dddd¡ |  dt |¡¡ d S )NrO   Úbarra   TrZ   zimport foo as bar
rT   rW   r   r   r   Ú,test_add_single_name_from_import_with_asname  s    
þz:AddImportTest.test_add_single_name_from_import_with_asnamec                 C   s4   t  d¡}|  dt |d¡¡ |  dt |¡¡ d S )Núfrom a.b import cr\   rP   r]   rT   rW   r   r   r   Útest_add_existing_import  s    
z&AddImportTest.test_add_existing_importc                 C   s4   t  d¡}|  dt |d¡¡ |  dt |¡¡ d S )Núfrom a.b import c as drY   rP   r_   rT   rW   r   r   r   Ú test_add_existing_import_aliased  s    
z.AddImportTest.test_add_existing_import_aliasedc                 C   s8   t  d¡}|  dtj|ddd¡ |  dt |¡¡ d S )Nrg   rY   rP   Úe)r-   r_   rT   rW   r   r   r   Ú,test_add_existing_import_aliased_with_asname   s    
z:AddImportTest.test_add_existing_import_aliased_with_asnamec                 C   s8   t  d¡}|  dtj|ddd¡ |  dt |¡¡ d S )Nzimport a.b.cúa.bFrQ   rS   rT   rW   r   r   r   Ú&test_add_existing_import_normal_import%  s
    
ÿ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 drk   FrQ   rY   rP   zimport a.b
import a.b.c as d
rT   rW   r   r   r   Ú.test_add_existing_import_normal_import_aliased+  s    
ÿÿz<AddImportTest.test_add_existing_import_normal_import_aliasedc                 C   s8   t  d¡}|  dtj|ddd¡ |  dt |¡¡ d S )Núdef c(): pass
Úc_1rP   TrQ   z)from a.b import c as c_1
def c():
  pass
rT   rW   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 )Nrn   ro   rk   r\   TrZ   z'from a import b as c_1
def c():
  pass
rT   rW   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 )Nre   Ú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
rT   rW   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.'rE   z'Docstring.'
import a
rT   rW   r   r   r   Útest_add_import_after_docstringP  s    
z-AddImportTest.test_add_import_after_docstringN)r6   r7   r8   rX   r[   r^   r`   rb   rd   rf   rh   rj   rl   rm   rp   rq   rt   ru   r   r   r   r   rN   ê   s   rN   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú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   rE   r   r,   r   r\   r/   rY   ©
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
r/   r   r   rE   r   r,   r\   rY   ri   Úfrx   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   r/   rE   r,   r   r\   rx   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   rz   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
r/   r   r   Zaxr   Zax2)
r   r   ry   r   rz   r   r   r   r   r-   r=   r   r   r   Útest_remove_duplicates_aliases“  s    
z3RemoveDuplicatesTest.test_remove_duplicates_aliasesN)r6   r7   r8   r{   r}   r~   r   r€   r   r   r   r   rv   V  s
   	rv   c                  C   s\   t  ¡ } |  t  t¡¡ |  t  t¡¡ |  t  t¡¡ |  t  t¡¡ |  t  t¡¡ | S )N)	ÚunittestZ	TestSuiteZaddTestsZ	makeSuiter	   r9   rD   rN   rv   )Úresultr   r   r   Úsuite¢  s    rƒ   Ú__main__)Ú__doc__Ú
__future__r   r   r   r   r2   r   rU   Zpasta.augmentr   Z
pasta.baser   r   r   ZTestCaser	   r9   rD   rN   rv   rƒ   r6   Úmainr   r   r   r   Ú<module>   s&   X;7lL	