
    @e4w                        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* ddl+m,Z,m-Z- ej.        /                    ej.        0                    e1                    Z2ddZ3 G d de          Z4 G d de4          Z5d Z6d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uninstall_extensionunlink_package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       @lib/python3.11/site-packages/jupyterlab/tests/test_jupyterlab.pytouchr.   /   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.tempdirG   s*    !!R   wr/   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 r3   )r4   cleanup)dr7   s    r-   cleanup_tempdirsz.AppHandlerTest.setUp.<locals>.cleanup_tempdirsR   s-    ]  		 r/   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>.ignorea   s9    !U**E!U**LL000e|#r/   )rL   rH   mock_package.jsonr6   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)&r4   r$   r   devnull
addCleanupr9   test_dirpjoindata_dir
config_dir	pkg_nameshereshutilcopytreer    r"   r#   setattrjsonloadpatchesr   dictr5   r   hasattrobjectstartstopassertEqualrT   rS   r   r	   get_app_dirresolveapp_dirpinned_packages)
r7   r?   r6   srcrL   destfidr@   pmods
   `         r-   setUpzAppHandlerTest.setUpL   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__r9   rt    r/   r-   r1   r1   F   s<          
Mb Mb Mb Mb Mbr/   r1   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%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*.tgzrB   r   mock_extensionrZ   rm   globr   r]   r   r7   r    r}   r6   s       r-   test_install_extensionz$TestExtension.test_install_extension   s     !455====T\<99y!^^L1
~k*z!!!!t$$$$$$$r/   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$$$$$$$r/   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 )NrE   r}   T)r   mock_mimeextensionr]   r   r   r   r7   r6   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(((((((r/   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 DependenciesrC   )	pytestraises
ValueErrorr   mock_incompatstrvaluer   r]   )r7   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 )NrN   r}   r6   )mock_packager   r   r   r   r$   rZ   rb   rc   r   r   )r7   r    rq   r@   r}   r6   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.jsrB   rE   )r   r   rI   rZ   r   r   r   r   r   r]   r   )r7   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 )NTrB   r}   r~   )	r   r   r]   r   r   rZ   rm   r   r   )r7   r6   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(((((((r/   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 )NrB   rE   Tall_r}   )r   r   r   r]   r   r   r   )r7   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......r/   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stagingrN   
jupyterlabr}   )	r   rm   r   r$   rZ   rb   rc   r   r   )r7   rm   rq   r@   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   rn   r   r   r   )r7   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,,,,,,,r/   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).0r6   base_dirs     r-   
<listcomp>zJTestExtension.test_install_and_uninstall_pinned_folder.<locals>.<listcomp>&  sg     	
 	
 	
  N%!MM   UUWW	
 	
 	
r/   r   1r   2rD   N)r   r9   rn   r_   unpack_archiver   r   )r7   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0r/   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 )NrB   linked_packagesr}   T)r   r]   r   r   r   r   r7   r    r6   linkeds       r-   test_link_extensionz!TestExtension.test_link_extension7  s    "~k*T 126!!!!|~~l33333t$$$$$d##t++++ 126!!!!<>>,77777"4(((((((r/   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 )NrD   Tr   r}   )r   r]   r   r   r   r   r   s       r-   test_link_packagezTestExtension.test_link_packageE  s     ~i(D!!T)))) 12v~~~~<>>,77777t$$$$$d##### 126!!!!"4(((((((r/   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   rD   )r   r   r   r   r]   r   )r7   targetr   r6   s       r-   test_unlink_packagez!TestExtension.test_unlink_packageR  s    "F##t++++f%%---- 12~i(6!!!!"4(((((((r/   c                 R    t          | j                  du sJ t                       d S )NT)r   r   r   r7   s    r-   test_list_extensionsz"TestExtension.test_list_extensions[  s0     !455====r/   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rm   app_optionsTr}   r~   rB   r   rD   )r9   r   r   r   rZ   r   r   r]   r   r   r   r   r   )r7   rm   optionsr    r}   r   r   pkg_names           r-   test_app_dirzTestExtension.test_app_dir_  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Ar/   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   rB   r9   r   r   r    r"   rm   
removedirsr   r   rZ   r   r   r]   r   r7   rm   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========r/   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)rm   use_sys_dirTr}   r~   r   rB   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Ar/   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   )r9   rm   r   r   r    r"   r   r   r   rZ   r   r   r]   r   r   )r7   rm   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Er/   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.jsrB   static)r   r   r   rZ   rm   r$   readr]   )r7   entryrq   r@   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   rB   r   )
r   r   r   r   r   rZ   rm   r$   r   r]   )r7   r   r   rq   r@   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)r6   version
static_urlr   r   rB   rN   r   r6   r   	staticUrl)
r   r   r   rZ   rm   r$   r   r]   rb   rc   )r7   r   rq   r@   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)rm   core_configloggerr   )!@jupyterlab/application-extension@jupyterlab/apputils-extension)@jupyterlab/applicationz@jupyterlab/apputilsz@jupyterlab/coreutilsz@jupyterlab/servicesT)rB   r   r   r   rB   rN   r   r}   )r   r   z@jupyterlab/mock-extensionmimeExtensionssingletonPackagesz@jupyterlab/)r   clear_packageslogging	getLoggersetLevelr9   r   r}   add
singletonsr   r   r   rZ   r$   r   r]   rb   rc   sortedkeys
startswith)r7   default_configr   r   rm   r   r}   r  r6   semverr   rq   r@   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   TrB   disabled)	installedr   @jupyterlab/notebook-extension)	r   r9   r   r   r   r]   r   getr   r7   r   infor6   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Ir/   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   TrB   r  r
  F)
r   r9   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Yr/   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 )NTrE   rN   rbr   r   r;   wbr   s   
console.log("hello");)r   r   r   r   r   r   r   r   r]   rZ   r$   rb   rc   r   dumpwrite)r7   pkg_pathrq   r@   origs        r-   test_build_checkzTestExtension.test_build_checkK  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_compatibilityx  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2r/   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>>>>>r/   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   rx   )vers    r-   _gen_depz7TestExtension.test_install_compatible.<locals>._gen_dep  s    "%>$DEEr/   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)r6   versionsrx   )registryr6   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   r/   c           
          |dddidgd}|                      d                     |d|||d         d	t          |d	          d
}|S )Nr-  rB   Tr   )r6   r   r   jupyterlab_extracted_filesr,  Fr   zmockextension.tgz)sourceis_dirr@   r6   r   filenamer    )updaterZ   )r7   r4  r9   argskwargsr@   r  r)  s          r-   _mock_extractz<TestExtension.test_install_compatible.<locals>._mock_extract  sw    "*D1/9l	 D KK--... 	?/g':;; D Kr/   c                       e Zd ZdS )6TestExtension.test_install_compatible.<locals>.SuccessN)ru   rv   rw   rx   r/   r-   Successr<    s        Dr/   r=  c                 J    |dv sJ |dk    r
              | |g|R i |S )N)r+  mockextension@1.1.0r?  rx   )r7   r6   r8  r9  r=  orig_installs       r-   _mock_installz<TestExtension.test_install_compatible.<locals>._mock_install  sN    CCCCC,,,gii<d<T<<<V<<<r/   _fetch_package_metadata_extract_package_install_extensionr+  T)
r   	Exceptionr   rg   r	   _AppHandlerrD  r   r   r   )r7   	core_datar1  r:  rA  p1p2p3r=  r)  r0  r@  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/)r6   r5  r    r5   splitr7   r6   r8  r9  r  s       r-   rA  z7TestExtension.test_update_single.<locals>._mock_install  N    T!WtABBx~~c':':1'==>>> E:;LMMMr/   c                     dS Nz	10000.0.0rx   r   s     r-   _mock_latestz6TestExtension.test_update_single.<locals>._mock_latest      ;r/   rD  "_latest_compatible_package_versionTrB   	r   rg   r	   rF  r   r   r   r   r]   r7   rA  rV  rH  rI  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!    &&%//////r/   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 rN  rP  rR  s       r-   rA  z9TestExtension.test_update_multiple.<locals>._mock_install  rS  r/   c                     dS rU  rx   r   s     r-   rV  z8TestExtension.test_update_multiple.<locals>._mock_latest  rW  r/   rD  rX  rB   TrE   rY  rZ  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   rO  TrP  )r7   r6   r8  r9  updateds       r-   _mock_updatez3TestExtension.test_update_all.<locals>._mock_update  s<    NN47T!""X^^C%8%8%;;<<<4r/   c                 (     |           }g |d<   |S )Nlocal_extensionsrx   )r7   r  original_app_infos     r-   _mock_app_infoz5TestExtension.test_update_all.<locals>._mock_app_info  s#    $$T**D')D#$Kr/   T_update_extension_get_app_infor   rB   rE   )r	   rF  rk  r   r   r   r   rg   r   r  r]   )r7   re  ri  rH  rI  rh  rd  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).ru   rv   rw   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$  rK  r[  r]  ra  rl  rx   r/   r-   rz   rz      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 [*! *! *!X3 3 3(? ? ?8B 8B 8Bt: : :(0 0 0[ [ [*a a a a ar/   rz   c                      |            }t           j        }|                    |            |                                 |t           _        d S r3   )sysstderr_link_jupyter_server_extension
initialize)jp_serverappmake_lab_appapprt  s       r-   test_load_extensionrz    sC    
,..CZF&&|444NNCJJJr/   r3   )7__doc__r   rb   r   r   rp  r_   r   rs  os.pathr   rZ   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   jupyterlab.coreconfigr   r   r    r!   abspath__file__r^   r.   r1   rz   rz  rx   r/   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u	a u	a u	a u	a u	aN u	a u	a u	ap    r/   