
    oi               	       @   d dl 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mZmZmZ ej                  j                   d        Zej                  j                   d	        Zej                  j                   d
        Zd Zd ZdefdZd Zd Zej2                  d        Zej2                  d        Zej                  j                   ej                  j9                  deddgeddigdgeddgg      d               Zej                  j                   d        Zej                  j                   d        Zej                  j                   d        Z ej                  j                   d        Z!ej2                  d        Z"ej                  j                   d        Z#y)    N)Path)SimpleNamespace)List)LanguageServerManager   )EditableFileShadowFilesystemErrorextract_or_nonesetup_shadow_filesystemc                    K   | dz  }|j                  d       t        |      }|j                          d {    |j                  ddgk(  sJ y 7 w)Nzexisting.pyza
testatest)
write_textr   readlinestmp_pathpatheditable_files      w/home/ubuntu/docker-apps/notebooks/venv/lib/python3.12/site-packages/jupyter_lsp/tests/test_virtual_documents_shadow.py	test_readr      sU     m#DOOI &M



3-/// s   5AAAc                    K   | dz  }t        |      }|j                          d {    |j                  dgk(  sJ y 7 w)Nz
missing.py )r   r   r   )r   r   missing_files      r   test_read_missingr      sG     l"D%L



"%%% s   $A >A c                 t  K   | dz  }t        |      }|j                          d {     |j                  di |j                   |j                  ddgk(  sJ |j                  ddddddd	       |j                  dd
gk(  sJ  |j                  di |j                   |j                  dgk(  sJ y 7 w)Ntest.pynewtextves   r   )line	character   )startendvestr   )znew
text)r   )r   r   apply_change
full_ranger   r   s      r   test_apply_changer*   (   s      iD &M



MGm.F.FG5&/111 aa0qq6Q   5&/111M>]%=%=>2$&&& s   $B8B6BB8c                  ~    dddii} t        | dg      ddik(  sJ t        | ddg      dk(  sJ t        | ddg      J y )Nnestedvaluer!   missing)r
   )objs    r   test_extract_or_noner0   <   s]    gq\
"C3
+|;;;37 349993G 45===    c                     dd| |didS )NztextDocument/didOpentextDocumenturir   methodparams r4   s     r   did_openr:   C       (!3#=> r1   changesc                     dd| i|ddS )NtextDocument/didChanger5   )r3   contentChangesr6   r9   )r5   r<   s     r   
did_changer@   J   s    *$)3<7K r1   c                     dd| |didS )NtextDocument/didSaver3   r4   r6   r9   r4   s     r   did_save_with_textrC   Q   r;   r1   c                     ddd| iidS )NrB   r3   r5   r6   r9   )r5   s    r   did_save_without_textrE   X   s    ,%QT8VWWr1   c                 6    t        | j                  d            S )Nz.virtual_documents)strmkdir)tmpdirs    r   shadow_pathrJ   \   s    v||0122r1   c                  8    t               } ddg dgddi| _        | S )Npython-lsp-serverTpythonr   )requires_documents_on_diskargv	languagesversion)r   language_servers)managers    r   rS   rS   a   s1    #%G*."	
 G Nr1   z'message_func, content, expected_contentcontent
of
opened
filer   zcontent after changezcontent at savec                 T  K   t        t        |       j                               }t        |       dz  } ||j                         |      } |d|d|       d {   }t        |t              sJ t        |      5 }	|	j                         |k(  sJ 	 d d d        y 7 A# 1 sw Y   y xY ww)Nr   clientrL   )r   r   as_uri
isinstancerG   openr   )
rJ   message_funccontentexpected_contentrS   shadowok_file_pathmessageresultfs
             r   test_shadowrb   o   s      %T+%6%=%=%?@F$y0L<..0':G(G-@'JJFfc"""	l	 ,qvvx++++, , K, ,s*   AB(B!B(:B
B(B%!B(c                 2  K   t        |       dz  }t        t        |      j                               }t        |      dz  }t        dddii      }t	        |j                         d      } |d|d|       d	{   }|J |j                         rJ y	7 w)
z@We call server well behaved when it does not require a disk copywellr   rL   rN   FrR   rT   rV   N)r   r   rW   r   r:   exists)rJ   shadow_path_for_wellr]   r^   rS   r_   r`   s          r   &test_no_shadow_for_well_behaved_serverrh      s     
  ,v5$T*>%?%F%F%HIF,-	9L-0Le/TUG |**,.IJG(G-@'JJF>>#**,,,,	 Ks   A7B9B:Bc                 D  K   t        |       dz  }t        |j                               }t        |      dz  }t        dddii      }t	        |j                         d      } |d|d|       d {   }|J |j                         sJ |j                         sJ y 7 -w)	Nillr   rL   rN   Tre   rT   rV   )r   r   rW   r   r:   rf   is_dir)rJ   shadow_path_for_illr]   r^   rS   r_   r`   s          r   *test_shadow_created_for_ill_behaved_serverrm      s      {+e3$%8%?%?%ABF+,y8L-0Ld/STG |**,.IJG(G-@'JJF%%'''%%'''	 Ks   A.B 0B1.B c                   K   t        t        |       j                               t        |       dz  j                         }fd}t        j                  t
        d      5   |ddi       d {    d d d        t        j                  t
        d      5   |ddi id	       d {    d d d         |dd
i       d {   }|J  |t        dd             d {   }|J  |t        |             d {   }|J t        j                  t
        d      5   |ddd|iid	       d {    d d d        y 7 # 1 sw Y   xY w7 # 1 sw Y   xY w7 7 7 d7 /# 1 sw Y   y xY ww)Nr   c                      d| d      S NrV   rL   r9   r_   rS   r]   s    r   
run_shadowz(test_shadow_failures.<locals>.run_shadow       h)<gFFr1   zCould not get textDocument frommatchr7   r>   zCould not get URI fromr3   r6   ztextDocument/completionzfile:///other/path.pyr[   z.* is missing contentChangesr5   )r   r   rW   pytestraisesr	   r:   rE   )rJ   rS   ok_file_urirr   r`   r]   s    `   @r   test_shadow_failuresry      s    $T+%6%=%=%?@F$y088:KG 
,4U	V ?($<=>>>? 
,4L	M 
/NB;OP
 	
 	

 x)BCDDF>> h'>	JKKF>> 3K@AAF>> 
,4R	S 
2)E;+?@
 	
 	

 
+ 	?? ?
	

 
 E L B
	

 
s   A E5$E2E3E7#E5E+E,E0E5E!E5#E#$E5 E%#E5$E)7E'8E)<	E5EEE5EEE5#E5%E5'E))E2.E5c                 6  K   t        |       dz  dz  j                         }t        t        |       j                               fd}t        j                  t
        d      5   |t        |d             d {    d d d        y 7 # 1 sw Y   y xY ww)Nz..r   c                      d| d      S rp   r9   rq   s    r   rr   z)test_shadow_traversal.<locals>.run_shadow   rs   r1   z)is not relative to shadow filesystem rootrt   r[   )r   rW   r   rv   rw   r	   r:   )rJ   rS   file_beyond_shadow_root_urirr   r]   s    `  @r   test_shadow_traversalr}      s     #'#4t#;i#G"O"O"Q$T+%6%=%=%?@FG 
%P
 K "=yIJJJK K 	KK Ks0   A#B'B=B>B	BBBBc              #      K   t        |       dz  }|j                          |j                  d       | |j                  d       y w)Nno_permission_dirr   i  )r   rH   chmod)rI   r   s     r   forbidden_shadow_pathr      s=     <--DJJLJJu
J 	JJus   AAc                   K   | dz  j                         t        | j                               fd}|j                  t        j                        5   |        d {   J  |        d {   J 	 d d d        |j
                  dk(  sJ |j                  t        j                        5   |        d {   J 	 d d d        d|j
                  v sJ d|j
                  v sJ |j                          |j                  t        j                        5   |        d {   J 	 d d d        |j
                  dk(  sJ y 7 7 # 1 sw Y   xY w7 # 1 sw Y   xY w7 ?# 1 sw Y   ;xY ww)Nr   c                  2    t        d      }  d| d      S )Nr[   rV   rL   )r:   )r_   file_urirS   r]   s    r   send_changez$test_io_failure.<locals>.send_change   s!    8Y/h)<gFFr1   r   z6initialization of shadow filesystem failed three timesPermissionError)rW   r   at_levelloggingWARNINGr   clear)r   rS   caplogr   r   r]   s    `  @@r   test_io_failurer      sU    %	199;H$%:%A%A%CDFG 
	) + ]"*** ]"***+ ;;" 
	) + ]"***+Cv{{RRR+++
LLN 
	) + ]"***+;;" #"+ + #+ + #+ +s   AE7E#E$E4E5E<8E74E?E EAE7E+)E)*E+1E7EEEE7EE&"E7)E++E40E7)$r   pathlibr   typesr   typingr   rv   jupyter_lspr   virtual_documents_shadowr   r	   r
   r   markasyncior   r   r*   r0   r:   r@   rC   rE   fixturerJ   rS   parametrizerb   rh   rm   ry   r}   r   r   r9   r1   r   <module>r      s     !   -  0 0 & & ' '&>T X 3 3 
 
 -	.0KL	v5679OP	.0AB	, 	, - -( ( (& $
 $
N K K    r1   