o
    ¶2úh,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   úZ/var/www/html/chatgem/venv/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   Ú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)   Ú	alias_bbbÚ	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)Ú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   Úfind_nodes_by_typer#   r   r   r    r!   r"   r   ÚfailÚ	tracebackÚ
format_exc)r&   Ú
test_casesÚtemplater'   r(   r*   r)   Úsplit_import_nodesr   r   r   Útest_split_nested_importsV   s,   

ÿÿ

ÿðz)SplitImportTest.test_split_nested_importsN)Ú__name__Ú
__module__Ú__qualname__r+   r/   r2   r6   r@   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   rE   rH   r   r   r   Útest_import_from„   s
   
ÿz%GetUnusedImportsTest.test_import_fromc                 C   rK   )Nz#from my_module import a, b
b.foo()
r   rE   rH   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   rE   rH   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   rF   r   rG   rH   r   r   r   Útest_dynamic_import¥   s
   
ÿz(GetUnusedImportsTest.test_dynamic_importN)rA   rB   rC   rJ   rL   rM   rN   rO   r   r   r   r   rD   x   s    
	rD   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'   rI   r*   Úunused_b_noder   r   r   Útest_remove_just_alias·   ó   

z'RemoveImportTest.test_remove_just_aliasc                 C   rQ   )Nzfrom m import a, br   r   rR   )r   r   r   r   r   r    r   rS   r!   r"   r$   r-   r   rT   r   r   r   Ú"test_remove_just_alias_import_fromÅ   rW   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   rS   r!   r"   ©r&   r'   rI   r*   Úa_noder   r   r   Útest_remove_full_importÓ   ó   

z(RemoveImportTest.test_remove_full_importc                 C   rY   )Nzfrom m import ar   rZ   r[   r   r   r   Útest_remove_full_importfromÞ   r^   z,RemoveImportTest.test_remove_full_importfromN)rA   rB   rC   rV   rX   r]   r_   r   r   r   r   rP   ³   s
    rP   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   Ú
add_importÚpastaÚdump©r&   rI   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 )Nrb   Údrc   F©r1   re   zimport a.b.c as d
rg   rk   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 )Nrb   Úcrc   Trd   úfrom a.b import c
rg   rk   r   r   r   Útest_add_from_importú   rm   z"AddImportTest.test_add_from_importc              	   C   rn   )Nrb   ro   rc   Trp   úfrom a.b import c as d
rg   rk   r   r   r   Ú test_add_from_import_with_asname   rr   z.AddImportTest.test_add_from_import_with_asnamec                 C   ra   )Nrb   ÚfooTrd   zimport foo
rg   rk   r   r   r   Ú test_add_single_name_from_import  rm   z.AddImportTest.test_add_single_name_from_importc              	   C   rn   )Nrb   Úbarry   Trp   zimport foo as bar
rg   rk   r   r   r   Ú,test_add_single_name_from_import_with_asname  rr   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 crt   rc   ru   rg   rk   r   r   r   Útest_add_existing_import  ó   
z&AddImportTest.test_add_existing_importc                 C   r}   )Núfrom a.b import c as dro   rc   rw   rg   rk   r   r   r   Ú test_add_existing_import_aliased  r€   z.AddImportTest.test_add_existing_import_aliasedc                 C   rs   )Nr   ro   rc   Úe)r1   rw   rg   rk   r   r   r   Ú,test_add_existing_import_aliased_with_asname   s   
z:AddImportTest.test_add_existing_import_aliased_with_asnamec                 C   ra   )Nzimport a.b.cúa.bFrd   rf   rg   rk   r   r   r   Ú&test_add_existing_import_normal_import%  rm   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 dr…   Frd   ro   rc   zimport a.b
import a.b.c as d
rg   rk   r   r   r   Ú.test_add_existing_import_normal_import_aliased+  s   
ÿÿz<AddImportTest.test_add_existing_import_normal_import_aliasedc                 C   rs   )Núdef c(): pass
Úc_1rc   Trd   z)from a.b import c as c_1
def c():
  pass
rg   rk   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‰   r…   rt   Trp   z'from a import b as c_1
def c():
  pass
rg   rk   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 )Nr~   Úxza.b.xF)Ú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
rg   rk   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.'rR   z'Docstring.'
import a
rg   rk   r   r   r   Útest_add_import_after_docstringP  r€   z-AddImportTest.test_add_import_after_docstringN)rA   rB   rC   rl   rq   rv   rx   rz   r|   r   r‚   r„   r†   r‡   rŠ   r‹   r   r   r   r   r   r   r`   ê   s     r`   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   rR   r   r0   r   rt   r3   ro   ©
r   r   Ú
assertTruer   Úremove_duplicatesr!   r"   r   r    r   rH   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
r3   r   r   rR   r   r0   rt   ro   rƒ   Úfr“   rH   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   r3   rR   r0   r   rt   r“   rH   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   ÚassertFalser   r•   r!   r"   r   rH   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
r3   r   r   Úaxr   Úax2)
r   r   r”   r   r•   r!   r"   r   r    r1   rH   r   r   r   Útest_remove_duplicates_aliases“  s   
z3RemoveDuplicatesTest.test_remove_duplicates_aliasesN)rA   rB   rC   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)	ÚunittestÚ	TestSuiteÚaddTestsÚ	makeSuiter
   rD   rP   r`   r‘   )Úresultr   r   r   Úsuite¢  s   r¤   Ú__main__)Ú__doc__Ú
__future__r   r   r   r   r;   rŸ   ri   Úpasta.augmentr   Ú
pasta.baser   r   r   ÚTestCaser
   rD   rP   r`   r‘   r¤   rA   Úmainr   r   r   r   Ú<module>   s*   X;7lL	ÿ