
    1Vh,9                        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ej                        Z G d dej                        Z G d dej                        Z G d dej                        Z G d dej                        Zd Zedk(  r ej.                          yy)zTests for import_utils.    )absolute_import)division)print_functionN)import_utils)	ast_utils)
test_utils)scopec                   *    e Zd Zd Zd Zd Zd Zd Zy)SplitImportTestc                    d}t        j                  |      }|j                  d   }t        j                  |      }t        j                  |||j                  d          | j                  dt        |j                               | j                  t         j                  t        |j                  d                | j                  |j                  d   j                  D cg c]  }|j                   c}ddg       | j                  |j                  d   j                  D cg c]  }|j                   c}dg       y c c}w c c}w )Nimport aaa, bbb, ccc
r         aaacccbbb)astparsebodyr	   analyzer   split_importnamesassertEquallenImporttypenameselfsrctimport_nodescaliass         O/home/dcms/DCMS/lib/python3.12/site-packages/pasta/augment/import_utils_test.pytest_split_normal_importz(SplitImportTest.test_split_normal_import"   s    
"C		#A&&)K	q	Bb+{/@/@/CDQAFF$SZZaffQi1affQioo>Uejj>OaffQioo>Uejj>H ?>s   !E$Ec                    d}t        j                  |      }|j                  d   }t        j                  |      }t        j                  |||j                  d          | j                  dt        |j                               | j                  t         j                  t        |j                  d                | j                  |j                  d   j                  d       | j                  |j                  d   j                  d       | j                  |j                  d   j                  D cg c]  }|j                   c}ddg       y c c}w )Nzfrom aaa import bbb, ccc, ddd
r   r   r   r   r   ddd)r   r   r   r	   r   r   r   r   r   r   
ImportFromr   moduler   r   s         r%   test_split_from_importz&SplitImportTest.test_split_from_import.   s    
+C		#A&&)K	q	Bb+{/@/@/CDQAFF$S^^T!&&)_5QVVAY%%u-QVVAY%%u-affQioo>Uejj>O>s   3Ec                    d}t        j                  |      }|j                  d   }t        j                  |      }t        j                  |||j                  d          | j                  dt        |j                               | j                  |j                  d   j                  D cg c]  }|j                   c}ddg       | j                  |j                  d   j                  D cg c]  }|j                   c}dg       | j                  |j                  d   j                  d   j                  d       y c c}w c c}w )	Nz$import aaa as a, bbb as b, ccc as c
r   r   r   r   r   r   b)r   r   r   r	   r   r   r   r   r   r   r   asnamer   s         r%   test_split_imports_with_aliasz-SplitImportTest.test_split_imports_with_alias;   s    
1C		#A&&)K	q	Bb+{/@/@/CDQAFF$affQioo>Uejj>OaffQioo>Uejj>HQVVAY__Q'..4 ?>s   +E.Ec                    d}t        j                  |      }|j                  d   }|j                  d   }|j                  d   }t	        j
                  |      }t        j                  |||       t        j                  |||       | j                  dt        |j                               | j                  |j                  d   j                  D cg c]  }|j                   c}dg       | j                  |j                  d   j                  D cg c]  }|j                   c}dg       | j                  |j                  d   j                  D cg c]  }|j                   c}dg       y c c}w c c}w c c}w )	Nr   r   r   r      r   r   r   )r   r   r   r   r	   r   r   r   r   r   r   )r   r    r!   r"   	alias_bbb	alias_cccr#   r$   s           r%   test_split_imports_multiplez+SplitImportTest.test_split_imports_multipleG   s   
"C		#A&&)K!!!$I!!!$I	q	Bb+y9b+y9QAFF$affQioo>Uejj>HaffQioo>Uejj>HaffQioo>Uejj>H ?>>s   E4E9E>c           	      J   d}|D ]`  }	 |j                  d      }t        j                  |      }t        j                  |      }t        j                  |t        j                        d   }t        j                  |||j                  d          t        j                  |t        j                        }| j                  dt        |j                               | j                  dt        |             | j                  |d   j                  D cg c]  }|j                   c}ddg       | j                  |d   j                  D cg c]  }|j                   c}d	g       c y c c}w c c}w #  | j                  d
dt!        j"                                Y xY w)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   r   r   r   zFailed while executing case:
z
Caused by:
)formatr   r   r	   r   r   find_nodes_by_typer   r   r   r   r   r   r   r   fail	traceback
format_exc)	r   
test_casestemplater    r!   r#   r"   split_import_nodesr$   s	            r%   test_split_nested_importsz)SplitImportTest.test_split_nested_importsV   sY   J  11oo*@oAIIcN]]1221cjjA!D!!"k;3D3DQ3GH&99!SZZHCK(C 2342DQ2G2M2MN%**N	)2DQ2G2M2MN%**N	"1 ON1			,,.0 	1s*   DE4E*
$&E4
E/
	E4*
E44+F"N)__name__
__module____qualname__r&   r+   r/   r4   r?        r%   r   r       s    
IP
5I 1rD   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)GetUnusedImportsTestc                     d}t        j                  |      }| j                  t        j                  |      |j
                  d   j                  d   g       y )Nzimport a
import b
a.foo()
r   r   r   r   assertItemsEqualr   get_unused_import_aliasesr   r   r   r    trees      r%   test_normal_importsz(GetUnusedImportsTest.test_normal_importsz   sL    C
 99S>D,@@F99Q<--a013rD   c                     d}t        j                  |      }| j                  t        j                  |      |j
                  d   j                  d   g       y )NzIfrom my_module import a
import b
from my_module import c
b.foo()
c.bar()
r   rH   rK   s      r%   test_import_fromz%GetUnusedImportsTest.test_import_from   sL    C 99S>D,@@F99Q<--a013rD   c                     d}t        j                  |      }| j                  t        j                  |      |j
                  d   j                  d   g       y )Nz#from my_module import a, b
b.foo()
r   rH   rK   s      r%   test_import_from_aliasz+GetUnusedImportsTest.test_import_from_alias   sL    C 99S>D,@@F99Q<--a013rD   c                     d}t        j                  |      }| j                  t        j                  |      |j
                  d   j                  d   |j
                  d   j                  d   g       y )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   rH   rK   s      r%   test_import_asnamez'GetUnusedImportsTest.test_import_asname   sd    C 99S>D,@@F99Q<--a099Q<--a023rD   c                 |    d}t        j                  |      }| j                  t        j                  |      g        y )Nzdef foo():
  import bar
)r   r   rI   r   rJ   rK   s      r%   test_dynamic_importz(GetUnusedImportsTest.test_dynamic_import   s6    C 99S>D,@@FrD   N)r@   rA   rB   rM   rO   rQ   rS   rU   rC   rD   r%   rF   rF   x   s    3
33
3
rD   rF   c                   $    e Zd Zd Zd Zd Zd Zy)RemoveImportTestc                 F   d}t        j                  |      }t        j                  |      }|j                  d   j
                  d   }t        j                  ||       | j                  t        |j                        d       | j                  t        |j                  d         t         j                         | j                  t        |j                  d   j
                        d       | j                  |j                  d   j
                  d   j                  d       y )Nzimport a, br   r   a)r   r   r	   r   r   r   r   remove_import_alias_noder   r   r   r   r   r   r    rL   r#   unused_b_nodes        r%   test_remove_just_aliasz'RemoveImportTest.test_remove_just_alias   s    
C99S>D	t	BIIaL&&q)M))"m<S^Q'T$))A,'4S1++,a0TYYq\''*//5rD   c                 F   d}t        j                  |      }t        j                  |      }|j                  d   j
                  d   }t        j                  ||       | j                  t        |j                        d       | j                  t        |j                  d         t         j                         | j                  t        |j                  d   j
                        d       | j                  |j                  d   j
                  d   j                  d       y )Nzfrom m import a, br   r   rY   )r   r   r	   r   r   r   r   rZ   r   r   r   r)   r   r[   s        r%   "test_remove_just_alias_import_fromz3RemoveImportTest.test_remove_just_alias_import_from   s    
C99S>D	t	BIIaL&&q)M))"m<S^Q'T$))A,'8S1++,a0TYYq\''*//5rD   c                 
   d}t        j                  |      }t        j                  |      }|j                  d   j
                  d   }t        j                  ||       | j                  t        |j                        d       y )Nzimport ar   
r   r   r	   r   r   r   r   rZ   r   r   r   r    rL   r#   a_nodes        r%   test_remove_full_importz(RemoveImportTest.test_remove_full_import   sb    
C99S>D	t	BYYq\"F))"f5S^Q'rD   c                 
   d}t        j                  |      }t        j                  |      }|j                  d   j
                  d   }t        j                  ||       | j                  t        |j                        d       y )Nzfrom m import ar   ra   rb   s        r%   test_remove_full_importfromz,RemoveImportTest.test_remove_full_importfrom   sb    
C99S>D	t	BYYq\"F))"f5S^Q'rD   N)r@   rA   rB   r]   r_   rd   rf   rC   rD   r%   rW   rW      s    66	(	(rD   rW   c                   f    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zy)AddImportTestc                     t        j                  d      }| j                  dt        j                  |dd             | j                  dt        j                  |             y )N a.b.cFfrom_importimport a.b.c
r   r   r   r   
add_importpastadumpr   rL   s     r%   test_add_normal_importz$AddImportTest.test_add_normal_import   sL    99R=DW!,,T7NP%uzz$'78rD   c           	          t        j                  d      }| j                  dt        j                  |ddd             | j                  dt        j                  |             y )Nrj   drk   Fr.   rm   zimport a.b.c as d
ro   rs   s     r%   "test_add_normal_import_with_asnamez0AddImportTest.test_add_normal_import_with_asname   sP    99R=D	dGCUK 	*EJJt,<=rD   c                     t        j                  d      }| j                  dt        j                  |dd             | j                  dt        j                  |             y )Nrj   crk   Trl   from a.b import c
ro   rs   s     r%   test_add_from_importz"AddImportTest.test_add_from_import   sL    99R=DS!,,T7MO*EJJt,<=rD   c           	          t        j                  d      }| j                  dt        j                  |ddd             | j                  dt        j                  |             y )Nrj   rv   rk   Trw   from a.b import c as d
ro   rs   s     r%    test_add_from_import_with_asnamez.AddImportTest.test_add_from_import_with_asname   sP    99R=D	dGCTJ 	/D1ABrD   c                     t        j                  d      }| j                  dt        j                  |dd             | j                  dt        j                  |             y )Nrj   fooTrl   zimport foo
ro   rs   s     r%    test_add_single_name_from_importz.AddImportTest.test_add_single_name_from_import  sK    99R=DU!,,T5dKM^UZZ%56rD   c           	          t        j                  d      }| j                  dt        j                  |ddd             | j                  dt        j                  |             y )Nrj   barr   Trw   zimport foo as bar
ro   rs   s     r%   ,test_add_single_name_from_import_with_asnamez:AddImportTest.test_add_single_name_from_import_with_asname  sP    99R=DdE%TJ 	*EJJt,<=rD   c                     t        j                  d      }| j                  dt        j                  |d             | j                  dt        j                  |             y )Nfrom a.b import crz   rk   r{   ro   rs   s     r%   test_add_existing_importz&AddImportTest.test_add_existing_import  sH    99()DS,11$@A*EJJt,<=rD   c                     t        j                  d      }| j                  dt        j                  |d             | j                  dt        j                  |             y )Nfrom a.b import c as drv   rk   r~   ro   rs   s     r%    test_add_existing_import_aliasedz.AddImportTest.test_add_existing_import_aliased  sH    99-.DS,11$@A/D1ABrD   c                     t        j                  d      }| j                  dt        j                  |dd             | j                  dt        j                  |             y )Nr   rv   rk   e)r.   r~   ro   rs   s     r%   ,test_add_existing_import_aliased_with_asnamez:AddImportTest.test_add_existing_import_aliased_with_asname   sJ    99-.DS,11$LM/D1ABrD   c                     t        j                  d      }| j                  dt        j                  |dd             | j                  dt        j                  |             y )Nzimport a.b.ca.bFrl   rn   ro   rs   s     r%   &test_add_existing_import_normal_importz4AddImportTest.test_add_existing_import_normal_import%  sM    99^$DU!,,T5eLN%uzz$'78rD   c                    t        j                  d      }| j                  dt        j                  |dd             | j                  dt        j                  |dd             | j                  dt        j                  |             y )Nzimport a.b.c as dr   Frl   rv   rk   zimport a.b
import a.b.c as d
ro   rs   s     r%   .test_add_existing_import_normal_import_aliasedz<AddImportTest.test_add_existing_import_normal_import_aliased+  sq    99()DU!,,T5eLNS!,,T7NP6

48HIrD   c                     t        j                  d      }| j                  dt        j                  |dd             | j                  dt        j                  |             y )Ndef c(): pass
c_1rk   Trl   z)from a.b import c as c_1
def c():
  pass
ro   rs   s     r%   test_add_import_with_conflictz+AddImportTest.test_add_import_with_conflict3  sQ    99&'DU!,,T7MO6

48HJrD   c           	          t        j                  d      }| j                  dt        j                  |ddd             | j                  dt        j                  |             y )Nr   r   r   rz   Trw   z'from a import b as c_1
def c():
  pass
ro   rs   s     r%   )test_add_import_with_asname_with_conflictz7AddImportTest.test_add_import_with_asname_with_conflict:  sT    99&'DU!,,T5RVWY4ejj6FHrD   c                 b   t        j                  d      }| j                  dt        j                  |dd             | j                  dt        j                  |             | j                  dt        j                  |dd	             | j                  d
t        j                  |             y )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
ro   rs   s     r%   test_merge_from_importz$AddImportTest.test_merge_from_importA  s    99()D 	S,11$EJL M=ZZ%' 	S,11$EIK L@ZZ%'rD   c                     t        j                  d      }| j                  dt        j                  |d             | j                  dt        j                  |             y )Nz'Docstring.'rY   z'Docstring.'
import a
ro   rs   s     r%   test_add_import_after_docstringz-AddImportTest.test_add_import_after_docstringP  sH    99%&DS,11$<=15::d3CDrD   N)r@   rA   rB   rt   rx   r|   r   r   r   r   r   r   r   r   r   r   r   r   rC   rD   r%   rh   rh      sT    9>>C7>>
C
C
9JJH'ErD   rh   c                   *    e Zd Zd Zd Zd Zd Zd Zy)RemoveDuplicatesTestc                 t   d}t        j                  |      }| j                  t        j                  |             | j                  t        |j                        d       | j                  |j                  d   j                  d   j                  d       | j                  |j                  d   j                  d   j                  d       | j                  |j                  d   j                  d   j                  d       | j                  |j                  d	   j                  d   j                  d
       y )Nz.
import a
import b
import c
import b
import d
   r   rY   r   r-   r   rz   r1   rv   
r   r   
assertTruer   remove_duplicatesr   r   r   r   r   rK   s      r%   test_remove_duplicatesz+RemoveDuplicatesTest.test_remove_duplicatesW  s    C 99S>DOOL22489S^Q'TYYq\''*//5TYYq\''*//5TYYq\''*//5TYYq\''*//5rD   c                 x   d}t        j                  |      }| j                  t        j                  |             | j                  t        |j                        d       | j                  t        |j                  d   j                        d       | j                  |j                  d   j                  d   j                  d       | j                  |j                  d   j                  d   j                  d       | j                  t        |j                  d   j                        d       | j                  |j                  d   j                  d   j                  d       | j                  t        |j                  d   j                        d       | j                  |j                  d   j                  d   j                  d	       | j                  |j                  d   j                  d   j                  d
       | j                  |j                  d   j                  d   j                  d       y )Nz+
import a, b
import b, c
import d, a, e, f
r1   r   r   rY   r   r-   rz   rv   r   fr   rK   s      r%   test_remove_duplicates_multiplez4RemoveDuplicatesTest.test_remove_duplicates_multipleh  s   C
 99S>DOOL22489S^Q'S1++,a0TYYq\''*//5TYYq\''*//5S1++,a0TYYq\''*//5S1++,a0TYYq\''*//5TYYq\''*//5TYYq\''*//5rD   c                 l   d}t        j                  |      }| j                  t        j                  |             | j                  t        |j                        d       | j                  t        |j                  d   j                        d       | j                  |j                  d   j                  d   j                  d       | j                  |j                  d   j                  d   j                  d       | j                  |j                  d   j                  d   j                  d       y )	Nz
import a, b, c
import b, c
r   r   r1   rY   r-   r   rz   r   rK   s      r%   !test_remove_duplicates_empty_nodez6RemoveDuplicatesTest.test_remove_duplicates_empty_node|  s    C 99S>DOOL22489S^Q'S1++,a0TYYq\''*//5TYYq\''*//5TYYq\''*//5rD   c                     d}t        j                  |      }| j                  t        j                  |             | j                  t        |j                        d       y )Nz
import a.b
from a import b
r   )r   r   assertFalser   r   r   r   r   rK   s      r%   &test_remove_duplicates_normal_and_fromz;RemoveDuplicatesTest.test_remove_duplicates_normal_and_from  sI    C 99S>D\33D9:S^Q'rD   c                    d}t        j                  |      }| j                  t        j                  |             | j                  t        |j                        d       | j                  |j                  d   j                  d   j                  d        | j                  |j                  d   j                  d   j                  d       | j                  |j                  d   j                  d   j                  d       y )Nz8
import a
import a as ax
import a as ax2
import a as ax
r1   r   r   axr   ax2)
r   r   r   r   r   r   r   r   r   r.   rK   s      r%   test_remove_duplicates_aliasesz3RemoveDuplicatesTest.test_remove_duplicates_aliases  s    C 99S>DOOL22489S^Q'TYYq\''*1148TYYq\''*1148TYYq\''*1159rD   N)r@   rA   rB   r   r   r   r   r   rC   rD   r%   r   r   V  s    6"6(6(:rD   r   c                     t        j                         } | j                  t        j                  t                     | j                  t        j                  t
                     | j                  t        j                  t                     | j                  t        j                  t                     | j                  t        j                  t                     | S )N)	unittest	TestSuiteaddTests	makeSuiter   rF   rW   rh   r   )results    r%   suiter     s    &//($$_56//($$%9:;//($$%567//($$]34//($$%9:;	-rD   __main__)__doc__
__future__r   r   r   r   r:   r   rq   pasta.augmentr   
pasta.baser   r   r	   TestCaser   rF   rW   rh   r   r   r@   mainrC   rD   r%   <module>r      s     '  % 
    &   ! V1j)) V1p7:.. 7v4(z** 4(niEJ'' iEXI::.. I:X z(--/ rD   