o
    i`I                     @   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ZddlmZm	Z	 ddl
mZmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z' dddZ(dd Z)G dd deZ*dS )z(Test installation of notebook extensions    N)BytesIOStringIO)basenamejoincheck_help_all_output)TestCase)patch)	py3compat)TemporaryDirectory)nbextensions)install_nbextensioncheck_nbextensionenable_nbextensiondisable_nbextensioninstall_nbextension_pythonuninstall_nbextension_pythonenable_nbextension_pythondisable_nbextension_python_get_config_dirvalidate_nbextensionvalidate_nbextension_python)BaseJSONConfigManagerc                 C   s:   t | d  |rt| j}t| ||f t| jS )zgensure a file exists, and set its modification time

    returns the modification time of the file
    a)opencloseosstatst_atimeutimest_mtime)	file_namemtimeatime r$   [/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/notebook/tests/test_nbextensions.pytouch    s
   r&   c                   C   s<   t d t ddg t ddg t ddg t ddg d S )Nznotebook.nbextensionsenabledisableinstall	uninstallr   r$   r$   r$   r%   test_help_output-   s
   r+   c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd[d
dZd[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*d+ Zd,d- Zd.d/ Zd0d1 Zejjejd2kd3d4d5d6 Z ejjejd2kd3d4d7d8 Z!ejjejd2kd3d4d9d: Z"ejjejd2kd3d4d;d< Z#d=d> Z$d?d@ Z%dAdB Z&d\dDdEZ'd\dFdGZ(dHdI Z)dJdK Z*dLdM Z+dNdO Z,dPdQ Z-dRdS Z.dTdU Z/dVdW Z0dXdY Z1dZS )]TestInstallNBExtensionc                 C   s   t  }| j| t|jS N)r   tempdirsappendr
   cast_unicodenameselftdr$   r$   r%   tempdir7   s   zTestInstallNBExtension.tempdirc                    sB  g  _  j fdd}   _tdtddtdddg  _}|D ]}tj j|}tj	|}tj
|s?t| t| q$   _tj jd _tj jd	 _tj jd
 _ jg _tj jd _td j jd _ j    jj ttd j _ j    jj d S )Nc                     s    j D ]} |   qd S r-   )r.   cleanup)dr3   r$   r%   cleanup_tempdirsA   s   

z6TestInstallNBExtension.setUp.<locals>.cleanup_tempdirs   ƒile   ∂iru   ƒile1   ∂ir2   ƒile2dataconfigsystem_datar   
os.environ)JUPYTER_CONFIG_DIRJUPYTER_DATA_DIRSYSTEM_JUPYTER_PATH)r.   
addCleanupr5   srcpjoinfilesr   pathr   dirnameexistsmakedirsr&   test_dirdata_dir
config_dirsystem_data_dirsystem_pathsystem_nbextr	   dict	patch_envstartstopobjectr   patch_system_path)r3   r9   rH   r!   fullpathparentr$   r8   r%   setUp<   s>   









zTestInstallNBExtension.setUpc                 C   s<   t j|st t j|}| | d| d d S d S )Nz should exist (found ))r   rI   rK   listdirrJ   fail)r3   rI   do_existr$   r$   r%   assert_dir_existsk   s   z(TestInstallNBExtension.assert_dir_existsc                 C   s$   t j|r| | d d S d S )Nz should not exist)r   rI   rK   r^   )r3   rI   r$   r$   r%   assert_not_dir_existsp   s   z,TestInstallNBExtension.assert_not_dir_existsFc                 C   ,   |r	t | jd}n| j}| t || d S Nr   )rG   rN   rR   r`   r3   relative_pathusernbextr$   r$   r%   assert_installedt      z'TestInstallNBExtension.assert_installedc                 C   rb   rc   )rG   rN   rR   ra   rd   r$   r$   r%   assert_not_installed}   ri   z+TestInstallNBExtension.assert_not_installedc              	   C   s   t  P}tj|| j}tdd|i' t| jdd | 	| | j
D ]}| jtt| j|dd q$W d   n1 s>w   Y  W d   dS W d   dS 1 sVw   Y  dS )z/install_nbextension when data_dir doesn't existrA   rC   Trf   N)r   r   rI   r   rN   r	   rS   r   rF   r`   rH   rh   rG   r   )r3   r4   rN   r!   r$   r$   r%   test_create_data_dir   s"   

"z+TestInstallNBExtension.test_create_data_dirc                 C   sT   t  }t| jdd | jtt| jddd W d    d S 1 s#w   Y  d S )NTrk   r:   )r   r   rF   rh   rG   r   r2   r$   r$   r%   test_create_nbextensions_user   s   "z4TestInstallNBExtension.test_create_nbextensions_userc              	   C   s   t  C}t|d| _ttd|g t| jdd | jtt	| jddd W d    n1 s1w   Y  W d    d S W d    d S 1 sIw   Y  d S )Nr   rD   Frk   r:   )
r   rG   rR   r	   rW   r   r   rF   rh   r   r2   r$   r$   r%   test_create_nbextensions_system   s   "z6TestInstallNBExtension.test_create_nbextensions_systemc                 C   s(   | j d }tt| j| | | d S )Nr   rH   r   rG   rF   rh   r3   r!   r$   r$   r%   test_single_file   s   
z'TestInstallNBExtension.test_single_filec                 C   s(   d}t t| j| | | jd  d S )Nr;   )r   rG   rF   rh   rH   r3   r7   r$   r$   r%   test_single_dir   s   z&TestInstallNBExtension.test_single_dirc                 C   sZ   d}t t| j| | | jd  tjdkr+d}t t| j| | | jd  d S d S )Nu   ∂ir/rr   ntu   ∂ir\)r   rG   rF   rh   rH   r   r1   rs   r$   r$   r%   test_single_dir_trailing_slash   s   
z5TestInstallNBExtension.test_single_dir_trailing_slashc                 C   s,   | j d }tt| j|dd | d d S )Nr   u	   ƒiledestdestinationro   rp   r$   r$   r%   test_destination_file   s   
z,TestInstallNBExtension.test_destination_filec                 C   s.   d}t t| j|dd | tddd d S )Nr;   u
   ƒiledest2rw   r<   r=   )r   rG   rF   rh   rs   r$   r$   r%   test_destination_dir   s   z+TestInstallNBExtension.test_destination_dirc                 C   sF   |  t ttt| jd W d    d S 1 sw   Y  d S )N*)assertRaises	TypeErrorr   globrG   rF   r8   r$   r$   r%   test_install_nbextension   s   "z/TestInstallNBExtension.test_install_nbextensionc              	   C   s   t  }d}t||}t|d}|d W d    n1 s w   Y  t|}t| j|}t| t|d}|d W d    n1 sHw   Y  t||d }t|dd t|}| | d W d    n1 sqw   Y  W d    d S W d    d S 1 sw   Y  d S )N   ƒ.jswfirst	overwrited   Tr   )	r   rG   r   writer&   rR   r   assertEqualreadr3   r7   fnamerF   fr"   destr$   r$   r%   test_overwrite_file   s(   

"z*TestInstallNBExtension.test_overwrite_filec                 C   s   t  I}t|}d}tt|| t| | t|| tt|| d}tt|| t|dd | t|| | t|| W d    d S 1 sOw   Y  d S )Nr   u   ∂.jsTr   )	r   r   r&   rG   r   rh   r   removerj   )r3   rF   baser   fname2r$   r$   r%   test_overwrite_dir   s   "z)TestInstallNBExtension.test_overwrite_dirc              	   C   s2  t  }d}t||}t|d}|d W d    n1 s w   Y  t|}t| | | t| j|}t	|j
 t|d}|d W d    n1 sSw   Y  t||d  t| t|}| | d W d    n1 szw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   r   r   r   
   )r   rG   r   r   r&   r   rh   rR   r   r   r    r   r   r   r$   r$   r%   test_update_file   s,   


"z'TestInstallNBExtension.test_update_filec                 C   s   t  @}d}t||}t|}t| | | t| j|}t|j}t||d }t| t|j}| 	|| W d    d S 1 sFw   Y  d S )Nr   r   )
r   rG   r&   r   rh   rR   r   r   r    r   )r3   r7   r   rF   r"   r   	old_mtime	new_mtimer$   r$   r%   test_skip_old_file   s   

"z)TestInstallNBExtension.test_skip_old_filec              	   C   s   t  }t  }ttd|$ ttd| t| j W d    n1 s%w   Y  W d    n1 s4w   Y  | | d | | d d S )Nstdoutstderr )r   r	   rW   sysr   rF   r   getvalue)r3   r   r   r$   r$   r%   
test_quiet  s    z!TestInstallNBExtension.test_quietc                 C   sv   t | jd}t|d}|dd |dd W d    n1 s#w   Y  t| | d | t dd d S )Nzmyjsext.zipr   a.js   b();zfoo/a.js   foo();foo)rG   rF   zipfileZipFilewritestrr   rh   )r3   rI   r   r$   r$   r%   test_install_zip  s   
z'TestInstallNBExtension.test_install_zipc              	   C   s   dd }t dD ]O\}}t| jd| }t|d}||d| dd ||d	| dd
 W d    n1 s9w   Y  t| | d| d | tdd| d qd S )Nc                 S   s(   t |}t||_| |t| d S r-   )tarfileTarInfolensizeaddfiler   )r   r   bufinfor$   r$   r%   	_add_file  s   

z:TestInstallNBExtension.test_install_tar.<locals>._add_file)z.tar.gzz.tgzz.tar.bz2myjsextr   bz.jsr   zfoo/br   r   )	enumeraterG   rF   r   r   r   rh   )r3   r   iextrI   r   r$   r$   r%   test_install_tar  s   z'TestInstallNBExtension.test_install_tarc                 C   sd   dd }t j}|t _z#td | d td | d tddd | d W |t _d S |t _w )	Nc                 S   s   t | d S r-   )r&   )urlr   r$   r$   r%   fake_urlretrieve)  s   zATestInstallNBExtension.test_install_url.<locals>.fake_urlretrievez!http://example.com/path/to/foo.jszfoo.jsz*https://example.com/path/to/another/bar.jszbar.jsz	foobar.jsrw   )r   urlretriever   rh   )r3   r   save_urlretriever$   r$   r%   test_install_url(  s   

z'TestInstallNBExtension.test_install_urlc                 C   s   t  }d}t||}t| t|dd W d    n1 sw   Y  t|dds,J t|gdds5J t|td|gddrBJ d S )Nr   Trk   dne)r   rG   r&   r   r   )r3   r7   r   rF   r$   r$   r%   test_check_nbextension8  s   
z-TestInstallNBExtension.test_check_nbextensionwin32zdo not run on windows)reasonc                 C   s~   t  }d}t||}t| t|dd W d    n1 sw   Y  t| j|}tj|s2J t|}| 	|| d S )Nr   Tsymlink
r   rG   r&   r   rR   r   rI   islinkreadlinkr   )r3   r7   r   rF   r   linkr$   r$   r%   test_install_symlinkC  s   

z+TestInstallNBExtension.test_install_symlinkc                 C   s   t  .}d}d}t||}t||}t| t|dd t|| t|dd|d W d    n1 s4w   Y  t| j|}tj|sGJ t	|}| 
|| d S )Nr   u   ƒ2.jsTr   )r   r   rx   )r   rG   r&   r   r   renamerR   rI   r   r   r   )r3   r7   r   f2rF   src2r   r   r$   r$   r%   test_overwrite_broken_symlinkO  s   

	
z4TestInstallNBExtension.test_overwrite_broken_symlinkc                 C   s   t  }d}d}t||}t| t|d|d W d    n1 s"w   Y  t| j|}tj|s5J t|}| 	|| d S )Nr   u	   ƒlink.jsT)r   rx   r   )r3   r7   r   flinkrF   r   r   r$   r$   r%    test_install_symlink_destination_  s   

z7TestInstallNBExtension.test_install_symlink_destinationc              	   C   s   |  t tddd W d    n1 sw   Y  t O}d}t||}t|d}|dd W d    n1 s=w   Y  |  t t|dd W d    n1 sXw   Y  W d    d S W d    d S 1 spw   Y  d S )Nzhttp://example.com/foo.jsTr      ƒ.zipr   r   r   )r|   
ValueErrorr   r   rG   r   r   r   r3   r7   zfzsrczr$   r$   r%   test_install_symlink_badl  s   
"z/TestInstallNBExtension.test_install_symlink_badc              	   C   s   t  O}d}t||}t|d}|dd W d    n1 s"w   Y  | t t|dd W d    n1 s=w   Y  W d    d S W d    d S 1 sUw   Y  d S )Nr   r   r   r   r   rw   )r   rG   r   r   r   r|   r   r   r   r$   r$   r%   test_install_destination_badz  s   
"z3TestInstallNBExtension.test_install_destination_badc                 C   s   t  }d}t||}t| t|dd tddd W d    n1 s%w   Y  tjtddd}t	|d}|
d
d	i 
dd
}|sJJ d S )Nr   Trk   notebook   ƒsectionrequirenbconfigrO   load_extensionsF)r   rG   r&   r   r   r   rI   r   r   r   get)r3   r7   r   rF   rO   cmenabledr$   r$   r%   test_nbextension_enable  s   

z.TestInstallNBExtension.test_nbextension_enablec                 C   sX   |    tddd tjtddd}t|d}|ddi dd	}|r*J d S )
Nr   r   r   Trk   r   r   r   F)r   r   r   rI   r   r   r   r   r3   rO   r   r   r$   r$   r%   test_nbextension_disable  s   
z/TestInstallNBExtension.test_nbextension_disabler   c                 C   s   |ddddS )Nmockextension_mockdestination_mockdestination/index)r   rF   r   r   r$   )r3   r   r$   r$   r%   _mock_extension_spec_meta  s
   z0TestInstallNBExtension._mock_extension_spec_metac                    s8   t | | G  fddd}dd l}||jd< d S )Nc                       s    e Zd ZZe fddZdS )z;TestInstallNBExtension._inject_mock_extension.<locals>.mockc                      s    gS r-   r$   r$   )metar$   r%   _jupyter_nbextension_paths  s   zVTestInstallNBExtension._inject_mock_extension.<locals>.mock._jupyter_nbextension_pathsN)__name__
__module____qualname____file__staticmethodr   r$   r   
outer_filer$   r%   mock  s    r   r   r   )r   r   r   modules)r3   r   r   r   r$   r   r%   _inject_mock_extension  s
   
z-TestInstallNBExtension._inject_mock_extensionc                 C   s.   |    td tdsJ tdgsJ d S )Nr   _mockdestination/index.jsr   r   r   r8   r$   r$   r%   test_nbextensionpy_files  s   z/TestInstallNBExtension.test_nbextensionpy_filesc                 C   s:   |    tddd tdddsJ tdgddsJ d S Nr   Trk   r   r   r8   r$   r$   r%   test_nbextensionpy_user_files  s   z4TestInstallNBExtension.test_nbextensionpy_user_filesc                 C   s>   |    tddd tddd tdrJ tdgrJ d S r   )r   r   r   r   r8   r$   r$   r%   "test_nbextensionpy_uninstall_files  s
   z9TestInstallNBExtension.test_nbextensionpy_uninstall_filesc                 C   sb   |  d tddd td tjtddd}t|d}|ddi dd	}|s/J d S 
Nr   r   Trk   r   r   r   r   F)	r   r   r   r   rI   r   r   r   r   r   r$   r$   r%   test_nbextensionpy_enable  s   

z0TestInstallNBExtension.test_nbextensionpy_enablec                 C   sn   |  d tddd td tddd tjtddd}t|d}|	d	di 	dd	}|r5J d S r   )
r   r   r   r   r   rI   r   r   r   r   r   r$   r$   r%   test_nbextensionpy_disable  s   

z1TestInstallNBExtension.test_nbextensionpy_disablec                 C   sF   |  d tddd}td |  }t||d }| g || d S )Nr   r   Trk   r   )r   r   r   r   r   r   r3   pathsr   warningsr$   r$   r%   test_nbextensionpy_validate  s   
z2TestInstallNBExtension.test_nbextensionpy_validatec                 C   sR   |  d tddd}td |  }|jdd t||d }| g || d S )Nr   r   Trk   zbad-require)r   r   )r   r   r   r   updater   assertNotEqualr   r$   r$   r%   test_nbextensionpy_validate_bad  s   
z6TestInstallNBExtension.test_nbextensionpy_validate_badc                 C   s8   |  d tddd td td}| g || d S )Nr   r   Trk   r   )r   r   r   r   r   r3   r   r$   r$   r%   test_nbextension_validate  s
   
z0TestInstallNBExtension.test_nbextension_validatec                 C   s   t d}| g || d S )Nzthis-doesn't-exist)r   r   r   r$   r$   r%   test_nbextension_validate_bad  s   z4TestInstallNBExtension.test_nbextension_validate_badN)F)r   )2r   r   r   r5   r[   r`   ra   rh   rj   rl   rm   rn   rq   rt   rv   ry   rz   r   r   r   r   r   r   r   r   r   r   pytestmarkskipifr   platformr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r$   r$   r$   r%   r,   5   s^    /

		
			










r,   r-   )+__doc__r~   r   r  r   r   r   ior   r   os.pathr   r   rG   traitlets.tests.utilsr   unittestr   unittest.mockr	   ipython_genutilsr
   ipython_genutils.tempdirr   r   r   notebook.nbextensionsr   r   r   r   r   r   r   r   r   r   r   notebook.config_managerr   r&   r+   r,   r$   r$   r$   r%   <module>   s(    4
