B
    3¢\G  ã               @   sN  d dl Z d dlZd dlZd dlmZ yd dlmZ W n  ek
rT   d dlmZ Y nX 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 d dlmZ d dlmZ ejdkrâd dlmZ nG dd„ de ƒZd dl!m"Z" dd„ Z#e$Z%G dd„ de ƒZ&G dd„ deƒZ'G dd„ de'ƒZ(G dd„ de'ƒZ)dS )é    N)ÚTestCase)Úpatch)ÚTemporaryDirectory)Ú	py3compat)ÚBaseJSONConfigManager)Úcheck_help_all_output)Úpaths)Útoggle_serverextension_python)ÚnbextensionsÚserverextensionsÚ
extensions)ÚNotebookApp)Ú_get_config_dir)é   )ÚSimpleNamespacec               @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r   r   úClib/python3.7/site-packages/notebook/tests/test_serverextensions.pyr      s   r   )ÚOrderedDictc               C   s<   t dƒ t ddgƒ t ddgƒ t ddgƒ t ddgƒ d S )Nznotebook.serverextensionsÚenableÚdisableZinstallZ	uninstall)r   r   r   r   r   Útest_help_output   s
    r   c               @   s(   e Zd ZeZedd„ ƒZdZdd„ ZdS )ÚMockExtensionModulec               C   s
   ddigS )NÚmodulez_mockdestination/indexr   r   r   r   r   Ú_jupyter_server_extension_paths+   s    z3MockExtensionModule._jupyter_server_extension_pathsFc             C   s
   d| _ d S )NT)Úloaded)ÚselfÚappr   r   r   Úload_jupyter_server_extension3   s    z1MockExtensionModule.load_jupyter_server_extensionN)	r   r   r   Ú
outer_fileÚ__file__Ústaticmethodr   r   r    r   r   r   r   r   (   s   r   c               @   s.   e Zd Zdd„ Zdd„ Zdd„ Zddd	„Zd
S )ÚMockEnvTestCasec             C   s   t ƒ }| j |¡ t |j¡S )N)r   ÚtempdirsÚappendr   Zcast_unicodeÚname)r   Ztdr   r   r   Útempdir9   s    zMockEnvTestCase.tempdirc             C   sž  g | _ g | _|  ¡ | _tj | jd¡| _tj | jd¡| _tj | jd¡| _	tj | jd¡| _
| j	g| _| j
g| _g | _t d| j| jdœ¡}| j |¡ xFttfD ]:}t |d| j¡}| j |¡ t |dg ¡}| j |¡ q¤W xFttfD ]:}t |d	| j¡}| j |¡ t |d
g ¡}| j |¡ qìW x$| jD ]}| ¡  |  |j¡ q2W |  t ¡ | jg| j ¡ |  tjdd| j
¡ |  t ¡ | jg| j ¡ d S )NÚdataÚconfigZsystem_dataZsystem_configz
os.environ)ZJUPYTER_CONFIG_DIRZJUPYTER_DATA_DIRZSYSTEM_JUPYTER_PATHZENV_JUPYTER_PATHZSYSTEM_CONFIG_PATHZENV_CONFIG_PATHF)Úuser)r%   Ú_mock_extensionsr(   Ztest_dirÚosÚpathÚjoinZdata_dirÚ
config_dirZsystem_data_dirZsystem_config_dirZsystem_pathZsystem_config_pathZpatchesr   Údictr&   r   r
   Úobjectr   ÚstartZ
addCleanupÚstopZassertEqualZjupyter_config_pathr   Zjupyter_path)r   ÚpÚmodr   r   r   ÚsetUp>   sD    




zMockEnvTestCase.setUpc             C   s    x| j D ]}tj |¡ qW d S )N)r,   ÚsysÚmodulesÚpop)r   Ú
modulenamer   r   r   ÚtearDownf   s    zMockEnvTestCase.tearDownÚmockextensionc             C   s    t ƒ  tj|< }| j |¡ |S )N)r   r8   r9   r,   r&   )r   r;   Zextr   r   r   Ú_inject_mock_extensionj   s    z&MockEnvTestCase._inject_mock_extensionN)r=   )r   r   r   r(   r7   r<   r>   r   r   r   r   r$   7   s   (r$   c               @   s.   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
S )ÚTestInstallServerExtensionTc             C   s,   t t|ƒd}| d¡}| di ¡ di ¡S )N)r0   Zjupyter_notebook_configr   Únbserver_extensions)r   r   Úget)r   r+   Úcmr)   r   r   r   Ú_get_configr   s    
z&TestInstallServerExtension._get_configc             C   s*   |   ¡  tddƒ |  ¡ }|d s&t‚d S )Nr=   T)r>   r	   rC   ÚAssertionError)r   r*   r   r   r   Útest_enablew   s    
z&TestInstallServerExtension.test_enablec             C   s4   |   ¡  tddƒ tddƒ |  ¡ }|d r0t‚d S )Nr=   TF)r>   r	   rC   rD   )r   r*   r   r   r   Útest_disable~   s
    

z'TestInstallServerExtension.test_disablec             C   s¢   |   d¡}|   d¡}|   d¡}|   d¡}tdddd tdddd tdddd tdddd tddid}| ¡  |js€t‚|jsŠt‚|js”t‚|jržt‚d S )	NZmockext_sysZmockext_bothZmockext_userZ
mockext_pyTF)Zenabledr+   )r@   )r>   r	   r   Úinit_server_extensionsr   rD   )r   Zmock_sysZ	mock_bothZ	mock_userZmock_pyr   r   r   r   Útest_merge_config†   s    






z,TestInstallServerExtension.test_merge_configN)T)r   r   r   rC   rE   rF   rH   r   r   r   r   r?   p   s   
r?   c                   s4   e Zd ZdZ‡ fdd„Z‡ fdd„Zdd„ Z‡  ZS )ÚTestOrderedServerExtensionz;
    Test that Server Extensions are loaded _in order_
    c                sN   t t| ƒ ¡  tƒ }tƒ }dd„ }||_dd„ }||_|tjd< |tjd< d S )Nc             S   s   d| _ d| _d S )NTÚI)ÚmockIÚmock_shared)Úobjr   r   r   r    ¨   s    zGTestOrderedServerExtension.setUp.<locals>.load_jupyter_server_extensionc             S   s   d| _ d| _d S )NTÚII)ÚmockIIrL   )rM   r   r   r   r    ®   s    Úmockextension2Úmockextension1)ÚsuperrI   r7   r   r    r8   r9   )r   rQ   rP   r    )Ú	__class__r   r   r7   £   s    
z TestOrderedServerExtension.setUpc                s"   t t| ƒ ¡  tjd= tjd= d S )NrP   rQ   )rR   rI   r<   r8   r9   )r   )rS   r   r   r<   ·   s    z#TestOrderedServerExtension.tearDownc             C   sV   t ƒ }tddgƒ|_| ¡  |jdks.tdƒ‚|jdks@tdƒ‚|jdksRtdƒ‚d S )N)rP   T)rQ   TTzMock II should have been loadedzMock I should have been loadedrN   z%Mock II should be loaded after Mock I)r   r   r@   rG   rO   rD   rK   rL   )r   r   r   r   r   Útest_load_ordered½   s    z,TestOrderedServerExtension.test_load_ordered)r   r   r   Ú__doc__r7   r<   rT   Ú__classcell__r   r   )rS   r   rI   ž   s   rI   )*Úimpr-   r8   Zunittestr   Zunittest.mockr   ÚImportErrorZmockZipython_genutils.tempdirr   Zipython_genutilsr   Znotebook.config_managerr   Ztraitlets.tests.utilsr   Zjupyter_corer   Znotebook.serverextensionsr	   Znotebookr
   r   r   Znotebook.notebookappr   Znotebook.nbextensionsr   Úversion_infoÚtypesr   r2   Úcollectionsr   r   r"   r!   r   r$   r?   rI   r   r   r   r   Ú<module>   s4   
9.