
    0hh`                        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   \R                  " \5      R                  5       R                  R                  R                  S-  R                  5       r " S S\R                   5      r\" S?0 SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S_6r\" S?0 S!S_S"S_S#S_S$S_S%S_S&S_S'S_S(S_S)S_S*S_S+S_S,S_S-S_S.S _S/S_S0S_S1S_S2S _S3S4_S5S4_6r " S6 S7\5      r " S8 S95      r " S: S;\5      rS@S< jrS@S= jrS> rg! \ a    S SKJr  \" 5       r Nf = f)A    N)verbosezModules/getpath.py)get_getpath_codeobjectc                      ^  \ rS rSrU 4S jrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrU =r$ )MockGetPathTests   c                 4   > [         TU ]  " U0 UD6  S U l        g N)super__init__maxDiff)selfakw	__class__s      :/opt/python-3.13.8/usr/lib/python3.13/test/test_getpath.pyr   MockGetPathTests.__init__   s    !"r"    c           	          [        SSS9nUR                  S5        UR                  S5        UR                  S5        [	        SSSSS/ SQS9n[        X5      nU R                  X#5        g	)
z,Test a 'standard' install layout on Windows.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_pathsNMockNTNamespaceadd_known_xfileadd_known_fileadd_known_dirdictgetpathassertEqualr   nsexpectedactuals       r   test_normal_win32"MockGetPathTests.test_normal_win32   sy    )3
 	23
01
*+.3$$%!
 &*r   c                     [        SSS9nUR                  S5        UR                  S5        UR                  SS/5        [        SSSSSSS/ SQS	9n[	        X5      nU R                  X#5        g
)z(Test an in-build-tree layout on Windows.#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&   Nr(   r)   r*   r,   r-   r.   r/   s       r   test_buildtree_win32%MockGetPathTests.test_buildtree_win320   s    8B
 	AB
12
DrdK=B %&$%!
 &*r   c                 $   [        SSSS9nUR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  SS/5        [	        SSSSSSS	/ S
QS9n[        X5      nU R                  X#5        g)zTest a venv layout on Windows.

This layout is discovered by the presence of %__PYVENV_LAUNCHER__%,
specifying the original launcher executable. site.py is responsible
for updating prefix and exec_prefix.
r   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&   Nr'   r/   s       r   test_venv_win32 MockGetPathTests.test_venv_win32J   s     )$A3

 	23
89
01
*+
/2
 	 4$3$)$%!
 &*r   c                    Sn[        USU S3SU S3S05      n[        SSUS9nUR                  S5        UR                  S	5        UR	                  S
5        [        S/ SQS9n[        X45      nU R                  XE5        SUS   S'   SUS   S'   SUS   S'   [        S/ SQS9n[        X45      nU R                  XE5        g)zTest registry lookup on Windows.

On Windows there are registry entries that are intended for other
applications to register search paths.
z1HKLM\Software\Python\PythonCore\9.8-XY\PythonPathNz\Path1	path1-dirz\Path1\Subdirznot-subdirsr   )r   r   winregr   r   r   )r   rK   r   r   r   )r%   r&   r   configuse_environmentr%   r&   r   )
MockWinregr(   r)   r*   r+   r,   r-   r.   )r   hkeyrL   r0   r1   r2   s         r   test_registry_win32$MockGetPathTests.test_registry_win32o   s     D$fGkfO$m
 
 )3

 	23
01
*+$%!

 &**+8&'238./.28*+$%!
 &*r   c           	         [        SSS9nUR                  S5        UR                  S5        UR                  SS5        UR                  S5        UR	                  S5        [        SSSSS/ SQS	9n[        X5      nU R                  X#5        g
)z8Test a 'standard' install layout via symlink on Windows.C:\LinkedFrom\python.exer   r   r   r   r   r   r   r    N)r(   r)   add_known_linkr*   r+   r,   r-   r.   r/   s       r   test_symlink_normal_win32*MockGetPathTests.test_symlink_normal_win32   s    -3
 	67
23
57NO
01
*+27$$%!
 &*r   c                 $   [        SSS9nUR                  S5        UR                  S5        UR                  SS5        UR                  S5        UR                  SS/5        [	        SSSSSSS/ S	QS
9n[        X5      nU R                  X#5        g)z4Test an in-build-tree layout via symlink on Windows.rT   r6   r   r7   r8   r9   r:   r   r;   r=   N)r(   r)   rU   r*   r,   r-   r.   r/   s       r   test_symlink_buildtree_win32-MockGetPathTests.test_symlink_buildtree_win32   s    -B
 	67
AB
57]^
12
DrdK27 %&$%!
 &*r   c                     [        SSSS9nUR                  S5        UR                  S5        UR                  SS/5        [        SSSSSSS/ S	QS
9n[	        X5      nU R                  X#5        g)zETest an out-of-build-tree layout on Windows with PYTHONHOME override.zC:\Out\python.exer:   )r   r   ENV_PYTHONHOMEr7   zC:\Out\pybuilddir.txtr9   zC:\r   )zC:\Out\python98.zipzC:\Outr<   r=   Nr@   r/   s       r   test_buildtree_pythonhome_win320MockGetPathTests.test_buildtree_pythonhome_win32   s    &0(

 	/0
12
2RD9+0 %  $%!
" &*r   c           	          [        SSS9nUR                  S5        UR                  S5        [        SSSSS/ SQS9n[	        X5      nU R                  X#5        g)	z0Test a layout on Windows with no DLLs directory.r   r   r   r   r   )r   r   r   r    Nr@   r/   s       r   test_no_dlls_win32#MockGetPathTests.test_no_dlls_win32   sj    )3
 	23
01.3$$%!
 &*r   c           	          [        SSSS9nUR                  S5        UR                  S5        UR                  S5        [	        SSSSS/ S	QS
9n[        X5      nU R                  X#5        g)z(Test a 'standard' install layout on *nix/usrpython/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.8rk   r    NMockPosixNamespacer)   r*   r+   r,   r-   r.   r/   s       r   test_normal_posix"MockGetPathTests.test_normal_posix  s|    

 	,-
45
9:(-$%!
 &*r   c                 "   [        SSS9nUR                  S5        UR                  S5        UR                  SS/5        UR                  S5        UR                  S5        [	        SSSSS	S
S
/ SQS9n[        X5      nU R                  X#5        g)Test an in-build-tree layout on POSIX.

This layout is discovered from the presence of pybuilddir.txt, which
contains the relative path from the executable's directory to the
platstdlib path.
/home/cpython/python
/usr/localr   rg   /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&   Nrm   r/   s       r   test_buildpath_posix%MockGetPathTests.test_buildpath_posix%  s      )
 	12
23
8;W:XY
34
45-$2($%!
 &*r   c                 $   [        SSSS9nUR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S	S
/5        [	        SSSSSSS/ SQS9n[        X5      nU R                  X#5        g)Test a venv layout on *nix.rd   rc   /venv/bin:/usr/binr   rg   rh   ri   /venv/bin/pythonrj   rk   /venv/pyvenv.cfghome = /usr/binr   rl   rE   Nrm   r/   s       r   test_venv_posix MockGetPathTests.test_venv_posixF  s    )

 	,-
-.
45
9:
,/
 	 )-#$%!
 &*r   c                 H   [        SSSS9nUR                  S5        UR                  S5        UR                  SS5        UR                  S5        UR	                  S5        UR                  S	S
/5        [        SSSSSSS/ SQS9n[        X5      nU R                  X#5        g)r   rd   rc   r   r   z/usr/bin/python3r   rj   rk   r   r   r   rl   rE   Nrn   r)   rU   r*   r+   r,   r-   r.   r/   s       r   test_venv_changed_name_posix-MockGetPathTests.test_venv_changed_name_posixe  s    )

 	-.
-.
,.@A
45
9:
,/
 	 ).#$%!
 &*r   c                 H   [        SSSS9nUR                  S5        UR                  S5        UR                  SS5        UR                  S5        UR	                  S5        UR                  SS	/5        [        SS
S
SS
S
S/ SQS9n[        X5      nU R                  X#5        g)zCTest a venv created from non-installed python has correct zip path.r   rc   r   r   z!/path/to/non-installed/bin/pythonz*/path/to/non-installed/lib/python9.8/os.py0/path/to/non-installed/lib/python9.8/lib-dynloadr   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   rE   Nr   r/   s       r   &test_venv_non_installed_zip_path_posix7MockGetPathTests.test_venv_non_installed_zip_path_posix  s    $)

 	>?
-.
,=	?
FG
KL
,,/
 	 )+0?05$%!
 &*r   c                 $   [        SSSS9nUR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S	S
/5        [	        SSSSSSS/ SQS9n[        X5      nU R                  X#5        g)zETest a venv --copies layout on *nix that lacks a distributed 'python'rd   rc   r   r   z/usr/bin/python9r   rj   rk   r   r   r   rl   rE   Nrm   r/   s       r   !test_venv_changed_name_copy_posix2MockGetPathTests.test_venv_changed_name_copy_posix  s    )

 	-.
-.
45
9:
,/
 	 ).#$%!
 &*r   c           	         [        SSS9nUR                  S5        UR                  S5        UR                  SS5        UR                  S5        UR	                  S5        [        SSSSS/ SQS	9n[        X5      nU R                  X#5        g
)z4Test a 'standard' install layout via symlink on *nixrc   /linkfrom/python)rg   r   ri   rj   rk   r   rl   r    Nr   r/   s       r   test_symlink_normal_posix*MockGetPathTests.test_symlink_normal_posix  s    $
 	-.
,-
,.?@
45
9:).$%!
 &*r   c                 h   [        SSS9nUR                  S5        UR                  S5        UR                  SS5        UR                  S5        UR                  SS/5        UR                  S5        UR	                  S	5        [        SSSSS
SS/ SQS9n[        X5      nU R                  X#5        g)rr   r   rt   ru   rs   rv   rw   rx   ry   rz   r{   r   r|   r   Nr   r/   s       r   test_symlink_buildpath_posix-MockGetPathTests.test_symlink_buildpath_posix  s      %
 	-.
12
,.DE
23
8;W:XY
34
45)$.($%!
 &*r   c           	          [        SSSS9nUR                  S5        UR                  S5        UR                  S5        [	        SSSSS/ S	QS
9n[        X5      nU R                  X#5        g)z.Test an install with custom platlibdir on *nixrc   r   lib64)rg   r   
PLATLIBDIRri   z/usr/lib64/python9.8/os.py /usr/lib64/python9.8/lib-dynloadr   )z/usr/lib64/python98.zipz/usr/lib64/python9.8r   r    Nrm   r/   s       r   test_custom_platlibdir_posix-MockGetPathTests.test_custom_platlibdir_posix  s|    $

 	,-
67
;<).$%!
 &*r   c                    [        SSSSSSSSS9nUR                  S5        UR                  S5        UR                  S5        UR                  S	5        [	        SSSSSSS/ S
QS9n[        X5      nU R                  X#5        g)zuTest framework layout on macOS

This layout is primarily detected using a compile-time option
(WITH_NEXT_FRAMEWORK).
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_FRAMEWORKrg   EXEC_PREFIXrD   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   rE   N)rn   r)   r+   r*   r,   r-   r.   r/   s       r   test_framework_macos%MockGetPathTests.test_framework_macos  s      p !FK$ezN	
 	yz
\]
fg
ab
 XFK]KP$%!
 &*r   c                    [        SSSSSSSSSSSSSS9nUR                  S5        UR                  S5        UR                  S	5        UR                  S
5        [        SSSSSSS/ SQS9n[	        X5      nU R                  X#5        g)zTest framework layout on macOS with alternate framework name

``--with-framework-name=DebugPython``

This layout is primarily detected using a compile-time option
(WITH_NEXT_FRAMEWORK).
f/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/DebugPythonN)r   r   r   rg   r   rD   r   r   
PYTHONPATHr\   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   rE   )rn   r)   r+   r,   r-   r.   r/   s       r   test_alt_framework_macos)MockGetPathTests.test_alt_framework_macosD  s      z !KP$j EX!%
 	  D  	E
ab
kl
gh ]KPbPU$%!
 &*r   c                    Sn[        SSSSSU S3SSS9nUR                  U5        UR                  U S	35        UR                  U S
35        UR                  U S35        UR                  U S35        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  U S3S/5        [	        U S3SSSSSS/ SQS9n[        X#5      nU R                  X45        g)z<Test a venv layout on macOS using a framework build
        /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   rE   Nrn   r+   r)   r*   r,   r-   r.   r   	venv_pathr0   r1   r2   s        r   test_venv_framework_macos*MockGetPathTests.test_venv_framework_macoss  s8    (	p !FK'0k$=zN	
 	#
I;d+,
I;d+,
I;n56
i[45
yz
\]
fg
bc
YK{3J6
 	 #K0FK]KP$%!
 &*r   c                    Sn[        SSSSSU S3SSS9nUR                  U5        UR                  U S	35        UR                  U S
35        UR                  U S35        UR                  U S35        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  U S3S/5        [	        U S3SSSSSS/ SQS9n[        X#5      nU R                  X45        g)z[Test a venv layout on macOS using a framework build

``--with-framework-name=DebugPython``
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   zAhome = /Library/Frameworks/DebugPython.framework/Versions/9.8/binr   rE   Nr   r   s        r   test_venv_alt_framework_macos.MockGetPathTests.test_venv_alt_framework_macos  sA   
 (	z !KP'0k$= EX	
 	#
I;d+,
I;d+,
I;n56
i[45
  D  	E
ab
kl
gh
YK{3O6
 	 #K0KPbPU$%!
 &*r   c                 (   [        SSSSSS9nUR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  SS	/5        [	        SSSSSSS
/ SQS9n[        X5      nU R                  X#5        g)zTest a venv layout on macOS.

This layout is discovered when 'executable' and 'real_executable' match,
but $__PYVENV_LAUNCHER__ has been set to the original process.
r   ri   rc   z/framework/Python9.8/python)r   r   rg   rD   r   rj   rk   z/framework/Python9.8/pyvenv.cfgr   r   rl   rE   Nrm   r/   s       r   test_venv_macos MockGetPathTests.test_venv_macos  s      #$A-
 	,-
89
45
9:
;>
 	 4-#$%!
 &*r   c           	      "   [        SSSSSS9nUR                  S5        UR                  S5        UR                  SS5        UR                  S5        UR	                  S	5        [        SSSSS
/ SQS9n[        X5      nU R                  X#5        g)z5Test a 'standard' install layout via symlink on macOSr   rc   rd   /linkfrom:/usr/binr   )r   rg   r   rh   r   ri   rj   rk   r   rl   r    Nr   r/   s       r   test_symlink_normal_macos*MockGetPathTests.test_symlink_normal_macos  s    ).
 	-.
,-
,.?@
45
9:).$%!
 &*r   c                 n   [        SSSSSS9nUR                  S5        UR                  S5        UR                  SS5        UR                  S5        UR                  S	S
/5        UR                  S5        UR	                  S5        [        SSSSSSS/ SQS9n[        X5      nU R                  X#5        g)zTest an in-build-tree layout via symlink on macOS.

This layout is discovered from the presence of pybuilddir.txt, which
contains the relative path from the executable's directory to the
platstdlib path.
r   rd   r   rt   r   )r   r   rh   rg   r   rs   rv   rw   zbuild/lib.macos-9.8ry   rz   r{   r   )r}   r~   z!/home/cpython/build/lib.macos-9.8r   Nr   r/   s       r   test_symlink_buildpath_macos-MockGetPathTests.test_symlink_buildpath_macos  s      ).
 	-.
12
,.DE
23
8;P:QR
34
45)$.($%!
 &*r   c                 t    [        SSSS9nSUS   S'   [        SS9n[        X5      nU R                  X#5        g	)
z>Test the explicitly set stdlib_dir in the config is respected.rc   rd   re   rf   z/custom_stdlib_dirrM   
stdlib_dir)r   N)rn   r,   r-   r.   r/   s       r   test_explicitly_set_stdlib_dir/MockGetPathTests.test_explicitly_set_stdlib_dir5  sL    

 &:8\"+
 &*r   )r   ) __name__
__module____qualname____firstlineno__r   r3   rA   rH   rQ   rV   rY   r]   r`   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes____classcell__r   s   @r   r   r      s    +2+4#+J/+b+6+8+<+.+2+B+>+@+B+>+4!+F+2'+R-+^)+V++Z#+J+<%+N+ +r   r   rg   r9   r   r   VPATHr   
PYDEBUGEXTVERSION_MAJOR	   VERSION_MINOR   
ABI_THREADPYWINVER
EXE_SUFFIXrh   r\   r   rD   r   r   r   r   r   rL   r>   venv_prefixhome
platlibdir
pythonpathprogram_namer#   r$   rF   rG   r!   r"   r   platstdlib_dirr&   r%   pythonpath_envargv	orig_argvisolatedrN   r   use_sitec                      ^  \ rS rSrSSS.U 4S jjrSS jrS rS rS rS	 r	S
 r
S rS rS rS rS rS rS rS rS rS rSS jrS rSrU =r$ )r(   iy  Nr   rM   c                D  > U R                  [        5        [        R                  5       U S'   SU S'   SU S'   SU S'   SU S	'   [        TU ]  " U0 UD6  U(       a	  U/U S   S
'   U(       a  U S   R                  U5        0 U l        0 U l        [        5       U l	        / U l
        g )NrM   ntr   DLLsr   z9.8-XYr   z..\..r   r   )updateDEFAULT_NAMESPACEDEFAULT_CONFIGcopyr
   r   _files_linksset_dirs	_warningsr   r   rM   r   r   r   s        r   r   MockNTNamespace.__init__z  s    %&',,.XY#\#Z W!"r"+0'DN;'N!!&)U
r   c                     [        U=(       d    S5      U R                  UR                  5       '   U R                  UR	                  S5      S   5        g )N \r   )listr  casefoldr+   
rpartitionr   pathliness      r   r*   MockNTNamespace.add_known_file  s;    '+EKR'8DMMO$4??4034r   c                 &    U R                  U5        g r	   )r*   r   r  s     r   r)   MockNTNamespace.add_known_xfile  s    D!r   c                 <    X R                   UR                  5       '   g r	   )r  r  r   r  targets      r   rU   MockNTNamespace.add_known_link  s    '-DMMO$r   c                     UR                  S5      R                  5       nU(       a9  U R                  R                  U5        UR	                  S5      S   nU(       a  M8  g g )Nr  r   )rstripr  r  addr  r   r  ps      r   r+   MockNTNamespace.add_known_dir  sF    KK&&(JJNN1T"1%A ar   c                 N     [        X5      $ ! [         a    [        U5      S ef = fr	   getattrAttributeErrorKeyErrorr   keys     r   __missing__MockNTNamespace.__missing__  -    	*4%% 	*3-T)	*   
 $c                 V    U R                  U5      (       a  U$ U R                  SU5      $ )NzC:\Absoluteisabsjoinpathr  s     r   abspathMockNTNamespace.abspath  s'    ::dK}}^T22r   c                 *    UR                  S5      S   $ )Nr     r  r  s     r   basenameMockNTNamespace.basename  s    t$Q''r   c                 h    UR                  S5      R                  S5      S   nUSS  S:X  a  US-   $ U$ )Nr  r   r   :r  r  )r   r  names      r   dirnameMockNTNamespace.dirname  s<    {{4 ++D1!48s?$;r   c                 \    UR                  5       R                  UR                  5       5      $ r	   )r  endswithr   r  suffixs      r   	hassuffixMockNTNamespace.hassuffix  s     }}''(9::r   c                     USS S:H  $ )Nr      z:\r
  r  s     r   r-  MockNTNamespace.isabs  s    AayE!!r   c                 l    [         (       a  [        SUS5        UR                  5       U R                  ;   $ NCheck ifzis a dir)r   printr  r  r  s     r   isdirMockNTNamespace.isdir  s(    7*dJ/}}$**,,r   c                 l    [         (       a  [        SUS5        UR                  5       U R                  ;   $ NrG  z	is a file)r   rH  r  r  r  s     r   isfileMockNTNamespace.isfile  s(    7*dK0}}$++--r   c                     [         (       a  [        SUS5        UR                  5       nXR                  ;   =(       a%    UR	                  S5      S   SR                  5       :H  $ NrG  zis a module.r2  pyr   rH  r  r  r  r  s     r   ismoduleMockNTNamespace.ismodule  sI    7*dM2}}{{"Qts';A'>$--/'QQr   c                     [         (       a  [        SUS5        UR                  5       nXR                  ;   =(       a%    UR	                  S5      S   SR                  5       :H  $ )NrG  zis a executablerQ  r2  exerS  r  s     r   isxfileMockNTNamespace.isxfile  sK    7*d$56}}{{"Rts';A'>%..BR'RRr   c                 P    [         R                  " [         R                  " U6 5      $ r	   )ntpathnormpathjoinr  s     r   r.  MockNTNamespace.joinpath  s    v{{D122r   c                 r     U R                   UR                  5          $ ! [         a    [        U5      S ef = fr	   )r  r  r$  FileNotFoundErrorr  s     r   	readlinesMockNTNamespace.readlines  s8    	4;;t}}// 	4#D)t3	4s    6c                 J   [         (       a  [        SU5         U R                  UR                  5          nUc  [        5       nOUR                  5       U;   a  [        S5      eUR                  UR                  5       5        U R                  X25      $ ! [         a    Us $ f = fNzRead link fromzcircular link)	r   rH  r  r  r$  r  OSErrorr  realpathr   r  _traillinks       r   rf  MockNTNamespace.realpath  s    7"D)	;;t}}/D >UF]]_&/**

4==?#}}T**  	K	s   B B"!B"c                 h    U R                   R                  U5        [        (       a  [        U5        g g r	   r  appendr   rH  r   messages     r   warnMockNTNamespace.warn  %    g&7'N r   )r  r  r  r  r	   r   r   r   r   r   r*   r)   rU   r+   r'  r/  r4  r:  r@  r-  rI  rM  rT  rX  r.  ra  rf  rp  r   r   r   s   @r   r(   r(   y  ss    !%d  "5".&*3
(;"-
.
RS34+ r   r(   c                   L    \ rS rSrSrSrS rS rS rS r	S r
S	 rS
 rS rSrg)rO   i  HKLMHKCUc                     UR                  5        VVs0 s H  u  p#UR                  5       U_M     snnU l        0 U l        g s  snnf r	   )itemsr  keysopen)r   ry  kvs       r   r   MockWinreg.__init__  s6    15>QZZ\1_>		 ?s   Ac                     g)Nz<MockWinreg>r
  r   s    r   __repr__MockWinreg.__repr__  s    r   c                 ,    [        U[        U 5      5      $ r	   )
isinstancetype)r   others     r   __eq__MockWinreg.__eq__  s    %d,,r   c                 ,    [        U R                  5      $ r	   )r  rz  r  s    r   	open_keysMockWinreg.open_keys  s    DIIr   c                     [         (       a  [        SU SU S35        U SU 3R                  5       nX0R                  ;   a.  U R                  R                  US5      S-   U R                  U'   U$ [        5       e)Nz
OpenKeyEx(, )r  r   r   )r   rH  r  ry  rz  getr`  )r   rP   subkeyr&  s       r   	OpenKeyExMockWinreg.OpenKeyEx  sp    7JtfBvha01b!**,))!YY]]32Q6DIIcNJ!!r   c                     [         (       a  [        SU S35        UR                  5       nXR                  ;  a  [	        S5      eU R                  U==   S-  ss'   U R                  U   (       d  U R                  U	 g g )Nz	CloseKey(r  key is not openr   )r   rH  r  rz  RuntimeError)r   rP   s     r   CloseKeyMockWinreg.CloseKey  sf    7IdV1%&}}yy 011		$1yy		$ r   c                    [         (       a  [        SU SU S35        UR                  5       nXR                  ;  a  [	        S5      eU S3n[        U R                  5       Vs/ s H(  oDR                  U5      (       d  M  U[        U5      S  PM*     nnU Vs/ s H  nSU;  d  M  UPM     snUS S & [        U5       H  u  pgXb:X  d  M  UR                  U5      s  $    [        S5      es  snf s  snf )NzEnumKey(r  r  r  r  zend of enumeration)r   rH  r  rz  r  sortedry  
startswithlen	enumerateremoveprefixre  )r   rP   ir#   r{  subkeysjns           r   EnumKeyMockWinreg.EnumKey  s    7HTF"QCq)*}}yy 0116,2499,=V,=qfAU?1S[\?,=V!(:ADMa:
g&DAv~~f-- ' *++ W:s   $C*C*
C/'C/c                    [         (       a  [        SU SU S35        UR                  5       nXR                  ;  a  [	        S5      eU(       a  UR                  5       nU SU 3n U R
                  U   $ ! [         a    [        5       ef = f)NzQueryValue(r  r  r  r  )r   rH  r  rz  r  ry  r$  re  )r   rP   r  s      r   
QueryValueMockWinreg.QueryValue  s    7KvRxq12}}yy 011__&FV2fX&D	99T?" 	)O	s   'A6 6B)ry  rz  N)r   r   r   r   HKEY_LOCAL_MACHINEHKEY_CURRENT_USERr   r  r  r  r  r  r  r  r   r
  r   r   rO   rO     s6    -" ,r   rO   c                      ^  \ rS rSrSSS.U 4S jjrSS jrS rS rS rS	 r	S
 r
S rS rS rS rS rS rS rS rS rS rSS jrS rSrU =r$ )rn   i)  Nr   c                X  > U R                  [        5        [        R                  5       U S'   SU S'   SU S'   SU S'   [        TU ]  " U0 UD6  U(       a	  U/U S   S'   U(       a  U S   R                  U5        0 U l        [        5       U l        0 U l	        [        5       U l
        / U l        g )	NrM   posixr   libr   r   r   r   )r   r   r   r  r
   r   r  r  _xfilesr  r  r  r  s        r   r   MockPosixNamespace.__init__*  s    %&',,.X!Y"\&'"#!"r"+0'DN;'N!!&)uU
r   c                     [        U=(       d    S5      U R                  U'   U R                  UR                  S5      S   5        g )Nr
  /r   )r  r  r+   r  r  s      r   r*   !MockPosixNamespace.add_known_file;  s5     "-D4??3/23r   c                 \    U R                  U5        U R                  R                  U5        g r	   )r*   r  r  r  s     r   r)   "MockPosixNamespace.add_known_xfile?  s"    D!r   c                      X R                   U'   g r	   )r  r  s      r   rU   !MockPosixNamespace.add_known_linkC  s    "Dr   c                     UR                  S5      nU(       a9  U R                  R                  U5        UR                  S5      S   nU(       a  M8  g g Nr  r   )r  r  r  r  r  s      r   r+    MockPosixNamespace.add_known_dirF  s=    KKJJNN1S!!$A ar   c                 N     [        X5      $ ! [         a    [        U5      S ef = fr	   r!  r%  s     r   r'  MockPosixNamespace.__missing__L  r)  r*  c                 V    U R                  U5      (       a  U$ U R                  SU5      $ )Nz	/Absoluter,  r  s     r   r/  MockPosixNamespace.abspathR  s'    ::dK}}[$//r   c                 *    UR                  S5      S   $ )Nr  r2  r3  r  s     r   r4  MockPosixNamespace.basenameW  s    s#A&&r   c                 H    UR                  S5      R                  S5      S   $ r  r8  r  s     r   r:  MockPosixNamespace.dirnameZ  s!    {{3**3/22r   c                 $    UR                  U5      $ r	   )r=  r>  s      r   r@  MockPosixNamespace.hassuffix]  s    }}V$$r   c                     USS S:H  $ )Nr   r   r  r
  r  s     r   r-  MockPosixNamespace.isabs`  s    AayCr   c                 N    [         (       a  [        SUS5        XR                  ;   $ rF  )r   rH  r  r  s     r   rI  MockPosixNamespace.isdirc  s     7*dJ/zz!!r   c                 N    [         (       a  [        SUS5        XR                  ;   $ rL  )r   rH  r  r  s     r   rM  MockPosixNamespace.isfileh  s     7*dK0{{""r   c                     [         (       a  [        SUS5        XR                  ;   =(       a    UR                  S5      S   S:H  $ rP  )r   rH  r  r  r  s     r   rT  MockPosixNamespace.ismodulem  s8    7*dM2{{"Fts';A'>$'FFr   c                 N    [         (       a  [        SUS5        XR                  ;   $ )NrG  zis an xfile)r   rH  r  r  s     r   rX  MockPosixNamespace.isxfiler  s     7*dM2||##r   c                 P    [         R                  " [         R                  " U6 5      $ r	   )	posixpathr\  r]  r  s     r   r.  MockPosixNamespace.joinpathw  s    !!)..$"788r   c                 V     U R                   U   $ ! [         a    [        U5      S ef = fr	   )r  r$  r`  r  s     r   ra  MockPosixNamespace.readlinesz  s2    	4;;t$$ 	4#D)t3	4s    (c                     [         (       a  [        SU5         U R                  U   nUc  [	        5       nOX2;   a  [        S5      eUR                  U5        U R                  X25      $ ! [         a    Us $ f = frd  )r   rH  r  r$  r  re  r  rf  rg  s       r   rf  MockPosixNamespace.realpath  st    7"D)	;;t$D >UF^/**

4}}T**  	K	s   A( (A76A7c                 h    U R                   R                  U5        [        (       a  [        U5        g g r	   rl  rn  s     r   rp  MockPosixNamespace.warn  rr  r   )r  r  r  r  r  r	   rs  r   s   @r   rn   rn   )  sr    !%d  "4#%*0
'3% "
#
G
$
94+ r   rn   c           
         / n[        U 5       HP  nUS S S:X  a  M  US:X  a  [        X   X   SS9  M%  XA;   d  M,  X   X   :w  d  M8  UR                  X@U   X   45        MR     U(       d  g [        S U 5       5      nS[	        U5      S-   U-   -  n[
        (       ak  U Hd  u  pGnU(       a-  [        SR                  X$R                  U5      XvU5      5        M:  [        S	R                  X$R                  U5      U5      5        Mf     g g )
Nr2  __rM   r#   c              3   @   #    U  H  u  n  n[        U5      v   M     g 7fr	   r  ).0r{  _s      r   	<genexpr>diff_dict.<locals>.<genexpr>  s     +d71aAds    r   z{}.{} -{!r}
{} +{!r}z{}.{} +{!r})	r  	diff_dictrm  maxr  r   rH  formatljust)	beforeafterr#   diffr{  max_kindentbr   s	            r   r  r    s    DF^Ra5D==fi(;:%(fi/KK1Iux01  +d++ECK!Oe+,FwGA!-44VWWU^QXYZ[m**6775>1EF	  r   c           
         [         (       a  U(       d  g [        S U 5       5      n[        UR                  5       S S9 H  u  pEUS S S:X  a  M  US:X  a  [	        X   X   SS9  M'   XPU   :w  a/  [        SR                  X$R                  U5      XPU   5      5        M_   [        S	R                  X$R                  U5      U5      5        M     g ! [         a     N;f = f)
Nc              3   8   #    U  H  n[        U5      v   M     g 7fr	   r  )r  r{  s     r   r  dump_dict.<locals>.<genexpr>  s     &1As   c                     U S   $ )Nr   r
  )r  s    r   <lambda>dump_dict.<locals>.<lambda>  s    AaDr   )r&  r2  r  rM   r  z{}.{} {!r} (was {!r})z
{}.{} {!r})	r   r  r  rx  	dump_dictrH  r  r  r$  )r  r  r#   r  r{  r|  s         r   r  r    s    7%&&&Eu{{}.9Ra5D==fi(;	1I~-44VWWU^QWXPYZ[ 
 	l!!&''%.!<= :  		s   '5C
CCc                 P   [         R                  " U 5      nSn [        [        U 5        SnU(       a  [	        X 5        O[        X 5         U Vs0 s H'  nX@S   R                  X@R                  US5      5      _M)     sn$ ! U(       a  [	        X 5        f [        X 5        f = fs  snf )NTFrM   .)r  deepcopyexecSOURCEr  r  r  )r0   ry  r  failedr{  s        r   r-   r-     s    ]]2FF"VRf!f! A 	
h<Avva~.. 	 f!f!s   B  .B#  B r
  )global)r  r[  pathlibr  unittesttest.supportr   Path__file__absoluteparent
read_bytesr  r`  _testinternalcapir   TestCaser   r,   r   r   r(   rO   rn   r  r  r-   r
  r   r   <module>r      s~         &ll8$--/66==DDG[[ggiFo+x(( o+h    	
            !" #$ %& '( )* +, -. /0 1 6  	  	
             
!" #& '( )* +0ld l^> >Bh hVG,>&c%  &8#%F&s   AD; ;EE