o
    DDi4                     @   s   d dl mZmZ d dlmZmZ d dlmZ d dlZ	d dl
mZ d dlmZmZmZmZmZmZmZ d dlmZmZ G dd	 d	eZdS )
    )PathPurePath)AnyOptional)patchN)ensure_type)calculate_module_and_packageget_absolute_module_for_import'get_absolute_module_for_import_or_raise+get_absolute_module_from_package_for_import4get_absolute_module_from_package_for_import_or_raiseinsert_header_commentsModuleNameAndPackage)data_providerUnitTestc                   @   s*  e Zd Zd<ddZeddee dedee ddfd	d
Zeddee dedee ddfddZee	j
e	ddddfe	j
e	e	de	ddddfe	j
e	de	je	dddddfe	j
e	e	de	de	je	dddddffde	j
dedee ddfddZeddeddfddeddfdded d!fdd"ed!d!fdd#ed!d!fd$d%ed d!fd$d&ed!d!ffd'eded(ee ddfd)d*Zed+eddfd,ed-dfd.ed/d0fd1ed2dfd3ed4d5ffd6ed(ee ddfd7d8Zed9d'ededdfd:d;ZdS )=
ModuleTestreturnNc                 C   sl  ddg}g d}ddg}dg}d || | }d || | | }t|}| t||j| d || }d || | }t|}| t||j| d || }d || | }t|}| t||j| |dd d || | }d || | | }t|}| t||j| d |}d || }t|}| t||j| d S )	Nz# INSERT MEz# AND ME)z# First commentz# Another onez# comment 3  zSOME_VARIABLE = 0
   )joincstparse_moduleassertEqualr   codeinsert)selfinserted_commentscomment_linesempty_linesnon_header_lineoriginal_codeexpected_codenode r%   Y/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/helpers/tests/test_module.pytest_insert_header_comments   sN   





z&ModuleTest.test_insert_header_comments)Nfrom a.b import ca.b)x.y.zr)   r*   Nfrom ..w import cN)xfrom ...y import zN)r+   zfrom .....w import cN)r+   from ... import cN)r+   from . import cx.y)r+   from .. import cr.   )r+   from .w import cx.y.w)r+   r-   x.w)r+   from ...w import cwmodule
importfromoutputc                 C   s   t t|tj}t|jdksJ dt |jd tj}| t||| |d u rG| 	t
 t|| W d    d S 1 s@w   Y  d S | t||| d S )Nr    Unexpected number of statements!r   )r   r   parse_statementSimpleStatementLinelenbody
ImportFromr   r	   assertRaises	Exceptionr
   )r   r9   r:   r;   r$   import_noder%   r%   r&   test_get_absolute_moduleJ   s   "
z#ModuleTest.test_get_absolute_module)r(   )x/y/z.pyr)   r*   )x/y/z/__init__.pyr)   r*   r,   )__init__.pyfrom .y import zN)x.pyrI   N)rJ   r/   N)rF   r0   N)rF   r7   N)rG   zfrom .... import cN)rG   zfrom ....w import cN)rF   r1   r2   )rF   r3   r.   )rF   r4   r5   )rF   r-   r6   )rG   r1   r+   )rG   r3   r2   )rG   r0   r.   )rG   r4   zx.y.z.w)rG   r-   r5   )rG   r7   r6   filenamec                 C   s   d }|d urt d|}|j}tt|tj}t|jdks"J dt|jd tj}| 	t
||| |d u rU| t t|| W d    d S 1 sNw   Y  d S | 	t||| d S )N.r   r<   r   )r   packager   r   r=   r>   r?   r@   rA   r   r   rB   rC   r   )r   rK   r:   r;   rM   infor$   rD   r%   r%   r&   %test_get_absolute_module_from_packagep   s,   $

"z0ModuleTest.test_get_absolute_module_from_packagefoo)namebarzfoo.barbaz)rQ   asname
alias_node	full_namealiasc                 C   s    |  |j| |  |j| d S N)r   evaluated_nameevaluated_alias)r   rU   rV   rW   r%   r%   r&   test_importalias_helpers   s   z#ModuleTest.test_importalias_helpers/home/username/rootz/home/username/root/file.pyfiler   /home/username/root/z$/home/username/root/some/dir/file.pyzsome.dir.filezsome.dirz(/home/username/root/some/dir/__init__.pyz(/home/username/root/some/dir/__main__.pyc:/Program Files/!c:/Program Files/some/dir/file.pyz%c:/Program Files/some/dir/__main__.py	repo_rootmodule_and_packagec                 C   s   |  t||| d S rX   )r   r   )r   ra   rK   rb   r%   r%   r&   !test_calculate_module_and_package   s   /
z,ModuleTest.test_calculate_module_and_packagezfoo/foo/__init__.pyzfoo/foo/file.pyzfoo.filezfoo/foo/sub/subfile.pyzfoo.sub.subfilezfoo.subzlibs/bar/bar/thing.pyz	bar.thingznoproj/some/file.pyznoproj.some.fileznoproj.somerel_pathc              	      s   ddddddddiddddddd	d
idddiidiiit d }|jjj dtdtf fdd}td|d | t||| dd| W d    d S 1 sWw   Y  d S )Nhomeuserrootcontentz
subfile.py)rH   file.pysub)pyproject.tomlrP   rR   )rH   zthing.py)rk   rR   someri   )rP   libsnoprojz/home/user/rootpathr   c                    s6   |   j}}|D ]}|| }d u r dS q
dS )NFT)relative_topartsget)ro   rq   subtreepart	fake_root	mock_treer%   r&   mock_exists7  s   zVModuleTest.test_calculate_module_and_package_using_pyproject_toml.<locals>.mock_existszpathlib.Path.exists)newT)use_pyproject_toml)r   resolveparentr   boolr   r   r   )r   rd   rb   ra   rx   r%   ru   r&   6test_calculate_module_and_package_using_pyproject_toml   sH   
 

"zAModuleTest.test_calculate_module_and_package_using_pyproject_toml))r\   /some/dummy/file.py)r^   r   )r\   z/home/username/file.py)r_   z!d:/Program Files/some/dir/file.py)zc:/Program Files/other/r`   c                 C   s:   |  t t|| W d    d S 1 sw   Y  d S rX   )rB   
ValueErrorr   )r   ra   rK   r%   r%   r&   test_invalid_module_and_packageG  s   "z*ModuleTest.test_invalid_module_and_package)r   N)__name__
__module____qualname__r'   r   r   strrE   rO   r   ImportAliasName	AttributeAsNamer[   r   rc   r~   r   r%   r%   r%   r&   r      s    
1)
8r   )pathlibr   r   typingr   r   unittest.mockr   libcstr   libcst.helpers.commonr   libcst.helpers.moduler   r	   r
   r   r   r   r   libcst.testing.utilsr   r   r   r%   r%   r%   r&   <module>   s   $	