B
    3\                 @   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mZm	Z	 ddl
Z
ddlmZ yddlmZ W n  ek
r   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mZ ddlm Z  ej!Z!ddl"m#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-e.d"Z/d#d$ Z0d%d& Z1d'd( Z2G d)d* d*ej3Z4d+d, Z5G d-d. d.e#Z6dS )/zTest NotebookApp    N)PopenPIPESTDOUT)NamedTemporaryFile)patch)check_help_all_output)NoStart)TemporaryDirectory)
TraitError)notebookapp__version__)passwd_check   )NotebookTestBasec               C   s   t d dS )z!ipython notebook --help-all worksnotebookN)r    r   r   >lib/python3.7/site-packages/notebook/tests/test_notebookapp.pytest_help_output   s    r   c                 s   t  } t| jt d  fdd} jg d    | }tt	|d t|d d  j
 t|d d  j    t| g     d S )	N)runtime_dirlogc                  s   t t jS )N)listr   list_running_serversr   r   )nbappr   r   get_servers&   s    z*test_server_info_file.<locals>.get_servers)argvr   r   porturl)r	   NotebookAppnameloggingZ	getLogger
initializeZwrite_server_info_filentassert_equallenr   Zconnection_urlZremove_server_info_file)tdr   serversr   )r   r   test_server_info_file#   s    r&   c           	   C   s.   t  } t| d}t|j|  W d Q R X d S )N)notebook_dir)r	   r   r!   r"   r'   )r$   appr   r   r   test_nb_dir4   s    
r)   c           
   C   sF   t  6} tj| d}t }tt ||_W d Q R X W d Q R X d S )NZ	notebooks)	r	   ospathjoinr   r!   assert_raisesr
   r'   )r$   nbdirr(   r   r   r   test_no_create_nb_dir9   s
    r/   c           
   C   sL   t  <} tj| dddd}t }tt ||_W d Q R X W d Q R X d S )Nr   dirisZmissing)	r	   r*   r+   r,   r   r!   r-   r
   r'   )r$   r.   r(   r   r   r   test_missing_nb_dir@   s
    r2   c           
   C   s8   t  (} t }tt | |_W d Q R X W d Q R X d S )N)r   r   r!   r-   r
   r'   )Ztfr(   r   r   r   test_invalid_nb_dirG   s    r3   c           	   C   s>   t dtj d$} t| d}t|jtj W d Q R X d S )NZ_slash)suffix)r'   )r	   r*   sepr   r!   Zassert_falser'   endswith)r$   r(   r   r   r   test_nb_dir_with_slashM   s    
r7   c              C   s*   t jt j} t| d}t|j|  d S )N)r'   )r*   r+   abspathr5   r   r!   r"   r'   )rootr(   r   r   r   test_nb_dir_rootR   s    
r:   c           
   C   sf   t  V} t| d}|ddg tt |  W d Q R X tj	tj
| dsXtW d Q R X d S )N)Z
config_dirz--generate-configz--allow-rootzjupyter_notebook_config.py)r	   r   r    r!   r-   r   startr*   r+   existsr,   AssertionError)r$   r(   r   r   r   test_generate_configW   s    
r>   c              #   s<   xdD ]  fdd} | V  qW xdD ] t  fV  q&W d S )N)z4.1.0.b1z4.1.b1z4.2zX.y.zz1.2.3.dev1.post2c            	      s"   t t t  W d Q R X d S )N)r!   r-   
ValueErrorraise_on_bad_versionr   )versionr   r   loci   s    z test_pep440_version.<locals>.loc)z4.1.1z4.2.1b3)r@   )rB   r   )rA   r   test_pep440_version`   s
    


rC   z:^(\d+)\.(\d+)\.(\d+((a|b|rc)\d+)?)(\.post\d+)?(\.dev\d*)?$c             C   s   t | stdd S )NzVersions String does apparently not match Pep 440 specification, which might lead to sdist and wheel being seen as 2 different release. E.g: do not use dots for beta/alpha/rc markers.)pep440rematchr?   )rA   r   r   r   r@   y   s    
r@   c               C   s   t t d S )N)r@   r   r   r   r   r   test_current_version   s    rF   c              C   s   d} t  }tdd|ij tjtd| dN tjtjd}|	g  |
  t }|  t|jd t|j|  W d Q R X W d Q R X W d Q R X d S )NZsecretz
os.environZJUPYTER_CONFIG_DIRgetpass)Zreturn_value)Z	log_level )r	   r   dictobjectrG   r   ZNotebookPasswordAppr   ZERRORr    r;   r   Zload_config_filer!   Zassert_not_equalpasswordr   )rK   r$   r(   Znbr   r   r   test_notebook_password   s    
rL   c                   s(   e Zd ZdZ fddZdd Z  ZS )TestingStopAppz)For testing the logic of NbserverStopApp.c                s   t t| jf | g | _d S )N)superrM   __init__servers_shut_down)selfkwargs)	__class__r   r   rO      s    zTestingStopApp.__init__c             C   s   | j | dS )NT)rP   append)rQ   Zserverr   r   r   shutdown_server   s    zTestingStopApp.shutdown_server)__name__
__module____qualname____doc__rO   rU   __classcell__r   r   )rS   r   rM      s   rM   c              C   s   dd } t d| }|  t }|dg |  W d Q R X tt|jd t|jd d d |Z t d	F}t }|d
g tt	}|  W d Q R X t|j
jd W d Q R X W d Q R X tt|jd d S )Nc             s   s:   x4t ddD ]&}d| |ddddddd| d		V  qW d S )
Nd   n   i  /Z	localhostFrH   zhttp://localhost:%i)	pidr   Zbase_urlZhostnamer'   ZsecuretokenrK   r   )range)r   r   r   r   r   r      s    z0test_notebook_stop.<locals>.list_running_serversz)notebook.notebookapp.list_running_serversZ105r   r   r   i   zos.killZ999)r   rM   r    r;   r!   r"   r#   rP   r-   
SystemExitZ	exceptioncode)r   Zmock_serversr(   Zos_killexcr   r   r   test_notebook_stop   s    
$re   c               @   s   e Zd Zdd ZdS )NotebookAppTestsc             C   s8   t t }t|dkst| jdd |D ks4td S )Nr   c             S   s   h | ]}|d  qS )r   r   ).0infor   r   r   	<setcomp>   s    z=NotebookAppTests.test_list_running_servers.<locals>.<setcomp>)r   r   r   r#   r=   r   )rQ   r%   r   r   r   test_list_running_servers   s    z*NotebookAppTests.test_list_running_serversN)rV   rW   rX   rj   r   r   r   r   rf      s   rf   )7rY   rG   r   r*   resignal
subprocessr   r   r   sysZtempfiler   Zunittest.mockr   ImportErrorZmockZ
nose.toolsZtoolsr!   Ztraitlets.tests.utilsr   Zjupyter_core.applicationr   Zipython_genutils.tempdirr	   Z	traitletsr
   r   r   r   Znotebook.auth.securityr   r   Zlaunchnotebookr   r   r&   r)   r/   r2   r3   r7   r:   r>   rC   compilerD   r@   rF   rL   ZNbserverStopApprM   re   rf   r   r   r   r   <module>   sL   	

#