
    Xh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j`                  jc                  ej`                  je                  e3            Z4ddZ5 G d de      Z6 G d de6      Z7d Z8y)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                  j                  |       }t         j                  j                  |      st        j                  |       t        | d      j                          |r7t        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       T/var/www/html/myenv/lib/python3.12/site-packages/jupyterlab/tests/test_jupyterlab.pytouchr0   1   s    
 ggood#G77>>'"
GsO&&
u~&774=!!!    c                       e Zd Zd Zd Zy)AppHandlerTestc                 d    t               }| j                  j                  |       |j                  S N)r   tempdirsappendname)selftds     r/   tempdirzAppHandlerTest.tempdirI   s%    !R wwr1   c           	      T    g  _         t        t        j                  d       _         j                   fd       } j                          _        t         j                  d       _        t         j                  d       _	        i  _
        dD ]  }t        t        d|      }d }t         j                  |      }t        j                  |||       t        j                  j                  t        |d	            st        j                   t        |d	             t#         d
|z   |       t        t        |d            5 }t%        j&                  |      }d d d        d    j                  |<    g  _        t+        j,                  d j                   j                  t         j                  d      d      } j(                  j/                  |       t0        fD ]&  }	t3        |	d      r=t+        j4                  |	d j                  g      } j(                  j/                  |       t3        |	d      r=t+        j4                  |	d j                  g      } j(                  j/                  |       t3        |	d      r<t+        j4                  |	d j                        } j(                  j/                  |       t3        |	d      st+        j4                  |	d j                        } j(                  j/                  |       )  j(                  D ]-  }|j7                           j	                  |j8                         /  j;                  t0        j<                   j                  g        j;                  t0        j>                   j                  g        j;                  tA        tC        jD                               jG                         tA         j                        dz  jG                                tC        jD                          _$        ddg _%        y # 1 sw Y   xY w)Nwc                  H    j                   D ]  } | j                           y r5   )r6   cleanup)dr9   s    r/   cleanup_tempdirsz.AppHandlerTest.setUp.<locals>.cleanup_tempdirsT   s    ]] 		r1   dataconfig)	extensionincompatpackagemimeextensionmock_packagesc                 @    d| v rg }d|v r|j                  d       | |fS )Nnode_modules)remove)dnamefiless     r/   ignorez$AppHandlerTest.setUp.<locals>.ignorec   s-    !U*E!U*LL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   s5    BJJ,		 
	 dmmV4x8 J 	0Dot4C$ -DOOCf5 77>>%n"=>E$78D'D.$/eD.12 &cyy~&#'<DNN4 )	0, JJ&*oo$(MM"'u"=
 	A7 	'C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& &s   PP'	N)__name__
__module____qualname__r;   rv    r1   r/   r3   r3   H   s    
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                  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                  j!                  ej<                  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.y')(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 y NT
extensions*.tgzrD   r   mock_extensionr\   ro   globr   r_   r   r9   r"   r   r8   s       r/   test_install_extensionz$TestExtension.test_install_extension   ss     !4!45===T\\<9yy!^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 y r~   r   r   s       r/   test_install_twicez TestExtension.test_install_twice   s     !4!45===T\\<9 !4!45===yy!^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 y )NrG   r   T)r   mock_mimeextensionr_   r   r   r   r9   r8   s     r/   test_install_mime_rendererz(TestExtension.test_install_mime_renderer   sz    $112~~o.|~l3333t$$$"4(D000<>,7777"4((((r1   c                     t        j                  t              5 }t        | j                         d d d        dt        j                        v sJ t        | j                  d         rJ y # 1 sw Y   =xY w)NzConflicting DependenciesrE   )	pytestraises
ValueErrorr   mock_incompatstrvaluer   r_   )r9   excinfos     r/   test_install_incompatiblez'TestExtension.test_install_incompatible   sd    ]]:& 	2'd001	2)S-????"4>>*#=>>>>	2 	2s   A,,A5c                 V   | j                   }t        j                  t              5  t	        |       d d d        t        t        |d            5 }t        j                  |      }d d d        t               d   }d   }||vsJ t        |      rJ y # 1 sw Y   bxY w# 1 sw Y   ;xY w)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   s      ]]:& 	$d#	$%n-. 	"#99S>D	"!^L1
F|:%%%"4((((	$ 	$	" 	"s   BBBB(c                    | j                   }t        j                  t        |d             t	        j
                  t              5  t        |       d d d        t        | j                  d         rJ | j                  }t        j                  t        |d             t	        j
                  t              5  t        |       d d d        t        | j                  d         rJ y # 1 sw Y   xY w# 1 sw Y   0xY w)Nindex.jsrD   rG   )r   r!   rK   r\   r   r   r   r   r   r_   r   )r9   r"   s     r/   test_validationzTestExtension.test_validation   s    ""
		%j)*]]:& 	$d#	$"4>>+#>???&&
		%j)*]]:& 	$d#	$"4>>/#BCCCC	$ 	$	$ 	$s   C&7C2&C/2C;c                 B   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 y )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!45===~~k*t$$$"4>>+#>?4GGGT\\<999T?""!^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 y )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12>>+.7x(D000}-555"-555!^L1
z)))J...r1   c                    t        d      du sJ | j                  }t                t        t	        |dd            5 }t        j                  |      }d d d        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        |d   d   }d|v sJ t        d      sJ y # 1 sw Y   xY w# 1 sw Y   1xY w)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CtKKK,,%N;< 	"99S>D	",'5
.j@@@"#BCCC !@ATIII%N;< 	"99S>D	",'5
.*<<<>???	" 	"	" 	"s   C$C*C'*C3c                    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 y)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$ !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                 8   t        | j                               }| j                  D cg c]N  }t        j                  dd|gt        j
                  ddt        |            j                  j                         P }}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| _        | j                          y
c c}w )z[
        Same as above test, but installs from a local folder instead of from npm.
        npmpackT)stdouttextcheckcwdr   1r   2rF   N)r   r;   rp   
subprocessrunPIPEr   r   stripra   unpack_archiver   )r9   base_dirr8   packagess       r/   (test_install_and_uninstall_pinned_folderz6TestExtension.test_install_and_uninstall_pinned_folder  s     ' ,,	
  NN%!M fUUW	
 	
 	c(Xa["893x#~;NOc(Xa["893x#~;NO #HsNY$> ?XPS^V_E_A`a..0	
s   ADc                 2   | 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 y )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t$$$d#t+++ 126!!!<>,7777"4((((r1   c                    | 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 y )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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 y )NTr   rF   )r   r   r   r   r_   r   )r9   targetr   r8   s       r/   test_unlink_packagez!TestExtension.test_unlink_packageT  sm    ""F#t+++f%--- 12~~i(6!!!"4((((r1   c                 J    t        | j                        du sJ t                y )NT)r   r   r   r9   s    r/   test_list_extensionsz"TestExtension.test_list_extensions]  s!     !4!45===r1   c                    | j                         }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 y )	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!4'JdRRRWlG4yy!g6|D
>>+.:%%%xW==="4>>+#>GTX\\\\WlG499T?""!g6|D
z)))"8AAAD--7CtKKK'23DE>>),6!!!xW===d//WEMMM'23DEv%%%"8AAAAr1   c                    | j                         }t        |      }t        j                  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 y 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-77>>$,,'MM$,,' !4!45===WlG499T?""!g6|D
>>+.:%%%xW===r1   c                    | j                         }t        |d      }t        j                  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 y )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%@77>>$,,'MM$,,' !4!45===WlG499T?""!g6|D
>>+.z)))"8AAAAr1   c                 P   | j                         }| j                  }t        |      }t        j                  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 y 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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
z)))"8EEEEr1   c                    t        | j                        du sJ t                t        | j                  ddd      }t        |      5 }|j                         }d d d        | j                  d   v sJ t        | j                  dd      }t        |      5 }|j                         }d d d        | j                  d   |v sJ y # 1 sw Y   kxY w# 1 sw Y   )xY w)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!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                    t        d      }t        | j                        du sJ t        |       dt	        |      v sJ t        | j                  ddd      }t        |      5 }|j                         }d d d        | j                  d   v sJ t        | j                  d	d      }t        |      5 }|j                         }d d d        | j                  d   |v sJ y # 1 sw Y   kxY w# 1 sw Y   )xY w)
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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2C+C(+C4c                    t        | j                        du sJ t        ddd       t        | j                  dd      }t        |      5 }|j                         }d d d        | j                  d   v sJ t        | j                  dd	      }t        |      5 }t        j                  |      }d d d        |d
   d   dk(  sJ |d
   d   dk(  sJ |d
   d   dk(  sJ y # 1 sw Y   xY w# 1 sw Y   =xY w)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!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	 	
	" 	"s   
CC*C'*C3c                    t               }t               }|j                          t        j                  d      }|j	                  d       | j                         }t        |||d      }d}d}|D ]%  }|j                  |   }	|j                  ||	d       ' |D ]#  }|j                  |   }	|j                  ||	       % t        | j                  |	      du sJ t        |	       t        |d
d      }
t        |
      5 }|j                         }d d d        | j                   d   v sJ t        |d
d      }t        |      5 }t#        j$                  |      }d d d        t'        |d   d   j)                               g dk(  sJ |d   d   i k(  sJ |d   d   D ]  }|j+                  d      s||v rJ  y # 1 sw Y   xY w# 1 sw Y   nxY w)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   # l""$""#;< ,,.#	




  	:D#..t4FOOD&DO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-j(((	)	 	
	" 	"s   ?F:G:GGc                 d   t        | j                               }t        | j                  |      du sJ t	        | j
                  d   |      du sJ t        |      }| j
                  d   }|d   j                  |      du sJ t        ||      rJ t        |d|      sJ t	        d|      du sJ t        |      }|d   j                  d      du sJ t        d|      rJ t        dd|      sJ |d   j                  |      du sJ t        ||      rJ t        |d|      sJ y )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+  sQ   T\\^4 !4!4'JdRRR !<'RVZZZZ0~~k*J##D)T111"4W===ttIII !AwW[____0J##$DEMMM"#CQXYYY,'
 	
 
 J##D)T111"4W===ttIIIr1   c                    t        | j                               }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   j                  |d      du sJ t        ||      sJ t	        d|      du sJ t        ||      sJ t        d|      rJ y )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?  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                    t        | j                               }t        | j                  |      du sJ | j                  d   }t        |      }|d   j                  |d      du sJ t        | j                  d   |       t        |      }|d   j                  |d      du sJ t        | j                  d   |       t        |      }|d   j                  |d      du sJ y )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'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                    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        t        |d      5 }|j                         }d d d        dd<   t        |d      5 }t        j                  ||       d d d        t               sJ t               sJ t        |d      5 }|j                         d d d        t               rJ t        | j                  d	      }t        |d      5 }|j                         }d d d        t        |d      5 }|j                  d
z          d d d        t               sJ t               sJ t        |d      5 }|j                         d d d        t               rJ y # 1 sw Y   XxY w# 1 sw Y   @xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   axY w)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  sL    }} !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IIdC 	!}}}}(D! 	SIIdO	 =   **J7(D! 	S88:D	(D! 	9SIId778	9}}}}(D! 	SIIdO	=  =5	" 	"	 		! 	!
	 		 		9 	9
	 	sT   H/-H<I	I"I"I.I:/H9<I	II"I+.I7:J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 y )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  s    Xx000VU+++Xx000Wh/// 8444 8444S%(000VU+333Z...Z...T:...T:...Z444 Z888 z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 y )	Nr  r   r   r!  r"  r   z^1 || ^4)r   r   s    r/   test_compare_rangesz!TestExtension.test_compare_ranges  si    z40A555z:6!;;;z:6!;;;z:6"<<<z:6>>>r1   c           	      r  	
 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        d d d        d d d        d d d        y # 1 sw Y   "xY w# 1 sw Y   &xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)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[    ?***%o6%o6%o6%k2 ( 9 ( 5%k2 r1   c           
      x    |dddidgd}|j                   d             |d|||d   d	t        |d	      d
}|S )Nr/  rD   Tr   )r8   r   r   jupyterlab_extracted_filesr.  Fr   zmockextension.tgz)sourceis_dirrB   r8   r   filenamer"   )updater\   )r9   r6  r;   argskwargsrB   r  r+  s          r/   _mock_extractz<TestExtension.test_install_compatible.<locals>._mock_extract  s_    "*D1/9l	D KK-. 	?/g':;D Kr1   c                       e Zd Zy)6TestExtension.test_install_compatible.<locals>.SuccessN)rw   rx   ry   rz   r1   r/   Successr>    s    r1   r?  c                 B    |dv sJ |dk(  r         | |g|i |S )N)r-  mockextension@1.1.0rA  rz   )r9   r8   r:  r;  r?  orig_installs       r/   _mock_installz<TestExtension.test_install_compatible.<locals>._mock_install  s9    CCCC,,id<T<V<<r1   _fetch_package_metadata_extract_package_install_extensionr-  T)
r   	Exceptionr   ri   r	   _AppHandlerrF  r   r   r   )r9   	core_datar3  r<  rC  p1p2p3r?  r+  r2  rB  s           @@@@r/   test_install_compatiblez%TestExtension.test_install_compatible  s$   *,	#N34MN	F		&	i 		= \\($=~N\\(..0BMR\\(..0DmT 	B 	B#//BBL BV]]7+ B(9TAAAB B	B 	B 	BB B B B	B 	B 	B 	BsT   !D-$D!DD		(D0D!8D-	DDDD!!D*	&D--D6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        d d d        | j                  d   gk(  sJ y # 1 sw Y   'xY w# 1 sw Y   +xY w)Nc                 n    j                  |d   |dd  j                  d      d   z          |dd|z   dS Nr   r   @Fzfoo/bar/)r8   r7  r"   r7   splitr9   r8   r:  r;  r
  s       r/   rC  z7TestExtension.test_update_single.<locals>._mock_install  @    T!WtABx~~c':1'==> E:;LMMr1   c                      yNz	10000.0.0rz   r   s     r/   _mock_latestz6TestExtension.test_update_single.<locals>._mock_latest      r1   rF  "_latest_compatible_package_versionTrD   	r   ri   r	   rH  r   r   r   r   r_   r9   rC  rX  rJ  rK  r
  s        @r/   test_update_singlez TestExtension.test_update_single  s    		N	 \\(..0DmT\\(..0TVbc !4!45=== !8!89TAAA 	I 	I#DNN;$?@DHHH	I 	IT^^K89999	I 	I 	I 	Is$   
CC+CC	CC&c                 "    t        d      du sJ y )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        d d d        | j                  d   | j                  d   gk(  sJ y # 1 sw Y   5xY w# 1 sw Y   9xY w)Nc                 n    j                  |d   |dd  j                  d      d   z          |dd|z   dS rP  rR  rT  s       r/   rC  z9TestExtension.test_update_multiple.<locals>._mock_install  rU  r1   c                      yrW  rz   r   s     r/   rX  z8TestExtension.test_update_multiple.<locals>._mock_latest  rY  r1   rF  rZ  rD   TrG   r[  r\  s        @r/   test_update_multiplez"TestExtension.test_update_multiple  s    		N	 \\(..0DmT\\(..0TVbc$--.$112 	M 	M#DNN;$?@DHHH#DNN?$CDLLL	M 	M T^^K8$..:YZZZZ	M 	M 	M 	Ms$   C?9C3?C?3C<	8C??D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        d d d        t              | j                  d   | j                  d   gk(  sJ y # 1 sw Y   >xY w# 1 sw Y   BxY w)	Nc                 ^    j                  |d   |dd  j                  d      d   z          y)Nr   r   rQ  TrR  )r9   r8   r:  r;  updateds       r/   _mock_updatez3TestExtension.test_update_all.<locals>._mock_update  s/    NN47T!"X^^C%8%;;<r1   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	   rH  rm  r   r   r   r   ri   r   r  r_   )r9   rg  rk  rJ  rK  rj  rf  s        @@r/   test_update_allzTestExtension.test_update_all  s    	 %00>>	
 !!4!45=== !8!89TAAA\\(..0C\R \\(..P 	= 	=#Dt4<<<	= 	=g4>>+#>@_"````	= 	= 	= 	=s$   'D*C:=D:D	?DD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&  rM  r]  r_  rc  rn  rz   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                      |       }t         j                  }|j                  |        |j                          |t         _        y r5   )sysstderr_link_jupyter_server_extension
initialize)jp_serverappmake_lab_appapprv  s       r/   test_load_extensionr|  #  s1    
.CZZF&&|4NNCJr1   r5   )9__doc__r   rd   r   r!   rr  ra   r   ru  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    	    
 !  '          * E	wwrwwx01".SbX SblB
aN B
aJr1   