
    }e                        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	m
Z
mZ d dlmZ d dlmZ ej                   j#                   ej$                               Zej                   j)                  ed      Zej                   j)                  ed      Zej                   j)                  ed	      Zej                   j)                  ed
      Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"ed        Z#d Z$d Z%d Z&y)    N)patch)TemporaryDirectory)assert_isdirassert_isfilemodified_env)paths)
skip_win32home_test_dirxdg_test_dirxdg_cache_dir.ipythonc                     t        j                  t               t        j                  t         j                  j	                  t
        d             t        j                  t         j                  j	                  t        d             y)zRSetup testenvironment for the module:

            - Adds dummy home dir tree
    ipythonN)osmakedirsIP_TEST_DIRpathjoinXDG_TEST_DIRXDG_CACHE_DIR     ?/usr/lib/python3/dist-packages/IPython/core/tests/test_paths.pysetup_moduler      sF     KKKK\956KK]I67r   c                  6    t        j                  t               y)zWTeardown testenvironment for the module:

            - Remove dummy home dir tree
    N)shutilrmtreeTMP_TEST_DIRr   r   r   teardown_moduler       s     MM,r   c                 :    t        j                  t        d|       S )Nget_home_dirreturn_value)r   objectr   )dirpaths    r   patch_get_home_dirr&   *   s    <<~GDDr   c                      t         j                  j                  dd      } t        j                  t
        dd      5  t        d| i      5  t        j                         }ddd       ddd       | k(  sJ y# 1 sw Y   xY w# 1 sw Y   xY w)zZtest_get_ipython_dir_1, Testcase to see if we can call get_ipython_dir without Exceptions.	someplacer   _writable_dirTr"   
IPYTHONDIRN)r   r   r   r   r$   r   r   get_ipython_dir)	env_ipdiripdirs     r   test_get_ipython_dir_1r.   .   s{    [*5I	e_4	@ (,	23(%%'( ( I	( ( ( (s#   BA8 B8B	=BBc            
         t        d      5  t        j                  t        dd      5  t        j                  t        dd      5  t        dd      5  t	        dddd	      5  t        j
                         } ddd       ddd       ddd       ddd       ddd        t        j                  j                  dd
      k(  sJ y# 1 sw Y   OxY w# 1 sw Y   SxY w# 1 sw Y   WxY w# 1 sw Y   [xY w# 1 sw Y   _xY w)zZtest_get_ipython_dir_2, Testcase to see if we can call get_ipython_dir without Exceptions.r(   get_xdg_dirNr"   r)   Tos.nameposixIPYTHON_DIRr*   XDG_CONFIG_HOMEr   )	r&   r   r$   r   r   r+   r   r   r   r-   s    r   test_get_ipython_dir_2r7   7   s    	K	( (LLDA(LLdC( )W%( (,-1 	( %%'( ( ( ( ( BGGLLj9999( ( ( ( ( ( ( ( ( (sj   C6C*CC	#C8C	 CC*C6CC	CCC'#C**C3	/C66C?c            	      R   t               } 	 t        | j                        5  t        dd      5  t	        ddt
        d      5  t        j                  d      5 }t        j                         }ddd       ddd       ddd       ddd       t        j                  j                  | j                  t
        d      k(  sJ t              dk(  sJ 	 | j                          y# 1 sw Y   wxY w# 1 sw Y   {xY w# 1 sw Y   xY w# 1 sw Y   xY w# | j                          w xY w)	zRtest_get_ipython_dir_3, use XDG if defined and exists, and .ipython doesn't exist.r1   r2   Nr3   Trecordr   r   )r   r&   namer   r   r   warningscatch_warningsr   r+   r   r   r   lencleanup)tmphomewr-   s      r   test_get_ipython_dir_3rB   E   s     "G- 	,i)	,#'"&'3 	, ++48	, =>))+E	, 	, 	, 	, W\\<KKKK1v{{	, 	, 	, 	, 	, 	, 	, 	, 	sj   D DC<C0C$	.C06C<>DAD $C-)C00C95C<<D	DDD D&c            	      z   t        t              5  t        dd      5  	 t        j                  t        j
                  j                  t        d             t        ddt        d      5  t        j                  d      5 }t        j                         }ddd       ddd       t!              dk(  sJ d	t#        |d
         v sJ 	 ddd       ddd       y# t        $ r(} | j                  t        j                  k7  r Y d} ~ d} ~ ww xY w# 1 sw Y   yxY w# 1 sw Y   }xY w# 1 sw Y   ^xY w# 1 sw Y   yxY w)z8test_get_ipython_dir_4, warn if XDG and home both exist.r1   r2   r   Nr3   Tr9      Ignoringr   )r&   HOME_TEST_DIRr   r   mkdirr   r   r   OSErrorerrnoEEXISTr   r<   r=   r   r+   r>   str)erA   r-   s      r   test_get_ipython_dir_4rM   W   s   	M	* ')W%'	HHRWW\\,	:; +
  	, ##40		, 56))+E	, 	, 1v{{S1Y&&&#' ' '  	ww%,,& '	
	, 	, 	, 	,' ' ' 's{   D1D%7CD%)D D	D*D%D1	D
"D D%D

D%DDD"D%%D.	*D11D:c                     t        t              5  t        dd      5  	 t        j                  t        j
                  j                  t        d             t        ddt        d      5  t        j                         }ddd       t        k(  sJ 	 ddd       ddd       y# t        $ r(} | j                  t        j                  k7  r Y d} ~ yd} ~ ww xY w# 1 sw Y   ZxY w# 1 sw Y   RxY w# 1 sw Y   yxY w)zRtest_get_ipython_dir_5, use .ipython if exists and XDG defined, but doesn't exist.r1   r2   r   Nr3   )r&   rF   r   r   rmdirr   r   r   rH   rI   ENOENTr   r   r+   r   )rL   r-   s     r   test_get_ipython_dir_5rQ   m   s    	M	* $)W%$	HHRWW\\,	:;
 +
  	,
 ))+E	, ###$ $ $  	ww%,,& '		, 	,$ $ $ $sc   C/C#7B#C#)C>C#C/#	C,C
C#CC#C C##C,	(C//C8c            
      :   t         j                  j                  t        d      } t        j                  |        t        j                  t         j                  j                  t        d             t        t        j                         t        t              5  t        j                  t        d|       5  t        dd      5  t        dddd      5  t        j                  d	
      5 }t        j                          }ddd       ddd       ddd       ddd       ddd       t         j                  j                  t        d      k(  sJ t#              dk(  sJ y# 1 sw Y   cxY w# 1 sw Y   gxY w# 1 sw Y   kxY w# 1 sw Y   oxY w# 1 sw Y   sxY w)zGtest_get_ipython_dir_6, use home over XDG if defined and neither exist.somexdgr   r0   r"   r1   r2   Nr3   Tr9   r   )r   r   r   rF   rG   r   r   printr   r)   r&   r   r$   r   r<   r=   r+   r>   )xdgrA   r-   s      r   test_get_ipython_dir_6rV      s?   
'',,}i
0CHHSM
MM"'',,}j9:	%

	M	* (LLC@()W%( #"#' ( ''t4( 9:%%'( ( ( ( ( BGGLL
;;;;q6Q;;( ( ( ( ( ( ( ( ( (sl   F6FE9E-	*E!?E-	E9FF!E*&E-	-E62E99F>FF	
FFc                     t         j                  j                  t         j                  j                  d            } t	        dt         j                  j                  dd      i      5  t        j                  t        dd      5  t        j                         }ddd       ddd       t         j                  j                  | d      k(  sJ y# 1 sw Y   7xY w# 1 sw Y   ;xY w)zCtest_get_ipython_dir_7, test home directory expansion on IPYTHONDIR~r*   	somewherer)   Tr"   N)
r   r   normpath
expanduserr   r   r   r$   r   r+   )home_dirr-   s     r   test_get_ipython_dir_7r]      s    ww 2 23 78H	|RWW\\#{%CD	E (LLdC(%%'( ( BGGLL;7777( ( ( (s$   (CCCC	CC%c                     t        j                  dt         j                        syt        j                  t
        dd       5  t        j                  t
        dd      5  t        dddd      5  t        j                         dk(  sJ 	 ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)	z-test_get_ipython_dir_8, test / home directory/Nr)   c                     t        |       S N)bool)r   s    r   <lambda>z(test_get_ipython_dir_8.<locals>.<lambda>   s
    4: r   r0   r"   )r4   r*   HOMEz	/.ipython)r   accessW_OKr   r$   r   r   r+   r   r   r   test_get_ipython_dir_8rg      s     99S"''"	e_.E	F 	6}4I 	6	
	6 $$&+555	6 	6 	6 	6 	6 	6 	6 	6 	6s<   B;B//B#
B/B;#B,(B//B8	4B;;Cc                     t        dt        i      5  t        j                  dk(  rt        j                  t        j
                  j                  t        d             t        dd i      5  t        j                         } d d d        t        j
                  j                  t        dd       k(  sJ t        |        t        dt        i      5  t        j                         } d d d        t        |        | t        j
                  j                  t        d      k(  s-J t        j                         t        j                         k(  sJ d d d        y # 1 sw Y   xY w# 1 sw Y   }xY w# 1 sw Y   y xY w)Nrd   r2   z.cacheXDG_CACHE_HOMEr   )r   rF   r   r;   r   r   r   r   get_ipython_cache_dirr   r   r+   r6   s    r   test_get_ipython_cache_dirrk      s%   	v}-	. L77gKK]H=>/67 6335677<<xCuLLL /?@ 63356BGGLL	BBBB..0E4I4I4KKKKL L6 66 6L Ls>   AE**E?AE*E"A'E*E	E*E'	#E**E3c                  B    t        j                         } t        |        y ra   )r   get_ipython_package_dirr   r6   s    r   test_get_ipython_package_dirrn      s    ))+Er   c                  D    t        j                  d      } t        |        y )NzIPython.terminal.ipapp)r   get_ipython_module_pathr   )
ipapp_paths    r   test_get_ipython_module_pathrr      s    ../GHJ*r   )'rI   r   r   tempfiler<   unittest.mockr   r   testpathr   r   r   IPythonr   IPython.testing.decoratorsr	   r   realpathmkdtempr   r   rF   r   r   r   r   r   r&   r.   r7   rB   rM   rQ   rV   r]   rg   rk   rn   rr   r   r   r   <module>rz      s     	     ' > >  1ww 0 0 0 23\?;ww||M>:]O<ggll=4	8 E:$',$&&8 6 6$L$
r   