ó
ś2¢\c           @   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 d d l	 m
 Z
 m Z d d l m Z d d l m Z y d d l m Z Wn! e k
 rÅ d d l m Z n Xd d l j j 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  Z. d   Z/ d e f d     YZ0 d S(   s(   Test installation of notebook extensionsi’’’’N(   t   BytesIOt   StringIO(   t   basenamet   join(   t   check_help_all_output(   t   TestCase(   t   patch(   t	   py3compat(   t   TemporaryDirectory(   t   nbextensions(   t   install_nbextensiont   check_nbextensiont   enable_nbextensiont   disable_nbextensiont   install_nbextension_pythont   uninstall_nbextension_pythont   enable_nbextension_pythont   disable_nbextension_pythont   _get_config_dirt   validate_nbextensiont   validate_nbextension_python(   t   BaseJSONConfigManagerc         C   sT   t  |  d  j   | rD t j |   j } t j |  | | f  n  t j |   j S(   sk   ensure a file exists, and set its modification time
    
    returns the modification time of the file
    t   a(   t   opent   closet   ost   statt   st_atimet   utimet   st_mtime(   t	   file_namet   mtimet   atime(    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   touch$   s
    c           C   sN   t  d  t  d d g  t  d d g  t  d d g  t  d d g  d  S(   Ns   notebook.nbextensionst   enablet   disablet   installt	   uninstall(   R   (    (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_help_output1   s
    
t   TestInstallNBExtensionc           B   s²  e  Z d    Z d   Z d   Z d   Z e d  Z e d  Z d   Z	 d   Z
 d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e j d    Z e j d    Z e j d    Z e j d    Z  d   Z! d   Z" d   Z# d d   Z$ d d!  Z% d"   Z& d#   Z' d$   Z( d%   Z) d&   Z* d'   Z+ d(   Z, d)   Z- d*   Z. RS(+   c         C   s)   t    } |  j j |  t j | j  S(   N(   R   t   tempdirst   appendR   t   cast_unicodet   name(   t   selft   td(    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   tempdir;   s    	c            sŚ  g    _    j   f d    }   j     _ t d  t d d  t d d d  g   _ } xd | D]\ } t j j   j |  } t j j	 |  } t j j
 |  sŗ t j |  n  t |  qh W  j     _ t j j   j d    _ t j j   j d    _ t j j   j d	    _   j g   _ t j j   j d
    _ t j d i   j d 6  j d 6   _   j j     j   j j  t j t d   j    _   j j     j   j j  d  S(   Nc             s"   x   j  D] }  |  j   q
 Wd  S(   N(   R(   t   cleanup(   t   d(   R,   (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   cleanup_tempdirsE   s    u   Ęileu   āiru   Ęile1u   āir2u   Ęile2t   datat   configt   system_dataR	   s
   os.environt   JUPYTER_CONFIG_DIRt   JUPYTER_DATA_DIRt   SYSTEM_JUPYTER_PATH(   R(   t
   addCleanupR.   t   srct   pjoint   filesR   t   pathR   t   dirnamet   existst   makedirsR!   t   test_dirt   data_dirt
   config_dirt   system_data_dirt   system_patht   system_nbextR   t   dictt	   patch_envt   startt   stopt   objectR	   t   patch_system_path(   R,   R1   R;   R   t   fullpatht   parent(    (   R,   s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   setUp@   s6    		
c         C   sK   t  j j |  sG t  j t  j j |   } |  j d | | f  n  d  S(   Nu   %s should exist (found %s)(   R   R<   R>   t   listdirR=   t   fail(   R,   R<   t   do_exist(    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   assert_dir_existso   s    c         C   s*   t  j j |  r& |  j d |  n  d  S(   Nu   %s should not exist(   R   R<   R>   RP   (   R,   R<   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   assert_not_dir_existst   s    c         C   s>   | r t  |  j d  } n	 |  j } |  j t  | |   d  S(   Nu   nbextensions(   R:   RA   RE   RR   (   R,   t   relative_patht   usert   nbext(    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   assert_installedx   s
    	c         C   s>   | r t  |  j d  } n	 |  j } |  j t  | |   d  S(   Nu   nbextensions(   R:   RA   RE   RS   (   R,   RT   RU   RV   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   assert_not_installed   s
    	c         C   s§   t     } t j j | |  j  } t j d i | d 6 ^ t |  j d t	 |  j
 |  x6 |  j D]+ } |  j t t |  j  |  d t	 qh WWd QXWd QXd S(   s/   install_nbextension when data_dir doesn't exists
   os.environR6   RU   N(   R   R   R<   R   RA   R   RF   R
   R9   t   TrueRR   R;   RW   R:   R   (   R,   R-   RA   R   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_create_data_dir   s    c         C   sN   t    ? } t |  j d t |  j t t |  j  d  d t Wd  QXd  S(   NRU   u   Ęile(   R   R
   R9   RY   RW   R:   R   (   R,   R-   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_create_nbextensions_user   s
    c         C   s   t    p } t | d  |  _ t j t d | g  = t |  j d t |  j	 t t
 |  j  d  d t Wd  QXWd  QXd  S(   Nu   nbextensionsR7   RU   u   Ęile(   R   R:   RE   R   RJ   R	   R
   R9   t   FalseRW   R   (   R,   R-   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_create_nbextensions_system”   s    c         C   s4   |  j  d } t t |  j |   |  j |  d  S(   Ni    (   R;   R
   R:   R9   RW   (   R,   R   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_single_file«   s    c         C   s4   d } t  t |  j |   |  j |  j d  d  S(   Nu   āiri’’’’(   R
   R:   R9   RW   R;   (   R,   R0   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_single_dir°   s    c         C   sv   d } t  t |  j |   |  j |  j d  t j d k rr d } t  t |  j |   |  j |  j d  n  d  S(   Nu   āir/i’’’’t   ntu   āir\(   R
   R:   R9   RW   R;   R   R+   (   R,   R0   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_single_dir_trailing_slashµ   s    c         C   s:   |  j  d } t t |  j |  d d |  j d  d  S(   Ni    t   destinationu	   Ęiledest(   R;   R
   R:   R9   RW   (   R,   R   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_destination_file¾   s    c         C   s?   d } t  t |  j |  d d |  j t d d d   d  S(   Nu   āirRb   u
   Ęiledest2u   āir2u   Ęile2(   R
   R:   R9   RW   (   R,   R0   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_destination_dirĆ   s    c      	   C   s9   |  j  t  $ t t j t |  j d    Wd  QXd  S(   Nt   *(   t   assertRaisest	   TypeErrorR
   t   globR:   R9   (   R,   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_install_nbextensionČ   s    c         C   sė   t    Ü } d } t | |  } t | d   } | j d  Wd  QXt |  } t |  j |  } t |  t | d   } | j d  Wd  QXt | | d  } t | d t t |   } |  j | j	   d  Wd  QXWd  QXd  S(   Nu   Ę.jst   wt   firstt	   overwriteid   (
   R   R:   R   t   writeR!   RE   R
   RY   t   assertEqualt   read(   R,   R0   t   fnameR9   t   fR   t   dest(    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_overwrite_fileĢ   s    
c         C   sĘ   t    · } t |  } d } t t | |   t |  |  j t | |   t j t | |   d } t t | |   t | d t |  j t | |   |  j	 t | |   Wd  QXd  S(   Nu   Ę.jsu   ā.jsRl   (
   R   R   R!   R:   R
   RW   R   t   removeRY   RX   (   R,   R9   t   baseRp   t   fname2(    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_overwrite_dirÜ   s    
c         C   s   t    ń } d } t | |  } t | d   } | j d  Wd  QXt |  } t |  |  j |  t |  j |  } t j	 |  j
 t | d   } | j d  Wd  QXt | | d  t |  t |   } |  j | j   d  Wd  QXWd  QXd  S(   Nu   Ę.jsRj   Rk   Rl   i
   (   R   R:   R   Rm   R!   R
   RW   RE   R   R   R   Rn   Ro   (   R,   R0   Rp   R9   Rq   R   Rr   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_update_fileź   s     

c         C   s±   t    ¢ } d } t | |  } t |  } t |  |  j |  t |  j |  } t j |  j } t | | d  } t |  t j |  j } |  j	 | |  Wd  QXd  S(   Nu   Ę.jsid   (
   R   R:   R!   R
   RW   RE   R   R   R   Rn   (   R,   R0   Rp   R9   R   Rr   t	   old_mtimet	   new_mtime(    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_skip_old_fileü   s    

c      
   C   s   t    } t    } t j t d |  . t j t d |   t |  j  Wd  QXWd  QX|  j | j   d  |  j | j   d  d  S(   Nt   stdoutt   stderrt    (   R   R   RJ   t   sysR
   R9   Rn   t   getvalue(   R,   R|   R}   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt
   test_quiet  s    		c         C   s~   t  |  j d  } t j | d  ' } | j d d  | j d d  Wd  QXt |  |  j d  |  j t  d d   d  S(   Ns   myjsext.zipRj   s   a.jss   b();s   foo/a.jss   foo();t   foo(   R:   R9   t   zipfilet   ZipFilet   writestrR
   RW   (   R,   R<   Rq   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_install_zip  s    
c      	   C   sø   d   } xØ t  d  D] \ } } t |  j d |  } t j | d  / } | | d | d  | | d	 | d
  Wd  QXt |  |  j d |  |  j t d d |   q Wd  S(   Nc         S   s8   t  j |  } t |  | _ |  j | t |   d  S(   N(   t   tarfilet   TarInfot   lent   sizet   addfileR    (   Rq   Rp   t   buft   info(    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt	   _add_file  s    s   .tar.gzs   .tgzs   .tar.bz2t   myjsextRj   s   b%i.jss   b();s
   foo/b%i.jss   foo();R   (   s   .tar.gzs   .tgzs   .tar.bz2(   t	   enumerateR:   R9   R   R   R
   RW   (   R,   R   t   it   extR<   Rq   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_install_tar  s    	
c         C   s{   d   } t  j } | t  _ zO t d  |  j d  t d  |  j d  t d d d |  j d  Wd  | t  _ Xd  S(   Nc         S   s   t  |  d  S(   N(   R!   (   t   urlRr   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   fake_urlretrieve-  s    s!   http://example.com/path/to/foo.jss   foo.jss*   https://example.com/path/to/another/bar.jss   bar.jsRb   s	   foobar.js(   R	   t   urlretrieveR
   RW   (   R,   R   t   save_urlretrieve(    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_install_url,  s    			

	c         C   s    t    6 } d } t | |  } t |  t | d t Wd  QXt | d t sY t  t | g d t st t  t | t d |  g d t s t  d  S(   Nu   Ę.jsRU   t   dne(   R   R:   R!   R
   RY   R   t   AssertionError(   R,   R0   Rq   R9   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_check_nbextension<  s    
c         C   s   t    6 } d } t | |  } t |  t | d t Wd  QXt |  j |  } t j j |  sk t	  t j
 |  } |  j | |  d  S(   Nu   Ę.jst   symlink(   R   R:   R!   R
   RY   RE   R   R<   t   islinkR   t   readlinkRn   (   R,   R0   Rq   R9   Rr   t   link(    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_install_symlinkG  s    
c         C   sĻ   t    w } d } d } t | |  } t | |  } t |  t | d t t j | |  t | d t d t d | Wd  QXt |  j |  } t j j	 |  s¬ t
  t j |  } |  j | |  d  S(   Nu   Ę.jsu   Ę2.jsR   Rl   Rb   (   R   R:   R!   R
   RY   R   t   renameRE   R<   R   R   R   Rn   (   R,   R0   Rq   t   f2R9   t   src2Rr   R   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_overwrite_broken_symlinkS  s    
"c      
   C   s   t    B } d } d } t | |  } t |  t | d t d | Wd  QXt |  j |  } t j j |  sw t	  t j
 |  } |  j | |  d  S(   Nu   Ę.jsu	   Ęlink.jsR   Rb   (   R   R:   R!   R
   RY   RE   R   R<   R   R   R   Rn   (   R,   R0   Rq   t   flinkR9   Rr   R   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt    test_install_symlink_destinationc  s    
c         C   s¢   |  j  t   t d d t Wd  QXt   m } d } t | |  } t j | d   } | j d d  Wd  QX|  j  t   t | d t Wd  QXWd  QXd  S(   Ns   http://example.com/foo.jsR   u   Ę.zipRj   s   a.jss   b();(	   Rf   t
   ValueErrorR
   RY   R   R:   R   R   R   (   R,   R0   t   zft   zsrct   z(    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_install_symlink_badp  s    c         C   s|   t    m } d } t | |  } t j | d   } | j d d  Wd  QX|  j t   t | d d Wd  QXWd  QXd  S(   Nu   Ę.zipRj   s   a.jss   b();Rb   R   (   R   R:   R   R   R   Rf   R§   R
   (   R,   R0   RØ   R©   RŖ   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_install_destination_bad~  s    c      	   C   sø   t    I } d } t | |  } t |  t | d t t d d d d  Wd  QXt j j t	 d t  d  } t
 d |  } | j d  j d	 i   j d t  } | s“ t  d  S(
   Nu   Ę.jsRU   t   sectiont   notebookt   requireu   Ęt   nbconfigRB   t   load_extensions(   R   R:   R!   R
   RY   R   R   R<   R   R   R   t   getR\   R   (   R,   R0   Rq   R9   RB   t   cmt   enabled(    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_nbextension_enable  s    
'c         C   s   |  j    t d d d d  t j j t d t  d  } t d |  } | j d  j d i   j d t	  } | s~ t
  d  S(	   NR­   R®   RÆ   u   ĘRU   R°   RB   R±   (   Rµ   R   R   R<   R   R   RY   R   R²   R\   R   (   R,   RB   R³   R“   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_nbextension_disable  s    
'R®   c         C   s    i | d 6d d 6d d 6d d 6S(   NR­   t   mockextensionR9   t   _mockdestinationRr   s   _mockdestination/indexRÆ   (    (   R,   R­   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   _mock_extension_spec_meta  s
    c            sN   t   |  j |    d d    f d     Y} d d  l } | | j d <d  S(   Nt   mockc              s#   e  Z  Z e   f d     Z RS(   c              s     g S(   N(    (    (   t   meta(    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   _jupyter_nbextension_pathsÆ  s    (   t   __name__t
   __module__t   __file__t   staticmethodR¼   (    (   R»   t
   outer_file(    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyRŗ   ¬  s   i’’’’R·   (    (   Ræ   R¹   R   t   modules(   R,   R­   Rŗ   R   (    (   R»   RĮ   s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   _inject_mock_extension§  s
    c         C   s?   |  j    t d  t d  s& t  t d g  s; t  d  S(   NR·   s   _mockdestination/index.js(   RĆ   R   R   R   (   R,   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_nbextensionpy_files¶  s    

c         C   sQ   |  j    t d d t t d d t s2 t  t d g d t sM t  d  S(   NR·   RU   s   _mockdestination/index.js(   RĆ   R   RY   R   R   (   R,   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_nbextensionpy_user_files½  s    
c         C   sW   |  j    t d d t t d d t t d  s= t  t d g  sS t  d  S(   NR·   RU   s   _mockdestination/index.js(   RĆ   R   RY   R   R   R   (   R,   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt"   test_nbextensionpy_uninstall_filesÄ  s
    
c         C   s   |  j  d  t d d t t d  t j j t d t  d  } t d |  } | j	 d  j	 d i   j	 d t
  } | s t  d  S(   NR®   R·   RU   R°   RB   R±   s   _mockdestination/index(   RĆ   R   RY   R   R   R<   R   R   R   R²   R\   R   (   R,   RB   R³   R“   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_nbextensionpy_enableĢ  s    
'c         C   s   |  j  d  t d d t t d  t d d t t j j t d t  d  } t	 d |  } | j
 d  j
 d i   j
 d t  } | s t  d  S(   NR®   R·   RU   R°   RB   R±   s   _mockdestination/index(   RĆ   R   RY   R   R   R   R<   R   R   R   R²   R\   R   (   R,   RB   R³   R“   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_nbextensionpy_disableÖ  s    
'c         C   s_   |  j  d  t d d t } t d  |  j   } t | | d  } |  j g  | |  d  S(   NR®   R·   RU   i    (   RĆ   R   RY   R   R¹   R   Rn   (   R,   t   pathsR»   t   warnings(    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_nbextensionpy_validateį  s    
c         C   so   |  j  d  t d d t } t d  |  j   } | j d d  t | | d  } |  j g  | |  d  S(   NR®   R·   RU   RÆ   s   bad-requirei    (   RĆ   R   RY   R   R¹   t   updateR   t   assertNotEqual(   R,   RÉ   R»   RŹ   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_nbextensionpy_validate_badė  s    
c         C   sJ   |  j  d  t d d t t d  t d  } |  j g  | |  d  S(   NR®   R·   RU   s   _mockdestination/index(   RĆ   R   RY   R   R   Rn   (   R,   RŹ   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_nbextension_validateł  s
    
c         C   s#   t  d  } |  j g  | |  d  S(   Ns   this-doesn't-exist(   R   RĶ   (   R,   RŹ   (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   test_nbextension_validate_bad  s    (/   R½   R¾   R.   RN   RR   RS   R\   RW   RX   RZ   R[   R]   R^   R_   Ra   Rc   Rd   Ri   Rs   Rw   Rx   R{   R   R   R   R   R   t   dect
   skip_win32R    R¤   R¦   R«   R¬   Rµ   R¶   R¹   RĆ   RÄ   RÅ   RĘ   RĒ   RČ   RĖ   RĪ   RĻ   RŠ   (    (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyR'   9   sT   		/							
																			
		
				
		
		
(1   t   __doc__Rh   R   R   R   R   t   ioR    R   t   os.pathR   R   R:   t   traitlets.tests.utilsR   t   unittestR   t   unittest.mockR   t   ImportErrorRŗ   t#   ipython_genutils.testing.decoratorst   testingt
   decoratorsRŃ   t   ipython_genutilsR   t   ipython_genutils.tempdirR   R®   R	   t   notebook.nbextensionsR
   R   R   R   R   R   R   R   R   R   R   t   notebook.config_managerR   t   NoneR!   R&   R'   (    (    (    s?   lib/python2.7/site-packages/notebook/tests/test_nbextensions.pyt   <module>   s,   L	