
    Nek                         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 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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  G d dej8                        Zy)zTests for the KernelSpecManager    N)StringIO)StreamHandler)join)PIPE)Popen)STDOUT)TemporaryDirectory)paths   )install_kernel)sample_kernel_json)test_env)
kernelspecc                      e 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                  j                  ej"                  dk7  xr  ej$                  dej&                          d      d        Zd Zd Zd Zd Zy)KernelSpecTestsc                    t               | _        | j                  j                          t        t	        t        j                         d      d      | _        t        j                         | _
        t               }| j                  |j                         |j                  | _        t!        t	        | j                  d      d      5 }t#        j$                  t&        |       d d d        y # 1 sw Y   y xY w)Nkernelssamplenamezkernel.jsonw)r   	env_patchstartr   pjoinr
   jupyter_data_dirsample_kernel_dirr   KernelSpecManagerksmr	   
addCleanupcleanupr   installable_kernelopenjsondumpr   )selftd2fs      F/usr/lib/python3/dist-packages/jupyter_client/tests/test_kernelspec.pysetUpzKernelSpecTests.setUp   s    !!/%((*I6X"
 //1 "$"%((%//?E 	-II(!,	- 	- 	-s   C++C4c                 8    | j                   j                          y )N)r   stopr%   s    r(   tearDownzKernelSpecTests.tearDown+   s        c                 v    | j                   j                         }| j                  |d   | j                         y Nr   )r   find_kernel_specsassertEqualr   r%   r   s     r(   test_find_kernel_specsz&KernelSpecTests.test_find_kernel_specs.   s/    ((,,.*D,B,BCr.   c                 v    t        j                         }dg|_        |j                         }t	        |      rJ y )Nfoo)r   r   allowed_kernelspecsr1   lenr%   r   r   s      r(   test_allowed_kernel_namesz)KernelSpecTests.test_allowed_kernel_names2   s7    **,#(''')w<<r.   c                 v    t        j                         }dg|_        |j                         }t	        |      rJ y )Nbar)r   r   	whitelistr1   r8   r9   s      r(   test_deprecated_whitelistz)KernelSpecTests.test_deprecated_whitelist8   s6    **,'')w<<r.   c                    | j                   j                  d      }| j                  |j                  | j                         | j                  |j
                  t        d          | j                  |j                  t        d          | j                  |j                  i        | j                  |j                  i        y )NSAMPLEargvdisplay_name)
r   get_kernel_specr2   resource_dirr   rA   r   rB   envmetadata)r%   kss     r(   test_get_kernel_specz$KernelSpecTests.test_get_kernel_spec>   s    XX%%h/$*@*@A"4V"<=*<^*LM$b)r.   c                     | j                   j                         }| j                  |d   d   | j                         | j	                  |d   d          y )Nr   rD   spec)r   get_all_specsr2   r   assertIsNotNoner3   s     r(   test_find_all_specsz#KernelSpecTests.test_find_all_specsF   sL    ((((**>:D<R<RSWX.v67r.   c                 
   t               }| j                  |j                         t        |j                  d      }| j
                  j                  j                  |j                         | j
                  j                         }| j                  |d   | j                         | j
                  j                  j                  d|j                         | j
                  j                         }| j                  |d   |       y )Nr   r   r   )r	   r   r    r   r   r   kernel_dirsappendr1   r2   r   insert)r%   tdsample_kernelr   s       r(   test_kernel_spec_priorityz)KernelSpecTests.test_kernel_spec_priorityK   s    !

#&rwwX>##BGG,((,,.*D,B,BC##Arww/((,,.*M:r.   c                     | j                   j                  | j                  dd       | j                  d| j                   j	                                | j                   j                  | j                  dd       y )NtstinstalledTkernel_nameuser)r   install_kernel_specr!   assertInr1   r,   s    r(   test_install_kernel_specz(KernelSpecTests.test_install_kernel_specV   s_    $$T%<%<._c$dndhh&@&@&BC 	$$T%<%<._c$dr.   c                 8   t               }| j                  |j                         t               }t	        |      }| j
                  j                  j                  |       | j
                  j                  | j                  d|j                         |j                         }| j
                  j                  j                  |       | j                  d|       | j                  d| j
                  j                                | j
                  j                   j#                  t%        |j                  ddd             | j                  d| j
                  j                                t               }t	        |      }| j
                  j                  j                  |       | j
                  j                  | j                  d|j                         |j                         }| j
                  j                  j                  |       | j                  d|       y )NrV   )rX   prefixzmay not be foundsharejupyterr   )r	   r   r    r   r   r   log
addHandlerrZ   r!   r   getvalueremoveHandlerr[   assertNotInr1   rO   rP   r   )r%   rR   capturehandlercaptureds        r(   test_install_kernel_spec_prefixz/KernelSpecTests.test_install_kernel_spec_prefix]   s   !

#*(($$## 	% 	
 ##%""7+((3)C)C)EF 	##E"''7Iy$QRndhh&@&@&BC *(($$## 	% 	
 ##%""7++X6r.   ntz/usr/local/sharez)needs Unix system without root privileges)reasonc                     | j                  t              5  | j                  j                  | j                  dd       d d d        y # 1 sw Y   y xY w)NrV   FrW   )assertRaisesOSErrorr   rZ   r!   r,   s    r(   test_cant_install_kernel_specz-KernelSpecTests.test_cant_install_kernel_specz   sK    
 w' 	HH((''^% ) 	 	 	s   )AAc                 r    | j                   j                  d      }| j                  || j                         y r0   )r   remove_kernel_specr2   r   )r%   paths     r(   test_remove_kernel_specz'KernelSpecTests.test_remove_kernel_spec   s,    xx**84t556r.   c                     t        t        j                  dddddgt        t        t
        j                        }|j                         \  }}| j                  |j                  d|j                  dd	             y )
Nz-mzjupyter_client.kernelspecappremover   z-f)stdoutstderrrE   r   utf8replace)r   sys
executabler   r   osenvironcommunicater2   
returncodedecode)r%   pout_s       r(   test_remove_kernel_spec_appz+KernelSpecTests.test_remove_kernel_spec_app   sh    . 


 Qq#**VY*GHr.   c                 |    dD ]  }t        j                  |      rJ  dD ]  }t        j                  |      sJ  y )N)z	julia-0.4ipythonRpython_3zHaskell-1-2-3)z	has spaceu   ünicodez%percentz	question?)r   _is_valid_kernel_name)r%   goodbads      r(   test_validate_kernel_namez)KernelSpecTests.test_validate_kernel_name   sP    
 	:D 33D999	:
 	=C "77<<<	=r.   c                    | j                   }t        j                         t        j                  |j                         G fddt        j                        } |       }|j                         }t        |      dgk(  sJ y)z@Test get_all_specs in subclasses that override find_kernel_specsc                   *    e Zd Z fdZ fdZy),KernelSpecTests.test_subclass.<locals>.MyKSMc                 ~    t        j                         }|dk(  r||_        |_        |S |k(  r	 |S t        |      Nfake)copyr   rD   KeyError)r%   r   rJ   native_kernelnative_namerD   s      r(   rC   z<KernelSpecTests.test_subclass.<locals>.MyKSM.get_kernel_spec   sN    yy/6> $DI(4D%
 	 [(  #4.(r.   c                 $    dj                   iS r   )rD   )r%   r   r   rD   s    r(   r1   z>KernelSpecTests.test_subclass.<locals>.MyKSM.find_kernel_specs   s    L!;!; r.   N)__name__
__module____qualname__rC   r1   )r   r   rD   s   r(   MyKSMr      s    	r.   r   r   N)	r   tempfile
gettempdirr   NATIVE_KERNEL_NAMErC   r   rK   sorted)r%   r   r   myksmspecsr   r   rD   s        @@@r(   test_subclasszKernelSpecTests.test_subclass   sz    hh**, 33++K8	 	J00 	( ##%e} 5555r.   N)r   r   r   r)   r-   r4   r:   r>   rH   rM   rT   r\   ri   pytestmarkskipifr|   r   accessW_OKro   rs   r   r   r    r.   r(   r   r      s    -D  *8
	;e7: [[WW_KYRYY/A277%K!KL:  	7I"=$6r.   r   )__doc__r   r#   r|   rz   r   unittestior   loggingr   os.pathr   r   
subprocessr   r   r   r	   r   jupyter_corer
   utilsr   r   r   jupyter_clientr   TestCaser   r   r.   r(   <module>r      sW    %   	 
    ! !    '   ! %  %m6h'' m6r.   