
    Mhz                        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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ZddlmZ dd	lmZ dd
lmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/ ej0        1                    ej0        2                    e3                    Z4ddZ5 G d de          Z6 G d de6          Z7d Z8dS )z*Test installation of JupyterLab extensions    N)join)Path)TemporaryDirectory)TestCase)patch)paths)commands)DEV_DIR
AppOptions_compare_ranges_test_overlapbuildbuild_checkcheck_extensiondisable_extensionenable_extensionget_app_infoget_app_versioninstall_extensionlink_packagelist_extensionslock_extensionuninstall_extensionunlink_packageunlock_extensionupdate_extension)
CoreConfig_get_default_core_datac                    t           j                            |           }t           j                            |          st          j        |           t          | d                                           |r0t          j        |           j        }t          j	        | ||f           t          j        |           j
        S )zgensure a file exists, and set its modification time

    returns the modification time of the file
    a)ospathdirnameexistsmakedirsopenclosestatst_atimeutimest_mtime)filemtimer#   atimes       `/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/jupyterlab/tests/test_jupyterlab.pytouchr0   1   s    
 good##G7>>'"" 
GsOO '&
u~&&&74==!!    c                       e Zd Zd Zd ZdS )AppHandlerTestc                 `    t                      }| j                            |           |j        S N)r   tempdirsappendname)selftds     r/   tempdirzAppHandlerTest.tempdirI   s*    !!R   wr1   c           	      H    g  _         t          t          j        d           _         j         fd            }                                  _        t           j        d           _        t           j        d           _	        i  _
        dD ]}t          t          d|          }d }t           j        |          }t          j        |||           t          j                            t          |d	                    s"t          j        t          |d	                     t#           d
|z   |           t          t          |d                    5 }t%          j        |          }d d d            n# 1 swxY w Y   |d          j
        |<   g  _        t+          j        d j	         j        t           j        d          d          } j                            |           t0          fD ]}	t3          |	d          r6t+          j        |	d j        g          } j                            |           t3          |	d          r6t+          j        |	d j	        g          } j                            |           t3          |	d          r5t+          j        |	d j	                  } j                            |           t3          |	d          r5t+          j        |	d j                  } j                            |            j        D ]0}|                                                      |j                   1                     t0          j         j	        g                                t0          j         j        g                                tA          tC          j"                              #                                tA           j                  dz  #                                           tC          j"                     _$        ddg _%        d S )Nwc                  D    j         D ]} |                                  d S r5   )r6   cleanup)dr9   s    r/   cleanup_tempdirsz.AppHandlerTest.setUp.<locals>.cleanup_tempdirsT   s-    ]  		 r1   dataconfig)	extensionincompatpackagemimeextensionmock_packagesc                 H    d| v rg }d|v r|                     d           | |fS )Nnode_modules)remove)dnamefiless     r/   ignorez$AppHandlerTest.setUp.<locals>.ignorec   s9    !U**E!U**LL000e|#r1   )rN   rJ   mock_package.jsonr8   z
os.environlab)JUPYTER_CONFIG_DIRJUPYTER_DATA_DIRJUPYTERLAB_DIRENV_JUPYTER_PATHENV_CONFIG_PATHCONFIG_PATH
BUILD_PATHzjupyterlab-test-extension@1.0zjupyterlab-test-extension@2.0)&r6   r&   r!   devnull
addCleanupr;   test_dirpjoindata_dir
config_dir	pkg_nameshereshutilcopytreer"   r$   r%   setattrjsonloadpatchesr   dictr7   r   hasattrobjectstartstopassertEqualrV   rU   r   r	   get_app_dirresolveapp_dirpinned_packages)
r9   rA   r8   srcrN   destfidrB   pmods
   `         r/   setUpzAppHandlerTest.setUpN   s    BJ,,		 	 	 	 
	 dmV44x88 J 	0 	0Dot44C$ $ $ --DOCf5555 7>>%n"="=>> 9E$77888D'D.$///eD.1122 &cy~~& & & & & & & & & & & & & & &#'<DN4  J&*o$(M"'u"="= 
 
 	A7 	' 	'Cs.// 'L&84=/JJ##A&&&s-.. 'L&7$/9JKK##A&&&sM** 'LmT_EE##A&&&sL)) 'LlDMBB##A&&& 	$ 	$AGGIIIOOAF#### 	.0ABBB/$-AAA%''((0022T$-5H5H55P4Y4Y4[4[	
 	
 	
  +-- !@A`as   E99E=	 E=	N)__name__
__module____qualname__r;   rv    r1   r/   r3   r3   H   s<          
Mb Mb Mb Mb Mbr1   r3   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej        j        d	             Zd
 Zej                             ej                    dk    d          d             Zd Zd Zd Zd Zd Zd Zd Zd Zej        j        d             Zej        j        ej                            ej                            e            d          d                         Z!ej        j        d             Z"ej        j        d             Z#d Z$d Z%d Z&ej        j        d             Z'd  Z(d! Z)d" Z*d# Z+d$ Z,d% Z-d& Z.d'S )(TestExtensionc                     t          | j                  du sJ t          | j        dd          }t	          j        |          sJ t                      d         }| j        d         }||v sJ t          |          sJ d S NT
extensions*.tgzrD   r   mock_extensionr\   ro   globr   r_   r   r9   r"   r   r8   s       r/   test_install_extensionz$TestExtension.test_install_extension   s     !455====T\<99y!^^L1
~k*z!!!!t$$$$$$$r1   c                 .   t          | j                  du sJ t          | j        dd          }t          | j                  du sJ t	          j        |          sJ t                      d         }| j        d         }||v sJ t          |          sJ d S r~   r   r   s       r/   test_install_twicez TestExtension.test_install_twice   s     !455====T\<99 !455====y!^^L1
~k*z!!!!t$$$$$$$r1   c                    t          | j                   | j        d         }|t                      d         v sJ t	          |          sJ t          |          du sJ |t                      d         vsJ t	          |          rJ d S )NrG   r   T)r   mock_mimeextensionr_   r   r   r   r9   r8   s     r/   test_install_mime_rendererz(TestExtension.test_install_mime_renderer   s    $1222~o.|~~l33333t$$$$$"4((D0000<>>,77777"4(((((((r1   c                     t          j        t                    5 }t          | j                   d d d            n# 1 swxY w Y   dt          |j                  v sJ t          | j        d                   rJ d S )NzConflicting DependenciesrE   )	pytestraises
ValueErrorr   mock_incompatstrvaluer   r_   )r9   excinfos     r/   test_install_incompatiblez'TestExtension.test_install_incompatible   s    ]:&& 	2'd0111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2)S-?-?????"4>*#=>>>>>>>s   ;??c                    | j         }t          j        t                    5  t	          |           d d d            n# 1 swxY w Y   t          t          |d                    5 }t          j        |          }d d d            n# 1 swxY w Y   t                      d         }|d         }||vsJ t          |          rJ d S )NrP   r   r8   )mock_packager   r   r   r   r&   r\   rd   re   r   r   )r9   r"   rs   rB   r   r8   s         r/   test_install_failedz!TestExtension.test_install_failed   s6    ]:&& 	$ 	$d###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$%n--.. 	"#9S>>D	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"!^^L1
F|:%%%%"4(((((((s!   =AA%BB
B
c                    | j         }t          j        t          |d                     t	          j        t                    5  t          |           d d d            n# 1 swxY w Y   t          | j	        d                   rJ | j
        }t          j        t          |d                     t	          j        t                    5  t          |           d d d            n# 1 swxY w Y   t          | j	        d                   rJ d S )Nindex.jsrD   rG   )r   r!   rK   r\   r   r   r   r   r   r_   r   )r9   r"   s     r/   test_validationzTestExtension.test_validation   sh   "
	%j))***]:&& 	$ 	$d###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$"4>+#>?????&
	%j))***]:&& 	$ 	$d###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$"4>/#BCCCCCCCs$   AA#&A#C$$C(+C(c                 \   t          | j                  du sJ | j        d         }t          |          sJ t	          | j        d                   du sJ t          | j        dd          }t          j        |          rJ t                      d         }||vsJ t          |          rJ d S )NTrD   r   r   )	r   r   r_   r   r   r\   ro   r   r   )r9   r8   r"   r   s       r/   test_uninstall_extensionz&TestExtension.test_uninstall_extension   s     !455====~k*t$$$$$"4>+#>??4GGGGT\<999T??"""!^^L1
:%%%%"4(((((((r1   c                 >   t          | j                   t          | j                   | j        d         }| j        d         }t	          |          du sJ t	          |          du sJ t          d          du sJ t                      d         }||vsJ ||vsJ d S )NrD   rG   Tall_r   )r   r   r   r_   r   r   r   )r9   ext_namemime_ext_namer   s       r/   test_uninstall_all_extensionsz+TestExtension.test_uninstall_all_extensions   s    $-...$1222>+.7x((D0000}--5555"---5555!^^L1
z))))J......r1   c                 T   t          d          du sJ | j        }t                       t          t	          |dd                    5 }t          j        |          }d d d            n# 1 swxY w Y   |d         d         }d|vsJ t          d          rJ t          d          du sJ t                       t          t	          |dd                    5 }t          j        |          }d d d            n# 1 swxY w Y   |d         d         }d|v sJ t          d          sJ d S )Nz@jupyterlab/console-extensionTstagingrP   
jupyterlabr   )	r   ro   r   r&   r\   rd   re   r   r   )r9   ro   rs   rB   r   s        r/   test_uninstall_core_extensionz+TestExtension.test_uninstall_core_extension   s   "#BCCtKKKK,%N;;<< 	"9S>>D	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	",'5
.j@@@@"#BCCCCC !@AATIIII%N;;<< 	"9S>>D	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	",'5
.*<<<<>???????s$   A((A,/A,C88C<?C<c                 b   ddg}t          | j        d         |d                   sJ t          | j        d         |d                   sJ t                      d         }|d         |v sJ |d         |v sJ t          |d                   sJ t          |d                   sJ t	          |d                   sJ t	          |d                   sJ t                      d         }|d         |vsJ |d         |vsJ t          |d                   rJ t          |d                   rJ dS )z
        You should be able to install different versions of the same extension with different
        pinned names and uninstall them with those names.
        ztest-1ztest-2r   )pin   r   N)r   rp   r   r   r   )r9   NAMESr   s      r/   !test_install_and_uninstall_pinnedz/TestExtension.test_install_and_uninstall_pinned  s`   
 8$ !5a!8eAhGGGGGG !5a!8eAhGGGGGG!^^L1
Qx:%%%%Qx:%%%%uQx(((((uQx((((( #58,,,,,"58,,,,,!^^L1
Qxz))))Qxz))))"58,,,,,"58,,,,,,,r1   Windowsz$running npm pack fails on windows CI)reasonc                    t          |                                           fd| j        D             }t          j        t          |d         z            t          dz                       t          j        t          |d         z            t          dz                       t          dz  dz            t          dz  dz            g| _        |                                  dS )z[
        Same as above test, but installs from a local folder instead of from npm.
        c                     g | ]L}t          j        d d|gt           j        ddt                              j                                        MS )npmpackT)stdouttextcheckcwd)
subprocessrunPIPEr   r   strip).0r8   base_dirs     r/   
<listcomp>zJTestExtension.test_install_and_uninstall_pinned_folder.<locals>.<listcomp>(  sg     	
 	
 	
  N%!MM   UUWW	
 	
 	
r1   r   1r   2rF   N)r   r;   rp   ra   unpack_archiver   r   )r9   packagesr   s     @r/   (test_install_and_uninstall_pinned_folderz6TestExtension.test_install_and_uninstall_pinned_folder  s     ''	
 	
 	
 	
 ,	
 	
 	
 	c(Xa["8993x#~;N;NOOOc(Xa["8993x#~;N;NOOO #HsNY$> ? ?XPS^V_E_A`A`a..00000r1   c                 ~   | j         }| j        d         }t          |           t                      d         }||vsJ |t                      d         v sJ t	          |          sJ t          |          du sJ t                      d         }||vsJ |t                      d         vsJ t	          |          rJ d S )NrD   linked_packagesr   T)r   r_   r   r   r   r   r9   r"   r8   linkeds       r/   test_link_extensionz!TestExtension.test_link_extension9  s    "~k*T 126!!!!|~~l33333t$$$$$d##t++++ 126!!!!<>>,77777"4(((((((r1   c                 R   | j         }| j        d         }t          |          du sJ t                      d         }||v sJ |t                      d         vsJ t	          |          sJ t          |          sJ t                      d         }||vsJ t	          |          rJ d S )NrF   Tr   r   )r   r_   r   r   r   r   r   s       r/   test_link_packagezTestExtension.test_link_packageG  s     ~i(D!!T)))) 12v~~~~<>>,77777t$$$$$d##### 126!!!!"4(((((((r1   c                     | j         }t          |          du sJ t          |          du sJ t                      d         }| j        d         }||vsJ t          |          rJ d S )NTr   rF   )r   r   r   r   r_   r   )r9   targetr   r8   s       r/   test_unlink_packagez!TestExtension.test_unlink_packageT  s    "F##t++++f%%---- 12~i(6!!!!"4(((((((r1   c                 R    t          | j                  du sJ t                       d S )NT)r   r   r   r9   s    r/   test_list_extensionsz"TestExtension.test_list_extensions]  s0     !455====r1   c                 r   |                                  }t          |          }t          | j        |          du sJ t	          |dd          }t          j        |          sJ t          |          d         }| j        d         }||v sJ t          ||          sJ t          | j        d         |          du sJ t	          |dd          }t          j        |          rJ t          |          d         }||vsJ t          ||          rJ t          | j        |          du sJ t          |          d         }| j        d         }||v sJ t          ||          sJ t          | j        |          du sJ t          |          d         }||vsJ t          ||          rJ d S )	Nro   app_optionsTr   r   rD   r   rF   )r;   r   r   r   r\   r   r   r_   r   r   r   r   r   )r9   ro   optionsr"   r   r   r   pkg_names           r/   test_app_dirzTestExtension.test_app_dira  s   ,,..W--- !4'JJJdRRRRWlG44y!g666|D
>+.:%%%%xW======"4>+#>GTTTX\\\\\WlG449T??"""!g666|D
z))))"8AAAAAAD-7CCCtKKKK'2223DE>),6!!!!xW======d/WEEEMMMM'2223DEv%%%%"8AAAAAAAAr1   c                    |                                  }t          |          }t          j                            | j                  rt          j        | j                   t          | j                  du sJ t          |dd          }t          j
        |          rJ t          |          d         }| j        d         }||v sJ t          ||          sJ d S Nr   Tr   r   r   rD   r;   r   r!   r"   r$   ro   
removedirsr   r   r\   r   r   r_   r   r9   ro   r   r"   r   r   s         r/   test_app_dir_use_sys_prefixz)TestExtension.test_app_dir_use_sys_prefix  s    ,,..W---7>>$,'' 	(M$,''' !455====WlG449T??"""!g666|D
>+.:%%%%xW========r1   c                    |                                  }t          |d          }t          j                            | j                  rt          j        | j                   t          | j                  du sJ t          |dd          }t          j
        |          rJ t          |          d         }| j        d         }||vsJ t          ||          rJ d S )NF)ro   use_sys_dirTr   r   r   rD   r   r   s         r/   test_app_dir_disable_sys_prefixz-TestExtension.test_app_dir_disable_sys_prefix  s    ,,..W%@@@7>>$,'' 	(M$,''' !455====WlG449T??"""!g666|D
>+.z))))"8AAAAAAAAr1   c                    |                                  }| j        }t          |          }t          j                            |          rt          j        |           t          | j                  du sJ t          |dd          }t          j
        |          sJ t          |dd          }t          j
        |          rJ t          |          d         }| j        d         }||v sJ t          ||          sJ t          | j        |          du sJ t          j
        |          sJ t          |          d         }||v sJ t          ||          sJ t          | j        d         |          du sJ t          j
        |          rJ t          j
        |          sJ t          |          d         }||v sJ t          ||          sJ t          | j        d         |          du sJ t          j
        |          rJ t          j
        |          rJ t          |          d         }||vsJ t          ||          rJ d S r   )r;   ro   r   r!   r"   r$   r   r   r   r\   r   r   r_   r   r   )r9   ro   sys_dirr   sys_pathapp_pathr   r   s           r/   test_app_dir_shadowingz$TestExtension.test_app_dir_shadowing  s   ,,.., 1117>>'"" 	#M'""" !455====,88y""""",889X&&&&&!k:::<H
>+.:%%%%x[AAAAAA !4+NNNRVVVVVy"""""!k:::<H
:%%%%x[AAAAAA"4>+#>KXXX\`````9X&&&&&y"""""!k:::<H
:%%%%x[AAAAAA"4>+#>KXXX\`````9X&&&&&9X&&&&&!k:::<H
z))))"8EEEEEEEEr1   c                    t          | j                  du sJ t                       t          | j        ddd          }t          |          5 }|                                }d d d            n# 1 swxY w Y   | j        d         |v sJ t          | j        dd          }t          |          5 }|                                }d d d            n# 1 swxY w Y   | j        d         |v sJ d S )NTr   r   index.out.jsrD   static)r   r   r   r\   ro   r&   readr_   )r9   entryrs   rB   s       r/   
test_buildzTestExtension.test_build  s]    !455====dlIwGG%[[ 	C88::D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	~k*d2222 dlHn==%[[ 	C88::D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	~k*d222222s$   A..A25A2/CCCzNot in git checkoutc                 &   t          d          }t          | j                  du sJ t          |           dt	          |          v sJ t          | j        ddd          }t          |          5 }|                                }d d d            n# 1 swxY w Y   | j	        d         |v sJ t          | j        d	d          }t          |          5 }|                                }d d d            n# 1 swxY w Y   | j	        d         |v sJ d S )
NT)splice_sourcer   z-splicedr   r   r   rD   r   )
r   r   r   r   r   r\   ro   r&   r   r_   )r9   r   r   rs   rB   s        r/   test_build_splice_packagesz(TestExtension.test_build_splice_packages  s    !t444 !455====+&&&&_[999999dlIwGG%[[ 	C88::D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	~k*d2222 dlHn==%[[ 	C88::D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	~k*d222222s$   2BBBC55C9<C9c                 8   t          | j                  du sJ t          ddd           t          | j        dd          }t          |          5 }|                                }d d d            n# 1 swxY w Y   | j        d         |v sJ t          | j        dd	          }t          |          5 }t          j	        |          }d d d            n# 1 swxY w Y   |d
         d         dk    sJ |d
         d         dk    sJ |d
         d         dk    sJ d S )NTfooz1.0bar)r8   version
static_urlr   r   rD   rP   r   r8   r   	staticUrl)
r   r   r   r\   ro   r&   r   r_   rd   re   )r9   r   rs   rB   pkgs        r/   test_build_customzTestExtension.test_build_custom  s    !455====5%E:::: dlHn==%[[ 	C88::D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	~k*d2222DL(N;;#YY 	"#9S>>D	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"L!&)U2222L!),5555L!+.%777777s$   A11A58A52CCCc                 B   t                      }t                      }|                                 t          j        d          }|                    d           |                                 }t          |||d          }d}d}|D ]'}|j        |         }	|                    ||	d           (|D ]%}|j	        |         }	|                    ||	           &t          | j        |	          du sJ t          |	           t          |d
d          }
t          |
          5 }|                                }d d d            n# 1 swxY w Y   | j        d         |v sJ t          |d
d          }t          |          5 }t#          j        |          }d d d            n# 1 swxY w Y   t'          |d         d                                                   g dk    sJ |d         d         i k    sJ |d         d         D ]}|                    d          r||v sJ d S )Njupyterlab_test_loggerDEBUGF)ro   core_configloggerr   )!@jupyterlab/application-extension@jupyterlab/apputils-extension)@jupyterlab/applicationz@jupyterlab/apputilsz@jupyterlab/coreutilsz@jupyterlab/servicesT)rD   r   r   r   rD   rP   r   r   )r   r   z@jupyterlab/mock-extensionmimeExtensionssingletonPackagesz@jupyterlab/)r   clear_packageslogging	getLoggersetLevelr;   r   r   add
singletonsr   r   r   r\   r&   r   r_   rd   re   sortedkeys
startswith)r9   default_configr   r   ro   r   r   r  r8   semverr   rs   rB   r   s                 r/   %test_build_custom_minimal_core_configz3TestExtension.test_build_custom_minimal_core_config  s   # ll""$$$"#;<<   ,,..#	
 
 




  	: 	:D#.t4FOOD&DO9999 	* 	*D#.t4FOOD&)))) !4'JJJdRRRR'"""" gx88%[[ 	C88::D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	~k*d2222GX~66#YY 	"#9S>>D	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"d<(6;;==>> C
 C
 C
 
 
 
 

 L!"23r9999%&9: 	) 	)C~~n-- )j((((	) 	)s$   !EE	E>FF#&F#c                    t          |                                           }t          | j        |          du sJ t	          | j        d         |          du sJ t          |          }| j        d         }|d                             |          du sJ t          ||          rJ t          |d|          sJ t	          d|          du sJ t          |          }|d                             d          du sJ t          d|          rJ t          dd|          sJ |d                             |          du sJ t          ||          rJ t          |d|          sJ d S )Nr   r   TrD   disabled)	installedr   @jupyterlab/notebook-extension)	r   r;   r   r   r   r_   r   getr   r9   r   infor8   s       r/   test_disable_extensionz$TestExtension.test_disable_extension+  s   T\\^^444 !4'JJJdRRRR !<'RRRVZZZZZ000~k*J##D))T1111"4W======ttIIIIII !AwWWW[_____000J##$DEEMMMM"#CQXYYYYYY,'
 
 
 	
 	
 	
 J##D))T1111"4W======ttIIIIIIIIr1   c                 ,   t          |                                           }t          | j        |          du sJ t	          | j        d         |          du sJ t          | j        d         |          du sJ t          |          }d|d         vsJ | j        d         }|d                             |d          du sJ t          ||          sJ t	          d|          du sJ t          ||          sJ t          d|          rJ d S )Nr   r   TrD   r  r  F)
r   r;   r   r   r   r_   r   r   r  r   r  s       r/   test_enable_extensionz#TestExtension.test_enable_extension?  sR   T\\^^444 !4'JJJdRRRR !<'RRRVZZZZZ{ ;QQQUYYYYY000/tJ7GGGGG~k*J##D%00E9999t999999 !AwWWW[_____t999999"#CQXYYYYYYYYr1   c                 (   t          |                                           }t          | j        |          du sJ | j        d         }t          |          }|d                             |d          du sJ t          | j        d         |           t          |          }|d                             |d          du sJ t          | j        d         |           t          |          }|d                             |d          du sJ d S )Nr   r   TrD   lockedF)	r   r;   r   r   r_   r   r  r   r   )r9   r   r8   r  s       r/   test_lock_unlock_extensionz(TestExtension.test_lock_unlock_extensionM  s    T\\^^444 !4'JJJdRRRR~k*000H~!!$..%7777t~k2HHHH000H~!!$..$66664'JJJJ000H~!!$..%777777r1   c                    t                      sJ t          | j                  du sJ t          | j                  du sJ t                       t                      rJ t          | j                  du sJ t                      sJ t          | j        d                   du sJ t                      rJ t          | j        d          }t          |          5 }t          j        |          }d d d            n# 1 swxY w Y   t          |d          5 }|                                }d d d            n# 1 swxY w Y   d|d<   t          |d          5 }t          j        ||           d d d            n# 1 swxY w Y   t                      sJ t                      sJ t          |d          5 }|                    |           d d d            n# 1 swxY w Y   t                      rJ t          | j        d	          }t          |d          5 }|                                }d d d            n# 1 swxY w Y   t          |d          5 }|                    |d
z              d d d            n# 1 swxY w Y   t                      sJ t                      sJ t          |d          5 }|                    |           d d d            n# 1 swxY w Y   t                      rJ d S )NTrG   rP   rbr   r   r=   wbr   s   
console.log("hello");)r   r   r   r   r   r   r   r   r_   r\   r&   rd   re   r   dumpwrite)r9   pkg_pathrs   rB   origs        r/   test_build_checkzTestExtension.test_build_checkZ  su    }} !455====D-..$6666==    !!899TAAAA}}"4>/#BCCtKKKK==    ,n==(^^ 	"s9S>>D	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"(D!! 	S88::D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	U(C   	!CIdC   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!}}}}(D!! 	SIIdOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ==    *J77(D!! 	S88::D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	(D!! 	9SIId77888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9}}}}(D!! 	SIIdOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	==     s~   C::C>C>D66D:=D:E88E<?E<3GGGH66H:=H:I66I:=I:1KKKc                 "   t          dd          sJ t          dd          sJ t          dd          sJ t          dd          sJ t          dd          rJ t          d	d
          rJ t          dd          J t          dd          J t          dd          sJ t          dd          sJ t          dd          sJ t          dd          sJ t          dd          sJ t          dd          rJ t          dd          rJ d S )Nz^0.6.0z^0.6.1z>0.1z0.6z~0.5.0z~0.5.2z0.5.2z^0.5.0z~1.5.0z^1.6.0*z<0.6z0.1^1 || ^2^1z^2^2 || ^3^3 || ^4z^1 || ^3)r   r   s    r/   test_compatibilityz TestExtension.test_compatibility  sR   Xx00000VU+++++Xx00000Wh///// 844444 844444S%((000VU++333Z.....Z.....T:.....T:.....Z44444 Z88888 z2222222r1   c                     t          dd          dk    sJ t          dd          dk    sJ t          dd          dk    sJ t          dd          dk    sJ t          dd          J d S )	Nr"  r#  r   r$  r%  r   z^1 || ^4)r   r   s    r/   test_compare_rangesz!TestExtension.test_compare_ranges  s    z400A5555z:66!;;;;z:66!;;;;z:66"<<<<z:66>>>>>r1   c           	        	
 t                      }|d         d         
d 		
fd}	fd} G d dt                    fd}t          j        t          d	|          }t          j        t          j        d
|          }t          j        t          j        d|          }|5  |5  t          j        j        |5  t          j                  5  t          d          du sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Ndependenciesr   c                     dd| iiS )Nr+  r   rz   )vers    r/   _gen_depz7TestExtension.test_install_compatible.<locals>._gen_dep  s    "%>$DEEr1   c           
          |dk    sJ |                                  d                      d           d          ddS )Nmockextension	^2000.0.0)z0.9.0z1.0.0z1.1.0z2.0.0z2.0.0-b0z2.1.0-b02.1.0)r8   versionsrz   )registryr8   r   r.  current_app_deps      r/   _mock_metadataz=TestExtension.test_install_compatible.<locals>._mock_metadata  s    ?****%Xo66%Xo66%Xo66%Xk22 ( 9 9 ( 5 5%Xk22   r1   c           
          |dddidgd}|                      d                     |d|||d         d	t          |d	          d
}|S )Nr2  rD   Tr   )r8   r   r   jupyterlab_extracted_filesr1  Fr   zmockextension.tgz)sourceis_dirrB   r8   r   filenamer"   )updater\   )r9   r9  r;   argskwargsrB   r  r.  s          r/   _mock_extractz<TestExtension.test_install_compatible.<locals>._mock_extract  sw    "*D1/9l	 D KK--... 	?/g':;; D Kr1   c                       e Zd ZdS )6TestExtension.test_install_compatible.<locals>.SuccessN)rw   rx   ry   rz   r1   r/   SuccessrA    s        Dr1   rB  c                 J    |dv sJ |dk    r
              | |g|R i |S )N)r0  mockextension@1.1.0rD  rz   )r9   r8   r=  r>  rB  orig_installs       r/   _mock_installz<TestExtension.test_install_compatible.<locals>._mock_install  sN    CCCCC,,,gii<d<T<<<V<<<r1   _fetch_package_metadata_extract_package_install_extensionr0  T)
r   	Exceptionr   ri   r	   _AppHandlerrI  r   r   r   )r9   	core_datar6  r?  rF  p1p2p3rB  r.  r5  rE  s           @@@@r/   test_install_compatiblez%TestExtension.test_install_compatible  s   *,,	#N34MN	F 	F 	F	 	 	 	 	 		 	 	 	 	&	 	 	 	 	i 	 	 		= 	= 	= 	= 	= 	= \($=~NN\(.0BMRR\(.0DmTT 	B 	B 	B 	B#/BL B BV]7++ B B(99TAAAAAB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs~   %D8(D <D	C2	&D	2C66D	9C6:D	=D 	DD DD D8 D$	$D8'D$	(D88D<?D<c                    g fd}d }t          j        t          j        d|          }t          j        t          j        d|          }t	          | j                  du sJ t	          | j                  du sJ |5  |5  t          | j        d                   du sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | j        d         gk    sJ d S )Nc                                          |d         |dd                              d          d         z              |dd|z   dS Nr   r   @Fzfoo/bar/)r8   r:  r"   r7   splitr9   r8   r=  r>  r  s       r/   rF  z7TestExtension.test_update_single.<locals>._mock_install  N    T!WtABBx~~c':':1'==>>> E:;LMMMr1   c                     dS Nz	10000.0.0rz   r   s     r/   _mock_latestz6TestExtension.test_update_single.<locals>._mock_latest      ;r1   rI  "_latest_compatible_package_versionTrD   	r   ri   r	   rK  r   r   r   r   r_   r9   rF  r[  rM  rN  r  s        @r/   test_update_singlez TestExtension.test_update_single  s   		N 	N 	N 	N 	N	 	 	 \(.0DmTT\(.0TVbcc !455==== !899TAAAA 	I 	I 	I 	I#DN;$?@@DHHHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	IT^K89999999s6   >CB-!C-B1	1C4B1	5CCCc                 ,    t          d          du sJ d S )Nr   F)r   r   s    r/   test_update_missing_extensionz+TestExtension.test_update_missing_extension  s!    &&%//////r1   c                    g fd}d }t          j        t          j        d|          }t          j        t          j        d|          }t	          | j                   t	          | j                   |5  |5  t          | j        d                   du sJ t          | j        d                   du sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | j        d         | j        d         gk    sJ d S )Nc                                          |d         |dd                              d          d         z              |dd|z   dS rS  rU  rW  s       r/   rF  z9TestExtension.test_update_multiple.<locals>._mock_install  rX  r1   c                     dS rZ  rz   r   s     r/   r[  z8TestExtension.test_update_multiple.<locals>._mock_latest  r\  r1   rI  r]  rD   TrG   r^  r_  s        @r/   test_update_multiplez"TestExtension.test_update_multiple  s   		N 	N 	N 	N 	N	 	 	 \(.0DmTT\(.0TVbcc$-...$1222 	M 	M 	M 	M#DN;$?@@DHHHH#DN?$CDDLLLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M T^K8$.:YZZZZZZZs6   6C9=C7CC	C
C	CC!Cc                    g fd}t           j        j        fd}t          | j                  du sJ t          | j                  du sJ t          j        t           j        d|          }t          j        t           j        d|          }|5  |5  t          d d          du sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t                    | j
        d         | j
        d         gk    sJ d S )	Nc                                          |d         |dd                              d          d         z              dS )Nr   r   rT  TrU  )r9   r8   r=  r>  updateds       r/   _mock_updatez3TestExtension.test_update_all.<locals>._mock_update  s<    NN47T!""X^^C%8%8%;;<<<4r1   c                 (     |           }g |d<   |S )Nlocal_extensionsrz   )r9   r  original_app_infos     r/   _mock_app_infoz5TestExtension.test_update_all.<locals>._mock_app_info  s#    $$T**D')D#$Kr1   T_update_extension_get_app_infor   rD   rG   )r	   rK  rp  r   r   r   r   ri   r   r  r_   )r9   rj  rn  rM  rN  rm  ri  s        @@r/   test_update_allzTestExtension.test_update_all  s   	 	 	 	 	 %0>	 	 	 	 	
 !!455==== !899TAAAA\(.0C\RR \(.PP 	= 	= 	= 	=#Dt444<<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=g4>+#>@_"```````s6   CB8,C8B<	<C?B<	 CCCN)/rw   rx   ry   r   r   r   r   r   r   r   r   r   markslowr   r   skipifplatformsystemr   r   r   r   r   r   r   r   r   r   r!   r"   r$   r
   r   r   r
  r  r  r  r  r&  r)  rP  r`  rb  rf  rq  rz   r1   r/   r|   r|      s       % % %% % %) ) )? ? ?	) 	) 	)D D D	) 	) 	)
/ 
/ 
/ [@ @ @$- - -2 [Y&/U   1 1 12) ) )) ) )) ) )  B B B<> > >B B B#F #F #FJ [3 3 3 [[BGNN7333<QRR3 3 SR 3" [8 8 8" [3) 3) 3)jJ J J(Z Z Z8 8 8 [*! *! *!X3 3 3(? ? ?8B 8B 8Bt: : :(0 0 0[ [ [*a a a a ar1   r|   c                      |            }t           j        }|                    |            |                                 |t           _        d S r5   )sysstderr_link_jupyter_server_extension
initialize)jp_serverappmake_lab_appappry  s       r/   test_load_extensionr  #  sC    
,..CZF&&|444NNCJJJr1   r5   )9__doc__r   rd   r   r!   ru  ra   r   rx  os.pathr   r\   pathlibr   tempfiler   unittestr   unittest.mockr   r   jupyter_corer   r   r	   jupyterlab.commandsr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   jupyterlab.coreconfigr   r   r"   r#   abspath__file__r`   r0   r3   r|   r  rz   r1   r/   <module>r     s   0 0    				       



 ! ! ! ! ! !       ' ' ' ' ' '                                                                  * E D D D D D D D	wrwx0011" " " ".Sb Sb Sb Sb SbX Sb Sb SblB
a B
a B
a B
a B
aN B
a B
a B
aJ    r1   