o
    û›hy>  ã                   @   sš  d Z ddl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mZ ddlmZ ddlZddlmZ ddlZddlmZ dd	lmZ dd
lmZmZmZ ddlmZ ddlmZ zddlZW n1 e y—   ddl!Z!dZ"e! #e"¡ej$e"< zddlZW n e y”   ddl%Zd\e_&e_'Y nw Y nw ej(Z)e *¡ Z+ee+dƒZ,dd„ Z-dd„ Z.ej/dd„ ƒZ0ej1 2d¡Z3ee3dd„ ƒƒZ4ee3dd„ ƒƒZ5ee3dd„ ƒƒZ6e3dd„ ƒZ7ee3dd„ ƒƒZ8ee3d d!„ ƒƒZ9e3d"d#„ ƒZ:e3d$d%„ ƒZ;e3d&d'„ ƒZ<e3d(d)„ ƒZ=d*d+„ Z>ejd,d-„ ƒZ?ejd.d/„ ƒZ@eje3d0d1„ ƒƒZAe3d2d3„ ƒZBed4d5„ ƒZCG d6d7„ d7ejDƒZEej1 Fd8g d9¢¡d:d;„ ƒZGed<d=„ ƒZHG d>d?„ d?ejDƒZIdS )@zTests for IPython.utils.path.pyé    N)Úcontextmanager)Úreload)ÚabspathÚjoin)Úpatch)ÚTemporaryDirectory)Úpaths)Ú
decorators)Úonlyif_unicode_pathsÚskip_if_not_win32Ú
skip_win32)Úmake_tempfile©ÚpathÚwinreg)NNZhome_test_dirc                   C   s   t  t j td¡¡ dS )zJSetup testenvironment for the module:

    - Adds dummy home dir tree
    ÚipythonN)ÚosÚmakedirsr   r   ÚHOME_TEST_DIR© r   r   úSc:\Users\shubh\Videos\agent\nova\Lib\site-packages\IPython/utils/tests/test_path.pyÚsetup_module9   s   r   c                   C   s   t  t¡ dS )zOTeardown testenvironment for the module:

    - Remove dummy home dir tree
    N)ÚshutilÚrmtreeÚTMP_TEST_DIRr   r   r   r   Úteardown_moduleC   s   r   c                  c   sŠ   � t  ¡ tjtjtjtj	t 
¡ fad V  t\} t_t_t_t_	}t |¡ ttƒ tt ƒD ]	}|| vr6t |= q-t  | ¡ ttdƒrCJ ‚d S )NÚfrozen)ÚenvÚcopyr   ÚnameÚsysÚplatformr   Úget_home_dirÚIPythonÚ__file__ÚgetcwdZoldstuffÚchdirr   ÚlistÚupdateÚhasattr)ZoldenvZold_wdÚkeyr   r   r   ÚenvironmentO   s2   €ú		ù
€
r+   c                 C   sB   t  ¡ }| jtdddd� tttdƒƒt_t  ¡ }||ksJ ‚dS )z1Testcase for py2exe logic, un-compressed lib
    r   TF©ZraisingzLib/IPython/__init__.pyN)	r   r"   Úsetattrr    r   r   r   r#   r$   ©ÚmonkeypatchZunfrozenÚhome_dirr   r   r   Útest_get_home_dir_1r   s
   r1   c                 C   sH   t  ¡ }| jtdddd� tttdƒƒ ¡ t_	t  d¡}||ks"J ‚dS )z.Testcase for py2exe logic, compressed lib
    r   TFr,   zLibrary.zip/IPython/__init__.pyN)
r   r"   r-   r    r   r   r   Úlowerr#   r$   r.   r   r   r   Útest_get_home_dir_2�   s   ÿþ
r3   c                  C   s.   t td< t d¡} | tj td ¡ksJ ‚dS )z get_home_dir() uses $HOME if setÚHOMETN)r   r   r   r"   r   Úrealpath)r0   r   r   r   Útest_get_home_dir_3‘   s   
r6   c                  C   s   dt v rt d= t d¡} dS )z.get_home_dir() still works if $HOME is not setr4   FN)r   r   r"   )Úhomer   r   r   Útest_get_home_dir_4›   s   r8   c                 C   s4   t td ƒtd< |  tdd¡ t tjtj	d¡ dS )z@raise HomeDirError if $HOME is specified, but not a writable dirÚgarbager4   r   ÚposixTN)
r   r   r   r-   r   ÚpytestÚraisesr   ZHomeDirErrorr"   ©r/   r   r   r   Útest_get_home_dir_5£   s   r>   c              	   C   s¶   |   tdd¡ dD ]}t |d¡ q	G dd„ dƒ}tjtd|ƒ d��' tjtd	ttƒgd�� t	 
¡ }W d  ƒ n1 s=w   Y  W d  ƒ n1 sLw   Y  |ttƒksYJ ‚dS )
z~Using registry hack for 'My Documents', os=='nt'

    HOMESHARE, HOMEDRIVE, HOMEPATH, USERPROFILE and others are missing.
    r   Únt)r4   Z	HOMESHAREÚ	HOMEDRIVEÚHOMEPATHÚUSERPROFILENc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )z test_get_home_dir_8.<locals>.keyc                 S   ó   d S ©Nr   ©Úselfr   r   r   Ú	__enter__º   ó   z*test_get_home_dir_8.<locals>.key.__enter__c                 S   rC   rD   r   rE   r   r   r   ÚClose¼   rH   z&test_get_home_dir_8.<locals>.key.Closec                  _   rC   rD   r   )ÚargsÚkwargsr   r   r   Ú__exit__¾   rH   z)test_get_home_dir_8.<locals>.key.__exit__N)Ú__name__Ú
__module__Ú__qualname__rG   rI   rL   r   r   r   r   r*   ¹   s    r*   ÚOpenKey)Úreturn_valueÚQueryValueEx)r-   r   r   Úpopr   ÚobjectÚwregr   r   r   r"   )r/   r*   r0   r   r   r   Útest_get_home_dir_8­   s   ÿ
þ€ rV   c                 C   s‚   |   tddd„ ¡ |   tddd„ ¡ |   tdd¡ |   tdd	¡ t d
d¡ t dd¡ t dd¡ t ¡ tj dd¡ks?J ‚dS )z!test_get_xdg_dir_0, check xdg_dirZ_writable_dirc                 S   ó   dS )NTr   r   r   r   r   Ú<lambda>É   ó    z$test_get_xdg_dir_0.<locals>.<lambda>r"   c                   S   rW   )NÚ	somewherer   r   r   r   r   rX   Ê   rY   r   r:   r!   Úlinux2ÚIPYTHON_DIRNÚ
IPYTHONDIRÚXDG_CONFIG_HOMErZ   ú.config)r-   r   r   r    r   rS   Úget_xdg_dirr   r=   r   r   r   Útest_get_xdg_dir_0Æ   s   ra   c                 C   sf   |   tddd„ ¡ |   tdd¡ |   tdd¡ t dd	¡ t d
d	¡ t dd	¡ t ¡ d	u s1J ‚d	S )z-test_get_xdg_dir_1, check nonexistent xdg_dirr"   c                   S   ó   t S rD   ©r   r   r   r   r   rX   ×   rY   z$test_get_xdg_dir_1.<locals>.<lambda>r   r:   r!   r[   r\   Nr]   r^   )r-   r   r   r    r   rS   r`   r=   r   r   r   Útest_get_xdg_dir_1Ô   s   rd   c                 C   sŽ   |   tddd„ ¡ |   tdd¡ |   tdd¡ t dd	¡ t d
d	¡ t dd	¡ tj t ¡ d¡}tj |¡s=t 	|¡ t 
¡ |ksEJ ‚d	S )z6test_get_xdg_dir_2, check xdg_dir default to ~/.configr"   c                   S   rb   rD   rc   r   r   r   r   rX   â   rY   z$test_get_xdg_dir_2.<locals>.<lambda>r   r:   r!   r[   r\   Nr]   r^   r_   )r-   r   r   r    r   rS   r   r"   Úexistsr   r`   ©r/   Zcfgdirr   r   r   Útest_get_xdg_dir_2ß   s   
rg   c                 C   s†   |   tddd„ ¡ |   tdd¡ |   tdd¡ t dd	¡ t d
d	¡ t dd	¡ tj t ¡ d¡}tj|dd� t 	¡ d	u sAJ ‚d	S )z?test_get_xdg_dir_3, check xdg_dir not used on non-posix systemsr"   c                   S   rb   rD   rc   r   r   r   r   rX   ñ   rY   z$test_get_xdg_dir_3.<locals>.<lambda>r   r?   r!   Úwin32r\   Nr]   r^   r_   T)Úexist_ok)
r-   r   r   r    r   rS   r   r"   r   r`   rf   r   r   r   Útest_get_xdg_dir_3î   s   rj   c                  C   s"   t  ¡ } t ¡ }t | j|¡}dS )zVarious tests for filefindN)ÚtempfileÚNamedTemporaryFiler   Úget_ipython_dirr   Zfilefindr   )ÚfZalt_dirsÚtr   r   r   Útest_filefindü   s   rp   c                  C   sv   t ƒ �.} tj t | ¡d¡}t |¡ tj | d¡}t |¡}| ¡ | ¡ ks)J ‚W d   ƒ d S 1 s4w   Y  d S )Nzthis is my long path namezTHISIS~1)r   r   r   r   Úget_long_path_namer   r2   )ÚtmpdirZ	long_pathZ
short_pathZevaluated_pathr   r   r   Útest_get_long_path_name_win32  s   

"örs   c                  C   s   t  d¡} | dksJ ‚d S )Nz
/usr/local)r   rq   )Úpr   r   r   Útest_get_long_path_name  s   
ru   c                  C   sØ   t  ¡ } dt_t dd ¡ t dd ¡ t dd ¡ | td< tj | d¡}t |d¡ zt	tj |d¡d	d
d� 
¡  W n	 tyC   Y nw t d¡ tjtdd�� t ¡ }W d   ƒ n1 s_w   Y  t dd ¡ d S )Nr:   r\   r]   r^   r4   z.ipythonim  Z_foo_Úwúutf-8©Úencodingz0I can't create directories that I can't write tozis not a writable location)Úmatch)rk   Úmkdtempr   r   r   rS   r   r   ÚmkdirÚopenÚcloseÚIOErrorr;   ÚskipZwarnsÚUserWarningr   rm   )rr   Zipdirr   r   r   Útest_not_writable_ipdir  s$    ÿ

ÿr‚   c                  C   s6  t  t¡ tdƒ� t d¡dksJ ‚t d¡dksJ ‚W d   ƒ n1 s&w   Y  tdƒ� t d¡dks9J ‚t ttjd¡ W d   ƒ n1 sKw   Y  t ttjd¡ t ttjd¡ d} t| ƒ�+ t d¡| kspJ ‚t d¡| ksyJ ‚t ttjd¡ t ttjd¡ W d   ƒ d S 1 s”w   Y  d S )Nzfoo.pyZfoozfoo with spaces.pyzfoo with spacesz"foo with spaces.py"z'foo with spaces.py')	r   r&   r   r   r   Úget_py_filenamer;   r<   r   )Ztrue_fnr   r   r   Útest_get_py_filename3  s$   

þ
þ
"ür„   c               
   C   s@   zt  d¡ W dS  ty }  zt| ƒ W Y d} ~ dS d} ~ ww )zÂWhen a file doesn't exist, the exception raised should be safe to call
    str() on - i.e. in Python 2 it must only have ASCII characters.

    https://github.com/ipython/ipython/issues/875
    u
   fooÃ©Ã¨.pyN)r   rƒ   r   Ústr)Úexr   r   r   Útest_unicode_in_filenameE  s   €ÿr‡   c                   @   s\   e Zd Zedd„ ƒZedd„ ƒZeedd„ ƒƒZdd„ Zd	d
„ Z	e
dd„ ƒZedd„ ƒZdS )ÚTestShellGlobc                 C   sˆ   g d¢| _ g d¢| _| j | j | _tƒ | _| jj}|  ¡ � | jD ]}ttj	 
||¡ddd� ¡  q!W d   ƒ d S 1 s=w   Y  d S )N)Za0Za1Za2)Ú0bZ1bZ2brv   rw   rx   )Úfilenames_start_with_aÚfilenames_end_with_bÚ	filenamesr   Útempdirr   Ú
in_tempdirr}   r   r   r   r~   )ÚclsÚtdÚfnamer   r   r   Ú
setUpClassU  s   



ÿ"þzTestShellGlob.setUpClassc                 C   ó   | j  ¡  d S rD   ©r�   Úcleanup)r�   r   r   r   ÚtearDownClassb  s   zTestShellGlob.tearDownClassc              	   c   s<   � t  ¡ }zt  | jj¡ d V  W t  |¡ d S t  |¡ w rD   )r   r%   r&   r�   r   )r�   Úsaver   r   r   rŽ   f  s   €zTestShellGlob.in_tempdirc                 C   sH   |   ¡ � tt |¡ƒt|ƒksJ ‚W d   ƒ d S 1 sw   Y  d S rD   )rŽ   Úsortedr   Z	shellglob©rF   ÚpatternsÚmatchesr   r   r   Úcheck_matchp  s   
"þzTestShellGlob.check_matchc                 C   sJ   dg| j fdg| jfdgdgfg d¢| j | j | j dg fdg| jfgS )NÚ*úa*ú*c)r�   rž   z*brŸ   úa[012])rŒ   rŠ   r‹   rE   r   r   r   Úcommon_casesu  s   



ÿþý
øzTestShellGlob.common_casesc                 C   sL   |   ¡ dgdgfddgdg| j fdgdgfg D ]
\}}|  ||¡ qd S )Nú\*r�   úa\*rž   úa\[012]r    ©r¡   rŠ   rœ   r™   r   r   r   Útest_match_posix�  s   

ýûzTestShellGlob.test_match_posixc                 C   sB   |   ¡ ddgdg| j fdgdgfg D ]
\}}|  ||¡ qd S )Nr£   rž   r¤   r¥   r™   r   r   r   Útest_match_windowsŠ  s   
ûùz TestShellGlob.test_match_windowsN)rM   rN   rO   Úclassmethodr’   r–   r   rŽ   rœ   r¡   r   r¦   r   r§   r   r   r   r   rˆ   S  s    


rˆ   zglobstr, unescaped_globstr))z
\*\[\!\]\?z*[!]?)z\\*r¢   )z\\\*r¢   )z\\aú\a)r©   r©   c                 C   s   t  | ¡|ks	J ‚d S rD   )r   Zunescape_glob)ZglobstrZunescaped_globstrr   r   r   Útest_unescape_glob–  s   rª   c               	   C   sÂ   t ƒ �T} tj | d¡}t |¡ tj |¡sJ ‚t |¡ tj | d¡}t|ddd� ¡  t 	t
¡� t |¡ W d   ƒ n1 sBw   Y  W d   ƒ d S W d   ƒ d S 1 sZw   Y  d S )Nu   âˆ‚iru   Æ’ilerv   rw   rx   )r   r   r   r   Zensure_dir_existsÚisdirr}   r~   r;   r<   r   )r�   Údrn   r   r   r   Útest_ensure_dir_exists¤  s   

ÿù"ùr­   c                   @   s€   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	dd„ ƒZ
e	dd„ ƒZe	dd„ ƒZe	dd„ ƒZedd„ ƒZdd„ ZdS )ÚTestLinkOrCopyc                 C   sT   t ƒ | _|  d¡| _t| jddd��}| d¡ W d   ƒ d S 1 s#w   Y  d S )NÚsrcrv   rw   rx   zHello, world!)r   r�   Údstr¯   r}   Úwrite)rF   rn   r   r   r   ÚsetUp±  s
   "ÿzTestLinkOrCopy.setUpc                 C   r“   rD   r”   rE   r   r   r   ÚtearDown·  s   zTestLinkOrCopy.tearDownc                 G   s   t jj| jjg|¢R Ž S rD   )r   r   r   r�   r   )rF   rJ   r   r   r   r°   º  s   zTestLinkOrCopy.dstc                 C   s,   t  |¡jt  |¡jksJ d||f ƒ‚d S )Nz&%r and %r do reference the same indoes©r   ÚstatÚst_ino©rF   ÚaÚbr   r   r   Úassert_inode_not_equal½  ó   
ÿz%TestLinkOrCopy.assert_inode_not_equalc                 C   s,   t  |¡jt  |¡jksJ d||f ƒ‚d S )Nz*%r and %r do not reference the same indoesr´   r·   r   r   r   Úassert_inode_equalÂ  r»   z!TestLinkOrCopy.assert_inode_equalc              	   C   s~   t |dƒ�0}t |dƒ�}| ¡ | ¡ ksJ ‚W d   ƒ n1 s w   Y  W d   ƒ d S W d   ƒ d S 1 s8w   Y  d S )NÚrb)r}   Úread)rF   r¸   r¹   Za_fZb_fr   r   r   Úassert_content_equalÇ  s   ÿÿ"ÿz#TestLinkOrCopy.assert_content_equalc                 C   ó*   |   d¡}t | j|¡ |  | j|¡ d S ©NÚtarget)r°   r   Úlink_or_copyr¯   r¼   ©rF   r°   r   r   r   Útest_link_successfulÌ  ó   
z#TestLinkOrCopy.test_link_successfulc                 C   sJ   |   d¡}t |¡ t | j|¡ |   dtj | j¡¡}|  | j|¡ d S )NZsome_dir)r°   r   r|   r   rÃ   r¯   Úbasenamer¼   )rF   r°   Zexpected_dstr   r   r   Útest_link_into_dirÒ  s
   

z!TestLinkOrCopy.test_link_into_dirc                 C   s<   |   d¡}t|ddd� ¡  t | j|¡ |  | j|¡ d S )NrÂ   rv   rw   rx   )r°   r}   r~   r   rÃ   r¯   r¼   rÄ   r   r   r   Útest_target_existsÚ  s   
z!TestLinkOrCopy.test_target_existsc                 C   sT   t j}z"t `|  d¡}t | j|¡ |  | j|¡ |  | j|¡ W |t _d S |t _w rÁ   )r   Úlinkr°   r   rÃ   r¯   r¿   rº   )rF   Z	real_linkr°   r   r   r   Útest_no_linká  s   
zTestLinkOrCopy.test_no_linkc                 C   rÀ   rÁ   )r°   r   rÃ   r¯   r¿   rÄ   r   r   r   Útest_windowsí  rÆ   zTestLinkOrCopy.test_windowsc                 C   sV   |   d¡}t | j|¡ t | j|¡ |  | j|¡ tt | jj	¡ƒddgks)J ‚d S )NrÂ   r¯   )
r°   r   rÃ   r¯   r¼   r˜   r   Úlistdirr�   r   rÄ   r   r   r   Útest_link_twiceó  s
   
"zTestLinkOrCopy.test_link_twiceN)rM   rN   rO   r²   r³   r°   rº   r¼   r¿   r   rÅ   rÈ   rÉ   rË   r   rÌ   rÎ   r   r   r   r   r®   °  s$    




r®   )JÚ__doc__r   r   r    rk   ZunittestÚ
contextlibr   Ú	importlibr   Zos.pathr   r   Zunittest.mockr   r;   r   r#   r   ZIPython.testingr	   ÚdecZIPython.testing.decoratorsr
   r   r   ZIPython.testing.toolsr   ZIPython.utilsr   r   rU   ÚImportErrorÚtypesZwr_nameÚ
ModuleTypeÚmodulesÚ_winregrP   rR   Úenvironr   r{   r   r   r   r   Zfixturer+   ÚmarkZusefixturesZwith_environmentr1   r3   r6   r8   r>   rV   ra   rd   rg   rj   rp   rs   ru   r‚   r„   r‡   ZTestCaserˆ   Zparametrizerª   r­   r®   r   r   r   r   Ú<module>   s¬   ü€ù








	



Cþ


