
    g|                         d 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Zddl	m
Z
 ddlmZ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 Z G d de      Z G d de      Z G d de      Zy)zTests for the notebook manager.    N)contextmanager)combinations)	HTTPError)TestCaseskipIf)NamedTemporaryFile)v4)TemporaryDirectory)
TraitError   )FileContentsManagerc                     | j                  |      }	 t        j                  |       y# t        $ r t	        d|       Y yw xY w)z
    Make a directory.
    zDirectory already exists: N)_get_os_pathosmakedirsOSErrorprint)contents_managerapi_pathos_paths      O/usr/lib/python3/dist-packages/notebook/services/contents/tests/test_manager.py	_make_dirr      sD     ++H5G8
G 8*7+678s   ) AAc                   
   e Zd Zedd       Zd Zd Zd Zd Zd Z	d Z
d	 Z eej                  d
k(  d      d        Zd Z e eed      xr  ej&                         dk(  d       eej                  j)                  d      d      d               Z eej                  j)                  d      d      d        Z eej                  j)                  d      d      d        Zej2                  j5                  d      d        Zy)TestFileContentsManagerNc              #      K   |xs d| d}	 d  | j                  |       y # t        $ r&}| j                  |j                  |       Y d }~y d }~ww xY wwNzShould have raised HTTPError()failr   assertEqualstatus_codeselfstatusmsges       r   assertRaisesHTTPErrorz-TestFileContentsManager.assertRaisesHTTPError#   W     >4VHA>	 IIcN  	4Q]]F33	4*   A$ A	AA	AAAc                     |j                  |      }|j                  |      }t        ||t        j                  j	                  |             t        j
                  ||       y)zJMake a symlink to src from dst

        src and dst are api_paths
        N)r   r   r   pathisfilesymlink)r#   r   srcdstsrc_os_pathdst_os_paths         r   r-   zTestFileContentsManager.symlink-   sK    
 '33C8&33C8k;{(CD


;,    c                     t               5 }t        |      }| j                  |j                  |       d d d        y # 1 sw Y   y xY wNroot_dir)r
   r   r    r6   )r#   tdfms      r   test_root_dirz%TestFileContentsManager.test_root_dir7   s=    ! 	.R$b1BR[["-	. 	. 	.s	   )=Ac                     t               5 }t        j                  j                  |dddd      }| j	                  t
        t        |       d d d        y # 1 sw Y   y xY w)Nnotebookdirismissingr5   )r
   r   r+   joinassertRaisesr   r   )r#   r7   roots      r   test_missing_root_dirz-TestFileContentsManager.test_missing_root_dir<   sS    ! 	NR77<<JtYGDj*=M	N 	N 	Ns   A AAc                     t               5 }| j                  t        t        |j                         d d d        y # 1 sw Y   y xY wr4   )r   r@   r   r   name)r#   tfs     r   test_invalid_root_dirz-TestFileContentsManager.test_invalid_root_dirA   s=    ! 	QRj*=P	Q 	Q 	Qs	   ';Ac                 ~   t               5 }|}t        |      }|j                  d      }dj                  d      }t	        j
                  j                  |j                  g| }| j                  ||       t        |      }|j                  d      }t        j
                  j                  |j                  d      }| j                  ||       t        |      }|j                  d      }t        j
                  j                  |j                  d      }| j                  ||       d d d        y # 1 sw Y   y xY w)Nr5   z/path/to/notebook/test.ipynb/
test.ipynbz////test.ipynb)	r
   r   r   splitr   r+   r?   r6   r    )r#   r7   rA   r8   r+   rel_path_listfs_paths          r   test_get_os_pathz(TestFileContentsManager.test_get_os_pathE   s      ! 	,RD$d3B??#ABD;AA#FMggll2;;??GT7+$d3B??<0Dggll2;;=GT7+$d3B??#34Dggll2;;=GT7+!	, 	, 	,s   DD33D<c           	      F   d}d}t               5 }|}t        j                  t        j                  j	                  ||             t        |      }|j                  }|j                  dd      }|j                  dd| d      }d d d        | j                         | j                  |t        j                  j	                  j                  |             | j                  |t        j                  j	                  |||j                  |             y # 1 sw Y   xY w)Nu	   sub ∂irztest-cp.ipynbr5   cprI   rH   z/test.ipynb)r
   r   mkdirr+   r?   r   checkpointscheckpoint_pathassertNotEqualr    checkpoint_dir)	r#   subdcp_namer7   rA   r8   cpmcp_dir	cp_subdirs	            r   test_checkpoint_subdirz.TestFileContentsManager.test_checkpoint_subdirZ   s    !! 
	RDHHRWW\\"d+,$d3B..C((lF ++${+I
	 	FI.dC4F4F!PQBGGLLtS=O=OQX$YZ
	 
	s   A6DD c                    t               5 }t        |      }d}t        ||       |j                  |d      }| j	                  |d| dd        |j                  |      }|d   D ci c]  }|d	   |
 }}| j                  d
|v        | j                  |d
   |       | j                  d|v        d d d        y c c}w # 1 sw Y   y xY w)Nr5   ztest bad symlink.txtr+   exttargetrH   zbad symlinkcontentrD   untitled.txt)r
   r   r   new_untitledr-   get
assertTruer    )r#   r7   cmr+   
file_modelmodelr`   contentss           r   test_bad_symlinkz(TestFileContentsManager.test_bad_symlinkl   s    ! 	7R$b1B%Db$d?J LLX$q'@AFF4LE 9>i8H-4(H  OONh67Xn5zBOOMX56#	7 	7	7 	7s   AC)B<6=C<CC
win32zwill not run on windowsc                    t               5 }t        |      }d}t        ||       |j                  |      }t	        j
                  dt        j                  j                  |d             |j                  |d      }|j                  |      }|d   D ci c]  }|d   |
 }}| j                  d|       | j                  |d   |       | j                  d|       d d d        y c c}w # 1 sw Y   y xY w)	Nr5   ztest recursive symlink	recursiver\   r]   r`   rD   ra   )r
   r   r   r   r   r-   r+   r?   rb   rc   assertInr    assertNotIn)	r#   r7   re   r+   r   rf   rg   r`   rh   s	            r   test_recursive_symlinkz.TestFileContentsManager.test_recursive_symlink   s    ! 	4R$b1B+Db$ood+GJJ{BGGLL+$FGd?JFF4LE 9>i8H-4(H  MM.(3Xn5zB[(3!	4 	4	4 	4s   BC,C'#;C,'C,,C5c                 l   t               5 }t        |      }d}d}| d| }t        ||       |j                  |dz         }| j	                  ||d   |       |j                  |d	      }|j                  |      }| j                  t        |d
   d       ||g       d d d        y # 1 sw Y   y xY w)Nr5   ztest good symlinkzgood symlinkrH   z	/zfoo.txtr+   r+   Fr`   r`   c                     | d   S )NrD    )xs    r   <lambda>z;TestFileContentsManager.test_good_symlink.<locals>.<lambda>   s
    1V9 r2   )key)r
   r   r   newr-   rc   r    sorted)	r#   r7   re   parentrD   r+   rf   symlink_model	dir_models	            r   test_good_symlinkz)TestFileContentsManager.test_good_symlink   s    ! 	R$b1B(F!DXQtf%Db&!Vk%9:J LLZ/6FF4F7MvIy+1DE
+	 	 	s   BB**B3getuidr   zCan't test permissions as rootwinz!Can't test permissions on Windowsc                    t               5 }t        |      }|j                  d      }|j                  |d         }t	        j
                  |d       	 |j                  |d      5 }|j                  d       d d d        | j                  d       d d d        y # 1 sw Y   #xY w# t        $ r&}| j                  |j                  d	       Y d }~?d }~ww xY w# 1 sw Y   y xY w)
Nr5   filetyper+      wz
don't carez!Should have raised HTTPError(403)i  )r
   r   rb   r   r   chmodopenwriter   r   r    r!   )r#   r7   re   rg   r   fr&   s          r   test_403z TestFileContentsManager.test_403   s      ! 	?R$b1BOOO0EooeFm4GHHWe$?WWWc* *aGGL)*
 		=>	? 	?* * 5  445	? 	?sN   A	CB''B9B'CB$	 B''	C0CCCCC"z"Can't test hidden files on Windowsc                 2   | j                  t              5 }t               5 }t        |      }d}t        j
                  j                  |d      }t        ||       |j                  |      }|j                  |d         }	 |j                  |      }| j                  d       d d d        d d d        | j                  t              5 }t               5 }t        |      }d}t        j
                  j                  |d	      }t        ||       |j                  |      }|j                  |d         }	 |j                  |      }| j                  d       d d d        d d d        | j                  t              5 }t               5 }t        |      }d}t        j
                  j                  |d      }t        ||       |j                  |      }|j                  |d         }	 |j                  ||      }| j                  d       d d d        d d d        | j                  t              5 }t               5 }t        |      }d}t        j
                  j                  |d	      }t        ||       |j                  |      }|j                  |d         }	 |j                  ||      }| j                  d       d d d        d d d        | j                  t              5 }t               5 }t        |      }d}t        j
                  j                  |d      }t        ||       |j                  |      }|j                  |d         }
d
}	 |j                  |
|      }| j                  d       d d d        d d d        | j                  t              5 }t               5 }t        |      }d}t        j
                  j                  |d      }t        ||       |j                  |      }|j                  |d         }d}
	 |j                  |
|      }| j                  d       d d d        d d d        | j                  t              5 }t               5 }t        |      }d}t        j
                  j                  |d	      }t        ||       |j                  |      }|j                  |d         }
d
}	 |j                  |
|      }| j                  d       d d d        d d d        | j                  t              5 }t               5 }t        |      }d}t        j
                  j                  |d	      }t        ||       |j                  |      }|j                  |d         }d}
	 |j                  |
|      }| j                  d       d d d        d d d        y # t        $ r'}	| j                  |	j                  d       Y d }	~	8d }	~	ww xY w# 1 sw Y   BxY w# 1 sw Y   GxY w# t        $ r'}	| j                  |	j                  d       Y d }	~	d }	~	ww xY w# 1 sw Y   xY w# 1 sw Y   xY w# t        $ r'}	| j                  |	j                  d       Y d }	~	hd }	~	ww xY w# 1 sw Y   rxY w# 1 sw Y   wxY w# t        $ r'}	| j                  |	j                  d       Y d }	~	d }	~	ww xY w# 1 sw Y   	xY w# 1 sw Y   xY w# t        $ r'}	| j                  |	j                  d       Y d }	~	d }	~	ww xY w# 1 sw Y   xY w# 1 sw Y   xY w# t        $ r'}	| j                  |	j                  d       Y d }	~	+d }	~	ww xY w# 1 sw Y   5xY w# 1 sw Y   :xY w# t        $ r'}	| j                  |	j                  d       Y d }	~	d }	~	ww xY w# 1 sw Y   xY w# 1 sw Y   xY w# t        $ r'}	| j                  |	j                  d       Y d }	~	Wd }	~	ww xY w# 1 sw Y   axY w# 1 sw Y   y xY w)Nr5   .hiddenvisible.txtrq   r+   z!Should have raised HTTPError(400)  visible.hidden.txtznew.txtzold.txt)r@   r   r
   r   r   r+   r?   r   rx   r   delete_filer   r    r!   saverename_file)r#   excinfor7   re   
hidden_dirfile_in_hidden_pathrg   r   resultr&   old_pathnew_paths               r   test_400z TestFileContentsManager.test_400   sn    y) 	CW#% C("5&
&(ggll:m&L#"j)$78//%-8C^^G4F IIABC	C  y) 	CW#% C("5&
&(ggll:m&L#"j)$78//%-8C^^G4F IIABC	C$ y) 	CW#% C("5&
&(ggll:m&L#"j)$78//%-8CWWUW8F IIABC	C  y) 	CW#% C("5&
&(ggll:m&L#"j)$78//%-8CWWUW8F IIABC	C$ y) 	CW#% C("5&
&(ggll:m&L#"j)$78??5=9$C^^Hh?F IIABC	C$ y) 	CW#% C("5&
&(ggll:m&L#"j)$78??5=9$C^^Hh?F IIABC	C$ y) 	CW#% C("5&
&(ggll:m&L#"j)$78??5=9$C^^Hh?F IIABC	C$ y) 	CW#% C("5&
&(ggll:m&L#"j)$78??5=9$C^^Hh?F IIABC	C 	C_ ! 9$$Q]]C889C C	C 	C6 ! 9$$Q]]C889C C	C 	C: ! 9$$Q]]C889C C	C 	C6 ! 9$$Q]]C889C C	C 	C< ! 9$$Q]]C889C C	C 	C< ! 9$$Q]]C889C C	C 	C< ! 9$$Q]]C889C C	C 	C< ! 9$$Q]]C889C C	C 	Csv  W2A!W%V2W%%W2
X?A!X27W?X2X?>Z	A!Y?+Y>Y?Z4[?A![!Z4[[*\&5A#\[&+\<\&!]3,A#]&\3"]&3]3_ #A#^3^ ^3*_ `A#` >_` !`2	W";WW%W""W%%W/	*W22W<?	X/X*$X2*X//X22X<	7X??Y		Y<Y71Y?7Y<<Y??Z		ZZ	[	"[>[[		[[	[[#&	\/\\\\\#	\&&\03	]#<]]&]##]&&]0	+]33]= 	^0	^+%^3+^00^33^=	8_  _
	_=_82` 8_==`  `
	``c                     | j                  t              5 }t               5 }t        |      }d}t        j
                  j                  |d      }t        ||       |j                  |      }|j                  |d         }	 |j                  |d      }| j                  d       d d d        d d d        | j                  t              5 }t               5 }t        |      }d	}t        j
                  j                  |d
      }t        ||       |j                  |      }|j                  |d         }	 |j                  |d      }| j                  d       d d d        d d d        y # t        $ r&}	| j                  |	j                  d       Y d }	~	d }	~	ww xY w# 1 sw Y   xY w# 1 sw Y   xY w# t        $ r&}	| j                  |	j                  d       Y d }	~	d }	~	ww xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr5   r   r   rq   r+   r   z!Should have raised HTTPError(404)  r   r   )r@   r   r
   r   r   r+   r?   r   rx   r   rc   r   r    r!   )
r#   r   r7   re   r   r   rg   r   r   r&   s
             r   test_404z TestFileContentsManager.test_404H  s    y) 	CW#% C("5&
&(ggll:m&L#"j)$78//%-8CVVGS1F IIABC	C  y) 	CW#% C("5&
&(ggll:m&L#"j)$78//%-8CVVGS1F IIABC	C 	C ! 9$$Q]]C889C C	C 	C6 ! 9$$Q]]C889C C	C 	Cs   F*A!FE,F&F*G4A!G(8F6
G(G4,	F5FFFFF'	#F**F36	G%?G G( G%%G((G1	-G44G=skip send2trash testsc                    t               5 }t        |      }t        t        j                  j                  |j                  dd      d      5 }|j                  d       d d d        t        t        j                  j                  |j                  dd      d      5 }|j                  d       d d d        | j                  d      5  |j                  d       d d d        | j                  d      5  |j                  d       d d d        | j                  d      5  |j                  d       d d d        | j                  d      5  |j                  dd	       d d d        | j                  d      5  |j                  d
d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   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   [xY w# 1 sw Y   y xY w)Nr5   z..foor   barr   zfoo/../../../barz../fooz../barr    text)r   r`   format)rg   r+   )r
   r   r   r   r+   r?   r6   r   r'   rc   deleterenamer   )r#   r7   re   r   s       r   test_escape_rootz(TestFileContentsManager.test_escape_rootk  s   ! 	"R$b1Bbggll2;;e<cB abggll2;;e<cB a ++C0 t++C0 +)*+++C0 $		(#$++C0 .		(H-.++C0 ""!$ !	  ""!	" 	"   + +$ $. ." "!	" 	"s   AG2F=G2F*.G2F6G22GG2G/G2GG24G&G2F'	"G2*F3	/G26F?	;G2G	G2G	G2G#	G2&G/	+G22G;N)__name__
__module____qualname__r   r'   r-   r9   rB   rF   rM   rZ   ri   r   sysplatformro   r}   hasattrr   r~   
startswithr   r   r   pytestmarkskipr   rt   r2   r   r   r   !   s?    -.
N
Q,*[$7( CLLG#%>?4 @4&( GB!6ibiikQ&68XYCLL##E*,OP? Q Z? CLL##E*,PQLC RLC\ CLL##E*,PQ C R CD [[-." /"r2   r   c                      e Zd Zed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$                  j'                  d      d        Zd Zej$                  j'                  d      d        Zd Zd Zd Zd Zy)TestContentsManagerNc              #      K   |xs d| d}	 d  | j                  |       y # t        $ r&}| j                  |j                  |       Y d }~y d }~ww xY wwr   r   r"   s       r   r'   z)TestContentsManager.assertRaisesHTTPError  r(   r)   c                     | j                   }| j                  |       |j                  dj                  |dg             |j                  dj                  |dg             y )NrH   nb.ipynbrq   file.txt)r   make_dirrx   r?   )r#   r   re   s      r   make_populated_dirz&TestContentsManager.make_populated_dir  sQ    ""h
CHHh
345
CHHh
345r2   c                    | j                   j                  |      }| j                  |d   |       | j                  |d   d       |d   D ]  }|d   dk(  r|d   dk(  r>| j                  |d   d       dj                  |dg      }| j                  |d   |       R|d   d	k(  s[| j                  |d   d
       dj                  |d
g      }| j                  |d   |        y )Nr+   r   	directoryr`   r   rD   r   rH   r;   r   )r   rc   r    r?   )r#   r   r|   entrycomplete_paths        r   check_populated_dir_filesz-TestContentsManager.check_populated_dir_files  s    ))--h7	6*H56*K8y) 
	?EV}+v&(  v
; #(J)? @  v>v*,  v
; #(J)? @  v>
	?r2   c                     t               | _        | j                  j                  | _        t	        | j                        | _        y r4   )r
   	_temp_dirrD   r7   r   r   r#   s    r   setUpzTestContentsManager.setUp  s1    +-..%% 3WW!
r2   c                 8    | j                   j                          y r   )r   cleanupr   s    r   tearDownzTestContentsManager.tearDown  s     r2   c                 0    t        | j                  |       y)zomake a subdirectory at api_path

        override in subclasses if contents are not on the filesystem.
        N)r   r   )r#   r   s     r   r   zTestContentsManager.make_dir  s    
 	$''2r2   c                     t        j                  dddi      }t        j                  d|g      }|j                  j	                  |       y )Ndisplay_datazapplication/javascriptzalert('hi');zprint('hi'))outputs)nbformat
new_outputnew_code_cellcellsappend)r#   nboutputcells       r   add_code_cellz!TestContentsManager.add_code_cell  s?    $$^6NP^5_`%%mfXF
r2   c                    | j                   }|j                  d      }|d   }|d   }|j                  |      }|d   }t        dt	        j                         z        |d   d<   | j                  |       |j                  ||       |||fS )	Nr;   r   rD   r+   r`   g    .Ametadatacounter)r   rb   rc   inttimer   r   )r#   re   rg   rD   r+   
full_modelr   s          r   new_notebookz TestContentsManager.new_notebook  s    ""Z0V}V}VVD\
	"$'diik(9$::y!2

D!4~r2   c                 b   | j                   }|j                  d      }t        |t              sJ | j	                  d|       | j	                  d|       | j	                  d|       | j                  |d   d       | j                  |d   d       | j                  |d   d       |j                  d      }t        |t              sJ | j	                  d|       | j	                  d|       | j	                  d|       | j                  |d   d       | j                  |d   d       | j                  |d   d       |d   }|j                  |	      }t        |t              sJ | j	                  d|       | j	                  d|       | j	                  d|       | j                  |d   d
       | j                  |d   d       | j                  |d   | d       |j                  |d      }| j                  |d   d       |j                  |d      }| j                  |d   d       y )Nr;   r   rD   r+   r   Untitled.ipynbr   zUntitled Folderrq   r   untitledz	/untitledz.foo.barr]   zuntitled.foo.barzuntitled1.foo.bar)r   rb   
isinstancedictrm   r    )r#   re   rg   sub_dirs       r   test_new_untitledz%TestContentsManager.test_new_untitled  s   ""Z0%&&&fe$fe$fe$v
3v(89v(89 [1%&&&fe$fe$fe$v4v(9:v(9:-W-%&&&fe$fe$fe$v/v
3v7)9(=> W*=v(:;W*=v(;<r2   c                 ~   | j                   }| j                         \  }}}|j                  |      }| j                  |d          |j	                  ||       |j                  |      }| j                  |d   |d          d}|j                  ||       |j                  |      }| j                  |d   |d          y )Nr`   last_modifiedzrenamed.ipynb)r   r   rc   r   r   assertGreaterEqualr   )	r#   re   r   rD   r+   rg   savedr   renameds	            r   test_modified_datez&TestContentsManager.test_modified_date  s    "" **,D$t 	5+,
t to 6o8NO
 #
		$!&&"O$/"	
r2   c                 V   | j                   }|j                  d      }|d   }|d   }|j                  |      }t        |t              sJ | j                  d|       | j                  d|       | j                  |d   |       | j                  |d   |       |j                  |dd      }| j                  |d   |       | j                  |d   d       | j                  |d	   d
       | j                  |d   t               |j                  |ddd      }| j                  |d	   d       d}| j                  d       |j                  |d      }|j                  ||z         }t        |t              sJ | j                  d|       | j                  d|       | j                  d|       | j                  |d   d       | j                  |d   |j                  d       d|        |j                  |d      d   }	|j                  |	      }
dd
dddddd}|j                         D ]  }| j                  ||   |
|           | j                  d|
       | j                  d|
       | j                  d       |j                  d      }| j                  |d   d       | j                  |d   t               | j                  t        |d         d       | j                  |d   d       | j                  |d   d       |j                  ||z   d       }|j                  dd       }|j                  dd       }| j                  |d   d       | j                  |d   d!       |d   D ]u  }|d   |d   k(  r| j                  ||       !|d   |d   k(  r| j                  ||       ?|d   |d   k(  r| j                  ||       ]| j                  d" |               w | j                  t               5  |j                  dd       d d d        y # 1 sw Y   y xY w)#Nr;   r   rD   r+   Tr   )r`   r   r   r   r   r`   base64)r`   r   r   /foo/r   .ipynbr]   r   rH   r\   r   z
text/plainra   zfoo/untitled.txt)r`   r   mimetyperD   r+   r   writablecreatedr   foo/barr      Frr   r   zUnexpected directory entry: )r   rb   rc   r   r   rm   r    assertNotIsInstancer   stripkeysassertIsInstancelistlenr   r@   r   )r#   re   rg   rD   r+   model2
nb_as_filenb_as_bin_filer   file_model_pathrf   expectedkdirmodelmodel2_no_contentfile_model_no_contentsub_sub_dir_no_contentr   s                     r   test_getzTestContentsManager.test_get  s#   ""Z0V}V} &$'''ff%ff%v-v-VVD$VV<
F+T2F+V4H-v6  I!6=dQ18< eW(;$'&$'''ff%ff%i()9:GMM#,>+?q)GH //wF/CFKVVO,
$"&
  	9AXa[*Q-8	9i,oz2 	i 66%=&);7hy148Xi0115&)51&)51 FF7T>5FA "'95 I!#	5!A/7C/7?i( 
	DE V} 6v >>  (>?v"3F";;  (9:v"7"??  (=>		8	BC
	D y) 	'FF5vF&	' 	' 	's   PP(c                    | j                   }|j                  d      }|d   }|d   }d|d<   |j                  ||      }t        |t              sJ | j                  d|       | j                  d|       | j                  |d   d       | j                  t        |j                  |       d}| j                  d       |j                  |d      }|d   }|j                  d	d
      d   }|dz   x}|d<   |j                  ||      }t        |t              sJ | j                  d|       | j                  d|       | j                  |d   d       | j                  |d   |       | j                  t        |j                  |       y )Nr;   r   rD   r+   rI   r   r   r+   r   rH      r   z/test_in_sub.ipynbztest_in_sub.ipynb)r   rb   updater   r   rm   r    r@   r   rc   r   rsplit)r#   re   rg   rD   r+   r   dr   s           r   test_updatezTestContentsManager.test_updateg  sx   ""Z0V}V} %f		%&%&&&fe$fe$v5 	)RVVT2 eW:>V} KKQ"#$';#;;5=		%&%&&&fe$fe$v(;<v1 	)RVVT2r2   c                    | j                   }|j                  d      }|d   }|d   }|j                  |      }|j                  ||      }t	        |t
              sJ | j                  d|       | j                  d|       | j                  |d   |       | j                  |d   |       d}| j                  d       |j                  |d      }|d   }|d   }|j                  |      }|j                  ||      }t	        |t
              sJ | j                  d|       | j                  d|       | j                  |d   d       | j                  |d   d	       y )
Nr;   r   rD   r+   r   r   r  r   zfoo/Untitled.ipynb)	r   rb   rc   r   r   r   rm   r    r   )r#   re   rg   rD   r+   r   r   s          r   	test_savezTestContentsManager.test_save  sP   ""Z0V}V} VVD\
 
D)%&&&fe$fe$v-v- eW:>V}V}t t$%&&&fe$fe$v(89v(<=r2   r   c                     | j                   }| j                         \  }}}|j                  |       | j                  t        |j                  |       | j                  t        |j
                  |       y r   )r   r   r   r@   r   rc   r#   re   r   rD   r+   s        r   test_deletezTestContentsManager.test_delete  s^    ""**,D$ 			$ 	)RYY5 	)RVVT2r2   c                 \   | j                   }| j                         \  }}}|j                  |d       | j                  t        |j
                  |       t        |j                  d      t              sJ t        j                  dk(  r<t        |t              r,| j                  d      5  |j                  dd       d d d        g d}|d d }|dd  }|D ]$  }| j                  |       | j                  |       & t        |d      D ]1  \  }	}
| j                  d      5  |j                  |	|
       d d d        3 | j                  d      5  |j                  d	d
       d d d        |j                  dd	       |D ]  }| j                  |        |D ]Q  }| j                  d      5  |j                  |       d d d        |j!                  dd	d      }| j                  |       S |j                  d	d
       y # 1 sw Y   BxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ixY w)Nchanged_pathrj   r   zprevent: in name)r   r   r   zfoo/bar/foozfoo/bar/foo/barr   i  r   zfoo/bar_diffr   )r^   r   r  )r   r   r   r@   r   rc   r   r   r   r   r   r'   r   r   r   rb   replace)r#   re   r   rD   r+   all_dirsunchanged_dirschanged_dirs_dirr.   dest	unchangedchanged_dirnamenew_dirnames                 r   test_renamezTestContentsManager.test_rename  s"   ""**,D$ 			$' 	)RVVT2"&&0$777 <<7"z"6I'J++C0 >		.*<=> O!"1| 	1D##D)**40	1
 &h2 	%IC++C0 %		#t$% %	%
 '', 	:OONO9	: 			)^, ( 	6I**95	6  , 	8O++C0 ('( *11)^QOK**;7	8 	H5K> >% %	: 	:( (s0   )G<H	H(H"<H	H	H"H+	c                     | j                   }| j                  t              5 }|j                  d       d d d        | j	                  j
                  j                  d       y # 1 sw Y   0xY w)Nr   r   )r   r@   r   r   r    	exceptionr!   )r#   re   errs      r   test_delete_rootz$TestContentsManager.test_delete_root  sW    ""y) 	SIIbM	22C8	 	s   A##A,c                    | j                   }d}d}| d| }| j                  |       |j                  |      }|j                  |      }| j	                  |d   |d   j                  dd             |j                  |d      }| j	                  |d   d	       | j	                  |d
   d       |j                  |d      }| j	                  |d   |       | j	                  |d
   |       y )Nu   å bu   nb √.ipynbrH   rq   rD   r   z-Copy1.ipynbu   å b/copy 2.ipynbzcopy 2.ipynbr+   )r   r   rx   copyr    r  )r#   re   rz   rD   r+   origr  copy2s           r   	test_copyzTestContentsManager.test_copy  s    ""4&!fvv4v wwt}ftF|';';Hn'UV 12v7v(;<c"v-v-r2   c                 *   | j                   }| j                         \  }}}|j                  |      d   }|j                  j	                  |      rJ |j                  |       |j                  |      d   }|j                  j	                  |      sJ y Nr`   )r   r   rc   notarycheck_cellstrust_notebook)r#   re   r   rD   r+   	untrustedtrusteds          r   test_trust_notebookz'TestContentsManager.test_trust_notebook  s    ""**,D$FF4L+	99((333 	$&&,y)yy$$W---r2   c                    | j                   }| j                         \  }}}|j                  ||       |j                  D ]*  }|j                  dk(  s|j
                  j                  s*J  |j                  |       |j                  |      d   }|j                  D ]*  }|j                  dk(  s|j
                  j                  r*J  y )Ncoder`   )	r   r   mark_trusted_cellsr   	cell_typer   r)  r'  rc   )r#   re   r   rD   r+   r   s         r   test_mark_trusted_cellsz+TestContentsManager.test_mark_trusted_cells  s    ""**,D$
b$'HH 	1D~~'==0000	1 	$VVD\)$HH 	-D~~'}},,,,	-r2   c                    | j                   }| j                         \  }}}|j                  ||       |j                  ||       |j                  j                  |      rJ |j                  |       |j                  |      d   }|j                  ||       |j                  ||       |j                  j                  |      sJ y r$  )r   r   r-  check_and_signr%  check_signaturer'  rc   r  s        r   test_check_and_signz'TestContentsManager.test_check_and_sign-  s    ""**,D$
b$'
"d#99,,R000
$VVD\)$
b$'
"d#yy((,,,r2   r   )r   r   r   r   r'   r   r   r   r   r   r   r   r   r   r  r  r
  r   r   r   r  r  r  r"  r*  r/  r3  rt   r2   r   r   r     s     6?$
!3
$=L
6V'p$3L!>F [[-.3 /346l [[-.9 /9.*.--r2   r   c                       e Zd ZdZd Zy)TestContentsManagerNoAtomiczQ
    Make same test in no atomic case than in atomic case, using inheritance
    c                     t               | _        | j                  j                  | _        t	        | j                        | _        d| j
                  _        y )Nr5   F)r
   r   rD   r7   r   r   use_atomic_writingr   s    r   r   z!TestContentsManagerNoAtomic.setUpA  sA    +-..%% 3ww!
 490r2   N)r   r   r   __doc__r   rt   r2   r   r5  r5  <  s    9r2   r5  )r8  r   r   r   
contextlibr   	itertoolsr   r   tornado.webr   unittestr   r   tempfiler   r   r	   ipython_genutils.tempdirr
   	traitletsr   filemanagerr   r   r   r   r5  rt   r2   r   <module>rA     s_    % 	 
  % "  ! % ' # 7   -8a"h a"Ht-( t-n9"5 9r2   