
    <e{                        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 	  ej        e	          
                                j        j        j        dz                                  Zn# e$ r d dlmZ  e            ZY nw xY w G d dej                  Z ed?i ddd	dd
dddddddddddddddddddddddddddddddddddddddZ ed?i d dd!dd"dd#dd$dd%dd&dd'dd(dd)dd*dd+dd,dd-d d.dd/dd0dd1d d2d3d4d3Z G d5 d6e          Z G d7 d8          Z G d9 d:e          Zd@d<Zd@d=Zd> ZdS )A    N)verbosezModules/getpath.py)get_getpath_codeobjectc                        e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )MockGetPathTestsc                 H     t                      j        |i | d | _        d S N)super__init__maxDiff)selfakw	__class__s      (/usr/lib/python3.11/test/test_getpath.pyr
   zMockGetPathTests.__init__   s*    !"r"""    c           	      "   	 t          dd          }|                    d           |                    d           |                    d           t	          dddddg d          }t          ||          }|                     ||           d S )	NC:\Python\python.exeargv0real_executableC:\Python\Lib\os.pyC:\Python\DLLs	C:\Python   C:\Python\python98.zipr   C:\Python\Libr   
executablebase_executableprefixexec_prefixmodule_search_paths_setmodule_search_pathsMockNTNamespaceadd_known_xfileadd_known_fileadd_known_dirdictgetpathassertEqualr   nsexpectedactuals       r   test_normal_win32z"MockGetPathTests.test_normal_win32   s    6)3
 
 
 	2333
0111
*+++.3$$%! ! !
 
 
 X&&6*****r   c                 *   	 t          dd          }|                    d           |                    d           |                    ddg           t          dddddddg d	          }t	          ||          }|                     ||           d S )
N#C:\CPython\PCbuild\amd64\python.exer   C:\CPython\Lib\os.py'C:\CPython\PCbuild\amd64\pybuilddir.txt 
C:\CPythonr   z%C:\CPython\PCbuild\amd64\python98.zipzC:\CPython\PCbuild\amd64C:\CPython\Libr   r    r!   r"   build_prefix_is_python_buildr#   r$   r&   r'   r(   r*   r+   r,   r-   s       r   test_buildtree_win32z%MockGetPathTests.test_buildtree_win321   s    28B
 
 
 	ABBB
1222
DrdKKK=B %&$%! ! !
 
 
 X&&6*****r   c                    	 t          ddd          }|                    d           |                    d           |                    d           |                    d           |                    ddg           t	          ddddddd	g d
          }t          ||          }|                     ||           d S )Nr   zC:\venv\Scripts\python.exe)r   ENV___PYVENV_LAUNCHER__r   r   r   zC:\venv\pyvenv.cfgzhome = C:\Pythonr   r   r   r   r!   r"   r    base_prefixbase_exec_prefixr#   r$   r%   r-   s       r   test_venv_win32z MockGetPathTests.test_venv_win32K   s   	 )$A3
 
 

 	2333
8999
0111
*+++
/2
 	 	 	 4$3$)$%! ! !
 
 
 X&&6*****r   c                 
   	 d}t          |d | dd| ddi          }t          dd|          }|                    d           |                    d           |                    d	           t          d
g d          }t          ||          }|                     ||           d|d         d<   d|d         d<   d |d         d<   t          d
g d          }t          ||          }|                     ||           d S )Nz1HKLM\Software\Python\PythonCore\9.8-XY\PythonPathz\Path1	path1-dirz\Path1\Subdirznot-subdirsr   )r   r   winregr   r   r   )r   rF   r   r   r   )r#   r$   r   configuse_environmentr#   r$   r   )
MockWinregr&   r'   r(   r)   r*   r+   r,   )r   hkeyrG   r.   r/   r0   s         r   test_registry_win32z$MockGetPathTests.test_registry_win32p   sq   	
 E$k$$$m
  
 )3
 
 

 	2333
0111
*+++$%! ! !

 

 

 X&&6****+8&'238./.28*+$%! ! !
 
 
 X&&6*****r   c           	      x   	 t          dd          }|                    d           |                    d           |                    dd           |                    d           |                    d           t          dddddg d	          }t          ||          }|                     ||           d S )
NC:\LinkedFrom\python.exer   r   r   r   r   r   r   r   )r&   r'   add_known_linkr(   r)   r*   r+   r,   r-   s       r   test_symlink_normal_win32z*MockGetPathTests.test_symlink_normal_win32   s    B-3
 
 
 	6777
2333
57NOOO
0111
*+++27$$%! ! !
 
 
 X&&6*****r   c                    	 t          dd          }|                    d           |                    d           |                    dd           |                    d           |                    ddg           t	          dddddddg d	
          }t          ||          }|                     ||           d S )NrN   r3   r   r4   r5   r6   r7   r   r8   r:   )r&   r'   rO   r(   r*   r+   r,   r-   s       r   test_symlink_buildtree_win32z-MockGetPathTests.test_symlink_buildtree_win32   s    >-B
 
 
 	6777
ABBB
57]^^^
1222
DrdKKK27 %&$%! ! !
 
 
 X&&6*****r   c                 ,   	 t          ddd          }|                    d           |                    d           |                    ddg           t          dddddddg d	
          }t	          ||          }|                     ||           d S )NzC:\Out\python.exer7   )r   r   ENV_PYTHONHOMEr4   zC:\Out\pybuilddir.txtr6   zC:\r   )zC:\Out\python98.zipzC:\Outr9   r:   r=   r-   s       r   test_buildtree_pythonhome_win32z0MockGetPathTests.test_buildtree_pythonhome_win32   s    O&0(
 
 

 	/000
1222
2RD999+0 %  $%! ! !
 
 
" X&&6*****r   c           	          	 t          dd          }|                    d           |                    d           t          dddddg d          }t	          ||          }|                     ||           d S )Nr   r   r   r   r   )r   r   r   r   r=   r-   s       r   test_no_dlls_win32z#MockGetPathTests.test_no_dlls_win32   s    :)3
 
 
 	2333
0111.3$$%! ! !
 
 
 X&&6*****r   c           	      $   	 t          ddd          }|                    d           |                    d           |                    d           t	          dddddg d	
          }t          ||          }|                     ||           d S )N/usrpythonz/usr/bin)PREFIXr   ENV_PATH/usr/bin/python/usr/lib/python9.8/os.py/usr/lib/python9.8/lib-dynloadr   z/usr/lib/python98.zipz/usr/lib/python9.8r_   r   MockPosixNamespacer'   r(   r)   r*   r+   r,   r-   s       r   test_normal_posixz"MockGetPathTests.test_normal_posix  s    2
 
 

 	,---
4555
9:::(-$%! ! !
 
 
 X&&6*****r   c                 ~   	 t          dd          }|                    d           |                    d           |                    ddg           |                    d           |                    d           t	          ddddd	d
d
g d          }t          ||          }|                     ||           d S )N/home/cpython/python
/usr/localr   r[   /usr/local/bin/python/home/cpython/pybuilddir.txtbuild/lib.linux-x86_64-9.8/home/cpython/Lib/os.py/home/cpython/lib-dynload/home/cpythonr   /usr/local/lib/python98.zip/home/cpython/Libz(/home/cpython/build/lib.linux-x86_64-9.8r   r!   r"   r    r;   r<   r#   r$   ra   r-   s       r   test_buildpath_posixz%MockGetPathTests.test_buildpath_posix&  s    	  )
 
 
 	1222
2333
8;W:XYYY
3444
4555-$2($%! ! !
 
 
 X&&6*****r   c                    	 t          ddd          }|                    d           |                    d           |                    d           |                    d           |                    d	d
g           t	          dddddddg d          }t          ||          }|                     ||           d S )NrZ   rY   /venv/bin:/usr/binr   r[   r\   r]   /venv/bin/pythonr^   r_   /venv/pyvenv.cfghome = /usr/binr   r`   rA   ra   r-   s       r   test_venv_posixz MockGetPathTests.test_venv_posixG  s   %)
 
 

 	,---
-...
4555
9:::
,/
 	 	 	 )-#$%! ! !
 
 
 X&&6*****r   c                    	 t          ddd          }|                    d           |                    d           |                    dd           |                    d           |                    d           |                    d	d
g           t          dddddddg d          }t          ||          }|                     ||           d S )NrZ   rY   rt   ru   z/usr/bin/python3rv   r^   r_   rw   rx   r   r`   rA   rb   r'   rO   r(   r)   r*   r+   r,   r-   s       r   test_venv_changed_name_posixz-MockGetPathTests.test_venv_changed_name_posixf  s   %)
 
 

 	-...
-...
,.@AAA
4555
9:::
,/
 	 	 	 ).#$%! ! !
 
 
 X&&6*****r   c                    	 t          ddd          }|                    d           |                    d           |                    dd           |                    d           |                    d           |                    dd	g           t          dd
d
dd
d
dg d          }t          ||          }|                     ||           d S )Nrv   rY   rt   ru   z!/path/to/non-installed/bin/pythonz*/path/to/non-installed/lib/python9.8/os.py0/path/to/non-installed/lib/python9.8/lib-dynloadrw   zhome = /path/to/non-installedz/path/to/non-installedr   )z'/path/to/non-installed/lib/python98.zipz$/path/to/non-installed/lib/python9.8r~   rA   r{   r-   s       r   &test_venv_non_installed_zip_path_posixz7MockGetPathTests.test_venv_non_installed_zip_path_posix  s    O$)
 
 

 	>???
-...
,=	? 	? 	?
FGGG
KLLL
,,/
 	 	 	 )+0?05$%! ! !
 
 
 X&&6*****r   c                    	 t          ddd          }|                    d           |                    d           |                    d           |                    d           |                    d	d
g           t	          dddddddg d          }t          ||          }|                     ||           d S )NrZ   rY   rt   ru   z/usr/bin/python9rv   r^   r_   rw   rx   r   r`   rA   ra   r-   s       r   !test_venv_changed_name_copy_posixz2MockGetPathTests.test_venv_changed_name_copy_posix  s   O)
 
 

 	-...
-...
4555
9:::
,/
 	 	 	 ).#$%! ! !
 
 
 X&&6*****r   c           	      x   	 t          dd          }|                    d           |                    d           |                    dd           |                    d           |                    d           t          dddddg d	          }t          ||          }|                     ||           d S )
NrY   /linkfrom/python)r[   r   r]   r^   r_   r   r`   r   r{   r-   s       r   test_symlink_normal_posixz*MockGetPathTests.test_symlink_normal_posix  s    >$
 
 
 	-...
,---
,.?@@@
4555
9:::).$%! ! !
 
 
 X&&6*****r   c                    	 t          dd          }|                    d           |                    d           |                    dd           |                    d           |                    ddg           |                    d           |                    d	           t          ddddd
ddg d          }t          ||          }|                     ||           d S )Nr   rf   rg   re   rh   ri   rj   rk   rl   rm   r   rn   rq   r{   r-   s       r   test_symlink_buildpath_posixz-MockGetPathTests.test_symlink_buildpath_posix  s&   	  %
 
 
 	-...
1222
,.DEEE
2333
8;W:XYYY
3444
4555)$.($%! ! !
 
 
 X&&6*****r   c           	      $   	 t          ddd          }|                    d           |                    d           |                    d           t	          dddddg d	
          }t          ||          }|                     ||           d S )NrY   r   lib64)r[   r   
PLATLIBDIRr]   z/usr/lib64/python9.8/os.py /usr/lib64/python9.8/lib-dynloadr   )z/usr/lib64/python98.zipz/usr/lib64/python9.8r   r   ra   r-   s       r   test_custom_platlibdir_posixz-MockGetPathTests.test_custom_platlibdir_posix  s    8$
 
 

 	,---
6777
;<<<).$%! ! !
 
 
 X&&6*****r   c                 \   	 t          dddddddd          }|                    d           |                    d           |                    d           |                    d	           t	          dddddddg d
          }t          ||          }|                     ||           d S )Ndarwin\/Library/Frameworks/Python.framework/Versions/9.8/Resources/Python.app/Contents/MacOS/Pythonr   1/Library/Frameworks/Python.framework/Versions/9.8?/Library/Frameworks/Python.framework/Versions/9.8/bin/python9.88/Library/Frameworks/Python.framework/Versions/9.8/Pythonos_namer   WITH_NEXT_FRAMEWORKr[   EXEC_PREFIXr@   r   libraryK/Library/Frameworks/Python.framework/Versions/9.8/lib/python9.8/lib-dynloadE/Library/Frameworks/Python.framework/Versions/9.8/lib/python9.8/os.pyzB/Library/Frameworks/Python.framework/Versions/9.8/lib/python98.zipz?/Library/Frameworks/Python.framework/Versions/9.8/lib/python9.8r   rA   )rb   r'   r)   r(   r*   r+   r,   r-   s       r   test_framework_macosz%MockGetPathTests.test_framework_macos  s    	
  p !FK$ezN	
 	
 	
 	yzzz
\]]]
fggg
abbb
 XFK]KP$%! ! !
 
 
 X&&6*****r   c                 f   	 t          ddddddddd d d d d           }|                    d           |                    d           |                    d           |                    d	           t          dddddddg d
          }t	          ||          }|                     ||           d S )Nf/Library/Frameworks/DebugPython.framework/Versions/9.8/Resources/Python.app/Contents/MacOS/DebugPythonr   r   6/Library/Frameworks/DebugPython.framework/Versions/9.8D/Library/Frameworks/DebugPython.framework/Versions/9.8/bin/python9.8B/Library/Frameworks/DebugPython.framework/Versions/9.8/DebugPython)r   r   r   r[   r   r@   r   r   
PYTHONPATHrT   ENV_PYTHONEXECUTABLEexecutable_dir
py_setpathP/Library/Frameworks/DebugPython.framework/Versions/9.8/lib/python9.8/lib-dynloadJ/Library/Frameworks/DebugPython.framework/Versions/9.8/lib/python9.8/os.pyzG/Library/Frameworks/DebugPython.framework/Versions/9.8/lib/python98.zipzD/Library/Frameworks/DebugPython.framework/Versions/9.8/lib/python9.8r   rA   )rb   r'   r)   r*   r+   r,   r-   s       r   test_alt_framework_macosz)MockGetPathTests.test_alt_framework_macosE  s   	  z !KP$j EX!%
 
 
 	  D  	E  	E  	E
abbb
klll
ghhh ]KPbPU$%! ! !
 
 
 X&&6*****r   c                    	 d}t          ddddd| ddd          }|                    |           |                    | d	           |                    | d
           |                    | d           |                    | d           |                    d           |                    d           |                    d           |                    d           |                    | ddg           t	          | dddddddg d          }t          ||          }|                     ||           d S )N/tmp/workdir/venvr   r   r   r   /bin/pythonr   r   /bin/lib/lib/python9.8r   r   r   /pyvenv.cfgz<home = /Library/Frameworks/Python.framework/Versions/9.8/binr   rA   rb   r)   r'   r(   r*   r+   r,   r   	venv_pathr.   r/   r0   s        r   test_venv_framework_macosz*MockGetPathTests.test_venv_framework_macost  s   	'	p !FK'0$=$=$=zN	
 	
 	
 	###
I+++,,,
I+++,,,
I555666
i444555
yzzz
\]]]
fggg
bccc
Y333J6
 	 	 	 #000FK]KP$%! ! !
 
 
 X&&6*****r   c                    	 d}t          ddddd| ddd          }|                    |           |                    | d	           |                    | d
           |                    | d           |                    | d           |                    d           |                    d           |                    d           |                    d           |                    | ddg           t	          | dddddddg d          }t          ||          }|                     ||           d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   zAhome = /Library/Frameworks/DebugPython.framework/Versions/9.8/binr   rA   r   r   s        r   test_venv_alt_framework_macosz.MockGetPathTests.test_venv_alt_framework_macos  s   	 (	z !KP'0$=$=$= EX	
 	
 	
 	###
I+++,,,
I+++,,,
I555666
i444555
  D  	E  	E  	E
abbb
klll
ghhh
Y333O6
 	 	 	 #000KPbPU$%! ! !
 
 
 X&&6*****r   c                    	 t          ddddd          }|                    d           |                    d           |                    d           |                    d           |                    dd	g           t	          ddddddd
g d          }t          ||          }|                     ||           d S )Nr   r]   rY   z/framework/Python9.8/python)r   r   r[   r@   r   r^   r_   z/framework/Python9.8/pyvenv.cfgrx   r   r`   rA   ra   r-   s       r   test_venv_macosz MockGetPathTests.test_venv_macos  s   	
  #$A-
 
 
 	,---
8999
4555
9:::
;>
 	 	 	 4-#$%! ! !
 
 
 X&&6*****r   c           	      ~   	 t          ddddd          }|                    d           |                    d           |                    dd           |                    d           |                    d	           t          ddddd
g d          }t          ||          }|                     ||           d S )Nr   rY   rZ   /linkfrom:/usr/binr   )r   r[   r   r\   r   r]   r^   r_   r   r`   r   r{   r-   s       r   test_symlink_normal_macosz*MockGetPathTests.test_symlink_normal_macos  s    ?).
 
 
 	-...
,---
,.?@@@
4555
9:::).$%! ! !
 
 
 X&&6*****r   c                    	 t          ddddd          }|                    d           |                    d           |                    dd           |                    d           |                    d	d
g           |                    d           |                    d           t          dddddddg d          }t          ||          }|                     ||           d S )Nr   rZ   r   rf   r   )r   r   r\   r[   r   re   rh   ri   zbuild/lib.macos-9.8rk   rl   rm   r   )ro   rp   z!/home/cpython/build/lib.macos-9.8rq   r{   r-   s       r   test_symlink_buildpath_macosz-MockGetPathTests.test_symlink_buildpath_macos  s/   	  ).
 
 
 	-...
1222
,.DEEE
2333
8;P:QRRR
3444
4555)$.($%! ! !
 
 
 X&&6*****r   )__name__
__module____qualname__r
   r1   r>   rD   rL   rP   rR   rU   rW   rc   rr   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r   s   @r   r   r      s           + + +2+ + +4#+ #+ #+J/+ /+ /+b+ + +6+ + +8+ + +<+ + +.+ + +2+ + +B+ + +>+ + +@+ + +B+ + +>+ + +4!+ !+ !+F+ + +2'+ '+ '+R-+ -+ -+^)+ )+ )+V++ ++ ++Z#+ #+ #+J+ + +<%+ %+ %+ %+ %+ %+ %+r   r   r[   r6   r   r   VPATHr   
PYDEBUGEXTVERSION_MAJOR	   VERSION_MINOR   PYWINVER
EXE_SUFFIXr\   rT   r   r@   r   r   r   r   r   rG   r;   venv_prefixhome
platlibdir
pythonpathprogram_namer!   r"   rB   rC   r   r    
stdlib_dirplatstdlib_dirr$   r#   pythonpath_envargv	orig_argvisolatedrI   r   use_sitec                        e Zd Zddd fd
ZddZd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd Zd Zd ZddZd Z xZS )r&   Nr   rH   c                t   |                      t                     t                                          | d<   d| d<   d| d<   d| d<   d| d	<    t	                      j        |i | |r|g| d         d
<   |r| d                              |           i | _        i | _        t                      | _	        g | _
        d S )NrH   ntr   DLLsr   z9.8-XYr   z..\..r   r   )updateDEFAULT_NAMESPACEDEFAULT_CONFIGcopyr	   r
   _files_linksset_dirs	_warningsr   r   rH   r   r   r   s        r   r
   zMockNTNamespace.__init__l  s    %&&&',,..XY#\#Z W!"r""" 	2+0'DN;' 	*N!!&)))UU
r   c                     t          |pd          | j        |                                <   |                     |                    d          d                    d S )N \r   )listr   casefoldr)   
rpartitionr   pathliness      r   r(   zMockNTNamespace.add_known_file}  sM    '+EKR'8'8DMMOO$4??400344444r   c                 0    |                      |           d S r   )r(   r   r   s     r   r'   zMockNTNamespace.add_known_xfile  s    D!!!!!r   c                 >    || j         |                                <   d S r   )r   r   r   r   targets      r   rO   zMockNTNamespace.add_known_link  s    '-DMMOO$$$r   c                     |                     d                                          }|r9| j                            |           |                    d          d         }|7d S d S )Nr   r   )rstripr   r   addr   r   r   ps      r   r)   zMockNTNamespace.add_known_dir  so    KK&&(( 	&JNN1T""1%A  	& 	& 	& 	& 	&r   c                 `    	 t          | |          S # t          $ r t          |          d w xY wr   getattrAttributeErrorKeyErrorr   keys     r   __missing__zMockNTNamespace.__missing__  @    	*4%%% 	* 	* 	*3--T)	*    -c                 \    |                      |          r|S |                     d|          S )NzC:\Absoluteisabsjoinpathr   s     r   abspathzMockNTNamespace.abspath  s/    ::d 	K}}^T222r   c                 8    |                     d          d         S )Nr      r   r   s     r   basenamezMockNTNamespace.basename  s    t$$Q''r   c                     |                     d                              d          d         }|dd          dk    r|dz   S |S )Nr   r   r   :r   r   )r   r   names      r   dirnamezMockNTNamespace.dirname  sF    {{4  ++D11!48s??$;r   c                 t    |                                                     |                                           S r   )r   endswithr   r   suffixs      r   	hassuffixzMockNTNamespace.hassuffix  s(    }}''(9(9:::r   c                     |dd         dk    S )Nr      z:\r   r   s     r   r  zMockNTNamespace.isabs  s    AaCyE!!r   c                 h    t           rt          d|d           |                                | j        v S NCheck ifzis a dir)r   printr   r   r   s     r   isdirzMockNTNamespace.isdir  s1     	0*dJ///}}$*,,r   c                 h    t           rt          d|d           |                                | j        v S Nr  z	is a file)r   r  r   r   r   s     r   isfilezMockNTNamespace.isfile  s1     	1*dK000}}$+--r   c                     t           rt          d|d           |                                }|| j        v o0|                    d          d         d                                k    S Nr  zis a module.r  pyr   r  r   r   r   r   s     r   ismodulezMockNTNamespace.ismodule  sY     	3*dM222}}t{"Qts';';A'>$--//'QQr   c                     t           rt          d|d           |                                }|| j        v o0|                    d          d         d                                k    S )Nr  zis a executabler   r  exer"  r   s     r   isxfilezMockNTNamespace.isxfile  s\     	7*d$5666}}t{"Rts';';A'>%..BRBR'RRr   c                 B    t          j        t          j        |           S r   )ntpathnormpathjoinr   s     r   r  zMockNTNamespace.joinpath  s    v{D1222r   c                 ~    	 | j         |                                         S # t          $ r t          |          d w xY wr   )r   r   r   FileNotFoundErrorr   s     r   	readlineszMockNTNamespace.readlines  sG    	4;t}}// 	4 	4 	4#D))t3	4s   ! <c                 |   t           rt          d|           	 | j        |                                         }n# t          $ r |cY S w xY w|t                      }n%|                                |v rt          d          |                    |                                           |                     ||          S NzRead link fromzcircular link)	r   r  r   r   r   r   OSErrorr   realpathr   r   _traillinks       r   r1  zMockNTNamespace.realpath  s     	*"D)))	;t}}/DD 	 	 	KKK	>UUFF]]__&&/***

4==??###}}T6***s   9 AAc                 j    | j                             |           t          rt          |           d S d S r   r   appendr   r  r   messages     r   warnzMockNTNamespace.warn  9    g&&& 	'NNNNN	 	r   r   r   r   r   r
   r(   r'   rO   r)   r   r  r	  r  r  r  r  r  r#  r&  r  r-  r1  r:  r   r   s   @r   r&   r&   k  se       !%d       "5 5 5 5" " ". . .& & &* * *3 3 3
( ( (  ; ; ;" " "- - -
. . .
R R RS S S3 3 34 4 4+ + + +      r   r&   c                   F    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )rJ   HKLMHKCUc                 Z    d |                                 D             | _        i | _        d S )Nc                 >    i | ]\  }}|                                 |S r   )r   ).0kvs      r   
<dictcomp>z'MockWinreg.__init__.<locals>.<dictcomp>  s&    >>>AQZZ\\1>>>r   )itemskeysopen)r   rG  s     r   r
   zMockWinreg.__init__  s*    >>>>>				r   c                     dS )Nz<MockWinreg>r   r   s    r   __repr__zMockWinreg.__repr__  s    ~r   c                 <    t          |t          |                     S r   )
isinstancetype)r   others     r   __eq__zMockWinreg.__eq__  s    %d,,,r   c                 *    t          | j                  S r   )r   rH  rJ  s    r   	open_keyszMockWinreg.open_keys  s    DIr   c                     t           rt          d| d| d           | d|                                 }|| j        v r(| j                            |d          dz   | j        |<   |S t                      )Nz
OpenKeyEx(, )r   r   r   )r   r  r   rG  rH  getr,  )r   rK   subkeyr   s       r   	OpenKeyExzMockWinreg.OpenKeyEx  s     	20t00v000111!!!!**,,$)!Y]]322Q6DIcNJ!!!r   c                     t           rt          d| d           |                                }|| j        vrt	          d          | j        |xx         dz  cc<   | j        |         s
| j        |= d S d S )Nz	CloseKey(rU  key is not openr   )r   r  r   rH  RuntimeError)r   rK   s     r   CloseKeyzMockWinreg.CloseKey  s     	'%d%%%&&&}}ty  0111	$1y 	 	$	  	 r   c                    t           rt          d| d| d           |                                }|| j        vrt	          d          | dfdt          | j                  D             }d |D             |d d <   t          |          D ]"\  }}||k    r|                              c S #t          d          )	NzEnumKey(rT  rU  rZ  r   c                 h    g | ].}|                               |t                    d          /S r   )
startswithlen)rB  rC  r!   s     r   
<listcomp>z&MockWinreg.EnumKey.<locals>.<listcomp>  s8    VVVqfAUAUV1S[[\\?VVVr   c                     g | ]}d |v|	S )r   r   rB  rC  s     r   ra  z&MockWinreg.EnumKey.<locals>.<listcomp>  s    :::ADMMaMMMr   zend of enumeration)
r   r  r   rH  r[  sortedrG  	enumerateremoveprefixr0  )r   rK   isubkeysjnr!   s         @r   EnumKeyzMockWinreg.EnumKey  s     	+)T))Q)))***}}ty  0111VVVVF49,=,=VVV:::::
g&& 	. 	.DAqAvv~~f----- *+++r   c                 "   t           rt          d| d| d           |                                }|| j        vrt	          d          |r|                                }| d| }	 | j        |         S # t          $ r t                      w xY w)NzQueryValue(rT  rU  rZ  r   )r   r  r   rH  r[  rG  r   r0  )r   rK   rW  s      r   
QueryValuezMockWinreg.QueryValue  s     	3111111222}}ty  0111 	'__&&F&&f&&D	9T?" 	 	 	))O	s   (A5 5BN)r   r   r   HKEY_LOCAL_MACHINEHKEY_CURRENT_USERr
   rK  rP  rR  rX  r\  rk  rm  r   r   r   rJ   rJ     s            - - -  " " "     , , ,    r   rJ   c                        e Zd Zddd fd
ZddZd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd Zd Zd ZddZd Z xZS )rb   Nr   c                   |                      t                     t                                          | d<   d| d<   d| d<   d| d<    t	                      j        |i | |r|g| d         d<   |r| d                              |           i | _        t                      | _        i | _	        t                      | _
        g | _        d S )	NrH   posixr   libr   r   r   r   )r   r   r   r   r	   r
   r   r   _xfilesr   r   r   r   s        r   r
   zMockPosixNamespace.__init__  s    %&&&',,..X!Y"\&'"#!"r""" 	2+0'DN;' 	*N!!&)))uuUU
r   c                     t          |pd          | j        |<   |                     |                    d          d                    d S )Nr   /r   )r   r   r)   r   r   s      r   r(   z!MockPosixNamespace.add_known_file-  sE     "--D4??3//233333r   c                 d    |                      |           | j                            |           d S r   )r(   rt  r   r   s     r   r'   z"MockPosixNamespace.add_known_xfile1  s2    D!!!r   c                     || j         |<   d S r   )r   r   s      r   rO   z!MockPosixNamespace.add_known_link5  s    "Dr   c                     |                     d          }|r9| j                            |           |                    d          d         }|7d S d S Nrv  r   )r   r   r   r   r   s      r   r)   z MockPosixNamespace.add_known_dir8  sc    KK 	%JNN1S!!!$A  	% 	% 	% 	% 	%r   c                 `    	 t          | |          S # t          $ r t          |          d w xY wr   r   r   s     r   r   zMockPosixNamespace.__missing__>  r   r   c                 \    |                      |          r|S |                     d|          S )Nz	/Absoluter  r   s     r   r  zMockPosixNamespace.abspathD  s/    ::d 	K}}[$///r   c                 8    |                     d          d         S )Nrv  r  r  r   s     r   r	  zMockPosixNamespace.basenameI  s    s##A&&r   c                 ^    |                     d                              d          d         S rz  r  r   s     r   r  zMockPosixNamespace.dirnameL  s'    {{3**3//22r   c                 ,    |                     |          S r   )r  r  s      r   r  zMockPosixNamespace.hassuffixO  s    }}V$$$r   c                     |dd         dk    S )Nr   r   rv  r   r   s     r   r  zMockPosixNamespace.isabsR  s    AaCyCr   c                 D    t           rt          d|d           || j        v S r  )r   r  r   r   s     r   r  zMockPosixNamespace.isdirU  s)     	0*dJ///tz!!r   c                 D    t           rt          d|d           || j        v S r  )r   r  r   r   s     r   r  zMockPosixNamespace.isfileZ  s)     	1*dK000t{""r   c                     t           rt          d|d           || j        v o|                    d          d         dk    S r  )r   r  r   r   r   s     r   r#  zMockPosixNamespace.ismodule_  sD     	3*dM222t{"Fts';';A'>$'FFr   c                 D    t           rt          d|d           || j        v S )Nr  zis an xfile)r   r  rt  r   s     r   r&  zMockPosixNamespace.isxfiled  s)     	3*dM222t|##r   c                 B    t          j        t          j        |           S r   )	posixpathr)  r*  r   s     r   r  zMockPosixNamespace.joinpathi  s    !).$"7888r   c                 Z    	 | j         |         S # t          $ r t          |          d w xY wr   )r   r   r,  r   s     r   r-  zMockPosixNamespace.readlinesl  s?    	4;t$$ 	4 	4 	4#D))t3	4s    *c                    t           rt          d|           	 | j        |         }n# t          $ r |cY S w xY w|t	                      }n||v rt          d          |                    |           |                     ||          S r/  )r   r  r   r   r   r0  r   r1  r2  s       r   r1  zMockPosixNamespace.realpathr  s     	*"D)))	;t$DD 	 	 	KKK	>UUFFV^^/***

4}}T6***s   ' 66c                 j    | j                             |           t          rt          |           d S d S r   r6  r8  s     r   r:  zMockPosixNamespace.warn  r;  r   r   r<  r   s   @r   rb   rb     sb       !%d       "4 4 4 4  # # #% % %* * *0 0 0
' ' '3 3 3% % %     " " "
# # #
G G G
$ $ $
9 9 94 4 4+ + + +      r   rb   globalc           
      ~   g }t          |           D ]p}|d d         dk    r|dk    rt          | |         ||         d           6||v r6||         | |         k    r$|                    || |         ||         f           q|sd S t          d |D                       }dt	          |          dz   |z   z  }t
          r||D ]{\  }}}|r:t          d                    ||                    |          |||                     Bt          d	                    ||                    |          |                     zd S d S )
Nr  __rH   r!   c              3   <   K   | ]\  }}}t          |          V  d S r   r`  )rB  rC  _s      r   	<genexpr>zdiff_dict.<locals>.<genexpr>  s.      ++71aA++++++r    r   z{}.{} -{!r}
{} +{!r}z{}.{} +{!r})	rd  	diff_dictr7  maxr`  r   r  formatljust)	beforeafterr!   diffrC  max_kindentbr   s	            r   r  r    sz   DF^^ 2 2RaR5D====fQiq(;;;;::%(fQi//KKF1IuQx0111 ++d+++++ECKK!Oe+,F G 	G 	GGAq! G-44VQWWU^^QPVXYZZ[[[[m**61775>>1EEFFFFG G	G 	Gr   c           
      2   t           r|sd S t          d |D                       }t          |                                d           D ]\  }}|d d         dk    r|dk    rt	          | |         ||         d           9	 || |         k    r?t          d                    ||                    |          || |                              n# t          $ r Y nw xY wt          d	                    ||                    |          |                     d S )
Nc              3   4   K   | ]}t          |          V  d S r   r  rc  s     r   r  zdump_dict.<locals>.<genexpr>  s(      &&1A&&&&&&r   c                     | d         S )Nr   r   )rg  s    r   <lambda>zdump_dict.<locals>.<lambda>  s
    AaD r   )r   r  r  rH   r  z{}.{} {!r} (was {!r})z
{}.{} {!r})	r   r  rd  rF  	dump_dictr  r  r  r   )r  r  r!   r  rC  rD  s         r   r  r    s@    % &&&&&&&Eu{{}}..999 > >1RaR5D====fQiq(;;;;	F1I~~-44VQWWU^^QPVWXPYZZ[[[   	 	 	D	l!!&!''%..!<<====> >s   A
C
CCc                     t          j                   }d}	 t          t                      d}|rt	          |            n9t          |            n(# |rt	          |            w t          |            w xY w fd|D             S )NTFc           
      r    i | ]3}|d                               |                     |d                    4S )rH   .)rV  )rB  rC  r.   s     r   rE  zgetpath.<locals>.<dictcomp>  sK        	
2h<Arvva~~..  r   )r   deepcopyexecSOURCEr  r  )r.   rG  r  faileds   `   r   r+   r+     s    ]2FF"VR 	"fb!!!!fb!!!!  	"fb!!!!fb!!!!      s   A %A9r   )r  )r   r(  pathlibr  sysunittesttest.supportr   Path__file__absoluteparent
read_bytesr  r,  _testinternalcapir   TestCaser   r*   r   r   r&   rJ   rb   r  r  r+   r   r   r   <module>r     s          



             &gl8$$--//6=DG[[ggiiFF & & &888888##%%FFF&a+ a+ a+ a+ a+x( a+ a+ a+L D   2 r "	
 r r ! ! T t R 2  B  "!" r#$ B%& 2'( B)* 4+, -. / 4    	t t 	
 4   T t B t 4  A 4  
!" d#& Q'( A)* Q+0l l l l ld l l l^> > > > > > > >Bh h h h h h h hVG G G G,> > > >&    s   AA' 'A?>A?