o
    i                  	   @   s`  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d	 Zejjd
d Zejjdd Zdd Zdd ZdefddZdd Zdd Zejdd Zejdd Zejjejdeddgedd igd ged!d!ggd"d# Zejjd$d% Zejjd&d' Zejjd(d) Z ejd*d+ Z!ejjd,d- Z"dS ).    N)Path)SimpleNamespace)List)LanguageServerManager   )EditableFileShadowFilesystemErrorextract_or_nonesetup_shadow_filesystemc                    s@   | d }| d t|}| I d H  |jddgksJ d S )Nzexisting.pyza
testatest)
write_textr   readlinestmp_pathpatheditable_file r   j/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/jupyter_lsp/tests/test_virtual_documents_shadow.py	test_read   s   
r   c                    s4   | d }t |}| I d H  |jdgksJ d S )Nz
missing.py )r   r   r   )r   r   missing_filer   r   r   test_read_missing   s
   r   c                    s   | d }t |}| I d H  |jdi |j |jddgks"J |jdddddd	dd
 |jddgks9J |jdi |j |jdgksJJ d S )Ntest.pynew
textnewtextves   r   )line	character   )startendvestr   )r   )r   )r   r   apply_change
full_ranger   r   r   r   r   test_apply_change(   s   r(   c                  C   sT   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d u s(J d S )Nnestedvaluer   missing)r	   )objr   r   r   test_extract_or_none<   s   r-   c                 C      dd| |didS )NztextDocument/didOpentextDocumenturir   methodparamsr   r0   r   r   r   did_openC      r5   changesc                 C   s   dd| i|ddS )NtextDocument/didChanger1   )r/   contentChangesr2   r   )r1   r7   r   r   r   
did_changeJ   r6   r:   c                 C   r.   )NtextDocument/didSaver/   r0   r2   r   r0   r   r   r   did_save_with_textQ   r6   r<   c                 C   s   ddd| iidS )Nr;   r/   r1   r2   r   )r1   r   r   r   did_save_without_textX   s   r=   c                 C   s   t | dS )Nz.virtual_documents)strmkdir)tmpdirr   r   r   shadow_path\   s   rA   c                  C   s    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)managerr   r   r   rI   a   s   rI   z'message_func, content, expected_contentcontent
of
opened
filer   zcontent after changezcontent at savec           
         s   t t|  }t| d }|| |}|d|d|I d H }t|ts'J t|}	|	 |ks4J W d    d S 1 s?w   Y  d S )Nr   clientrB   )r
   r   as_uri
isinstancer>   openr   )
rA   message_funccontentexpected_contentrI   shadowok_file_pathmessageresultfr   r   r   test_shadowo   s   

"rW   c                    sz   t | d }tt | }t |d }tdddiid}t| d}|d|d|I d	H }|d	u s5J | r;J d	S )
z@We call server well behaved when it does not require a disk copywellr   rB   rD   FrH   rJ   rK   N)r   r
   rL   r   r5   exists)rA   shadow_path_for_wellrR   rS   rI   rT   rU   r   r   r   &test_no_shadow_for_well_behaved_server   s   
r\   c                    s   t | d }t| }t |d }tdddiid}t| d}|d|d|I d H }|d us3J | s9J | s?J d S )	Nillr   rB   rD   TrY   rJ   rK   )r   r
   rL   r   r5   rZ   is_dir)rA   shadow_path_for_illrR   rS   rI   rT   rU   r   r   r   *test_shadow_created_for_ill_behaved_server   s   
r`   c                    sb  t t|  t| d  } fdd}tjtdd |ddiI d H  W d    n1 s3w   Y  tjtdd |dd	i id
I d H  W d    n1 sVw   Y  |ddiI d H }|d u sjJ |tddI d H }|d u szJ |t|I d H }|d u sJ tjtdd |dd	d|iid
I d H  W d    d S 1 sw   Y  d S )Nr   c                    s   d| d S )NrK   rB   r   rT   rI   rR   r   r   
run_shadow   s   z(test_shadow_failures.<locals>.run_shadowzCould not get textDocument from)matchr3   r8   zCould not get URI fromr/   r2   ztextDocument/completionzfile:///other/path.pyrP   z.* is missing contentChangesr1   )r
   r   rL   pytestraisesr   r5   r=   )rA   rI   ok_file_urirc   rU   r   rb   r   test_shadow_failures   s2   
"rh   c                 c   s4    t | d }|  |d |V  |d d S )Nno_permission_dirr   i  )r   r?   chmod)r@   r   r   r   r   forbidden_shadow_path   s   
rk   c                    sB  | d    t|    fdd}|tj | I d H d u s&J | I d H d u s0J W d    n1 s:w   Y  |jdksFJ |tj | I d H d u sWJ W d    n1 saw   Y  d|jv smJ d|jv stJ |  |tj | I d H d u sJ W d    n1 sw   Y  |jdksJ d S )Nr   c                     s   t  d} d| dS )NrP   rK   rB   )r5   ra   file_urirI   rR   r   r   send_change   s   
z$test_io_failure.<locals>.send_changer   z6initialization of shadow filesystem failed three timesPermissionError)rL   r
   at_levelloggingWARNINGr   clear)rk   rI   caplogrn   r   rl   r   test_io_failure   s&   ru   )#rq   pathlibr   typesr   typingr   re   jupyter_lspr   virtual_documents_shadowr   r   r	   r
   markasyncior   r   r(   r-   r5   r:   r<   r=   fixturerA   rI   parametrizerW   r\   r`   rh   rk   ru   r   r   r   r   <module>   sR    

	





'
