
    ^hz                        S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r  SSKJr  SSKJr  SSKJr  SSKJr  SSKrSSKJr  SS	KJr  SS
KJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,  SSK-J.r.J/r/  \R`                  Rc                  \R`                  Re                  \35      5      r4SS jr5 " S S\5      r6 " S S\65      r7S r8g)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                    [         R                  R                  U 5      n[         R                  R                  U5      (       d  [         R                  " U5        [        U S5      R                  5         U(       a8  [         R                  " U 5      R                  n[         R                  " XU45        [         R                  " U 5      R                  $ )z_ensure 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       Z/home/james-whalen/.local/lib/python3.13/site-packages/jupyterlab/tests/test_jupyterlab.pytouchr0   1   s    
 ggood#G77>>'""
GsO&&
u~&774=!!!    c                        \ rS rSrS rS rSrg)AppHandlerTestH   c                 d    [        5       nU R                  R                  U5        UR                  $ N)r   tempdirsappendname)selftds     r/   tempdirAppHandlerTest.tempdirI   s%    !R wwr1   c           	        ^  / T l         [        [        R                  S5      T l        T R                  U 4S j5       nT R                  5       T l        [        T R                  S5      T l        [        T R                  S5      T l	        0 T l
        S H  n[        [        SU5      nS n[        T R                  U5      n[        R                  " X5US9  [        R                  R                  [        US	5      5      (       d   [        R                   " [        US	5      5        [#        T S
U-   U5        [        [        US5      5       n[$        R&                  " U5      nS S S 5        WS   T R                  U'   M     / T l        [*        R,                  " ST R                  T R                  [        T R                  S5      S.5      nT R(                  R/                  U5        [0        4 GHA  n	[3        U	S5      (       a>  [*        R4                  " U	ST R                  /5      nT R(                  R/                  U5        [3        U	S5      (       a>  [*        R4                  " U	ST R                  /5      nT R(                  R/                  U5        [3        U	S5      (       a=  [*        R4                  " U	ST R                  5      nT R(                  R/                  U5        [3        U	S5      (       d  GM  [*        R4                  " U	ST R                  5      nT R(                  R/                  U5        GMD     T R(                   H.  nUR7                  5         T R	                  UR8                  5        M0     T R;                  [0        R<                  T R                  /5        T R;                  [0        R>                  T R                  /5        T R;                  [A        [B        RD                  " 5       5      RG                  5       [A        T R                  5      S-  RG                  5       5        [B        RD                  " 5       T l$        SS/T l%        g ! , (       d  f       GN= f)Nwc                  L   > TR                    H  n U R                  5         M     g r6   )r7   cleanup)dr:   s    r/   cleanup_tempdirs.AppHandlerTest.setUp.<locals>.cleanup_tempdirsT   s    ]]		 #r1   dataconfig)	extensionincompatpackagemimeextensionmock_packagesc                 F    SU ;   a  / nSU;   a  UR                  S5        X4$ )Nnode_modules)remove)dnamefiless     r/   ignore$AppHandlerTest.setUp.<locals>.ignorec   s+    !U*E!U*LL0|#r1   )rQ   rM   mock_package.jsonr9   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)&r7   r&   r!   devnull
addCleanupr<   test_dirpjoindata_dir
config_dir	pkg_nameshereshutilcopytreer"   r$   r%   setattrjsonloadpatchesr   dictr8   r   hasattrobjectstartstopassertEqualrZ   rY   r   r	   get_app_dirresolveapp_dirpinned_packages)
r:   rC   r9   srcrQ   destfidrE   pmods
   `         r/   setUpAppHandlerTest.setUpN   s-    BJJ,		 
	 dmmV4x8 JDot4C$ -DOOCf5 77>>%n"=>>E$78D'D.$/eD.12cyy~ 3#'<DNN4 ) J, JJ&*oo$(MM"'u"=
 	A7Cs.//LL&84==/J##A&s-..LL&7$//9JK##A&sM**LLmT__E##A&sL))LLlDMMB##A&  AGGIOOAFF# 
 	..0AB//$--A%%'(002T$--5H55P4Y4Y4[	
  ++- !@A`aS 32s   Q
Q	)	rs   rb   ra   r]   rj   rt   rc   r7   r_   N)__name__
__module____qualname____firstlineno__r<   rz   __static_attributes__ r1   r/   r3   r3   H   s    
Mbr1   r3   c                      \ rS rSrS rS rS rS rS rS r	S r
S	 r\R                  R                  S
 5       rS r\R                  R#                  \R&                  " 5       S:H  SS9S 5       rS rS rS rS rS rS rS rS r\R                  R                  S 5       r\R                  R                  \R                  R#                  \R>                  RA                  \!5      (       + SS9S 5       5       r"\R                  R                  S 5       r#\R                  R                  S 5       r$S r%S r&S r'\R                  R                  S  5       r(S! r)S" r*S# r+S$ r,S% r-S& r.S' r/S(r0g))*TestExtension   c                 
   [        U R                  5      SL d   e[        U R                  SS5      n[        R                  " U5      (       d   e[        5       S   nU R                  S   nX2;   d   e[        U5      (       d   eg NT
extensions*.tgzrG   r   mock_extensionr`   rs   globr   rc   r   r:   r"   r   r9   s       r/   test_install_extension$TestExtension.test_install_extension   sv     !4!45===T\\<9yy!^L1
~~k*!!!t$$$$r1   c                 >   [        U R                  5      SL d   e[        U R                  SS5      n[        U R                  5      SL d   e[        R                  " U5      (       d   e[        5       S   nU R                  S   nX2;   d   e[        U5      (       d   eg r   r   r   s       r/   test_install_twice TestExtension.test_install_twice   s     !4!45===T\\<9 !4!45===yy!^L1
~~k*!!!t$$$$r1   c                     [        U R                  5        U R                  S   nU[        5       S   ;   d   e[	        U5      (       d   e[        U5      SL d   eU[        5       S   ;  d   e[	        U5      (       a   eg )NrJ   r   T)r   mock_mimeextensionrc   r   r   r   r:   r9   s     r/   test_install_mime_renderer(TestExtension.test_install_mime_renderer   s    $112~~o.|~l3333t$$$$"4(D000<>,7777"4(((((r1   c                 
   [         R                  " [        5       n[        U R                  5        S S S 5        S[        WR                  5      ;   d   e[        U R                  S   5      (       a   eg ! , (       d  f       NI= f)NzConflicting DependenciesrH   )	pytestraises
ValueErrorr   mock_incompatstrvaluer   rc   )r:   excinfos     r/   test_install_incompatible'TestExtension.test_install_incompatible   s`    ]]:&'d001 ')S-????"4>>*#=>>>>> '&s   A44
Bc                 z   U R                   n[        R                  " [        5         [	        U5        S S S 5        [        [        US5      5       n[        R                  " U5      nS S S 5        [        5       S   nWS   nXT;  d   e[        U5      (       a   eg ! , (       d  f       Nn= f! , (       d  f       NK= f)NrT   r   r9   )mock_packager   r   r   r   r&   r`   rh   ri   r   r   )r:   r"   rw   rE   r   r9   s         r/   test_install_failed!TestExtension.test_install_failed   s      ]]:&d# '%n-.#99S>D /!^L1
F|%%%"4((((( '&..s   BB,
B),
B:c                 ,   U R                   n[        R                  " [        US5      5        [        R
                  " [        5         [        U5        S S S 5        [        U R                  S   5      (       a   eU R                  n[        R                  " [        US5      5        [        R
                  " [        5         [        U5        S S S 5        [        U R                  S   5      (       a   eg ! , (       d  f       N= f! , (       d  f       N?= f)Nindex.jsrG   rJ   )r   r!   rN   r`   r   r   r   r   r   rc   r   )r:   r"   s     r/   test_validationTestExtension.test_validation   s    ""
		%j)*]]:&d# '"4>>+#>????&&
		%j)*]]:&d# '"4>>/#BCCCCC '& '&s   C4 D4
D
Dc                 h   [        U R                  5      SL d   eU R                  S   n[        U5      (       d   e[	        U R                  S   5      SL d   e[        U R                  SS5      n[        R                  " U5      (       a   e[        5       S   nX;  d   e[        U5      (       a   eg )NTrG   r   r   )	r   r   rc   r   r   r`   rs   r   r   )r:   r9   r"   r   s       r/   test_uninstall_extension&TestExtension.test_uninstall_extension   s     !4!45===~~k*t$$$$"4>>+#>?4GGGT\\<999T??""!^L1
%%%"4(((((r1   c                 &   [        U R                  5        [        U R                  5        U R                  S   nU R                  S   n[	        U5      SL d   e[	        U5      SL d   e[        SS9SL d   e[        5       S   nX;  d   eX#;  d   eg )NrG   rJ   Tall_r   )r   r   r   rc   r   r   r   )r:   ext_namemime_ext_namer   s       r/   test_uninstall_all_extensions+TestExtension.test_uninstall_all_extensions   s    $--.$112>>+.7x(D000}-555"-555!^L1
)))...r1   c                 $   [        S5      SL d   eU R                  n[        5         [        [	        USS5      5       n[
        R                  " U5      nS S S 5        WS   S   nSU;  d   e[        S5      (       a   e[        S5      SL d   e[        5         [        [	        USS5      5       n[
        R                  " U5      nS S S 5        US   S   nSU;   d   e[        S5      (       d   eg ! , (       d  f       N= f! , (       d  f       NB= f)Nz@jupyterlab/console-extensionTstagingrT   
jupyterlabr   )	r   rs   r   r&   r`   rh   ri   r   r   )r:   rs   rw   rE   r   s        r/   test_uninstall_core_extension+TestExtension.test_uninstall_core_extension   s    "#BCtKKK,,%N;<99S>D =,'5
.j@@@"#BCCCC !@ATIII%N;<99S>D =,'5
.*<<<>???? =< =<s   C0.D0
C>
Dc                    SS/n[        U R                  S   US   S9(       d   e[        U R                  S   US   S9(       d   e[        5       S   nUS   U;   d   eUS   U;   d   e[        US   5      (       d   e[        US   5      (       d   e[	        US   5      (       d   e[	        US   5      (       d   e[        5       S   nUS   U;  d   eUS   U;  d   e[        US   5      (       a   e[        US   5      (       a   eg)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   rt   r   r   r   )r:   NAMESr   s      r/   !test_install_and_uninstall_pinned/TestExtension.test_install_and_uninstall_pinned  s/   
 8$ !5!5a!8eAhGGG !5!5a!8eAh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                 :   [        U R                  5       5      nU R                   Vs/ s HM  n[        R                  " SSU/[        R
                  SS[        U5      S9R                  R                  5       PMO     nn[        R                  " [        XS   -  5      [        US-  5      5        [        R                  " [        XS   -  5      [        US-  5      5        [        US-  S	-  5      [        US-  S	-  5      /U l        U R                  5         g
s  snf )zK
Same as above test, but installs from a local folder instead of from npm.
npmpackT)stdouttextcheckcwdr   1r   2rI   N)r   r<   rt   
subprocessrunPIPEr   r   stripre   unpack_archiver   )r:   base_dirr9   packagess       r/   (test_install_and_uninstall_pinned_folder6TestExtension.test_install_and_uninstall_pinned_folder  s    ' ,,	
 - NN%!M fUUW - 	 	
 	c(a["893x#~;NOc(a["893x#~;NO #HsNY$> ?XPS^V_E_A`a..0	
s   ADc                 T   U R                   nU R                  S   n[        U5        [        5       S   nX#;  d   eU[        5       S   ;   d   e[	        U5      (       d   e[        U5      SL d   e[        5       S   nX#;  d   eU[        5       S   ;  d   e[	        U5      (       a   eg )NrG   linked_packagesr   T)r   rc   r   r   r   r   r:   r"   r9   linkeds       r/   test_link_extension!TestExtension.test_link_extension9  s    ""~~k*T 12!!!|~l3333t$$$$d#t+++ 12!!!<>,7777"4(((((r1   c                 <   U R                   nU R                  S   n[        U5      SL d   e[        5       S   nX#;   d   eU[        5       S   ;  d   e[	        U5      (       d   e[        U5      (       d   e[        5       S   nX#;  d   e[	        U5      (       a   eg )NrI   Tr   r   )r   rc   r   r   r   r   r   s       r/   test_link_packageTestExtension.test_link_packageG  s      ~~i(D!T))) 12~~<>,7777t$$$$d#### 12!!!"4(((((r1   c                     U R                   n[        U5      SL d   e[        U5      SL d   e[        5       S   nU R                  S   nX2;  d   e[        U5      (       a   eg )NTr   rI   )r   r   r   r   rc   r   )r:   targetr   r9   s       r/   test_unlink_package!TestExtension.test_unlink_packageT  sn    ""F#t+++f%--- 12~~i(!!!"4(((((r1   c                 L    [        U R                  5      SL d   e[        5         g )NT)r   r   r   r:   s    r/   test_list_extensions"TestExtension.test_list_extensions]  s!     !4!45===r1   c                     U R                  5       n[        US9n[        U R                  US9SL d   e[	        USS5      n[
        R
                  " U5      (       d   e[        US9S   nU R                  S   nXT;   d   e[        XRS9(       d   e[        U R                  S   US9SL d   e[	        USS5      n[
        R
                  " U5      (       a   e[        US9S   nXT;  d   e[        XRS9(       a   e[        U R                  US9SL d   e[        US9S   nU R                  S   nXv;   d   e[        XrS9(       d   e[        U R                  US9SL d   e[        US9S   nXv;  d   e[        XrS9(       a   eg )	Nrs   app_optionsTr   r   rG   r   rI   )r<   r   r   r   r`   r   r   rc   r   r   r   r   r   )r:   rs   optionsr"   r   r   r   pkg_names           r/   test_app_dirTestExtension.test_app_dira  s   ,,.W- !4!4'JdRRRWlG4yy!g6|D
>>+.%%%x==="4>>+#>GTX\\\\WlG499T??""!g6|D
)))"8AAAD--7CtKKK'23DE>>),!!!x===d//WEMMM'23DE%%%"8AAAAr1   c                    U R                  5       n[        US9n[        R                  R	                  U R
                  5      (       a   [        R                  " U R
                  5        [        U R                  5      SL d   e[        USS5      n[        R                  " U5      (       a   e[        US9S   nU R                  S   nXT;   d   e[        XRS9(       d   eg Nr   Tr   r   r   rG   r<   r   r!   r"   r$   rs   
removedirsr   r   r`   r   r   rc   r   r:   rs   r   r"   r   r   s         r/   test_app_dir_use_sys_prefix)TestExtension.test_app_dir_use_sys_prefix  s    ,,.W-77>>$,,''MM$,,' !4!45===WlG499T??""!g6|D
>>+.%%%x===r1   c                    U R                  5       n[        USS9n[        R                  R	                  U R
                  5      (       a   [        R                  " U R
                  5        [        U R                  5      SL d   e[        USS5      n[        R                  " U5      (       a   e[        US9S   nU R                  S   nXT;  d   e[        XRS9(       a   eg )NF)rs   use_sys_dirTr   r   r   rG   r   r   s         r/   test_app_dir_disable_sys_prefix-TestExtension.test_app_dir_disable_sys_prefix  s    ,,.W%@77>>$,,''MM$,,' !4!45===WlG499T??""!g6|D
>>+.)))"8AAAAr1   c                    U R                  5       nU R                  n[        US9n[        R                  R                  U5      (       a  [        R                  " U5        [        U R                  5      SL d   e[        USS5      n[        R                  " U5      (       d   e[        USS5      n[        R                  " U5      (       a   e[        US9S   nU R                  S   nXv;   d   e[        XsS9(       d   e[        U R                  US9SL d   e[        R                  " U5      (       d   e[        US9S   nXv;   d   e[        XsS9(       d   e[        U R                  S   US9SL d   e[        R                  " U5      (       a   e[        R                  " U5      (       d   e[        US9S   nXv;   d   e[        XsS9(       d   e[        U R                  S   US9SL d   e[        R                  " U5      (       a   e[        R                  " U5      (       a   e[        US9S   nXv;  d   e[        XsS9(       a   eg r   )r<   rs   r   r!   r"   r$   r   r   r   r`   r   r   rc   r   r   )r:   rs   sys_dirr   sys_pathapp_pathr   r   s           r/   test_app_dir_shadowing$TestExtension.test_app_dir_shadowing  s   ,,.,, 177>>'""MM'" !4!45===,8yy"""",899X&&&&!k:<H
>>+.%%%xAAA !4!4+NRVVVVyy""""!k:<H
%%%xAAA"4>>+#>KX\````99X&&&&yy""""!k:<H
%%%xAAA"4>>+#>KX\````99X&&&&99X&&&&!k:<H
)))"8EEEEr1   c                    [        U R                  5      SL d   e[        5         [        U R                  SSS5      n[        U5       nUR                  5       nS S S 5        U R                  S   W;   d   e[        U R                  SS5      n[        U5       nUR                  5       nS S S 5        U R                  S   U;   d   eg ! , (       d  f       Nt= f! , (       d  f       N5= f)NTr   r   index.out.jsrG   static)r   r   r   r`   rs   r&   readrc   )r:   entryrw   rE   s       r/   
test_buildTestExtension.test_build  s     !4!45===dllIwG%[C88:D ~~k*d222 dllHn=%[C88:D ~~k*d222 [ [s   CC
C
C&zNot in git checkoutc                    [        SS9n[        U R                  5      SL d   e[        US9  S[	        U5      ;   d   e[        U R                  SSS5      n[        U5       nUR                  5       nS S S 5        U R                  S   W;   d   e[        U R                  S	S5      n[        U5       nUR                  5       nS S S 5        U R                  S   U;   d   eg ! , (       d  f       Nt= f! , (       d  f       N5= f)
NT)splice_sourcer   z-splicedr   r   r   rG   r   )
r   r   r   r   r   r`   rs   r&   r   rc   )r:   r   r   rw   rE   s        r/   test_build_splice_packages(TestExtension.test_build_splice_packages  s     !t4 !4!45===+&_[9999dllIwG%[C88:D ~~k*d222 dllHn=%[C88:D ~~k*d222 [ [s   !C 1C1 
C.1
C?c                    [        U R                  5      SL d   e[        SSSS9  [        U R                  SS5      n[        U5       nUR                  5       nS S S 5        U R                  S   W;   d   e[        U R                  SS	5      n[        U5       n[        R                  " U5      nS S S 5        US
   S   S:X  d   eUS
   S   S:X  d   eUS
   S   S:X  d   eg ! , (       d  f       N= f! , (       d  f       NJ= f)NTfooz1.0bar)r9   version
static_urlr   r   rG   rT   r   r9   r
  	staticUrl)
r   r   r   r`   rs   r&   r   rc   rh   ri   )r:   r   rw   rE   pkgs        r/   test_build_customTestExtension.test_build_custom  s     !4!45===5%E: dllHn=%[C88:D ~~k*d222DLL(N;#Y#99S>D L!&)U222L!),555L!+.%777 [
 Ys   C"C3"
C03
Dc                    [        5       n[        5       nUR                  5         [        R                  " S5      nUR	                  S5        U R                  5       n[        UUUSS9nSnSnU H"  nUR                  U   n	UR                  XSS9  M$     U H#  nUR                  U   n	UR                  X5        M%     [        U R                  US	9SL d   e[        US	9  [        US
S5      n
[        U
5       nUR                  5       nS S S 5        U R                   S   W;   d   e[        US
S5      n[        U5       n["        R$                  " U5      nS S S 5        ['        US   S   R)                  5       5      / SQ:X  d   eUS   S   0 :X  d   eUS   S    H"  nUR+                  S5      (       d  M  X;   a  M"   e   g ! , (       d  f       N= f! , (       d  f       N= f)Njupyterlab_test_loggerDEBUGF)rs   core_configloggerr   )!@jupyterlab/application-extension@jupyterlab/apputils-extension)@jupyterlab/applicationz@jupyterlab/apputilsz@jupyterlab/coreutilsz@jupyterlab/servicesT)rG   r   r   r   rG   rT   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   rc   rh   ri   sortedkeys
startswith)r:   default_configr  r  rs   r   r   r  r9   semverr   rw   rE   r  s                 r/   %test_build_custom_minimal_core_config3TestExtension.test_build_custom_minimal_core_config  s   # l""$""#;< ,,.#	




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

 L!"23r999%&9:C~~n--((( ; [
 Ys   7G =G 
G
Gc                 `   [        U R                  5       S9n[        U R                  US9SL d   e[	        U R
                  S   US9SL d   e[        US9nU R
                  S   nUS   R                  U5      SL d   e[        X1S9(       a   e[        USUS9(       d   e[	        SUS9SL d   e[        US9nUS   R                  S5      SL d   e[        SUS9(       a   e[        SSUS9(       d   eUS   R                  U5      SL d   e[        X1S9(       a   e[        USUS9(       d   eg )Nr   r   TrG   disabled)	installedr   @jupyterlab/notebook-extension)	r   r<   r   r   r   rc   r   getr   r:   r   infor9   s       r/   test_disable_extension$TestExtension.test_disable_extension+  sM   T\\^4 !4!4'JdRRR !<'RVZZZZ0~~k*J##D)T111"4===ttIII !AwW[____0J##$DEMMM"#CQXYYY,'
 	
 
 J##D)T111"4===ttIIIr1   c                    [        U R                  5       S9n[        U R                  US9SL d   e[	        U R
                  S   US9SL d   e[        U R
                  S   US9SL d   e[        US9nSUS   ;  d   eU R
                  S   nUS   R                  US5      SL d   e[        X1S9(       d   e[	        SUS9SL d   e[        X1S9(       d   e[        SUS9(       a   eg )Nr   r   TrG   r*  r(  F)
r   r<   r   r   r   rc   r   r   r+  r   r,  s       r/   test_enable_extension#TestExtension.test_enable_extension?  s    T\\^4 !4!4'JdRRR !<'RVZZZZ{ ;QUYYYY0/tJ7GGGG~~k*J##D%0E999t999 !AwW[____t999"#CQXYYYYr1   c                    [        U R                  5       S9n[        U R                  US9SL d   eU R                  S   n[        US9nUS   R                  US5      SL d   e[        U R                  S   US9  [        US9nUS   R                  US5      SL d   e[        U R                  S   US9  [        US9nUS   R                  US5      SL d   eg )Nr   r   TrG   lockedF)	r   r<   r   r   rc   r   r+  r   r   )r:   r   r9   r-  s       r/   test_lock_unlock_extension(TestExtension.test_lock_unlock_extensionM  s    T\\^4 !4!4'JdRRR~~k*0H~!!$.%777t~~k2H0H~!!$.$6664'J0H~!!$.%777r1   c                    [        5       (       d   e[        U R                  5      SL d   e[        U R                  5      SL d   e[        5         [        5       (       a   e[        U R                  5      SL d   e[        5       (       d   e[        U R                  S   5      SL d   e[        5       (       a   e[        U R                  S5      n[        U5       n[        R                  " U5      nS S S 5        [        US5       nUR                  5       nS S S 5        SWS'   [        US5       n[        R                  " X25        S S S 5        [        5       (       d   e[        5       (       d   e[        US5       nUR                  W5        S S S 5        [        5       (       a   e[        U R                  S	5      n[        US5       nUR                  5       nS S S 5        [        US5       nUR                  WS
-   5        S S S 5        [        5       (       d   e[        5       (       d   e[        US5       nUR                  W5        S S S 5        [        5       (       a   eg ! , (       d  f       GN{= f! , (       d  f       GNh= f! , (       d  f       GNJ= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f)NTrJ   rT   rbr	  r  r?   wbr   s   
console.log("hello");)r   r   r   r   r   r   r   r   rc   r`   r&   rh   ri   r   dumpwrite)r:   pkg_pathrw   rE   origs        r/   test_build_checkTestExtension.test_build_checkZ  s(    }}} !4!45===D--.$666==   !!8!89TAAA}}}"4>>/#BCtKKK==   ,,n=(^s99S>D (D!S88:D "U(C CIId  !}}}}}}(D!SIIdO " ==   **J7(D!S88:D "(D!SIId778 "}}}}}}(D!SIIdO "==  =5 ^!! ! 
 "! "!!!
 "!sT   I&I80J
=J
J./J?:K&
I58
J

J
J+.
J<?
K
Kc                 .   [        SS5      (       d   e[        SS5      (       d   e[        SS5      (       d   e[        SS5      (       d   e[        SS5      (       a   e[        S	S
5      (       a   e[        SS5      b   e[        SS5      b   e[        SS5      (       d   e[        SS5      (       d   e[        SS5      (       d   e[        SS5      (       d   e[        SS5      (       d   e[        SS5      (       a   e[        SS5      (       a   eg )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_compatibility TestExtension.test_compatibility  s"   Xx0000VU++++Xx0000Wh//// 84444 84444S%(000VU+333Z....Z....T:....T:....Z4444 Z8888 z22222r1   c                     [        SS5      S:X  d   e[        SS5      S:X  d   e[        SS5      S:X  d   e[        SS5      S:X  d   e[        SS5      b   eg )	NrB  rC  r   rD  rE  r   z^1 || ^4)r   r   s    r/   test_compare_ranges!TestExtension.test_compare_ranges  si    z40A555z:6!;;;z:6!;;;z:6"<<<z:6>>>r1   c           	        ^^	^
^ [        5       nUS   S   m
S m	U	U
4S jnU	4S jn " S S[        5      mUU4S jn[        R                  " [        S	U5      n[        R                  " [        R
                  S
U5      n[        R                  " [        R
                  SU5      nU   U   [        R
                  R                  mU   [        R                  " T5         [        S5      SL d   e S S S 5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N'= f! , (       d  f       N0= f! , (       d  f       N9= f! , (       d  f       g = f)Ndependenciesr  c                     SSU 00$ )NrM  r  r   )vers    r/   _gen_dep7TestExtension.test_install_compatible.<locals>._gen_dep  s    "%>$DEEr1   c           
         > US:X  d   eUT" T5      T" T5      T" T5      T" S5      T" T5      T" S5      T" S5      S.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)r9   versionsr   )registryr9   r  rP  current_app_deps      r/   _mock_metadata=TestExtension.test_install_compatible.<locals>._mock_metadata  s[    ?***%o6%o6%o6%k2 ( 9 ( 5%k2 r1   c           
      x   > USSS0S/S.nUR                  T" S5      5        USUUUS   S	[        US	5      S
.nU$ )NrU  rG   Tr   )r9   r
  r   jupyterlab_extracted_filesrT  Fr
  zmockextension.tgz)sourceis_dirrE   r9   r
  filenamer"   )updater`   )r:   r]  r<   argskwargsrE   r-  rP  s          r/   _mock_extract<TestExtension.test_install_compatible.<locals>._mock_extract  s_    "*D1/9l	D KK-. 	?/g':;D Kr1   c                       \ rS rSrSrg)6TestExtension.test_install_compatible.<locals>.Successi  r   N)r|   r}   r~   r   r   r   r1   r/   Successrf    s    r1   rg  c                 F   > US;   d   eUS:X  a  T" 5       eT" X/UQ70 UD6$ )N)rS  mockextension@1.1.0ri  r   )r:   r9   ra  rb  rg  orig_installs       r/   _mock_install<TestExtension.test_install_compatible.<locals>._mock_install  s7    CCCC,,i<T<V<<r1   _fetch_package_metadata_extract_package_install_extensionrS  T)
r   	Exceptionr   rm   r	   _AppHandlerro  r   r   r   )r:   	core_datarY  rc  rk  p1p2p3rg  rP  rX  rj  s           @@@@r/   test_install_compatible%TestExtension.test_install_compatible  s    *,	#N34MN	F		&	i 		= \\($=~N\\(..0BMR\\(..0DmT#//BBLV]]7+(9TAAA , RR++ RRsT   'E*D3D"D	0D"8D3 E
DD""
D0,D33
E	=E
Ec                   ^ / mU4S jnS n[         R                  " [        R                  SU5      n[         R                  " [        R                  SU5      n[	        U R
                  5      SL d   e[	        U R                  5      SL d   eU   U   [        U R                  S   5      SL d   e S S S 5        S S S 5        TU R                  S   /:X  d   eg ! , (       d  f       N-= f! , (       d  f       N6= f)Nc                 n   > TR                  US   USS  R                  S5      S   -   5        USSU-   S.$ Nr   r   @Fzfoo/bar/)r9   r^  r"   r8   splitr:   r9   ra  rb  r)  s       r/   rk  7TestExtension.test_update_single.<locals>._mock_install  @    T!WtABx~~c':1'==> E:;LMMr1   c                     gNz	10000.0.0r   r   s     r/   _mock_latest6TestExtension.test_update_single.<locals>._mock_latest      r1   ro  "_latest_compatible_package_versionTrG   	r   rm   r	   rq  r   r   r   r   rc   r:   rk  r  rs  rt  r)  s        @r/   test_update_single TestExtension.test_update_single  s    		N	 \\(..0DmT\\(..0TVbc !4!45=== !8!89TAAA#DNN;$?@DHHH RT^^K89999 RRs$   C)C1C)
C&	"C))
C7c                 $    [        S5      SL d   eg )Nr  F)r   r   s    r/   test_update_missing_extension+TestExtension.test_update_missing_extension  s    &%///r1   c                 6  ^ / mU4S jnS n[         R                  " [        R                  SU5      n[         R                  " [        R                  SU5      n[	        U R
                  5        [	        U R                  5        U   U   [        U R                  S   5      SL d   e[        U R                  S   5      SL d   e S S S 5        S S S 5        TU R                  S   U R                  S   /:X  d   eg ! , (       d  f       N;= f! , (       d  f       ND= f)Nc                 n   > TR                  US   USS  R                  S5      S   -   5        USSU-   S.$ rz  r|  r~  s       r/   rk  9TestExtension.test_update_multiple.<locals>._mock_install  r  r1   c                     gr  r   r   s     r/   r  8TestExtension.test_update_multiple.<locals>._mock_latest  r  r1   ro  r  rG   TrJ   r  r  s        @r/   test_update_multiple"TestExtension.test_update_multiple  s    		N	 \\(..0DmT\\(..0TVbc$--.$112#DNN;$?@DHHH#DNN?$CDLLL R T^^K8$..:YZZZZ RRs$   D
;C9D
9
D	D


Dc                 B  ^^ / mU4S jn[         R                  R                  mU4S jn[        U R                  5      SL d   e[        U R
                  5      SL d   e[        R                  " [         R                  SU5      n[        R                  " [         R                  SU5      nU   U   [        S SS9SL d   e S S S 5        S S S 5        [        T5      U R                  S   U R                  S   /:X  d   eg ! , (       d  f       ND= f! , (       d  f       NM= f)	Nc                 ^   > TR                  US   USS  R                  S5      S   -   5        g)Nr   r   r{  Tr|  )r:   r9   ra  rb  updateds       r/   _mock_update3TestExtension.test_update_all.<locals>._mock_update  s/    NN47T!"X^^C%8%;;<r1   c                 "   > T" U 5      n/ US'   U$ )Nlocal_extensionsr   )r:   r-  original_app_infos     r/   _mock_app_info5TestExtension.test_update_all.<locals>._mock_app_info  s    $T*D')D#$Kr1   T_update_extension_get_app_infor   rG   rJ   )r	   rq  r  r   r   r   r   rm   r   r   rc   )r:   r  r  rs  rt  r  r  s        @@r/   test_update_allTestExtension.test_update_all  s    	 %00>>	
 !!4!45=== !8!89TAAA\\(..0C\R \\(..P#Dt4<<< Rg4>>+#>@_"```` RRs$   -D0C?D?
D		D
D)rt   N)1r|   r}   r~   r   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.  r1  r5  r>  rF  rJ  rv  r  r  r  r  r   r   r1   r/   r   r      s   %%)?	)D	)
/ [[@ @$-2 [[Y&/U  112)))B<>B#FJ [[3 3 [[[[BGGNN733<QR3 S 3" [[8 8" [[3) 3)jJ(Z8 [[*! *!X3(?8Bt:(0[*ar1   r   c                     U" 5       n[         R                  nUR                  U 5        UR                  5         U[         l        g r6   )sysstderr_link_jupyter_server_extension
initialize)jp_serverappmake_lab_appappr  s       r/   test_load_extensionr  #  s1    
.CZZF&&|4NNCJr1   r6   )9__doc__r   rh   r  r!   r  re   r   r  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__rd   r0   r3   r   r  r   r1   r/   <module>r     s    0    	    
 !  '          * E	wwrwwx01".SbX SblB
aN B
aJr1   