403Webshell
Server IP : 121.121.20.254  /  Your IP : 216.73.216.202
Web Server : Microsoft-IIS/10.0
System : Windows NT WEB-SERVER 10.0 build 20348 (Windows Server 2022) AMD64
User : IUSR ( 0)
PHP Version : 8.3.28
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /Python313/Lib/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /Python313/Lib/test/__pycache__/test_os.cpython-313.pyc
�

��iFB��b�SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSK
r
SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJr SSKJr SSKJ r  SSKJ!r! SSKJ"r" SSKJ#r# SSK$J%r% SSK&r&SSK(r(SSK)r)SSK*r*\*RV"5Vs/sHoRXPM snr-SSK/r/SS	K/J0r0J1r1 SSK3r3SS
K4J5r5 SSKJ6r6 SSK7J8r8 S
r9\:"\	S5(a\	Rv"5S:Hr9\:"\S5(aA\RxRz(a&\RxRzR}S5r?OS
r?\RHR}S5=(a \	R�"5S:HrASrBS�SjrC\R�"\RHR}S5S5rESrF"SS\R�5rH"SS\R�5rI"SS\R�5rJ"SS\R�5rKSSKJLrL "S S!\LR�5rN"S"S#\R�5rO\R�"\:"\	S$5S%5"S&S'\O55rQ"S(S)\O5rR\R�"\:"\	S$5S%5"S*S+\Q55rS"S,S-\R�5rT\R�"\:"\	S.5S/5"S0S1\R�55rU"S2S3\R�5rV\R�"\R�S45"S5S6\R�55rX"S7S8\R�5rY\R�"\:"\	S95S:5"S;S<\R�55rZ\R�"S=5S>:H=(d1 \R�"S?5S>:H=(d \R�"S@5S>:Hr\\R�"\\SA5\R�"\RHSB:HSC5"SDSE\R�555r]\R�S�SFj5r_\R�"\:"\	SG5SH5"SISJ\R�55r`\R�"\RHSK:HSL5"SMSN\R�55ra\R�"\R�SO5"SPSQ\R�55rb\R�"\:"\	SR5SS5"STSU\R�55rc\R�"\RHSK:HSV5"SWSX\R�55rd\R�"\RHSK:HSV5"SYSZ\R�55re\R�"\RHSK:HSL5"S[S\\R�55rf\R�"\RHSK:HSL5"S]S^\R�55rg\R�"\	R�S_:HS`5"SaSb\R�55ri\R�"\:"\	Sc5Sd5"SeSf\R�55rj\R�"\RHSK:HSL5\ R�"SgSh\R�555rl\R�"\RHSK:HSL5"SiSj\R�55rm\R�"\RHSK:HSL5"SkSl\R�55rn\ R�"SmSn\R�55ro"SoSp\R�5rp"SqSr\R�5rq\R�"5"SsSt\R�55rs\R�"5"SuSv\R�55rt\R�"Sw5\R�"\:"\	Sx5Sy5"SzS{\R�555rv\R�"\:"\	S|5=(a	 \:"\	S}5S~5"SS�\R�55rw\R�"\:"\	S�5S�5"S�S�\R�55ryS�rz\R�"\z"5S�5\R�"S�S�S�5"S�S�\R�555r|\R�"\:"\	S�5S�5"S�S�\R�55r}\R�"\:"\	S�5S�5\R�"S�S�5"S�S�\R�555r~\R�"\:"\	S�5S�5\R�"S�S�S�5"S�S�\R�555r\R�"\:"\	S�5S�5\R�"\RHS�:HS�5\R�"S�S�S�5"S�S�\R�5555r�"S�S�\R�5r�"S�S�\R�5r�\R�"5"S�S�\R�55r�\R�"\:"\	S�5S�5"S�S�\R�55r�"S�S�\R�5r�\R�"\:"\	S�5S�5\R�"\GRS�5\R�"\RHSK:HS�5"S�S�\R�5555r�"S�S�\R�5r�"S�S�\R�5r�"S�S�\R�5r�"S�S�\R�5r�"S�S�\R�5r�\GR"5"S�S�\R�55r�\:"\	S�5(a"S�S�\�5r�\�S�:Xa\GR""5 gg!\'a Sr&GN-f=f!\'a Sr(GN7f=f!\'a Sr)GNAf=fs snf!\'\.4a /r-GN'f=f!\'a Sr/\Rd=r0r1GN7f=f!\'a Sr3GNAf=f)��N)�support)�
import_helper)�	os_helper)�
socket_helper)�infinite_recursion)�warnings_helper)�win32_is_iot)�INT_MAX�PY_SSIZE_T_MAX��assert_python_ok)�
unix_shell)�FakePathF�geteuid�thread_info�linuxthreads�freebsdc�R�[R"[[U5SU-5$)Nzrequires os.%s)�unittest�
skipUnless�hasattr�os��names �!C:\Python313\\Lib\test\test_os.py�requires_os_funcr\s"�����w�r�4�0�2B�T�2I�J�J�c�t�[USS5nURU5 SSS5 g!,(df   g=f)N�xbr)�open�write)�filename�content�fps   r�create_filer%`s(��	
�h��a�	 �B�
�����
!�	 �	 �s�)�
7�aixz%on AIX, splice() only accepts socketsc�0�[R"S5 g�N)�asyncio�set_event_loop_policy�rr�tearDownModuler,js���!�!�$�'rc�&�\rSrSrSrSrSrSrg)�	MiscTests�nc�Z�[R"5nURU[5 gr()r�getcwd�assertIsInstance�str��self�cwds  r�test_getcwd�MiscTests.test_getcwdos���i�i�k�����c�3�'rc��Sn[RS:XaSnSnSnUSU[U5-
--n[R"5n[
R"U5nUn[R"5nURXv5 U[U5[[RR5--
nUS::aOj[U5U:�aUS:�aUSUn[RRXS5n[R"U5 [R"U5 UnM�[&R((a[+S[U535 SSS5 SSS5 g![a MJ[ a*n	U	R"["R$:XaSn	A	MweSn	A	ff=f!,(df   NZ=f!,(df   g=f)	Ni��vxworks�����python_test_dir_�arz!Tested current directory length: )�sys�platform�len�tempfile�TemporaryDirectoryr�
change_cwdrr1�assertEqual�path�sep�join�mkdir�chdir�FileNotFoundError�OSError�errno�ENAMETOOLONGr�verbose�print)
r5�min_len�dirlen�dirname�tmpdirrF�expectedr6�need�excs
          r�test_getcwd_long_path�MiscTests.test_getcwd_long_pathsss�����<�<�9�$��G���$���S�F�S��\�$9�:�;��
�
(�
(�
*�f��%�%�f�-������)�)�+�C��$�$�S�3�"�c�#�h��R�W�W�[�[�1A�&A�B�D��q�y���7�|�d�*�t�a�x�")�%�4�.���7�7�<�<��6�D�"����������� $�H�7�:�?�?��=�c�#�h�Z�H�I�C.�+�
*��(-���"�"��9�9��(:�(:�:�!�!��	"��1.�-��+�
*�sa�F;�BF*�:,E'�&0F*�F;�'
F'�1F*�4	F'�=F"�F*�!F"�"F'�'F*�*
F8	�4F;�;
G	c���[R"5nURU[5 UR	[R
"U5[R"55 gr()r�getcwdbr2�bytesrE�fsdecoder1r4s  r�test_getcwdb�MiscTests.test_getcwdb�s<���j�j�l�����c�5�)�������S�)�2�9�9�;�7rr+N)�__name__�
__module__�__qualname__�__firstlineno__r7rXr^�__static_attributes__r+rrr.r.ns��(�7J�r8rr.c��\rSrSrSr\rSr\R"\	RS5\R"\	RS5S55r\	RS5rSr\	R\R "\\:S	5\	R&"\S
-SSS
9S555rSrSr\R "\R0S:HS5S5rSrSrSrSrSr\R "\"\ S5S5S5r!\R "\"\ S5S5S5r"\R "\"\ S5S5S5r#\R "\"\ S5S5S 5r$\R "\"\ S5S5\%S!55r&\R "\"\ S5S5\%S"55r'\R "\"\ S5S5\%S#55r(S$r)g%)&�	FileTests�c��[RR[R5(a%[R
"[R5 ggr()rrF�lexistsr�TESTFN�unlink�r5s r�setUp�FileTests.setUp�s2��
�7�7�?�?�9�+�+�,�,��I�I�i�&�&�'�-rc�<�[R"[R[R[R
-5n[R"U5 UR[R"[R[R55 gr()
rr rrj�O_CREAT�O_RDWR�close�
assertTrue�access�W_OK�r5�fs  r�test_access�FileTests.test_access�sQ���G�G�I�$�$�b�j�j����&:�;��
���������	�	�)�"2�"2�B�G�G�<�=rz"Test is unstable under Emscripten.zWASI does not support dup.c�T�[R"[R[R[R
-5n[R"U5nSnX!S-:waS[R"U5 US-
nUS:�aURS5 U[R"U5p!X!S-:waMS[R"U5 [R"XS-5 UR[[RUS5 g![R"U5 f=f)Nr��
z%couldn't allocate two consecutive fds��a)
rr rrjrprq�duprr�skipTest�
closerange�assertRaisesrLr!)r5�first�second�retriess    r�test_closerange�FileTests.test_closerange�s������	�(�(�"�*�*�R�Y�Y�*>�?��������
	��G��A�I�%�������1����R�<��M�M�"I�J� &����v��v�
�A�I�%�
�H�H�V��
�
�
�e�Q�Y�'����'�2�8�8�U�D�9��
�H�H�V��s
�AD�D'c���[Rn[R"U5nUR	[
[RUS5 [R"U5nURX#5 g�Nr)	rrjr?�getrefcountr��	TypeErrorr�renamerE)r5rF�old�news    r�test_rename�FileTests.test_rename�sO�������o�o�d�#�����)�R�Y�Y��a�8��o�o�d�#������"rc��[[RS5nURS5 UR	5 UR5n[R"USS5 [R"US5nUR[U5[5 URUS5 SSS5 g!,(df   g=f)N�w+b�spamr�)r rrjr!�flush�filenor�lseek�readrE�typer\)r5�fobj�fd�ss    r�	test_read�FileTests.test_read�s���
�)�"�"�E�
*�d��J�J�w���J�J�L�����B��H�H�R��A������A��A����T�!�W�e�,����Q��(�+�
*�
*�s�BB6�6
Czneeds INT_MAX < PY_SSIZE_T_MAXr|r{F)�size�memuse�dry_runc�j�UR[R[R5 [	[RS5 [[RS5n[R"UR5U5nSSS5 URWS5 g!,(df   N!=f)Nstest�rb)
�
addCleanuprrkrjr%r rr�r�rE)r5r�r$�datas    r�test_large_read�FileTests.test_large_read�sx��	
���	�(�(�)�*:�*:�;��I�$�$�g�.��)�"�"�D�
)�R��7�7�2�9�9�;��-�D�*�
	
����w�'�*�
)�s�#&B$�$
B2c�z�[R"[R[R[R
-5nUR
[[RUS5 [R"US5 [R"U[S55 [R"U[S55 [R"U5 [[RS5nURUR5R5/SQ5 SSS5 g!,(df   g=f)N�beanssbacon
seggs
sspam
r�)sbaconseggsr�)rr rrjrp�O_WRONLYr�r�r!�	bytearray�
memoryviewrrrEr��
splitlines)r5r�r�s   r�
test_write�FileTests.test_write�s���
�W�W�Y�%�%�r�z�z�B�K�K�'?�
@�����)�R�X�X�r�7�;�
����Z� �
����Y�y�)�*�
����Z�	�*�+�
�����
�)�"�"�D�
)�T����T�Y�Y�[�3�3�5�,�
.�*�
)�
)�s�21D,�,
D:c�p�[R"U[RSS9nURUS5 g)NT)�
creationflags�shellr)�
subprocess�call�CREATE_NEW_CONSOLErE)r5�args�retcodes   r�write_windows_console�FileTests.write_windows_console
s0���/�/�$�$�7�7��	��
	
����!�$r�win32z$test specific to the Windows consolec��SnUR[RSU5 UR[RSSU5 g)Nzprint('x' * 100000)�-cz-u)r�r?�
executable�r5�codes  r�test_write_windows_console�$FileTests.test_write_windows_consoles7��%���"�"�3�>�>�4��>��"�"�3�>�>�4��t�Drc��[R"[R[R5n[R
"U/UQ7SS06nUR
5 g)N�encoding�utf-8)rr rrj�O_RDONLY�fdopenrr)r5r�r�rws    r�
fdopen_helper�FileTests.fdopen_helpers=��
�W�W�Y�%�%�r�{�{�
3���I�I�b�2�4�2�'�2��	���	rc��[R"[R[R[R
-5n[R"U5 UR5 URS5 URSS5 g)N�r�d)rr rrjrprqrrr��r5r�s  r�test_fdopen�FileTests.test_fdopen"sZ��
�W�W�Y�%�%�r�z�z�"�)�)�';�
<��
������������3�����3��$rc�L�[RS-nUR[R[R5 UR[RU5 [	[RS5 [	US5 [
R"[RU5 UR[[
R[R5 [USSS9nURUR5S5 SSS5 g!,(df   g=f)Nz.2�1�2r�r��r��1)
rrjr�rkr%r�replacer�rK�statr rEr�)r5�TESTFN2rws   r�test_replace�FileTests.test_replace*s����"�"�T�)�����	�(�(�)�*:�*:�;����	�(�(�'�2��I�$�$�d�+��G�T�"�
�
�
�9�#�#�W�-����+�R�W�W�i�6F�6F�G�
�'�3��
1�Q����Q�V�V�X�s�+�2�
1�
1�s�+!D�
D#c��[R"[[RSSS9n[R"U5 g)N�)rF�flags�mode�dir_fd)rr �__file__r�rrrvs  r�test_open_keywords�FileTests.test_open_keywords7s(���G�G�����5��
��
����rc��[R"[S5nU"S[RSSS9 g![
[4a gf=f)N�symlink�targetF)�src�dst�target_is_directoryr�)r�
get_attributerrrj�NotImplementedErrorrL)r5r�s  r�test_symlink_keywords�FileTests.test_symlink_keywords<sG���'�'��I�6��	���i�&6�&6�$)�$�
8��#�W�-�	��	�s�5�A�A�copy_file_rangeztest needs os.copy_file_range()c��UR[5 [R"SSS5 SSS5 g!,(df   g=f�Nrr{i����)r��
ValueErrorrr�rls r�#test_copy_file_range_invalid_values�-FileTests.test_copy_file_range_invalid_valuesDs.��
�
�
�z�
*����q�!�S�)�+�
*�
*��	�8�
Ac�~�[RS-nSn[[RU5 UR[R[R5 [[RS5nURUR5 UR5n[US5nUR[RU5 URUR5 UR5n[R"XFS5nURU[SS55 [US5nURUR5USU5 SSS5 g!,(df   g=f![a:nUR[R :waeUR#U5 SnAgSnAff=f)N�.3�
0123456789r�r��r�)rrjr%r�rkr rrr�rr��assertIn�rangerEr�rLrM�ENOSYSr�)	r5r�r��in_file�in_fd�out_file�out_fd�i�es	         r�test_copy_file_range�FileTests.test_copy_file_rangeIsA���"�"�T�)�����I�$�$�d�+����	�(�(�)�*:�*:�;��y�'�'��.������
�
�&���� �����'�����	�(�(�'�2�������'����"��	;��"�"�5�!�4�A�
�M�M�!�U�1�a�[�)��g�t�$��� � ������b�q��:�%�$�$���	��w�w�%�,�,�&���M�M�!����
	�s$�;E8�:$E'�'
E5�8
F<�0F7�7F<c���[RS-nSnSnSnSn[[RU5 UR[R[R5 [[RS5nURUR5 UR5n[US5nUR[RU5 URUR5 UR5n	[R"XyUUUS9n
URU
[S	US
-55 [US5nUR5nSSS5 URWSUSU-5 URX�SX$XJ-5 g!,(df   N?=f![a:nUR[R :waeUR#U5 SnAgSnAff=f)N�.4r�r��r�r�r�)�
offset_src�
offset_dstrr{�)rrjr%r�rkr rrr�rr�r�r�r�rErLrMr�r�)
r5�TESTFN4r��
bytes_to_copy�in_skip�out_seekr�r�r�r�r�r�r�s
             r�test_copy_file_range_offset�%FileTests.test_copy_file_range_offsetks����"�"�T�)�����
������I�$�$�d�+����	�(�(�)�*:�*:�;��y�'�'��.������
�
�&���� �����'�����	�(�(�'�2�������'����"��	6��"�"�5�-�.5�.6�8�A�
�M�M�!�U�1�m�A�o�6�7��g�t�$���|�|�~��%�
���T�)�8�_�g�h�.>�?�
���T�)�_�!�'�)�4�
6�
%�$���	��w�w�%�,�,�&���M�M�!����
	�s$�F�F
�
F�
G"�(0G�G"�spliceztest needs os.splice()c��UR[5 [R"SSS5 SSS5 g!,(df   g=fr�)r�r�rrrls r�test_splice_invalid_values�$FileTests.test_splice_invalid_values�s,��
�
�
�z�
*��I�I�a��C� �+�
*�
*�r�c�^^�[RS-nSn[[RU5 UR[R[R5 [[RS5nURUR5 UR5n[R"5ummURU4Sj5 URU4Sj5 [R"UTS5nURU[SS55 UR[R"TS	5USU5 g![a:nUR [ R":waeUR%U5 SnAgSnAff=f)
Nr�r�r�c�0>�[R"T5$r(�rrr��read_fds�r�<lambda>�'FileTests.test_splice.<locals>.<lambda>��������� 1rc�0>�[R"T5$r(r��write_fds�rrr��������� 2rr�rr�r�)rrjr%r�rkr rrr�r�piperr�r�rEr�rLrMr�r�)	r5r�r�r�r�r�r�rrs	       @@r�test_splice�FileTests.test_splice�s ����"�"�T�)�����I�$�$�d�+����	�(�(�)�*:�*:�;��y�'�'��.������
�
�&���� ���G�G�I�������1�2����2�3�	>��	�	�%��1�-�A�
�M�M�!�U�1�a�[�)����R�W�W�W�c�2�D��!�H�=���	��w�w�%�,�,�&���M�M�!����
	�s�(E�
F�0F�Fc�,^
^�[RS-nSnSnSn[[RU5 UR[R[R5 [[RS5nURUR5 UR5n[R"5um
mURU
4Sj5 URU4Sj5 [R"UTX4S9nURU[S	US
-55 [R"T
S5nURX�XDU-5 g![a:n	U	R [ R":waeUR%U	5 Sn	A	gSn	A	ff=f)Nrr�r�rr�c�0>�[R"T5$r(rrs�rr�1FileTests.test_splice_offset_in.<locals>.<lambda>�rrc�0>�[R"T5$r(rrs�rrr#�rr)rrr{r�)rrjr%r�rkr rrr�rrrr�r�r�rErLrMr�r�)r5rr�r	r
r�r�r�r�r�rrs          @@r�test_splice_offset_in�FileTests.test_splice_offset_in�s7����"�"�T�)�����
����I�$�$�d�+����	�(�(�)�*:�*:�;��y�'�'��.������
�
�&���� ���G�G�I�������1�2����2�3�	<��	�	�%��=�M�A�
�M�M�!�U�1�m�A�o�6�7��7�7�7�C�(�D�
���T���	�#:�;���	��w�w�%�,�,�&���M�M�!����
	�s�,E�
F�0F�Fc��^^�[RS-nSnSnSn[[RU5 UR[R[R5 [
R"5ummURU4Sj5 URU4Sj5 [
R"TU5 [US5nUR[RU5 URUR5 UR5n[
R"TXcUS9nURU[S	US
-55 [US5nUR5n	SSS5 URW	SUSU-5 URX�SUSU5 g!,(df   N>=f![ a:n
U
R"["R$:waeUR'U
5 Sn
A
gSn
A
ff=f)
Nrr�r�rc�0>�[R"T5$r(rrs�rr�2FileTests.test_splice_offset_out.<locals>.<lambda>�rrc�0>�[R"T5$r(rrs�rrr)�rrr�)rrr{r�r)rrjr%r�rkrrr!r rrr�rr�r�r�rErLrMr�r�)
r5rr�r	rr�r�r�r�r�r�rrs
           @@r�test_splice_offset_out� FileTests.test_splice_offset_out�s�����"�"�T�)�����
����I�$�$�d�+����	�(�(�)�*:�*:�;��G�G�I�������1�2����2�3�
����4� ����'�����	�(�(�'�2�������'����"��	8��	�	�'�6�X�N�A�
�M�M�!�U�1�m�A�o�6�7��g�t�$���|�|�~��%�
���T�)�8�_�g�h�.>�?�
���T�)�_�d�2�A�h�7�
%�$���	��w�w�%�,�,�&���M�M�!����
	�s$�F0�F�
F-�0
G4�:0G/�/G4r+N)*r`rarbrcrm�tearDownrxr�skipIfr�
is_emscripten�is_wasir��cpython_onlyr�r�rr
r�
bigmemtestr�r�r�r?r@r�r�r�r�r�r�rrr�rrr�requires_splice_piperr%r+rdr+rrrfrf�se��(��H�>�
�_�_����C���_�_����5��:���:�*
���#��#�)�
�������>�1�9�;����W�r�\�!�U�C�(�D�;��(�
.�%��������0�?�A�E�A�E��
%�,��
������%6�7�9Z�[�*�\�*������%6�7�9Z�[�;�\�;�B�����%6�7�9Z�[�*6�\�*6�X�����X�.�0H�I�!�J�!������X�.�0H�I��>��J�>�>�����X�.�0H�I��"<��J�"<�H�����X�.�0H�I��'8��J�'8rrfc�n�\rSrSrSrSrSrSrSr\	R"\"\S5S5S	5r
\	R"\"\S5S
5S5r\	R"\R S:HS
5S5r\	R"\R S:HS
5\	R"\"\S5S5S55rSr\	R"\R S:HS5S5r\	R"\R S:HS
5S5r\	R"\R S:HS
5S5rSrg)�StatAttributeTestsic��[RUlUR[RUR5 [URS5 g)N�ABC)rrj�fnamer�rkr%rls rrm�StatAttributeTests.setUps5���%�%��
����	�(�(�$�*�*�5��D�J�J��'rc	�"�[R"U5nURU[RS5 URURS5 [U5n[[5H~nUSSS:XdMUR
5nURS5(aSnOSnURU"[X%55U[[U55 URXS5 M� SR5H;n[[X$5S-5n[X$S-5S	-nURXxS
S9 M= [URS-5nURS	-nURXxS
S9 US UR!S
5 SUlUR!S
5 SUlUR!S
5 SUlUR!S
5 [R,"S5n	UR!S
5 [R,"S5n	g![a N�f=f!["a N�f=f![a N�f=f![[(4a N�f=f![a N�f=f![(a Nzf=f![(a gf=f)Nr�ST_�TIMEc��[U5$r()�int��xs r�trunc�7StatAttributeTests.check_stat_attributes.<locals>.trunc$s
���Q��-rc��U$r(r+r?s rrArB&s���(rzst_atime st_mtime st_ctimei���_nsi'r}��deltar<�No exception raisedr{�r|�rr{r}rr�r�r����	r|���
�)rr�rE�ST_SIZE�st_size�dir�lower�endswith�getattrr��splitr>�assertAlmostEqual�st_birthtime�st_birthtime_ns�AttributeError�fail�
IndexError�st_mode�st_rdevr��parrot�stat_result)
r5r8�result�membersr�attrrA�floaty�nanosecondy�result2s
          r�check_stat_attributes�(StatAttributeTests.check_stat_attributessm��������	
�������-�q�1��������+��f�+����I�D��B�Q�x�5� ��z�z�|���=�=��(�(�/�*�� � ��w�v�'<�!=�"(���t�)<�"=�?��
�
�d�,��1�6�6�8�D����.��7�8�F�!�&��,�7�5�@�K��"�"�6�a�"�@�9�	A���,�,�v�5�6�F� �0�0�E�9�K�
�"�"�6�a�"�@�	��3�K��I�I�+�,�
	��F�N��I�I�+�,�	��F�N��I�I�+�,�	��F�M��I�I�+�,�
	��n�n�U�+�G��I�I�+�,�
	��n�n�%I�J�G��O�	��	���	��	���	��	���	�*�	��	���	��	���	��	���	��	�s~�'H�:H+�H;�*I�I!�'I1�J�
H(�'H(�+
H8�7H8�;
I�I�I�I�!
I.�-I.�1
I>�=I>�
J�
Jc�:�URUR5 gr()rhr8rls r�test_stat_attributes�'StatAttributeTests.test_stat_attributesas���"�"�4�:�:�.rc���URR[R"55nUR
W5 g![a! URSUR-5 N<f=f)Nz#cannot encode %a for the filesystem)r8�encoder?�getfilesystemencoding�UnicodeEncodeErrorr�rh)r5r8s  r�test_stat_attributes_bytes�-StatAttributeTests.test_stat_attributes_bytesds^��	N��J�J�%�%�c�&?�&?�&A�B�E�	
�"�"�5�)��"�	N��M�M�?�$�*�*�L�M�	N�s�.A�(A-�,A-c��[R"UR5n[[R
S-5H�nUR
SU35 [R"X5nURSU5 US:aURSU5 [R"U5nURX5 SSS5 M� g!,(df   M�=f)Nr{z	protocol sstat_resultr�scos
stat_result
)rr�r8r��pickle�HIGHEST_PROTOCOL�subTest�dumpsr��loadsrE�r5rb�proto�p�	unpickleds     r�test_stat_result_pickle�*StatAttributeTests.test_stat_result_pickleks���������$���6�2�2�Q�6�7�E����	�%��1�2��L�L��/���
�
�n�a�0��1�9��M�M�"7��;�"�L�L��O�	�� � ��3�
3�2�8�2�2�s
�A(C	�	
C	�statvfsztest needs os.statvfs()c���[R"UR5nURURUS5 Sn[U5H&up4UR[
USU-5X5 M( UR[UR[55 UR[U5S5 SUlURS5 SUlURS5 [R"S5nURS5 [R"S5ng![a Nef=f![a N\f=f![ a NDf=f![ a gf=f)	Nr)
�bsize�frsize�blocks�bfree�bavail�files�ffree�favail�flag�namemax�f_r|r{rGrHrI)rrr8rE�f_bfree�	enumeraterVrs�
isinstance�f_fsidr>rAr\r[r`�statvfs_resultr�)r5rbrc�value�memberrgs      r�test_statvfs_attributes�*StatAttributeTests.test_statvfs_attributesvsI�����D�J�J�'��	
���������3�:��&�w�/�M�E����W�V�T�F�]�;�V�]�K�0�	
���
�6�=�=�#�6�7�	
����V��b�)�	��F�N��I�I�+�,�	��F�M��I�I�+�,�
	��'�'��.�G��I�I�+�,�
	��'�'�(L�M�G��%�	��	���	��	���	��	���	��	�sH�<D-�D=�.'E
�E�-
D:�9D:�=
E
�	E
�
E�E�
E*�)E*�need os.statvfs()c�X�[R"UR5n[[R
S-5Hjn[R"X5nURSU5 US:aURSU5 [R"U5nURX5 Ml g)Nr{sstatvfs_resultr�scos
statvfs_result
)
rrr8r�rtrurwr�rxrErys     r�test_statvfs_result_pickle�-StatAttributeTests.test_statvfs_result_pickle�s~�����D�J�J�'���6�2�2�Q�6�7�E����V�+�A��M�M�+�Q�/��q�y��
�
�6��:����Q��I����V�/�
8rr��Win32 specific testsc��[R"S5 g![a URS5 g[anURS5 SnAgSnAff=f)Nzc:\pagefile.syszc:\pagefile.sys does not existzCould not stat pagefile.sys)rr�rKr�rLr\�r5r�s  r�test_1686475�StatAttributeTests.test_1686475�sI��	5��G�G�&�'�� �	=��M�M�;�<��	5��I�I�3�4�4��	5�s��A�	A�A�Arzrequires os.pipe()c��[R"5up[R"U5 [R"U5 [R"U5 UR	[
5n[R"U5 SSS5 UR
WRR[R5 g![R"U5 [R"U5 f=f!,(df   Nt=fr()
rrr�rrr�rLrE�	exceptionrM�EBADF)r5r��w�ctxs    r�
test_15261�StatAttributeTests.test_15261�s����w�w�y���	��G�G�A�J��H�H�Q�K��H�H�Q�K�
�
�
�w�
'�3��G�G�A�J�(�������,�,�e�k�k�:��	
�H�H�Q�K��H�H�Q�K��
'�
'�s�C�0C5�.C2�5
Dc���UR[US55 UR[UR[55 URSURs=:*=(a
 S:*5 gs 5 g)N�st_file_attributesr���)rsrr�r�r>)r5rbs  r�check_file_attributes�(StatAttributeTests.check_file_attributes�sT�������(<�=�>����
�6�#<�#<�c�B�C�����V�6�6�D�D�*�D�E�D�Erz$st_file_attributes is Win32 specificc��[R"UR5nURU5 UR	UR
[R-S5 [RS-n[R"U5 UR[RU5 [R"U5nURU5 UR	UR
[R-[R5 g)NrrS)rr�r8r�rEr��FILE_ATTRIBUTE_DIRECTORYrrjrIr��rmdir)r5rbrSs   r�test_file_attributes�'StatAttributeTests.test_file_attributes�s���������$���"�"�6�*�����%�%��(E�(E�E�
�	�
�"�"�U�*��
�����������'�*�����!���"�"�6�*�����%�%��(E�(E�E��)�)�	+rc���[RR[RSURS-5nUR[RU5 [US5 Sn[R"SUSS/US9 [R"U5nURURS	5 UR[RRU55 g)
N�TEMP�_accessr7rKz
icacls.exez/denyz*S-1-5-32-545:(S)�r�r)rrFrH�environr8r�rrkr%r��
check_callr��assertNotEqualrRrs�isfile)r5r8�DETACHED_PROCESSrbs    r�test_access_denied�%StatAttributeTests.test_access_denied�s��������R�Z�Z��/����i�1G�H�����	�(�(�%�0��E�6�"�������5�'�+>�?�*�		
����������F�N�N�A�.���������u�-�.rc���S[RR[R"55S-n[R"U5nURUR[R5 g)Nz//./r)rrF�
splitdriver1r�rEr^�S_IFBLK)r5r8rbs   r�test_stat_block_device�)StatAttributeTests.test_stat_block_device�sM������+�+�B�I�I�K�8��;�;�����������������6r)r8N)r`rarbrcrmrhrkrqr}rrrrr�r�r?r@r�r�r�r�r�r�rdr+rrr5r5sv��(�
H�T/�*�	4������Y�/�1J�K�)�L�)�V�����Y�/�,�.�	0�.�	0��������0�2H�I�5�J�5��������0�2H�I�
�����V�,�.B�C�
;�D�J�
;�F�
�������0�?�A�+�A�+�&�������0�2H�I�/�J�/�*�������0�2H�I�7�J�7rr5c��\rSrSrSrSrSSjrSr\S5r	Sr
S	r\R"\R\R ;S
5S5r\R"\R\R$;S5S
5r\R"\R\R(;S5S5rSrSrSrSrSrSrSrSr\R>S5r Sr!g)�
UtimeTestsic�J�[RUl[RRURS5UlUR[RUR5 [R"UR5 [UR5 g)N�f1)rrjrSrrFrHr8r��rmtreerIr%rls rrm�UtimeTests.setUps]�� �'�'����W�W�\�\�$�,�,��5��
����	�(�(�$�,�,�7�
��������D�J�J�rc��[R"U5nURUS:g=(d+ URUS:g=(d URUS:g$)NrJrKrL)rr��st_atime�st_mtime�st_ctime)r5r"�sts   r�support_subsecond�UtimeTests.support_subsecond	sQ���W�W�X�
������1��%�*��K�K�2�a�5�(�*��K�K�2�a�5�(�	+rNc� �U(dURnURU5nU(aSnSnOSnSnU"X$U45 [R"U5nU(a=UR	UR
US-SS9 UR	URUS-SS9 O>URUR
US-5 URURUS-5 URURU5 URURU5 g)Ni8Z�;l�
o]�rTlP�9��&�.>g���ư>rE)
r8r�rr�rXr�r�rE�st_atime_ns�st_mtime_ns)r5�set_timer"r��atime_ns�mtime_nsr�s       r�_test_utime�UtimeTests._test_utimes�����z�z�H� �2�2�8�<���"�H�!�H�!�H� �H���h�/�0�
�W�W�X�
����"�"�2�;�;��4��t�"�L��"�"�2�;�;��4��t�"�L����R�[�[�(�T�/�:����R�[�[�(�T�/�:��������2��������2rc�,�SnURU5 g)Nc�,�[R"XS9 g�N��ns�r�utime�r"r�s  rr��'UtimeTests.test_utime.<locals>.set_time1����H�H�X�%r�r��r5r�s  r�
test_utime�UtimeTests.test_utime0s��	&�	
����"rc��US-S-$)Nr�g��&�.>r+r�s r�	ns_to_sec�UtimeTests.ns_to_sec6s��
�T�	�V�#�#rc�4^�U4SjnTRU5 g)Nc�>�Uup#TRU5nTRU5n[R"XU45 gr(�r�rr��r"r�r�r��atime�mtimer5s      �rr��2UtimeTests.test_utime_by_indexed.<locals>.set_time?s9���!#��H��N�N�8�,�E��N�N�8�,�E�
�H�H�X�u�~�.rr�r�s` r�test_utime_by_indexed� UtimeTests.test_utime_by_indexed=s���	/�	
����"rc�4^�U4SjnTRU5 g)Nc�~>�Uup#TRU5nTRU5n[R"XU4S9 g)N)�timesr�r�s      �rr��0UtimeTests.test_utime_by_times.<locals>.set_timeIs7���!#��H��N�N�8�,�E��N�N�8�,�E��H�H�X�U�^�4rr�r�s` r�test_utime_by_times�UtimeTests.test_utime_by_timesHs���	5�	
����"rz9follow_symlinks support for utime required for this test.c�,�SnURU5 g)Nc�.�[R"XSS9 g)NF)r��follow_symlinksr�r�s  rr��9UtimeTests.test_utime_nofollow_symlinks.<locals>.set_timeUs��
�H�H�X�e�<rr�r�s  r�test_utime_nofollow_symlinks�'UtimeTests.test_utime_nofollow_symlinksQs��	=�	
����"rz,fd support for utime required for this test.c�,�SnURU5 g)Nc��[USS5n[R"UR5US9 SSS5 g!,(df   g=f)N�wbrr�)r rr�r�)r"r�r$s   rr��*UtimeTests.test_utime_fd.<locals>.set_time^s2���h��a�(�B���������,�)�(�(�s	�$;�
A	r�r�s  r�
test_utime_fd�UtimeTests.test_utime_fd[s��	-�
	
����"rz0dir_fd support for utime required for this test.c�,�SnURU5 g)Nc���[RRU5up#[R"U5n[R
"X4US9 SSS5 g!,(df   g=f)N)r�r�)rrFrWr�open_dir_fdr�)r"r�rSr�dirfds     rr��.UtimeTests.test_utime_dir_fd.<locals>.set_timehs@���G�G�M�M�(�3�M�G��&�&�w�/�5������3�0�/�/�s�A�
A%r�r�s  r�test_utime_dir_fd�UtimeTests.test_utime_dir_fdes��	4�
	
����"rc�<�SnURXRS9 g)Nc�,�[R"XS9 gr�r�r�s  rr��1UtimeTests.test_utime_directory.<locals>.set_timepr�r)r")r�rSr�s  r�test_utime_directory�UtimeTests.test_utime_directoryos��	&�	
����L�L��9rc�\�[R"5nU"UR5 URUR5(dSnOSn[R"UR5nSUR
<SU<SUR
U-
<3nUR
UR
UX5S9 g)Ng�?g�������?zst_time=z
, current=z, dt=)rF�msg)�timer8r�rr�r�rX)r5r��currentrFr�rs      r�_test_utime_current�UtimeTests._test_utime_currentus����)�)�+��	������%�%�d�j�j�1�1��E��E�
�W�W�T�Z�Z�
 ���+�+�w����g�(=�?�����r�{�{�G�%*�	�	5rc�4^�U4SjnTRU5 g)Nc�F>�[R"TR5 gr(�rr�r8�r"r5s �rr��/UtimeTests.test_utime_current.<locals>.set_time�s����H�H�T�Z�Z� r�rr�s` r�test_utime_current�UtimeTests.test_utime_current�s���	!�	
� � ��*rc�4^�U4SjnTRU5 g)Nc�H>�[R"TRS5 gr(rrs �rr��3UtimeTests.test_utime_current_old.<locals>.set_time�s����H�H�T�Z�Z��&rrr�s` r�test_utime_current_old�!UtimeTests.test_utime_current_old�s���	'�	
� � ��*rc��[R"5nSnUR[5n[R"X!U45 SSS5 URWRRU5 g!,(df   N5=f)N�nonexistent)rr�rKrr�rEr�r")r5�nowr"�cms    r�test_utime_nonexistent�!UtimeTests.test_utime_nonexistent�s[���i�i�k�� ��
�
�
�0�
1�R��H�H�X�S�z�*�2�������.�.��9�2�
1�s�A5�5
Bc�r�[RS:Xa�[RR	[RRU55SS-nSSKnURRnURSS5nURUSSSSSU[U55nU(aUR$gg)Nr�r�\�r�)
r?r@rrFr��abspath�ctypes�windll�kernel32�create_unicode_buffer�GetVolumeInformationWrAr�)r5rF�rootr+r-�buf�oks       r�get_file_system�UtimeTests.get_file_system�s����<�<�7�"��7�7�%�%�b�g�g�o�o�d�&;�<�Q�?�$�F�D���}�}�-�-�H��.�.�r�3�7�C��/�/��d�A�04�d�D�03�S��X�?�B���y�y� ��#rc� �URUR5S:waURS5 Sn[R"UR
X45 UR
[R"UR
5RU5 g)N�NTFSz
requires NTFSr�)	r3rSr�rr�r8rEr�r�)r5�larges  r�test_large_time�UtimeTests.test_large_time�sc��������-��7��M�M�/�*���
������e�^�,����������,�5�5�u�=rc��UR[5 [R"URSSS9 SSS5 UR[
5 [R"URSS/5 SSS5 UR[
5 [R"URS5 SSS5 UR[
5 [R"URS5 SSS5 UR[
5 [R"URSS/S9 SSS5 UR[
5 [R"URSS9 SSS5 UR[
5 [R"URSS9 SSS5 [R[R;a>UR[5 [R"URSSS9 SSS5 [R[R;ac[URSS	5nUR[
5 [R"UR5S5 SSS5 SSS5 [R[R;a?UR[5 [R"URSS	S
9 SSS5 gg!,(df   GN�=f!,(df   GN�=f!,(df   GNr=f!,(df   GNE=f!,(df   GN=f!,(df   GN�=f!,(df   GN�=f!,(df   GNt=f!,(df   GN	=f!,(df   GN=f!,(df   g=f)N)r�r�r�r�)r�)r�r�r�F�r�r�r�r�)r�r�rr�r8r��supports_follow_symlinksr��supports_fdr r��supports_dir_fd)r5r$s  r�test_utime_invalid_arguments�'UtimeTests.test_utime_invalid_arguments�s4��
�
�
�z�
*��H�H�T�Z�Z��F�3�+�
�
�
�y�
)��H�H�T�Z�Z�!�Q��(�*�
�
�
�y�
)��H�H�T�Z�Z��&�*�
�
�
�y�
)��H�H�T�Z�Z��+�*�
�
�
�y�
)��H�H�T�Z�Z�Q��F�+�*�
�
�
�y�
)��H�H�T�Z�Z�D�)�*�
�
�
�y�
)��H�H�T�Z�Z�I�.�*��8�8�2�6�6�6��"�"�#6�7�������V�U�C�8�
�8�8�2�>�>�)��d�j�j�$��*�b��&�&�y�1��H�H�R�Y�Y�[�&�1�2�+��8�8�2�-�-�-��"�"�#6�7�������V�A�6�8�7�.�-+�
*��
)�
)��
)�
)��
)�
)��
)�
)��
)�
)��
)�
)��8�7��2�1��+�*��8�7�s��!K>�$L�"L"�"L4�"M� M� M*�.!M<�N �&&N�N �!N2�>
L
�
L�"
L1�4
M�
M�
M'�*
M9�<
N�
N	�N � 
N/�2
Oc��SnUR[5 [R"URU"S5S4S9 SSS5 UR[5 [R"URU"S5S4S9 SSS5 UR[5 [R"URU"S5S4S9 SSS5 g!,(df   N�=f!,(df   Ne=f!,(df   g=f)Nc�,^�"U4SjS5nU"5$)Nc�">�\rSrSrU4SjrSrg)�?UtimeTests.test_issue31577.<locals>.get_bad_int.<locals>.BadInti�c�>�T$r(r+)r��divmod_ret_vals �r�
__divmod__�JUtimeTests.test_issue31577.<locals>.get_bad_int.<locals>.BadInt.__divmod__�s	���)�)rr+N)r`rarbrcrHrd)rGs�r�BadIntrE�s
���*�*rrJr+)rGrJs` r�get_bad_int�/UtimeTests.test_issue31577.<locals>.get_bad_int�s���
*�
*��8�Or�*r{r�r+)r{r}r)r�r�rr�r8)r5rKs  r�test_issue31577�UtimeTests.test_issue31577�s���	�
�
�
�y�
)��H�H�T�Z�Z�[��_�a�$8�9�*�
�
�
�y�
)��H�H�T�Z�Z�[��_�a�$8�9�*�
�
�
�y�
)��H�H�T�Z�Z�[��%;�Q�$?�@�*�
)�	*�
)��
)�
)��
)�
)�s#�(C�(C%�#(C6�
C"�%
C3�6
D)rSr8r()"r`rarbrcrmr�r�r��staticmethodr�r�r�rrrr�r=r�r>rr?rrrrrr%r3r8r@rr1rNrdr+rrr�r�s�� �+�3�>#��$��$�	#�#�������R�%@�%@�@�*�+�#�+�#�������R�^�^�3�G�I�#�I�#�������R�%7�%7�7�K�M�#�M�#�:�5�,+�+�:�
!�>�7�8
���
A��
Arr�)�
mapping_testsc���\rSrSrSrSrSrSrSrSr	\
R"\=(a \
RR\5S5\
R"\"\
S	5S
5\R$"5S555r\
R"\=(a \
RR\5S5\
R"\"\
S	5S
5\R$"5S555rS
rSrSrSr\
R"\
R2S5S5r\R$"5S5r\R8"SS5S5rSrSrSr Sr!Sr"Sr#Sr$Sr%Sr&S r'S!r(S"r)g)#�EnvironTestsi�z8check that os.environ object conform to mapping protocolNc��[[R5Ul[R(a[[R
5UlUR5R5HupU[RU'M gr()	�dictrr��_EnvironTests__save�supports_bytes_environ�environb�_EnvironTests__saveb�
_reference�items�r5�keyr�s   rrm�EnvironTests.setUp�sT���2�:�:�&���
�$�$�����,�D�L��/�/�+�1�1�3�J�C�#�B�J�J�s�O�4rc�L�[RR5 [RRUR5 [R
(aH[RR5 [RRUR5 ggr()rr��clear�updaterVrWrXrYrls rr-�EnvironTests.tearDown�s\��
�
�
����
�
�
���$�+�+�&�
�$�$��K�K�����K�K���t�|�|�,�%rc��SSSS.$)N�VALUE1�VALUE2�VALUE3)�KEY1�KEY2�KEY3r+rls rrZ�EnvironTests._reference�s�����B�Brc�^�[RR5 [R$r()rr�r`rls r�_empty_mapping�EnvironTests._empty_mapping�s��
�
�
�����z�z�r�requires a shell�popenzneeds os.popen()c�H�[RR5 [RRSS9 [R"S[
-5nUR
5R5nURUS5 SSS5 g!,(df   g=f)N�World)�HELLOz%s -c 'echo $HELLO')	rr�r`rarorr��striprE)r5ror�s   r�test_update2�EnvironTests.test_update2�sm��
	�
�
����
�
�
�����(�
�X�X�+�j�8�
9�U��J�J�L�&�&�(�E����U�G�,�:�
9�
9�s�1B�
B!c�`�[R"S[-5n[U5nUR	[U5S5 UR	[U5S5 UR	[U5S5 UR
[[
U5 SSS5 g!,(df   g=f)Nz %s -c 'echo "line1
line2
line3"'zline1
zline2
zline3
)rror�iterrE�nextr��
StopIteration)r5ro�its   r�test_os_popen_iter�EnvironTests.test_os_popen_iter	s���
�X�X�<�"�#�$�',��e��B����T�"�X�y�1����T�"�X�y�1����T�"�X�y�1����m�T�2�6�
$�$�$�s�A8B�
B-c���[RR5HCupUR[	U5[
5 UR[	U5[
5 ME gr()rr�r[rEr�r3)r5r]�vals   r�test_keyvalue_types� EnvironTests.test_keyvalue_typessC���
�
�(�(�*�H�C����T�#�Y��,����T�#�Y��,�+rc��UR5R5H4upUR[RRU5U5 M6 gr()rZr[rErr��getr\s   r�
test_items�EnvironTests.test_itemss;���/�/�+�1�1�3�J�C����R�Z�Z�^�^�C�0�%�8�4rc��[RnSRSUR555nUR	[U5SUS35 g)z>Check that the repr() of os.environ looks like environ({...}).z, c3�8# �UHupU<SU<3v� M g7f)z: Nr+)�.0r]r�s   r�	<genexpr>�-EnvironTests.test___repr__.<locals>.<genexpr>%s$���$
�)�
���g�R��y�!�)�s�z	environ({z})N)rr�rHr[rE�repr)r5�env�formatted_itemss   r�
test___repr__�EnvironTests.test___repr__"sL���j�j���)�)�$
�!�i�i�k�$
�
��	
����c��j��0A��$E�Frc��[RR[R5n/SQnS[RR	U50n[R
n[
U5[lURU[R"55 URU[R"SS95 U[lURU[R"055 URS[R"SS055 URU[R"U55 [R(a�[R"SS9 SS	S
.nSSS5 UR[[RW5 UR[R"SS05S
/5 UR[R"SS
05S
/5 UR[R"SS05S
/5 gg!U[lf=f!,(df   N�=f![a N�f=f)N)z/montyz/pythonr)z/flying/circus�PATH�r��r)r)T)�recordr�r�)r��PATHr��abc�abc)r�defpathrW�pathseprHr�rU�assertSequenceEqual�
get_exec_pathrW�warnings�catch_warningsr�r��BytesWarning)r5�defpath_list�	test_path�test_env�
saved_environ�	mixed_envs      r�test_get_exec_path�EnvironTests.test_get_exec_path+s����z�z�'�'��
�
�3��?�	��B�J�J�O�O�I�6�7���
�
�
�	'��h��B�J��$�$�Y��0@�0@�0B�C��$�$�Y��0@�0@�T�0J�K�&�B�J�	
� � ��r�/?�/?��/C�D�� � ���(8�(8�&���(E�F�� � ��B�,<�,<�X�,F�G�
�$�$�
K��,�,�D�9�),�t� <�I�:��!�!�*�b�.>�.>�	�J�
�$�$�R�%5�%5�w��6G�%H���
��$�$�R�%5�%5�w��6F�%G���
��$�$�R�%5�%5�v�v�6F�%G���
�#%��'�B�J��:�9���
��
�s7�$AH�H;�*H*�0H;�
H'�*
H8�4H;�;
I�Iz#os.environb required for this test.c�|�SnUR[R"5S5nU[
RS'UR[
RSU5 UR[
RSW5 SnU[
RS'UR[
RSU5 UR[R"5S5nUR[
RSU5 g![a. S[R"5<3nUR	U5 GNf=f)	Nueuro€�surrogateescapez%U+20AC character is not encodable to �unicodesunicode��sbytesr\)
rnr?rorpr�rr�rErX�decode)r5r��value_bytesr�	value_strs     r�
test_environb�EnvironTests.test_environbTs�����	��,�,�s�'@�'@�'B�'8�:�K�!&��
�
�9��������I�.��6�������Z�0�+�>��� %����H��������X�.��6��L�L��!:�!:�!<�>O�P�	�������G�,�i�8��"�	��)�)�+�.�C��M�M�#��	�s�%D�4D;�:D;c��SnSnSU<S3n[R"5nURUS5 [R"X5 [
R"[RSU/S[
RSS9nURURR5[U55 [R"U5 [
R"[RSU/S[
RSS9nURURR5[S55 SSS5 g!,(df   g=f)N�
PYTHONTESTVAR�	testvaluez%import os; print(repr(os.environ.get(z)))r�T)�check�stdout�text)r�EnvironmentVarGuard�popr�putenvr��runr?r��PIPErEr��rstripr��unsetenv)r5rr�r�r��procs      r�test_putenv_unsetenv�!EnvironTests.test_putenv_unsetenvks�������6�t�h�c�B��
�
*�
*�
,���G�G�D�$���I�I�d�"��>�>�3�>�>�4��">�d�)3���t�E�D����T�[�[�/�/�1�4��;�?��K�K����>�>�3�>�>�4��">�d�)3���t�E�D����T�[�[�/�/�1�4��:�>�-�
,�
,�s�DD;�;
E	r|r�c��SHZnUR[[4[RUS5 UR[[4[R
U5 M\ SHNnUR[[RUS5 UR[[R
U5 MP [RS:XawSS-nUR[[RUS5 UR[[RSU5 UR[[R
U5 gg)	N)r)z=namezna=mezname=r�)znameznamer�r@��r��X)r�rLr�rr�r�r?r@)r5r�longstrs   r�test_putenv_unsetenv_error�'EnvironTests.test_putenv_unsetenv_errors���4�D����w�
�3�R�Y�Y��g�N����w�
�3�R�[�[�$�G�4�)�D����j�"�)�)�T�7�C����j�"�+�+�t�<�)��<�<�7�"��F�l�G����j�"�)�)�W�c�B����j�"�)�)�S�'�B����j�"�+�+�w�?�
#rc��SnURU[R5 UR[5n[RU SSS5 URWRRSU5 URURR5 UR[5n[RU	SSS5 URURRSU5 URURR5 g!,(df   N�=f!,(df   Nn=f)N�
missingkeyr)
�assertNotInrr�r��KeyError�assertIsr�r�rs�__suppress_context__)r5�missingr$s   r�
test_key_type�EnvironTests.test_key_type�s���������"�*�*�-�
�
�
�x�
(�B��J�J�w��)��
�
�b�l�l�'�'��*�G�4�������9�9�:�
�
�
�x�
(�B��
�
�7�#�)��
�
�b�l�l�'�'��*�G�4�������9�9�:�)�
(��
)�
(�s�D �7D1� 
D.�1
D?c��[U5nSn[U5 S[RU'[U5 UR	[RUS5 [RU	g![RU	f=f)N�__new_key__�test_environ_iteration)rwrxrr�rE)r5�
collection�iterator�new_keys    r�_test_environ_iteration�$EnvironTests._test_environ_iteration�sg���
�#�����X��7��
�
�7��	$���N����R�Z�Z��0�2J�K��
�
�7�#���
�
�7�#�s�.A-�-Bc�B�UR[R5 gr()r�rr�rls r�(test_iter_error_when_changing_os_environ�5EnvironTests.test_iter_error_when_changing_os_environ�s���$�$�R�Z�Z�0rc�^�UR[RR55 gr()r�rr�r[rls r�.test_iter_error_when_changing_os_environ_items�;EnvironTests.test_iter_error_when_changing_os_environ_items�s���$�$�R�Z�Z�%5�%5�%7�8rc�^�UR[RR55 gr()r�rr��valuesrls r�/test_iter_error_when_changing_os_environ_values�<EnvironTests.test_iter_error_when_changing_os_environ_values�s���$�$�R�Z�Z�%6�%6�%8�9rc�l�[(a([RR[5(dg[R
(dg[R"[SUS35nUR5R5nSSS5 URUW5 g!,(df   N!=f)Nz -c 'echo $�')
rrrF�existsr�has_subprocess_supportror�rsrE)r5�varrUror�s     r�_test_underlying_process_env�)EnvironTests._test_underlying_process_env�sw���
�r�w�w�~�~�j�9�9���/�/��
�X�X���K��u�A�6�
7�5��J�J�L�&�&�(�E�8�	
����5�)�8�
7�s�+B%�%
B3c���SnSnU[RU'SSSSUS0n[[R5nURU5 [RU-nUR	XE5 URSXQ5 UR
5nUR[[RRU55 URSS5 URX5 g�	N�
_TEST_VAR_�original_value�_A_r��_B_�2�3r))rr�rUra�assertDictEqualrEr[r��NotImplemented�__or__r��r5�overridden_keyr��
new_vars_dictrU�actual�new_vars_itemss       r�test_or_operator�EnvironTests.test_or_operator�s���%��)��%3��
�
�>�"���U�C���E�
���
�
�#�����
�&����m�+�����X�.�����f�4�5�&�,�,�.���
�
�n�b�j�j�&7�&7��&G�H��)�)�%��4��)�)�.�Irc��SnS[RU'SSSSUS0n[[R5nURU5 [=RU-slUR	U[R5 UR	S[RU5 URSS5 URUS5 g)Nr�r�r�r�r�r�r��rr�rUrarEr�)r5r�r�rUs    r�test_ior_operator�EnvironTests.test_ior_operator�s���%��%5��
�
�>�"���U�C���E�
���
�
�#�����
�&�
�
�
�m�#�
�����2�:�:�.�����b�j�j��8�9��)�)�%��5��)�)�.�#�>rc��[RR5nUR[5 SS0n[=RU-slSSS5 UR[5 SS0n[=RU-slSSS5 URU[R5 g!,(df   Nj=f!,(df   N@=f)Nr{r�)rr��copyr�r�rE)r5�os_environ_copy�dict_with_bad_key�dict_with_bad_vals    r�test_ior_operator_invalid_dicts�,EnvironTests.test_ior_operator_invalid_dicts�s����*�*�/�/�+��
�
�
�y�
)�!"�E�
���J�J�+�+�J�*��
�
�y�
)�!&��
���J�J�+�+�J�*�
	
����"�*�*�5�*�
)��*�
)�s�B6�/C�6
C�
Cc��SnS[RU'SSUS44n[[R5nURU5 [=RU-slUR	U[R5 UR	S[RU5 URSS5 URUS5 g)Nr�r�)r�r�)r�r�r�r�r�r�)r5r�r�rUs    r�$test_ior_operator_key_value_iterable�1EnvironTests.test_ior_operator_key_value_iterable�s���%��%5��
�
�>�"�&��~�s�6K�L����
�
�#������'�
�
�
�n�$�
�����2�:�:�.�����b�j�j��8�9��)�)�%��5��)�)�.�#�>rc���SnSnU[RU'SSSSUS0n[U5nUR[R5 U[R-nUR	XE5 URX%U5 UR
5nUR[[RRU55 URSS5 URX5 gr�)rr�rUrar�rEr[r�r��__ror__r�r�s       r�test_ror_operator�EnvironTests.test_ror_operators���%��)��%3��
�
�>�"���U�C���E�
��
�&������
�
�#�����+�����X�.������)?�@�&�,�,�.���
�
�n�b�j�j�&8�&8��&H�I��)�)�%��4��)�)�.�Ir)�__save�__saveb)*r`rarbrc�__doc__�	type2testrmr-rZrlrrrrrFr�rr�requires_subprocessrtr{rr�r�r�rWr�r��requires_mac_verr�r�r�r�r�r�r�r�r�rrrrdr+rrrSrS�s���B��I�$�-�C��
����B������z�(B�+�-�
�����W�-�/A�B�� � �"�-�#�C�-�-�����B������z�(B�+�-�
�����W�-�/A�B�� � �"�7�#�C�-�7�-�
9�
G�'�R����2�2�>�@�9�@�9�*
� � �"�?�#�?�&
���b�!�$�@�%�@�$;�
$�1�9�:�	*�J�&
?�6�
?�JrrSc�n�\rSrSrSrSrSrSrSrSSjr	S	r
S
rSrSr
S
r\R "\"\S5S5\R&"\R*S:HS5S55r\R "\"\S5S5\R&"\R*S:HS5S55rSrSrSrg)�	WalkTestsizTests for os.walk().Fc�d�SU;aURS5US'[R"U40UD6$�Nr��followlinks)r�r�walk)r5�top�kwargss   rr�WalkTests.walks2����&�$*�J�J�/@�$A�F�=�!��w�w�s�%�f�%�%rc�t�[RRnUR[R
[R5 U"[RS5UlU"URS5UlU"URS5Ul	U"URS5nU"US5nU"URS5Ul
U"URS5nU"US5nU"US5nU"US	5UlU"[RS
5nU"[RS
S5nU"US5UlU"US
5n	U"US5n
[R"UR5 [R"U5 [R"U5 [R"U5 URXEX�4H.n[USSS9nURSU-S-5 SSS5 M0 [R "5(a�[R""[RR%U5UR5 [R""SURS5 [R""U"SS5U	S5 [R""U"SS5U
S5 USS	//SQ4UlOUS/S/4Ul[(R*(d[R,"US5 [R."U5 [R,"U[0R25 [R4"U5 [R6"U5 UR&SSS2	g!,(df   GM�=f![8a2 UR[R,U[0R25 gf=f)N�TEST1�SUB1�SUB11�SUB2�SUB21�tmp1�tmp2�tmp3�link�TEST2�tmp4�broken_link�broken_link2�broken_link3r@r�r�zI'm z" and proud of it.  Blame test_os.
�brokenT�tmp5)r%r&r'r!rr{)rrFrHr�rr�rj�	walk_path�	sub1_path�
sub11_path�	tmp1_path�	link_path�broken_link_path�makedirsr r!�can_symlinkr�r*�	sub2_treerr/�chmod�listdirr��S_IRWXUrkr��PermissionError)
r5rH�	sub2_path�
sub21_path�	tmp2_path�	tmp3_path�	tmp5_path�t2_path�	tmp4_path�broken_link2_path�broken_link3_pathrFrws
             rrm�WalkTests.setUp s����w�w�|�|�����	�(�(�)�*:�*:�;�&�i�.�.��8����d�n�n�f�5����t�~�~�w�7��������0�	��)�W�-�
��d�n�n�f�5��������0�	���F�+�	���V�,�	��i��0����y�'�'��1����)�)�7�F�;�	� $�Y�
� >��� ��N�;�� ��N�;��	���D�O�O�$�
���I��
���J��
���G���N�N�I�)�N�D��d�C�'�2�a������
�(M�M�N�3�2�O�� � �"�"��J�J�r�w�w���w�/����@��J�J�x��!6�!6��=��J�J�t�F�H�-�/@�$�G��J�J�t�G�V�,�.?��F�'�'�6�):�'�(�D�N�(�'��V�H�=�D�N��$�$��H�H�Z��#�	&��J�J�z�"�
�H�H�Z����.��I�I�i� ��H�H�Z� ����q�!�"�1�"�%�33�2��&�	@��O�O�B�H�H�j�$�,�,�?�	@�s�
M(�.M;�(
M8	�;9N7�6N7c�f�[URUR55nUR[	U5S5 USSSS:gnUSSR5 USSU--
SR5 USSU--
SR5 URUSURSS/S	/45 URUSU-URS
/S/45 URUSU-UR//45 URUSSU--
UR5 g)Nr�rr{rrr}���rrrr )	�listrr*rErA�sortr+r,r2�r5�all�flippeds   r�test_walk_topdown�WalkTests.test_walk_topdowngs&���4�9�9�T�^�^�,�-������S��1�%��a�&��)�A�,�&�(���A��q�	�����A��G��O��R� �%�%�'��A��G��O��Q��$�$�&�����Q��$�.�.�6�6�2B�V�H�!M�N�����Q��[�)�D�N�N�W�I��x�+P�Q�����Q��[�)�D�O�O�R��+D�E�����Q��W��_�-�t�~�~�>rNc���UcURn/nURU5H2up4nURX4U45 SU;dM!URS5 M4 UR	[U5S5 UR	USURS/S/45 USSR
5 USSR
5 UR	USUR5 g)Nrr}rrrr{rB)r*r�append�removerErArDr2)r5r*rFr0�dirsr�s      r�test_walk_prune�WalkTests.test_walk_prunexs��������I���!%���9�!5��D���J�J��E�*�+���~����F�#�"6�	
����S��1�%�����Q��$�.�.�6�(�V�H�!E�F��A��r�
�����A��q�	��������Q�����0rc�L�UR[UR55 gr()rNrr*rls r�test_file_like_path�WalkTests.test_file_like_path�s�����X�d�n�n�5�6rc�\�[URURSS95nUR[	U5SU5 USSSS:gnUSSR5 USSU--
S	R5 USSU--
SR5 URUSURSS
/S/45 URXUR//45 URXS-URS/S
/45 URUSSU--
UR5 g)NF��topdownr�rr{rrr}rBrrrr )	rCrr*rErArDr,r+r2rEs   r�test_walk_bottom_up�WalkTests.test_walk_bottom_up�s1���4�9�9�T�^�^�U�9�;�<������S��1�c�*��a�&��)�A�,�&�(���A��q�	�����A��G��O��R� �%�%�'��A��G��O��Q��$�$�&�����Q���.�.�6�6�*:�V�H�E�	G�������/�/�2�r�2�	4�����q�[�)��.�.�7�)�f�X�>�	@�����Q��W��_�-����	)rc��[R"5(dURS5 URURSS9nUH<up#nX R
:XdMUR
U/5 UR
US/5  O URS5 URURSS9nUR(aUR[[U5 UR[[U5 g)Nzneed symlink supportTr;r$z+Didn't follow symlink with followlinks=True)rr1r�rr*r.rEr\r/�is_fwalkr�rKrxry)r5�walk_itr0rMr�s     r�test_walk_symlink�WalkTests.test_walk_symlink�s����$�$�&�&��M�M�0�1��)�)�D�N�N�D�)�A��!(��D���~�~�%�� � ��r�*�� � ����1��	")�
�I�I�C�D��)�)�D�1�1�4�)�H���=�=����/��w�?����-��w�7rc���/nURURURS9n[U5up4nUR	U/5 Sn[
RRX65n[
RRX6S-5n[
R"Xx5 UV	V
Vs/sHup�o�PM	 nn
n	nURU5 URX|5 URX�5 UH9n
X�:wdM
UR[
RRX=5U5 M; [
R"X�5 gs snn
n	f![
R"X�5 f=f)N��onerrorrz.new)rr*rKrxrErrFrHr�rsr�r�)r5�errorsrZr0rMr��dir1�path1�path1newr��drw�roots�dir2s              r�test_walk_bad_dir�WalkTests.test_walk_bad_dir�s
�����)�)�D�N�N�F�M�M�)�B�� ��M���E������$��������T�(���7�7�<�<��V�m�4��
�	�	�%�"�		'�&-�.�g�7�1��Q�g�E�.��O�O�F�#����U�*����X�-����<��M�M�"�'�'�,�,�t�":�E�B��
�I�I�h�&��/��
�I�I�h�&�s$�!E	�'E�5?E	�83E	�E	�	E!c��URS5nUR(aUR[[U5 UR[
[U5 URSSS9nUR(aUR[[U5 UR[
[U5 URUR5nUR[
[U5 URURSS9nUR(aUR[[U5 UR[
[U5 g)N�nonexistingTr;)rrYr�rKrxryr-�NotADirectoryError)r5rZs  r�test_walk_bad_dir2�WalkTests.test_walk_bad_dir2�s����)�)�M�*���=�=����/��w�?����-��w�7��)�)�M�4�)�@���=�=����/��w�?����-��w�7��)�)�D�N�N�+�����-��w�7��)�)�D�N�N�D�)�A���=�=����0�$��@����-��w�7r�mkfifozrequires os.mkfifo()r:z%fifo requires special path on VxWorksc��[RS-n[R"U5 UR	[R
U5 UR
U5nUR[[U5 UR
USS9nUR(aUR[[U5 UR[[U5 g)Nz-pipeTr;)rrjrrnr�rkrr�ryrxrYrk)r5rFrZs   r�test_walk_named_pipe�WalkTests.test_walk_named_pipe�s������'�)��
�	�	�$������	�	�4�(��)�)�D�/�����-��w�7��)�)�D�$�)�7���=�=����0�$��@����-��w�7rc���[RS-n[R"U5 UR	[
RU5 [R"[RRUS55 /nURXRS9n[U5 UR[[U5 URU/5 /nURXRS9n[U5upEnURXA5 URU/5 URUS/5 UR!U5 UR#5 UR$(aUR[&[U5 UR[[U5 UR$(aURU/5 gUR[)U5SU5 UR+US[&5 g)Nz-dir�mypiper^r{r)rrjrrIr��shutilr�rnrFrHrrKrxr�ryrE�extendr`rYrkrAr2)r5rFr`rZr0rMr�s       r�test_walk_named_pipe2�WalkTests.test_walk_named_pipe2�sh�����&�(��
���������
�
�t�,�
�	�	�"�'�'�,�,�t�X�.�/����)�)�D�-�-�)�8���W�
����-��w�7������$����)�)�D�-�-�)�8�� ��M���E�����$�����r�"������
�+����E��
���
��=�=����0�$��@����-��w�7��=�=����V�R�(����S��[�!�V�4��!�!�&��)�-?�@rc�*�Sn[RR[RS5n[RR"U/S/U-Q76n[R
"U5 [
S5Vs/sHo@RUSS9PM nn[
US-5HTnX6(aS/O//4nUHnUR[U5U5 M  [RRU5nMV [
S5Vs/sHo@RUSS9PM nnUn[
US-5HTnX6U:aS/O//4nUHnUR[U5U5 M  [RRUS5nMV gs snfs snf)	N��deeprdr�FrTr{T)rrFrHrrjr0r�rrErxrS)	r5�depth�baser{�j�itersr�rUrzs	         r�test_walk_many_open_files�#WalkTests.test_walk_many_open_filessP�����w�w�|�|�I�,�,�f�5���G�G�L�L��.�#��u��.��
���A��9>�s��D��A���4���/���D��u�q�y�!�A��A�C�5�2�r�2�H���� � ��b��8�4��������"�A�	"�9>�c�
�C�
�1���4���.�
��C����u�q�y�!�A���I�C�5�2�r�:�H���� � ��b��8�4�������Q��$�A�	"��E��Ds�9F�Fc���Sn[R"[RR"UR/S/U-Q765 [US-
5 [
URUR55nSSS5 URSnWH-upEnXC:XdM
UR5 UR5 M/ /nURn[U5H8n	[RRUS5nURUS//45 M: USSR5 URS/S/4UR//4/UR/US	.n
USSnURUS
/4/nUHnURX�5 M UR![#U5US-5 UR![%U5/S	Q5 UR!X+5 g!,(df   GNm=f)N�2rdr�rrBr{rr )rrrdrr�)rr0rFrHr*rrCrr2rDr�rKr`r+r,rurErA�sorted)
r5r{rFr7r0rMr��	d_entries�d_path�_�sectionsrUrds
             r�test_walk_above_recursion_limit�)WalkTests.test_walk_above_recursion_limit#s�����
���B�G�G�L�L����B�C�5�5�=�B�C�
���	�
*��t�y�y����0�1�C�+��N�N�1�%�	�!$��D��� ��	�	���
�
��"%�
�	������u��A��W�W�\�\�&�#�.�F����f�s�e�R�0�1��	�"�
�a���� �
���'��V�H�5����"�b�)���^�^�$��

���1�v�a�y���^�^�T�F�8�4�5���A��O�O�H�K�(��	
����S��5�1�9�-�������'<�=�����'�G+�
*�s�%G�
G.)r/r.r,r+r2r-r*r()r`rarbrcrrYrrmrHrNrQrVr[rgrlrrrrr.r?r@rprvrr�rdr+rrrrs�����H�&�
E&�N?�"1�&7�)�*8�&'�*8�&�����X�.�0F�G�
�_�_�S�\�\�Y�.�;�=�8�=�H�8������X�.�0F�G�
�_�_�S�\�\�Y�.�;�=�A�=�H�A�:%�*&(rr�fwalkzTest needs os.fwalk()c�P�\rSrSrSrSrSrSrSrSr	Sr
S	r\R"\RS
5\R"\R S5S55r\R"\RS
5\R"\R S5S
55rSrSrg)�
FwalkTestsiLzTests for os.fwalk().Tc+�R# �UR"U40UD6Hup4pVX4U4v� M g7fr()r�)r5rrr0rMr��root_fds       rr�FwalkTests.walkQs.���*.�*�*�S�*C�F�*C�&�D���u�%�%�+D�s�%'c�.�[R"U0UD6$r()rr��r5r�rs   rr��FwalkTests.fwalkUs���x�x��(��(�(rc	���UR5nUR5n[R"SSS9H�up4URX4S9 URX4S9 0n[R
"S0UD6Hupgn[
U5[
U54XV'M  UR"S0UD6H?upgp�URXe5 URXV[
U5[
U545 MA M� g)z
compare with walk() results.
�TFr}��repeat)rUr)rUr�Nr+)
r��	itertools�productrarr�setr�r�rE)
r5�walk_kwargs�fwalk_kwargsrUr�rUr0rMr��rootfds
          r�_compare_to_walk�FwalkTests._compare_to_walkXs���"�&�&�(��#�(�(�*��(1�(9�(9�-�PQ�(R�$�G����w��L������Q��H�%'�W�W�%;�{�%;�!��E�"%�d�)�S��Z�!8���&<�.2�Z�Z�-G�,�-G�)��E��
�
�d�-�� � ���#�d�)�S��Z�1H�I�.H�)Src�J�S[R0nURX5 g)Nr)rrjr�)r5rs  r�test_compare_to_walk�FwalkTests.test_compare_to_walkjs ����)�)�*�����f�-rc� �[R"S[R5nS[R0nUR5nXS'UR
X#5 [R"U5 g![R"W5 f=f)N�.rr�)rr r�rrjr�r�rr)r5r�r�r�s    r�test_dir_fd�FwalkTests.test_dir_fdnsf��	�����b�k�k�*�B� �)�"2�"2�3�K�&�+�+�-�L�%'��"��!�!�+�<��H�H�R�L��B�H�H�R�L�s�AA5�5B
c	�~�[R"SSS9H�up[RUS4nUR"USU06HvupEpg[
R"U5 [
R"U5 UR[[
R"U55[U5[U5-5 Mx M� g)Nr�r}r�r�)r�r�rrjr�r�fstatr�rEr�r4)r5rUr�r�r0rMr�r�s        r�test_yields_correct_dir_fd�%FwalkTests.test_yields_correct_dir_fdxs���(1�(9�(9�-�PQ�(R�$�G��#�#�W�d�2�D�-1�Z�Z��-_��-_�)��E����� ������� � ��R�Z�Z��%7�!8�#�d�)�c�%�j�:P�Q�
.`�)SrzCannot dup stdout on Emscriptenz,dup return value is unpredictable on Androidc�Z�[R"S5n[R"U5 [S5H)nUR	[
R5HnM M+ [R"S5nUR[RU5 URXA5 g)Nr{�)	rrrrr�r�rrjr�rE)r5�minfdr�r@�newfds     r�test_fd_leak�FwalkTests.test_fd_leak�su�����q�	��
������s��A��Z�Z�	� 0� 0�1���2�����q�	��������%�(�����&rc�&�SnSH�nU"5nUR[RUS9nURU"5U5 [	U5 URU"5U5 UR
5 URU"5U5 M� g)Nc�^�[R"S5n[R"U5 U$�Nr{)rrrr)r�s r�getfd�.FwalkTests.test_fd_finalization.<locals>.getfd�s�������B��H�H�R�L��Ir�FTrT)r�rrjrErx�
assertGreaterrr)r5r�rU�old_fdrzs     r�test_fd_finalization�FwalkTests.test_fd_finalization�sx��	�%�G��W�F����I�,�,�g��>�B����U�W�f�-���H����u�w��/��H�H�J����U�W�f�-�%rNr+)r`rarbrcrrYrr�r�r�r�r�rr.rr/�
is_androidr�r�rrdr+rrr�r�Ls�����H�&�)�J�$.��
R��_�_����@���_�_����J��'���'��_�_����@���_�_����J��
.���
.� !%�rr�c��\rSrSrSrSrSrg)�BytesWalkTestsi��Tests for os.walk() with bytes.c+�# �SU;aURS5US'[R"[R"U540UD6H�up4n[R"U5n[[
[RU55n[[
[RU55nXgU4v� [[
[RU55USS&[[
[RU55USS&M� g7fr)r�rr�fsencoder]rC�map)	r5rr�broot�bdirs�bfilesr0rMr�s	         rr�BytesWalkTests.walk�s������&�$*�J�J�/@�$A�F�=�!�$&�G�G�B�K�K��,<�$G��$G� �E�&��;�;�u�%�D���B�K�K��/�0�D���R�[�[�&�1�2�E��u�%�%��C����T�2�3�E�!�H��S����e�4�5�F�1�I�
%H�s�C?Dr+N)r`rarbrcrrrdr+rrr�r��s
��)�	6rr�c�"�\rSrSrSrSSjrSrg)�BytesFwalkTestsi�r�c/��# �[R"[R"U5/UQ70UD6H�upEpg[R"U5n[	[[RU55n	[	[[RU55n
X�X�4v� [	[[RU	55USS&[	[[RU
55USS&M� g7fr()rr�r�r]rCr�)r5rr�rr�r�r��topfdr0rMr�s           rr��BytesFwalkTests.fwalk�s����+-�8�8�B�K�K��4D�+V�t�+V�v�+V�'�E�&��;�;�u�%�D���B�K�K��/�0�D���R�[�[�&�1�2�E��u�,�,��C����T�2�3�E�!�H��S����e�4�5�F�1�I�
,W�s�C(C*r+N)r�)r`rarbrcrr�rdr+rrr�r��s
��)�6rr�c��\rSrSrSrSr\R"\R=(d \RS5S5r\R"\R=(d \RS5S5r\R"\R=(d \RS5S5r
Sr\R"\R"S	:HS
5S5rSrS
rg)�MakedirTestsi�c�L�[R"[R5 gr(�rrIrrjrls rrm�MakedirTests.setUp�s��
����!�!�"rc
��[Rn[RR	USSS5n[R
"U5 [RR	USSSS5n[R
"U5 UR
[[R
[R5 [RR	USSSSS[R5n[R
"U5 [RR	US[RSSSSS5n[R
"U5 g�Nrarf�dir3�dir4�dir5�dir6)	rrjrrFrHr0r�rL�curdir)r5r|rFs   r�test_makedir�MakedirTests.test_makedir�s��������w�w�|�|�D�&�&�&�9��
���D���w�w�|�|�D�&�&�&�&�A��
���D��	
���'�2�;�;��	�	�:��w�w�|�|�D�&�&�&�&�&�"�)�)�T��
���D���w�w�|�|�D�&�"�)�)�V�V�V�"�F�,��
���D�rz$Emscripten's/WASI's umask is a stub.c���[R"S5 [Rn[RRUS5n[RRUS5n[R"US5 UR[RRU55 UR[RRU55 [RS:wafUR[R"U5RS-S5 UR[R"U5RS-S5 SSS5 g!,(df   g=f)Nr}rarfim�ntr�i�)r�
temp_umaskrjrrFrHr0rsr��isdirrrEr�r^)r5r|�parentrFs    r�	test_mode�MakedirTests.test_mode�s���
�
!�
!�%�
(��#�#�D��W�W�\�\�$��/�F��7�7�<�<���/�D��K�K��e�$��O�O�B�G�G�N�N�4�0�1��O�O�B�G�G�M�M�$�/�0��w�w�$��� � ������!6�!6��!>��F�� � ������!8�!8�5�!@�%�H�)�
(�
(�s�D>E�
E,c�4�[RR[RS5nSn[R
"S5n[R"X5 UR[[RX5 UR[[RXSS9 [R"USSS9 [R"XSS9 [R
"U5 [R"[RRS	5SS9 g)
Nrar��F��exist_oki�T)r�r��/)
rrFrHrrj�umaskr0r�rLr*)r5rFr��old_masks    r� test_exist_ok_existing_directory�-MakedirTests.test_exist_ok_existing_directory�s���
�w�w�|�|�I�,�,�f�5�����8�8�E�?��
���D�����'�2�;�;��;����'�2�;�;��U��K�
���D�%�$�/�
���D�d�3�
�����	���B�G�G�O�O�C�(�4�8rc���[RR[RS5n[
RnSn[R"S5n[
R"[R"[R5R5n[R"[RXR-5 [R"[R5RU-U:wa[R"S5e[R"XU-5 [R"XSS9 [R"U[
R"[R"U5R5U)-5 [R"XU-SS9 [R"U5 g![a [R"S5ef=f![R"U5 f=f)Nrar�r�zCannot set S_ISGID for dir.z No support for S_ISGID dir mode.Tr�)rrFrHrrjr��S_ISGIDr��S_IMODE�lstatr^r3r6r�SkipTestr0)r5rFr�r�r��existing_testfn_modes      r�test_exist_ok_s_isgid_directory�,MakedirTests.test_exist_ok_s_isgid_directory�sY��
�w�w�|�|�I�,�,�f�5���,�,�����8�8�E�?��	�#'�<�<��H�H�Y�-�-�.�6�6�$8� �
G�����)�)�+?�+I�J�����)�)�*�2�2�W�<��G��'�'�(J�K�K�
�K�K��W�n�-�
�K�K��T�2��H�H�T�4�<�<������(>�(>�?�7�(�J�K��K�K��W�n�t�<��H�H�X���#�
G��'�'�(E�F�F�
G��
�H�H�X��s&�AG�'F7�CG�7!G�G�G3c���[Rn[RR	[RS5n[USSS9nUR
S5 SSS5 UR[[RU5 UR[[RUSS9 UR[[RUSS9 [R"U5 g!,(df   N�=f)	Nrar�r�r�r�Fr�T)rrjrrFrHr r!r�rLr0rL)r5r|rFrws    r�#test_exist_ok_existing_regular_file�0MakedirTests.test_exist_ok_existing_regular_files��������w�w�|�|�I�,�,�f�5��
�$��g�
.�!�
�G�G�E�N�/����'�2�;�;��5����'�2�;�;��u��E����'�2�;�;��t��D�
�	�	�$��/�
.�s�
C(�(
C6r�zrequires Windowsc��[Rn[RR	[RR[RS55n[R"USS9 [R"SUS/SS9n[R"U5 UR5RSS	5S	nURUS
5 g)NrSi�)r�z	cacls.exez/s�oemr�� r{z5"D:P(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FA;;;OW)")
rrjrrFr*rHrIr��check_outputr�rs�rsplitrE)r5r|rF�outs    r�test_win32_mkdir_700�!MakedirTests.test_win32_mkdir_700(s��������w�w���r�w�w�|�|�I�,<�,<�e�D�E��
����E�"��%�%�{�D�$�&?�%�P��
������i�i�k� � ��a�(��+������C�	
rc	��[RR[RSSSSSS5n[RRU5(dmU[R:waY[RR
U5n[RRU5(dU[R:waMY[R"U5 gr�)rrFrHrrjr�rS�
removedirs�r5rFs  rr-�MakedirTests.tearDown5s����w�w�|�|�I�,�,�f�f�f�"�F�F�4��
�'�'�.�.��&�&�4�9�3C�3C�+C��7�7�?�?�4�(�D��'�'�.�.��&�&�4�9�3C�3C�+C�	�
�
�d�rr+N)r`rarbrcrmr�rr.rr/r0r�r�r�r�rrrr�r-rdr+rrr�r��s���#�
��_�_����0����.��
I�	�
I��_�_����0����.��9�	�9��_�_����0����.���	��6�������D��*<�=�

�>�

�	rr��chownzrequires os.chown()c�0�\rSrSr\S5rSr\R"\	"\
S5S5S5r\R"\=(a \
"\5S:�S5S	5r\R"\(+=(a \
"\5S:�S
5S5r\S5rS
rg)�ChownFileTestsiAc�L�[R"[R5 gr(r���clss r�
setUpClass�ChownFileTests.setUpClassD���
����!�!�"rc��[R"[R5nURnUR
nSS[R"S5[R"SS54HknUR[[R[RXC5 UR[[R[RX$5 Mm UR"[RX#55 UR"[RSS55 g)Ng�y��rB���r})rr�rrj�st_uid�st_gid�decimal�Decimal�	fractions�Fractionr�r�r��assertIsNone)r5r��uid�gidr�s     r�*test_chown_uid_gid_arguments_must_be_index�9ChownFileTests.test_chown_uid_gid_arguments_must_be_indexHs����w�w�y�'�'�(���k�k���k�k���C�����!4�i�6H�6H��Q�6O�P�E����i����9�3C�3C�U�P����i����9�3C�3C�S�P�Q�	
���"�(�(�9�#3�#3�S�>�?����"�(�(�9�#3�#3�R��<�=r�	getgroupszneed os.getgroupsc�h�[R"5n[U5S:aURS5 USSup#[R"[
R5Rn[R"[
RXB5 [R"[
R5RnURXR5 [R"[
RXC5 [R"[
R5RnURXS5 g)Nr}ztest needs at least 2 groups)rrrAr�r�rrjr
r�rrE)r5�groups�gid_1�gid_2rrs      r�test_chown_gid�ChownFileTests.test_chown_gidRs���������v�;��?��M�M�8�9��b�q�z����g�g�i�&�&�'�.�.��
����!�!�3�.��g�g�i�&�&�'�.�.������$�
����!�!�3�.��g�g�i�&�&�'�.�.������$rr{z0test needs root privilege and more than one userc��[SSup[R"[R5R
n[R"[RX5 [R"[R5RnURXA5 [R"[RX#5 [R"[R5RnURXB5 g�Nr})	�	all_usersrr�rrjrr�r
rE)r5�uid_1�uid_2rrs     r�test_chown_with_root�#ChownFileTests.test_chown_with_rootcs���!��!�}����g�g�i�&�&�'�.�.��
����!�!�5�.��g�g�i�&�&�'�.�.������$�
����!�!�5�.��g�g�i�&�&�'�.�.������$rz2test needs non-root account and more than one userc�h�[SSup[R"[R5R
nUR
[5 [R"[RX5 [R"[RX#5 SSS5 g!,(df   g=fr)	rrr�rrjrr�r6r�)r5rr rs    r�test_chown_without_permission�,ChownFileTests.test_chown_without_permissionosm��!��!�}����g�g�i�&�&�'�.�.��
�
�
��
/��H�H�Y�%�%�u�2��H�H�Y�%�%�u�2�0�
/�
/�s
�AB#�#
B1c�L�[R"[R5 gr()rr�rrjrs r�
tearDownClass�ChownFileTests.tearDownClassxrrr+N)r`rarbrc�classmethodrrrrrrr�
root_in_posixrArr!r$r'rdr+rrrrAs����#��#�>������[�1�3F�G�%�H�%� ����=�3�y�>�A�+=�K�M�%�M�%����]�*�A�s�9�~��/A�M�O�3�O�3��#��#rrc�2�\rSrSrSrSrSrSrSrSr	g)	�RemoveDirsTestsi}c�L�[R"[R5 gr()rr0rrjrls rrm�RemoveDirsTests.setUp~s��
���I�$�$�%rc�L�[R"[R5 gr()rr�rjrls rr-�RemoveDirsTests.tearDown�s������)�)�*rc�T�[RR[RS5n[R
"U5 [RRUS5n[R
"U5 [R"U5 UR[RRU55 UR[RRU55 UR[RR[R55 g)N�dira�dirb)	rrFrHrrjrIr��assertFalser��r5r2r3s   r�test_remove_all�RemoveDirsTests.test_remove_all�s����w�w�|�|�I�,�,�f�5��
������w�w�|�|�D�&�)��
�����
�
�
�d�����������-�.����������-�.���������	�(8�(8�9�:rc��[RR[RS5n[R
"U5 [RRUS5n[R
"U5 [
[RRUS55 [R"U5 UR[RRU55 UR[RRU55 UR[RR[R55 g�Nr2r3�file.txt)rrFrHrrjrIr%r�r4r�rsr5s   r�test_remove_partial�#RemoveDirsTests.test_remove_partial�s����w�w�|�|�I�,�,�f�5��
������w�w�|�|�D�&�)��
������B�G�G�L�L��z�2�3�
�
�
�d�����������-�.���������t�,�-���������y�'7�'7�8�9rc��[RR[RS5n[R
"U5 [RRUS5n[R
"U5 [
[RRUS55 UR[5 [R"U5 SSS5 UR[RRU55 UR[RRU55 UR[RR[R55 g!,(df   N�=fr9)rrFrHrrjrIr%r�rLr�rsr�r5s   r�test_remove_nothing�#RemoveDirsTests.test_remove_nothing�s����w�w�|�|�I�,�,�f�5��
������w�w�|�|�D�&�)��
������B�G�G�L�L��z�2�3�
�
�
�w�
'��M�M�$��(���������t�,�-���������t�,�-���������y�'7�'7�8�9�	(�
'�s�9E1�1
E?r+N)
r`rarbrcrmr-r6r;r>rdr+rrr,r,}s��&�+�;�	:�
:rr,zWASI has no /dev/nullc��\rSrSrSrSrg)�DevNullTestsi�c�X�[[RSS5nURS5 UR	5 SSS5 [[RS5nURUR
5S5 SSS5 g!,(df   NR=f!,(df   g=f)Nr�r�hellor�r)r r�devnullr!rrrEr�rvs  r�test_devnull�DevNullTests.test_devnull�sp��
�"�*�*�d�A�
&�!�
�G�G�H��
�G�G�I�'��"�*�*�d�
#�q����Q�V�V�X�s�+�$�
#�'�
&��$�
#�s�"B
� !B�

B�
B)r+N)r`rarbrcrErdr+rrrArA�s��,rrAc�,�\rSrSrSrSrSrSrSrg)�URandomTestsi�c���UR[[R"S55S5 UR[[R"S55S5 UR[[R"S55S5 UR[[R"S55S5 UR[[R"S55S5 g)Nrr{r|r�r;)rErAr�urandomrls r�test_urandom_length� URandomTests.test_urandom_length�s�������R�Z�Z��]�+�Q�/�����R�Z�Z��]�+�Q�/�����R�Z�Z��^�,�b�1�����R�Z�Z��_�-�s�3�����R�Z�Z��-�.��5rc��[R"S5nURU[5 [R"S5nUR	X5 g�N�)rrJr2r\r��r5�data1�data2s   r�test_urandom_value�URandomTests.test_urandom_value�s:���
�
�2������e�U�+��
�
�2������E�)rc��SRSSU-SS45n[SU5nUSnUR[U5U5 U$)N�
zimport os, syszdata = os.urandom(%s)zsys.stdout.buffer.write(data)zsys.stdout.buffer.flush()r�r{)rHr
rErA)r5�countr�r�r�s     r�get_urandom_subprocess�#URandomTests.get_urandom_subprocess�sV���y�y��#�e�+�+�'�	)�*��
�t�T�*���Q�������V��e�,��
rc�j�URS5nURS5nURX5 grN)rXr�rPs   r�test_urandom_subprocess�$URandomTests.test_urandom_subprocess�s0���+�+�B�/���+�+�B�/�����E�)rr+N)	r`rarbrcrKrSrXr[rdr+rrrHrH�s��6�*�	�*rrH�	getrandomzneed os.getrandom()c�B�\rSrSr\S5rSrSrSrSr	Sr
Srg	)
�GetRandomTestsi�c��[R"S5 g![a:nUR[R:Xa[
R"S5eeSnAff=f)Nr{z%getrandom() syscall fails with ENOSYS)rr]rLrMr�rr�)rrWs  rr�GetRandomTests.setUpClass�sI��	��L�L��O���	��y�y�E�L�L�(��'�'�(O�P�P���
	�s��
A�5A�Ac��[R"S5nURU[5 UR	[U5S5 grN)rr]r2r\rErA)r5r�s  r�test_getrandom_type�"GetRandomTests.test_getrandom_type�s4���|�|�B������d�E�*�����T��B�'rc�T�[R"S5nURUS5 g)Nrr)rr]rE)r5�emptys  r�test_getrandom0�GetRandomTests.test_getrandom0�s�����Q��������$rc�B�UR[[S55 g)N�GRND_RANDOM)rsrrrls r�test_getrandom_random�$GetRandomTests.test_getrandom_random�s�������M�2�3rc�p�[R"S[R5 g![a gf=fr�)rr]�
GRND_NONBLOCK�BlockingIOErrorrls r�test_getrandom_nonblock�&GetRandomTests.test_getrandom_nonblock�s-��	��L�L��B�,�,�-���	��	�s�%(�
5�5c�~�[R"S5n[R"S5nURX5 grN)rr]r�rPs   r�test_getrandom_value�#GetRandomTests.test_getrandom_value�s,�����R� �����R� �����E�)rr+N)r`rarbrcr)rrcrgrkrprsrdr+rrr_r_�s-���	��	�(�
%�4��*rr_�HAVE_GETENTROPYr{�HAVE_GETRANDOM�HAVE_GETRANDOM_SYSCALLz*os.random() does not use a file descriptorr:z$VxWorks can't set RLIMIT_NOFILE to 1c�R�\rSrSr\R
"\S5S5rSrSr	Sr
g)�URandomFDTestsiz!test requires the resource modulec� �Sn[SU5 g)Na�if 1:
            import errno
            import os
            import resource

            soft_limit, hard_limit = resource.getrlimit(resource.RLIMIT_NOFILE)
            resource.setrlimit(resource.RLIMIT_NOFILE, (1, hard_limit))
            try:
                os.urandom(16)
            except OSError as e:
                assert e.errno == errno.EMFILE, e.errno
            else:
                raise AssertionError("OSError not raised")
            r�rr�s  r�test_urandom_failure�#URandomFDTests.test_urandom_failures��
��	��t�$rc�&�Sn[SU5up#ng)Naif 1:
            import os
            import sys
            import test.support
            os.urandom(4)
            with test.support.SuppressCrashReport():
                os.closerange(3, 256)
            sys.stdout.buffer.write(os.urandom(4))
            �-Scr)r5r��rcr��errs     r�test_urandom_fd_closed�%URandomFDTests.test_urandom_fd_closeds����(��t�4���rc���UR[R[R5 [	[RS5 SR[RS9n[
SU5up#nUR[U5S5 URUSSUSS5 [
SU5up%nUR[U5S5 URXS5 g)Nsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa�if 1:
            import os
            import sys
            import test.support
            os.urandom(4)
            with test.support.SuppressCrashReport():
                for fd in range(3, 256):
                    try:
                        os.close(fd)
                    except OSError:
                        pass
                    else:
                        # Found the urandom fd (XXX hopefully)
                        break
                os.closerange(3, 256)
            with open({TESTFN!r}, 'rb') as f:
                new_fd = f.fileno()
                # Issue #26935: posix allows new_fd and fd to be equal but
                # some libc implementations have dup2 return an error in this
                # case.
                if new_fd != fd:
                    os.dup2(new_fd, fd)
                sys.stdout.buffer.write(os.urandom(4))
                sys.stdout.buffer.write(os.urandom(4))
            )rjr~rKrr�)
r�rrkrjr%�formatr
rErAr�)r5r�rr�r��out2�err2s       r�test_urandom_fd_reopened�'URandomFDTests.test_urandom_fd_reopened+s���	
���	�(�(�)�*:�*:�;��I�$�$�j�1��0��i�.�.��/�1	
�2(��t�4��������S��1�%����C��!�H�c�!�A�h�/�)�%��6���$�����T��A�&����D�&rr+N)r`rarbrcrr�resourcer{r�r�rdr+rrryrys/��
����#F�G�%�H�%�,5�$'rryc#�j^# �/mU4SjnU4Sjn[Rn[Rn[RnU[lU[lUbU[lTv� U[lU[lU[lg!W[lW[lW[lf=f7f)z�
Stubs out execv and execve functions when used as context manager.
Records exec calls. The mock execv and execve functions always raise an
exception as they would normally never return.
c�@>�TRSX45 [S5e)N�execvzexecv called)rK�RuntimeError�rr��callss  �r�
mock_execv�#_execvpe_mockup.<locals>.mock_execv]s���
���g�t�*�+��>�*�*rc�^>�TRSX45 [[RS5e)N�execvez
execve called)rKrLrM�ENOTDIRr�s  �r�mock_execve�$_execvpe_mockup.<locals>.mock_execveas%���
���h��+�,��e�m�m�_�5�5rN)rr�r�r�)r�r�r��
orig_execv�orig_execve�orig_defpathr�s      @r�_execvpe_mockupr�Rs�����
�E�+�6�"��X�X�
��i�i���z�z�������	��� �B�J��������	�!��
�������	�!��
�s�B3�AB
�+"B3�
#B0�0B3r�zneed os.execv()c��\rSrSr\R
"\S5S5rSrSr	\R"\"\S5S5S5r
S	rS
r\R
"\R S:HS5\R"\=(a \R$R'\5S
5S55r\R"\R,S:HS5S5rSrg)�	ExecTestsisz4avoid triggering a linuxthreads bug: see issue #4970c�T�UR[[RSS/S5 g)Nzno such app-)r�rLr�execvperls r�test_execvpe_with_bad_program�'ExecTests.test_execvpe_with_bad_programvs$��	
���'�2�:�:�~�)�*�D�	2rc�6�UR[[RSS5 UR[[RS/5 UR[[RSS5 UR[[RSS/5 g)N�notepadr+r�r))r�r�rr�rls r�test_execv_with_bad_arglist�%ExecTests.test_execv_with_bad_arglist|sd�����*�b�h�h�	�2�>����*�b�h�h�	�2�>����*�b�h�h�	�5�A����*�b�h�h�	�B�4�@rc���UR[[RS/S5 UR[[RS/05 UR[[RSS/05 g)Nr�r))r�r�rr�rls r�test_execvpe_with_bad_arglist�'ExecTests.test_execvpe_with_bad_arglist�sR�����*�b�j�j�)�R��F����*�b�j�j�)�R��D����*�b�j�j�)�b�T�2�Fr�_execvpez)No internal os._execvpe function to test.c	��[RS-nU[La=Sn[RR	[R
"U5U5nUn/SQnORSn/SQn[RR	X#5n[RS:wa[R
"U5nOUnSS0n[5nUR[[RXF5 UR[U5S	5 URUS
SXF445 SSS5 [US9nUR[[RX6US
9 UR[U5S	5 URUS
SXVU445 SSS5 [5nUR5n	U[LaX)S'OX)S'UR[[RX6U	S
9 UR[U5S	5 URUS
SXVU	445 SSS5 g!,(df   GN=f!,(df   N�=f!,(df   g=f)N�absolutepaths
executable)sprogname�arg1�arg2r�)�prognamer�r�r��spamr�r{rr�)r�r�r�r�r�)rrGr\rFrHr�rr�r�r�r�rErArLr�r�)
r5�	test_type�program_path�program�fullpath�native_fullpath�	argumentsr�r��env_paths
          r�_test_internal_execvpe� ExecTests._test_internal_execvpe�s����v�v��.�����#�G��w�w�|�|�B�K�K��$=�w�G�H�&�O�5�I�"�G�4�I��w�w�|�|�L�:�H��w�w�$��"$�+�+�h�"7��"*���w����
�%����l����X�
2����S��Z��+����U�1�X���<�'H�I�	��\�
2�e����g����W�S�
�
:����S��Z��+��$�$�U�1�X��?��,<�=�
?�	3��
�%��x�x�z�H��E�!�$0��!�#/�� ����g����W�X�
�
?����S��Z��+��$�$�U�1�X��?��,A�B�
D��
�#�
��3�
2���
�s'�:AH�$AH%�A;H6�
H"�%
H3�6
Ic��UR[5 [RS:waUR[5 gg)Nr�)r�r3rrr\rls r�test_internal_execvpe_str�#ExecTests.test_internal_execvpe_str�s.���#�#�C�(�
�7�7�d�?��'�'��.�rc��[RSS/n[RR	5nSUS'UR[5 [R"USX5 SSS5 [RR	5nSUS'UR[5 [R"USX5 SSS5 [RR	5nSUS	'UR[5 [R"USX5 SSS5 g!,(df   N�=f!,(df   N{=f!,(df   g=f)
Nr��pass�cabbage�FRUITVEGETABLEr�orangeVEGETABLE=cabbage�FRUIT�lemon�FRUIT=ORANGE)r?r�rr�r�r�r�r�)r5r��newenvs   r�test_execve_invalid_env�!ExecTests.test_execve_invalid_env�s�������f�-�������"��%.��!�"�
�
�
�z�
*��I�I�d�1�g�t�,�+������"��5��w��
�
�
�z�
*��I�I�d�1�g�t�,�+������"��!(��~��
�
�
�z�
*��I�I�d�1�g�t�,�+�
*�+�
*��+�
*��+�
*�s$�D&�'D7�E�&
D4�7
E�
Er�zPOSIX-specific testrnc���SnSR[US9n[RR	5VVs0sHup4URS5(dMX4_M! nnn[R"5nUR5 URU5 [SU40UD6upxnSSS5 UR[US5W5 gs snnf!,(df   N1=f)Nzhello from execveaif 1:
        import os, sys

        class MyPath:
            def __fspath__(self):
                mutated.clear()
                return b"pwn"

        mutated = KEYS = VALUES = [MyPath()]

        class MyEnv:
            def __getitem__(self): raise RuntimeError("must not be called")
            def __len__(self): return 1
            def keys(self): return KEYS
            def values(self): return VALUES

        args = [{unix_shell!r}, '-c', 'echo "{message!s}"']
        os.execve(args[0], args, MyEnv())
        )r�message�LD_r��ascii)
r�rrr�r[�
startswithrr�r`rar
r�r\)	r5r�r��k�v�minimalr�r�r�s	         r�5test_execve_env_concurrent_mutation_with_fspath_posix�?ExecTests.test_execve_env_concurrent_mutation_with_fspath_posix�s���&���$
�F�j�'�F�:�%	
�,%'�J�J�$4�$4�$6�N�$6�D�A�!�,�,�u�:M�4�1�4�$6��N�
�
*�
*�
,���I�I�K��J�J�w��(��t�;�s�;�I�A�A�-�	
�
�
�e�G�W�-�s�3��O�
,�
,�s�C
�C
�62C�
C!r�zWin32-specific testc���[R"SS/05 URS5 g![a=nUR	UR
SL=(d UR
S:g5 SnAgSnAff=f)Nr)�argzNo OSError raisedr)rr�r\rLrs�winerrorr�s  r�test_execve_with_empty_path�%ExecTests.test_execve_with_empty_path�sa��	+��I�I�b�5�'�2�&�
�I�I�)�*���	C��O�O�A�J�J�$�.�A�!�*�*��/�B�B��	C�s�-�
A4�3A/�/A4r+N)r`rarbrcrr.�USING_LINUXTHREADSr�r�r�rrrr�r�r�rrrFr�r�r?r@r�rdr+rrr�r�ss����_�_�'�K�M�2�M�2�A�G�
�����Z�0�D�F�-D�F�-D�^/�
-�.�_�_�R�W�W��_�&;�<�
����B������z�(B�*�,� 4�,�=� 4�D�������0�2G�H�+�I�+rr�r�r�c�>�\rSrSrSrSrSrSrSrSr	Sr
S	rg
)�Win32ErrorTestsi	c�,�[R"[R5 UR	S[R-5 g![
a Sng[a3nSnUR	S[R<SU<35 SnAgSnAff=f)Nzfile %s must not existFTzfile z% must not exist; os.stat failed with )rr�rrjr\rKrL)r5r�rWs   rrm�Win32ErrorTests.setUp	sy��		C��G�G�I�$�$�%�
�I�I�.��1A�1A�A�B��!�	��F��	1��F��I�I�"�)�)�3�0�
1�
1��	1�s�$A	�	B�	B� )B�Bc��UR[[R[R
[R
S-5 g)Nz.bak)r�rLrr�rrjrls rr��Win32ErrorTests.test_rename	s,�����'�2�9�9�i�.>�.>�	�@P�@P�QW�@W�Xrc�j�UR[[R[R
5 gr()r�rLrrLrrjrls r�test_remove�Win32ErrorTests.test_remove	s�����'�2�9�9�i�.>�.>�?rc�j�UR[[R[R
5 gr()r�rLrrJrrjrls r�
test_chdir�Win32ErrorTests.test_chdir	s�����'�2�8�8�Y�-=�-=�>rc�.�UR[R[R5 [	[RS5nUR[[R[R5 SSS5 g!,(df   g=f)Nr@)	r�rrkrjr r�rLrrIrvs  r�
test_mkdir�Win32ErrorTests.test_mkdir	sV�����	�(�(�)�*:�*:�;�
�)�"�"�C�
(�A����g�r�x�x��1A�1A�B�)�
(�
(�s�	4B�
Bc�l�UR[[R[R
S5 gr()r�rLrr�rrjrls rr��Win32ErrorTests.test_utime!	s �����'�2�8�8�Y�-=�-=�t�Drc�l�UR[[R[R
S5 gr�)r�rLrr3rrjrls r�
test_chmod�Win32ErrorTests.test_chmod$	s �����'�2�8�8�Y�-=�-=�q�Arr+N)r`rarbrcrmr�r�r�r�r�r�rdr+rrr�r�	s+��
C�Y�@�?�C�E�Brr�z!Cannot create invalid FD on WASI.c��\rSrSr/SQr1SkrSr\Hr\"\5\"5S\-'M Sr	Sr
Sr\R"\"\S	5S
5S5r\R"\"\S5S
5S5r\R"\"\S5S5S5r\R"\"\S5S5\R&"\R*S5S55r\R"\"\S5S5S5r\R"\"\S5S5S5r\R"\"\S5S5\R&"\R*=(d \R2S5S55r\R"\"\S5S5\R&"\R6"5S 5S!55r\R"\"\S"5S#5S$5r\R"\"\S%5S&5S'5r\R"\"\S(5S)5S*5r\R"\"\S+5S,5S-5r \R"\"\S.5S/5S05r!\R"\"\S15S25S35r"\R"\"\S45S55S65r#\RH"5S75r%\R"\"\S85S95S:5r&S;r'g<)=�
TestInvalidFDi(	)�fchdirr�	fdatasyncr��fstatvfs�fsync�	tcgetpgrp�ttyname>r�r�r�c�^�U4SjnU$)Nc��>�[[T5(aPUR[[T55 TUR;a UR[[T55 gggr()rrr�rV�singles_fildes�
check_boolrvs �r�helper�(TestInvalidFD.get_single.<locals>.helper0	sJ�����A����
�
�7�2�q�>�*���+�+�+��O�O�G�B��N�3�,�rr+)rwr�s` r�
get_single�TestInvalidFD.get_single/	s���	4�
�
r�test_c���U"[R"5/UQ70UD6 URSU-5 g![a4nUR	UR
[
R5 SnAgSnAff=f)Nz5%r didn't raise an OSError with a bad file descriptor)r�make_bad_fdr\rLrErMr�)r5rwr�rr�s     rr��TestInvalidFD.check9	sh��	�
�i�#�#�%�7��7��7�
�I�I�M���
���	3����Q�W�W�e�k�k�2�2��	3�s�6�
A4�*A/�/A4c�"�[R"5 [R"S[5 SH-nUR	[5 U"U/UQ70UD6 SSS5 M/ SSS5 g!,(df   MI=f!,(df   g=f)N�errorr�)r�r��simplefilter�RuntimeWarningr�)r5rwr�rr�s     rr��TestInvalidFD.check_boolB	sj��
�
$�
$�
&��!�!�'�>�:�!���&�&�~�6��b�*�4�*�6�*�7�6�"�'�
&�7�6��'�
&�s#�6B�
A.�B�.
A=�8B�
Bc�|�UR[RSS9 UR[RSS9 g)Nr�r�)r�rr�r�rls rr��TestInvalidFD.test_fdopenI	s*���
�
�2�9�9�w�
�/�����	�	�G��4r�isattyztest needs os.isatty()c�v�UR[R"[R"55S5 g�NF)rErrrr�rls r�test_isatty�TestInvalidFD.test_isattyM	s$��������9�#8�#8�#:�;�U�Crr�ztest needs os.closerange()c�4�[R"5n[S5Hn[R"X-5  O WS:a[R"S5eUR[R"XU-S-
5S5 g![
a Muf=f)Nr|r}z5Unable to acquire a range of invalid file descriptorsr{)
rr�r�rr�rLrr�rEr�)r5r�r�s   rr��TestInvalidFD.test_closerangeQ	s���
�
"�
"�
$���r��A����"�$����
�q�5��#�#�G�I�
I�������r��6�!�8�4�d�;���
��
�s�B	�	
B�B�dup2ztest needs os.dup2()c�D�UR[RS5 g)N�)r�rrrls r�	test_dup2�TestInvalidFD.test_dup2a	s���
�
�2�7�7�B�rz@dup2() with negative fds is broken on Emscripten (see gh-102179)c�0�[R"[[R5nUR	[R
U5 USS/n[R"USS9H�up4X4:wdMURX4S9 UR[5n[R"X45 SSS5 URWRR[R5 SSS5 M� g!,(df   NO=f!,(df   M�=f)NrBi�r}r�)r��fd2)rr r�r�r�rrr�r�rvr�rLrrEr�rMr�)r5�valid_fd�fdsr�rr�s      r�test_dup2_negative_fd�#TestInvalidFD.test_dup2_negative_fde	s����7�7�8�R�[�[�1��������(�+����
��
!�(�(��Q�7�G�B��y��\�\�R�\�1��*�*�7�3�s�����(�4��$�$�S�]�]�%8�%8�%�+�+�F�2�1�8�4�3��2�1�s$�?D�C5�,<D�5
D�?D�
D	�fchmodztest needs os.fchmod()c�D�UR[RS5 gr�)r�rrrls r�test_fchmod�TestInvalidFD.test_fchmody	s���
�
�2�9�9�a� r�fchownztest needs os.fchown()c�F�UR[RSS5 g)NrB)r�rrrls r�test_fchown�TestInvalidFD.test_fchown}	s���
�
�2�9�9�b�"�%r�	fpathconfztest needs os.fpathconf()z-musl libc issue on Emscripten/WASI, bpo-46390c�D�URS[R5 UR[RS5 UR[R
S5 UR
[RS5 UR
[R
S5 g)N�PC_NAME_MAX)r�r�pathconf_namesr��pathconfrr�rls r�test_fpathconf�TestInvalidFD.test_fpathconf�	s`��	
�
�
�m�R�%6�%6�7��
�
�2�;�;�
�.��
�
�2�<�<��/�������]�3�������m�4rr#ztest needs os.pathconf()zAmusl fpathconf ignores the file descriptor and returns a constantc��UR[5n[R"SS5 SSS5 UR	WR
R[R5 g!,(df   NC=f)NrBr{)r�rLrr#rEr�rMr�)r5r�s  r�+test_pathconf_negative_fd_uses_fd_semantics�9TestInvalidFD.test_pathconf_negative_fd_uses_fd_semantics�	sN���
�
�w�
'�3��K�K��A��(�������,�,�e�k�k�:�(�
'�s�A+�+
A9�	ftruncateztest needs os.ftruncate()c���UR[RS5 UR[RS5 UR	[RS5 gr�)r�r�truncater)r�rls r�test_ftruncate�TestInvalidFD.test_ftruncate�	s8���
�
�2�;�;��"��
�
�2�<�<��#�������Q�'rr�ztest needs os.lseek()c�F�UR[RSS5 gr�)r�rr�rls r�
test_lseek�TestInvalidFD.test_lseek�	s���
�
�2�8�8�Q��"rr�ztest needs os.read()c�D�UR[RS5 gr�)r�rr�rls rr��TestInvalidFD.test_read�	s���
�
�2�7�7�A�r�readvztest needs os.readv()c�\�[S5nUR[RU/5 g)Nr|)r�r�rr3)r5r1s  r�
test_readv�TestInvalidFD.test_readv�	s����m���
�
�2�8�8�c�U�#r�	tcsetpgrpztest needs os.tcsetpgrp()c�D�UR[RS5 gr�)r�rr7rls r�test_tcsetpgrpt�TestInvalidFD.test_tcsetpgrpt�	s���
�
�2�<�<��#rr!ztest needs os.write()c�D�UR[RS5 g)N� )r�rr!rls rr��TestInvalidFD.test_write�	s���
�
�2�8�8�T�"r�writevztest needs os.writev()c�F�UR[RS/5 g)Nr�)r�rr>rls r�test_writev�TestInvalidFD.test_writev�	s���
�
�2�9�9�v�h�'rc��UR[R5 UR[RS5 g�NT)r�r�get_inheritable�set_inheritablerls r�test_inheritable�TestInvalidFD.test_inheritable�	s(���
�
�2�%�%�&��
�
�2�%�%�t�,r�get_blocking�-needs os.get_blocking() and os.set_blocking()c��UR[R5 UR[RS5 grC)r�rrH�set_blockingrls r�
test_blocking�TestInvalidFD.test_blocking�	s&��	
�
�
�2�?�?�#��
�
�2�?�?�D�)rr+N)(r`rarbrc�singlesr�r�rw�localsr�r�r�rrrrrr�rr.rr/rrrr0r$�linked_to_muslr'r,r/r�r5r9r�r@rrFrLrdr+rrr�r�(	si��<�G�5�N����(��m���������+�5������X�.�0H�I�D�J�D������\�2�4P�Q�
<�R�
<������V�,�.D�E� �F� ������V�,�.D�E�
�_�_����J��
G�	�F�

G������X�.�0H�I�!�J�!������X�.�0H�I�&�J�&������[�1�3N�O�
�_�_����0����7��5�	�P�
5������Z�0�2L�M�
�_�_���� �K�
�;�	
�N�
;�
�����[�1�3N�O�(�P�(�
�����W�-�/F�G�#�H�#������V�,�.D�E��F�������W�-�/F�G�$�H�$������[�1�3N�O�$�P�$������W�-�/F�G�#�H�#������X�.�0H�I�(�J�(�
� � �"�-�#�-������^�4�H�J�*�J�*rr�r"zrequires os.linkc�8�\rSrSrSrSrSrSrSrSr	Sr
g	)
�	LinkTestsi�	c��[RUl[RR[RS-5Ulg)Nr�)rrj�file1rrFrH�file2rls rrm�LinkTests.setUp�	s.���%�%��
��W�W�\�\�)�"2�"2�S�"8�9��
rc��URUR4H?n[RR	U5(dM)[R
"U5 MA gr()rTrUrrFr�rk)r5�files  rr-�LinkTests.tearDown�	s7���Z�Z����,�D��w�w�~�~�d�#�#��	�	�$��-rc	���[U5 [R"X5 [US5n[US5nUR
[RRUR5UR555 SSS5 SSS5 g![anUR	SU-5 SnAN�SnAff=f!,(df   NB=f!,(df   g=f)N�
os.link(): %sr�)
r%rr"r6r�r rsrF�sameopenfiler�)r5rTrUr�r��f2s      r�
_test_link�LinkTests._test_link�	s����E��	/��G�G�E�!��%��
�"�d�5�$�&7�2��O�O�B�G�G�0�0�����b�i�i�k�J�K�'8�
�
���	/��M�M�/�A�-�.�.��	/��&7�&7��
�
�s:�B�
C�AC�C�
C�#B<�<C�
C	�C�
C#c�P�URURUR5 gr()r^rTrUrls r�	test_link�LinkTests.test_link�	s������
�
�D�J�J�/rc���UR[UR[R"55[UR
[R"555 gr()r^r\rTr?rorUrls r�test_link_bytes�LinkTests.test_link_bytes�	s<������d�j�j�#�*C�*C�*E�F��d�j�j�#�*C�*C�*E�F�	Hrc��[R"S5 U=R
S-
slUR
S-UlURUR
UR5 g![a [R"S5ef=f)N�ñz#Unable to encode for this platform.r�)rr��UnicodeErrorrr�rTrUr^rls r�test_unicode_name�LinkTests.test_unicode_name�	so��	K��K�K���	
�
�
�f��
��Z�Z�#�%��
�����
�
�D�J�J�/���	K��#�#�$I�J�J�	K�s�A(�(!B	)rTrUN)r`rarbrcrmr-r^rardrirdr+rrrRrR�	s"��:� �
L�0�H�0rrRzPosix specific testsc��\rSrSrSrSr\R"\"\	S5S5S5r
\R"\"\	S5S5S5r\R"\"\	S	5S
5S5r\R"\"\	S5S
5S5r
\R"\"\	S5S5S5r\R"\"\	S5S5\R "5S55r\R"\"\	S5S5\R "5S55r\R"\"\	S5S5\R "5S55rSrg)�PosixUidGidTestsi�	��setuidztest needs os.setuid()c�(�[R"5S:wa%UR[[RS5 UR[
[RS5 UR[[RUR5 g�Nrz
not an int)r�getuidr�rLrnr��
OverflowError�UID_OVERFLOWrls r�test_setuid�PosixUidGidTests.test_setuid�	sX��
�9�9�;�!�����g�r�y�y�!�4����)�R�Y�Y��=����-����D�4E�4E�Fr�setgidztest needs os.setgid()c�>�[R"5S:wa0[(d%UR[[R
S5 UR[[R
S5 UR[[R
UR5 grp)	rrq�HAVE_WHEEL_GROUPr�rLrvr�rr�GID_OVERFLOWrls r�test_setgid�PosixUidGidTests.test_setgid�	s^��
�9�9�;�!��$4�$4����g�r�y�y�!�4����)�R�Y�Y��=����-����D�4E�4E�Fr�seteuidztest needs os.seteuid()c�(�[R"5S:wa%UR[[RS5 UR[
[RS5 UR[[RUR5 grp)	rrqr�rLr|r��setegidrrrsrls r�test_seteuid�PosixUidGidTests.test_seteuid�	sX��
�9�9�;�!�����g�r�z�z�1�5����)�R�Z�Z��>����-����T�5F�5F�Grr~ztest needs os.setegid()c�>�[R"5S:wa0[(d%UR[[R
S5 UR[[R
S5 UR[[R
UR5 grp)	rrqrxr�rLr~r�rrryrls r�test_setegid�PosixUidGidTests.test_setegid
s^��
�9�9�;�!��$4�$4����g�r�z�z�1�5����)�R�Z�Z��>����-����T�5F�5F�Gr�setreuidztest needs os.setreuid()c���[R"5S:wa&UR[[RSS5 UR[
[RSS5 UR[
[RSS5 UR[[RURS5 UR[[RSUR5 grp)rrqr�rLr�r�rrrsrls r�
test_setreuid�PosixUidGidTests.test_setreuid

s���
�9�9�;�!�����g�r�{�{�A�q�9����)�R�[�[�,��B����)�R�[�[�!�\�B����-����d�6G�6G��K����-����a��9J�9J�Krc�R�[R"[RSS/5 g)Nr�z,import os,sys;os.setreuid(-1,-1);sys.exit(0)�r�r�r?r�rls r�test_setreuid_neg1�#PosixUidGidTests.test_setreuid_neg1
�%��
	�������>�@�	Ar�setregidztest needs os.setregid()c���[R"5S:wa1[(d&UR[[R
SS5 UR[[R
SS5 UR[[R
SS5 UR[[R
URS5 UR[[R
SUR5 grp)	rrqrxr�rLr�r�rrryrls r�
test_setregid�PosixUidGidTests.test_setregid
s����9�9�;�!��$4�$4����g�r�{�{�A�q�9����)�R�[�[�,��B����)�R�[�[�!�\�B����-����d�6G�6G��K����-����a��9J�9J�Krc�R�[R"[RSS/5 g)Nr�z,import os,sys;os.setregid(-1,-1);sys.exit(0)r�rls r�test_setregid_neg1�#PosixUidGidTests.test_setregid_neg1&
r�rr+N)r`rarbrcrsryrrrrrtrzrr�r�rrr�r�r�rdr+rrrlrl�	s����L��L�
�����X�.�0H�I�G�J�G������X�.�0H�I�G�J�G������Y�/�1J�K�H�L�H������Y�/�1J�K�H�L�H������Z�0�2L�M�L�N�L������Z�0�2L�M�� � �"�A�#�N�A������Z�0�2L�M�� � �"�L�#�N�L������Z�0�2L�M�� � �"�A�#�N�Arrlc�r�\rSrSrSrSrSrSr\R"\
"\S5S5S5rS	r
S
rg)�Pep383Testsi/
c�^�[R(a[RUlO@[R(a[RUlO[RUl[
R"UR5Ul/mU4SjnU"[R5 [R(aU"[R5 [R(aU"[R5 T(dURS5 [5Ul[
R"UR5 TH�n[R"[
RRURU55 [
R "U5nX R;a[#S5eURR%U5 M� g! [&R("UR5 e=f)Nc�v>�[R"U5nTRU5 g![a gf=fr()rr�rprK)�fn�bytesfns �r�add_filename�'Pep383Tests.setUp.<locals>.add_filename;
s7���
��[�[��_��
�N�N�2���&�
��
�s�+�
8�8z&couldn't create any non-ascii filenamezduplicate filename)r�TESTFN_UNENCODABLErS�TESTFN_NONASCIIrjrr��bdir�TESTFN_UNICODEr�r��	unicodefnrI�create_empty_filerFrHr]r��addrtr�)r5r�r�r�s   @rrm�Pep383Tests.setUp1
s@����'�'� �3�3�D�H�
�
&�
&� �0�0�D�H� �'�'�D�H��K�K����)��	���	�	�Y�-�-�.��'�'���5�5�6��$�$���2�2�3���M�M�B�C�����
�������		����+�+�B�G�G�L�L����B�,G�H��[�[��_�����'�$�%9�:�:����"�"�2�&���	��M�M�$�(�(�#��s
�BG!�!#Hc�D�[R"UR5 gr()rtr�rSrls rr-�Pep383Tests.tearDownV
s���
�
�d�h�h�rc��URn[[R"UR55nURX!5 [R"5n[R"UR5 UR[[R"55U5 [R"U5 g![R"U5 f=fr()r�r�rr4rSrEr1rJ)r5rU�found�current_directorys    r�test_listdir�Pep383Tests.test_listdirY
s����>�>���B�J�J�t�x�x�(�)������)��I�I�K��	(�
�H�H�T�X�X�����S�����.��9��H�H�&�'��B�H�H�&�'�s
�AC�Cc��URHGn[[RR	UR
U5S5nUR
5 MI g�Nr�)r�r rrFrHrSrr)r5r�rws   r�	test_open�Pep383Tests.test_openg
s8���.�.�B��R�W�W�\�\�$�(�(�B�/��6�A�
�G�G�I�!rrr�c��URHCn[RRURU5n[R
"U5 ME gr()r�rrFrHrSr)r5r��fullnames   r�test_statvfs�Pep383Tests.test_statvfsl
s6���.�.�B��w�w�|�|�D�H�H�b�1�H��J�J�x� �!rc��URHAn[R"[RR	UR
U55 MC gr()r�rr�rFrHrS)r5r�s  r�	test_stat�Pep383Tests.test_statu
s/���.�.�B��G�G�B�G�G�L�L����2�.�/�!r)r�rSr�N)r`rarbrcrmr-r�r�rrrrr�r�rdr+rrr�r�/
sG��#�J �(��
�����Y�/�/�1�!�1�!�0rr�c���\rSrSrSrSrSr\R"\	SLS5S5r
\R"S5\R"5S	55r\R"5S
5rSrg)�Win32KillTestsiy
c���SSKnSSKJn SSKnURRR
nURUlURURUR5URURUR5URUR5URUR54UlSn[R"[R SSR#U5/[R$[R$[R$S9nUR'UR(R*5 UR'UR,R*5 UR'UR.R*5 Sup�X�:a�UR15c�UR3[5U55n
U"UR7UR(R955X�R;U
5SSS5nUR=USS5 U
R>(a*URAXjR>RC55 OD[DRF"S	5 US
-
nX�:aUR15cM�URIS5 [JRL"URNU5 URAURQ5U5 g)Nr��wintypes�runningr�z<import sys;sys.stdout.write('{}');sys.stdout.flush();input())r��stderr�stdin)rr�zPeekNamedPipe failed皙�����?r{z1Did not receive communication from the subprocess))r+r��msvcrtr,r-�
PeekNamedPipe�BOOL�restype�HANDLE�POINTER�c_char�DWORD�argtypesr��Popenr?r�r�r�r�r�rrr�r��poll�create_string_bufferrA�
get_osfhandler��sizeofr�r�rEr�r�sleepr\r�kill�pid�wait)r5�sigr+r�r�r�rr�rW�maxr1�rslts            r�_kill�Win32KillTests._kill{
s��
	�#���
�
�.�.�<�<�
� (�
�
�
��"*�/�/�"(�.�.����"?�"*�.�.�"(�.�.����"@�"(�.�.����"@�"(�.�.����"@�"B�
�����������"+�,2�6�#�;�	!8�
(2���'1���&0�o�o�7��	
������)�)�*�������)�)�*�����
�
�(�(�)��
���k�d�i�i�k�1��-�-�c�#�h�7�C�!��!5�!5�d�k�k�6H�6H�6J�!K�!$�m�m�C�&8�$��d�L�D�����a�)?�@��y�y�� � ��i�i�&6�&6�&8�9���J�J�s�O��Q�J�E��k�d�i�i�k�1�
�I�I�I�J�
������#���������c�*rc�B�UR[R5 gr()r��signal�SIGTERMrls r�test_kill_sigterm� Win32KillTests.test_kill_sigterm�
s���
�
�6�>�>�"rc�&�URS5 g)Nr�)r�rls r�
test_kill_int�Win32KillTests.test_kill_int�
s
���
�
�3�rNz
requires mmapc�b�S[R"5-n[R"SSU5nSUS'[RR[RR
[5S5n[RXS/n[R"U[RS9nU [R"[R5HnUR!5bM O# UR#5 UR%S5 [R""UR&U5 UR)[RS9 SSS5 g![R*a3 UR#5 UR%S	R-U55 NOf=f!,(df   g=f)
Nz
test_os_%srBr{rzwin_console_handler.pyr�z'Subprocess didn't finish initialization)�timeoutzsubprocess did not stop on {})�uuid�uuid1�mmaprrFrHrSr�r?r�r�r��CREATE_NEW_PROCESS_GROUPr�sleeping_retry�
SHORT_TIMEOUTr�r�r\r�r��TimeoutExpiredr�)	r5�eventr�tagname�m�script�cmdr�r�s	         r�_kill_with_event�Win32KillTests._kill_with_event�
s<�������-���I�I�b�!�W�%����!�������b�g�g�o�o�h�7�6�8���~�~�v�/������.8�.Q�.Q�S����+�+�G�,A�,A�B���9�9�;�&��C�
�	�	���	�	�C�D��G�G�D�H�H�e�$�
H��	�	�'�"7�"7�	�8��T�� �,�,�
H��	�	���	�	�9�@�@��F�G�
H��!�T�s2�.7F �)AF �0E�AF�F �F�F � 
F.z.subprocesses aren't inheriting Ctrl+C propertyc�d�SSKJn SSKnURUR5"5nURR
RnURUR5UR4UlURUl	U"US5 UR[RS5 g)Nrr��CTRL_C_EVENT)
r+r�r��c_intr,r-�SetConsoleCtrlHandlerr�r�r�r�r�r�)r5r�r+�NULLr�s     r�test_CTRL_C_EVENT� Win32KillTests.test_CTRL_C_EVENT�
s���	$���~�~�f�l�l�+�-�� &�
�
� 6� 6� L� L��*0�.�.����*F�*2�-�-�*9��&�(0�
�
��%�
	�d�A�&����f�1�1�>�Brc�D�UR[RS5 g)N�CTRL_BREAK_EVENT)r�r�r�rls r�test_CTRL_BREAK_EVENT�$Win32KillTests.test_CTRL_BREAK_EVENT�
s�����f�5�5�7I�Jrr+)r`rarbrcr�r�r�rr.r�r��skiprrr�r�rdr+rrr�r�y
s���4+�l#���_�_�T�T�\�?�3�H�4�H�B�]�]�C�D�� � �"�C�#�E�C�$
� � �"�K�#�Krr�c�0�\rSrSrSrSrSrSrSrSr	g)	�Win32ListdirTestsi�
zTest listdir on Windows.c��/Ul[S5H�nSU-n[RR	[
RU5nSU-n[RR	[
RU5n[R"U5 [USSS9nURSU-5 SSS5 URRX$/5 M� URR5 g!,(df   NI=f)Nr}zSUB%dzFILE%dr�r�r�z'I'm %s and proud of it. Blame test_os.
)�
created_pathsr�rrFrHrrjr0r r!rurD)r5r��dir_name�dir_path�	file_name�	file_pathrws       rrm�Win32ListdirTests.setUp�
s�������q��A���{�H��w�w�|�|�I�$4�$4�h�?�H� �1��I������Y�%5�%5�y�A�I��K�K��!��i��w�7�1����B�Y�N�O�8����%�%�x�&;�<��	
�����!�8�7�s�C5�5
D	c�L�[R"[R5 gr()rtr�rrjrls rr-�Win32ListdirTests.tearDowns���
�
�i�&�&�'rc	��UR[[R"[R
55UR5 UR[[R"[R"[R
555URVs/sHn[R"U5PM sn5 gs snf)z-Test when the path is not an "extended" path.N)rEr�rr4rrjr�r�r�s  r�test_listdir_no_extended_path�/Win32ListdirTests.test_listdir_no_extended_paths���	
����r�z�z�)�"2�"2�3�4��"�"�	$�
	
����r�z�z�"�+�+�i�.>�.>�"?�@�A�/3�/A�/A�B�/A�t����T�"�/A�B�	D��Bs�! C	
c	�$�S[RR[R5-nUR[
[R"U55UR5 S[R"[RR[R55-nUR[
[R"U55URVs/sHn[R"U5PM sn5 gs snf)z&Test when the path starts with '\\?\'.�\\?\�\\?\N)
rrFr*rrjrEr�r4r�r�r�s  r�test_listdir_extended_path�,Win32ListdirTests.test_listdir_extended_paths����2�7�7�?�?�9�+;�+;�<�<������r�z�z�$�'�(��"�"�	$�
�B�K�K������	�8H�8H�(I�J�J������r�z�z�$�'�(�/3�/A�/A�B�/A�t����T�"�/A�B�	D��Bs�% D
)r�N)
r`rarbrcrrmr-rrrdr+rrr�r��
s��"�"�(�
D�
Drr�r�zNT specific testsc�0�\rSrSrSrSrSrSrSrSr	g)	�Win32ListdriveTestsi$z5Test listdrive, listmounts and listvolume on Windows.c	��[R"/SQ[RR	[R
"SS5S5SSS9nUR
5nUVs1sHo3RS5(dMUiM snUlUVs1sHo3S	SS
:XdM
UiM snUl	UVs1sHo3S	SS
:XdM
UiM snUl
gs snfs snfs snf)N)z
fsutil.exe�volumerC�
SystemRootz\Windows�System32�mbcs�ignore)r6r�r`r	r{z:\r)r�r�rrFrH�getenvr�r��
known_volumes�known_drives�known_mounts)r5r��lines�ls    rrm�Win32ListdriveTests.setUp(s����%�%�,������R�Y�Y�|�[�A�:�N���	
����� ��).�J��A�,�,�y�2I�a��J���(-�@��1�1�2��%��Q��@���(-�A��1�1�Q��5��Q��A����K��@��As$�!C�>C�C� C�2C�Cc��[R"5nURU[5 UR	UR
UR
[
U5-5 gr()r�
listdrivesr2rC�assertSetEqualrr�)r5�drivess  r�test_listdrives�#Win32ListdriveTests.test_listdrives5sF����������f�d�+�����������F��+�	
rc��[R"5nURU[5 UR	UR
UR
[
U5-5 gr()r�listvolumesr2rCrrr�)r5�volumess  r�test_listvolumes�$Win32ListdriveTests.test_listvolumes=sG���.�.�"�����g�t�,�����������W��-�	
rc�z�[R"5Han[R"U5nURU[5 UR[
U5UR[
U5-5 Mc g![a4n[R(a[SUSU5 SnAM�SnAM�SnAff=f)N�Skippingz
because of)rr#�
listmountsr2rCrr�rrLrrOrP)r5r�mounts�exs    r�test_listmounts�#Win32ListdriveTests.test_listmountsEs����n�n�&�F�

����v�.��
�%�%�f�d�3��#�#���K��%�%��F��3��'���
@��?�?��*�f�l�B�?�?�#��
@�s�A<�<
B:�#B5�5B:)rrrN)
r`rarbrcrrmr r%r,rdr+rrrr$s��?�B�
�
�rr�readlinkzneeds os.readlink()c��\rSrSrSr\RR\5r	\R"\5r\R"\	5rSr
SrSrSr\R$S5r\R$S5r\R$S	5rS
rg)�
ReadlinkTestsiT�readlinktestc��[RRU5n[RRU5n[RS:Xa'SnU"U5(aUSSnU"U5(aUSSnURX5 g)Nr�c�Z�UR[U[5(aS5$S5$)Nr
r	)r�r�r\)r{s rr�/ReadlinkTests.assertPathEqual.<locals>.<lambda>as&��1�<�<�(��E�2�2�
�$C�8A�$Crr�)rrF�normcaser?r@rE)r5�left�right�
has_prefixs    r�assertPathEqual�ReadlinkTests.assertPathEqual[sx���w�w����%����� � ��'���<�<�7�"�C�J��$����A�B�x���%� � ��a�b�	������%rc���UR[RRUR55 UR[RRUR
55 UR
[RRUR55 UR
[RRUR55 gr()	rsrrFr��filelink_target�filelinkb_targetr4�filelink�	filelinkbrls rrm�ReadlinkTests.setUpis~����������t�';�';�<�=���������t�'<�'<�=�>����������
�
�6�7������������7�8rc���[UR5nUR[[R
UR5 UR[[R
U5 gr()rr<r�rLrr.)r5r<s  r�test_not_symlink�ReadlinkTests.test_not_symlinkosD��"�4�#7�#7�8�����'�2�;�;��0D�0D�E����'�2�;�;��@rc��UR[[RS5 UR[[R[	S55 g)Nzmissing-link)r�rKrr.rrls r�test_missing_link�ReadlinkTests.test_missing_linkts8�����+�R�[�[�.�I����+�R�[�[�"�>�2�	4rc�8�[R"URUR5 UR	[
RUR5 [UR5nUR[R"U5UR5 gr()
rr�r<r>r�rrkrr9r.)r5r>s  r�
test_pathlike�ReadlinkTests.test_pathlikeys_��
�
�
�4�'�'����7����	�(�(�$�-�-�8��D�M�M�*�����R�[�[��2�D�4H�4H�Irc�b�[R"URUR5 UR	[
RUR5 [R"[UR55nURXR5 URU[5 gr()rr�r=r?r�rrkr.rr9r2r\r�s  r�test_pathlike_bytes�!ReadlinkTests.test_pathlike_bytes�sm��
�
�
�4�(�(�$�.�.�9����	�(�(�$�.�.�9��{�{�8�D�N�N�3�4�����T�#8�#8�9����d�E�*rc�P�[R"URUR5 UR	[
RUR5 [R"UR5nURXR5 URU[5 gr()rr�r=r?r�rrkr.r9r2r\r�s  r�
test_bytes�ReadlinkTests.test_bytes�sh��
�
�
�4�(�(�$�.�.�9����	�(�(�$�.�.�9��{�{�4�>�>�*�����T�#8�#8�9����d�E�*rr+N)r`rarbrcr>rrFr*r�r<r�r?r=r9rmrBrEr�skip_unless_symlinkrHrKrNrdr+rrr0r0Ts����H��g�g�o�o�h�/�O����H�%�I��{�{�?�3��&�9�A�
4�
�"�"�J�#�J��"�"�+�#�+��"�"�+�#�+rr0c�|�\rSrSrSr\RR\5r	Sr
\RR\	5rSr
SrSrSrSrS	rS
rSrSrS
rSr\R2"\RR5S5=(a \RR7S5S5S5rSrSrSrg)�Win32SymlinkTestsi��filelinktest�dirlinktestzmissing linkc���[RRUR5(de[RRUR5(de[RRUR
5(ae[RRUR5(ae[RRUR5(aegr()rrFr��dirlink_targetr<�dirlinkr>�missing_linkrls rrm�Win32SymlinkTests.setUp�s����w�w�~�~�d�1�1�2�2�2�2��w�w�~�~�d�2�2�3�3�3�3��7�7�>�>�$�,�,�/�/�/�/��7�7�>�>�$�-�-�0�0�0�0��7�7�>�>�$�"3�"3�4�4�4�4�4rc���[RRUR5(a [R"UR5 [RRUR
5(a [R"UR
5 [RRUR5(a![R"UR5 ggr()	rrFr�r>rLrWr�rirXrls rr-�Win32SymlinkTests.tearDown�s���
�7�7�>�>�$�-�-�(�(��I�I�d�m�m�$�
�7�7�>�>�$�,�,�'�'��H�H�T�\�\�"�
�7�7�?�?�4�,�,�-�-��I�I�d�'�'�(�.rc��[R"URUR5 UR	[R
R
UR55 UR	[R
RUR55 UR	[R
RUR55 URURUR5 gr()
rr�rVrWrsrFr�r��islink�
check_statrls r�test_directory_link�%Win32SymlinkTests.test_directory_link�s���
�
�
�4�&�&����5���������t�|�|�4�5�������
�
�d�l�l�3�4���������t�|�|�4�5�������d�&9�&9�:rc��[R"URUR5 UR	[R
R
UR55 UR	[R
RUR55 UR	[R
RUR55 URURUR5 gr()
rr�r<r>rsrFr�r�r]r^rls r�test_file_link� Win32SymlinkTests.test_file_link�s���
�
�
�4�'�'����7���������t�}�}�5�6���������t�}�}�5�6���������t�}�}�5�6�����
�
�t�';�';�<rc��URn[RRU5(a[R"U5 Sn[RRU5(aeSn[R"X!U5 g)z2Create a "directory" link to a non-existent targetz"c:\\target does not exist.29r3c740TN)rXrrFrirLr�r�)r5�linknamer��
target_is_dirs    r�_create_missing_dir_link�*Win32SymlinkTests._create_missing_dir_link�s]���$�$��
�7�7�?�?�8�$�$��I�I�h��6���7�7�>�>�&�)�)�)�)��
�
�
�
�6�]�3rc�d�UR5 [R"UR5 gr()rgrrLrXrls r�,test_remove_directory_link_to_missing_target�>Win32SymlinkTests.test_remove_directory_link_to_missing_target�s"���%�%�'�	�	�	�$�#�#�$rc��UR5 UR[RR	UR
55 gr()rgr4rrFr�rXrls r�.test_isdir_on_directory_link_to_missing_target�@Win32SymlinkTests.test_isdir_on_directory_link_to_missing_target�s/���%�%�'���������t�'8�'8�9�:rc�d�UR5 [R"UR5 gr()rgrr�rXrls r�.test_rmdir_on_directory_link_to_missing_target�@Win32SymlinkTests.test_rmdir_on_directory_link_to_missing_target�s ���%�%�'�
����"�"�#rc��UR[R"U5[R"U55 UR[R"U5[R"U55 [R
"U5nUR[R"U5[R"U55 UR[R"U5[R"U55 gr()rErr�r�r�r�)r5r"r��
bytes_links    rr^�Win32SymlinkTests.check_stat�s����������������8����B�H�H�T�N�B�G�G�D�M�:��[�[��&�
��������,�b�g�g�f�o�>����B�H�H�Z�0�"�'�'�*�2E�Frc�.�[RR[R5n[RRUS5n[RRUS5nUR
[RU5 [R"U5 [R"U5 [R"U5 [RR[RRUS55n[U5 [R"5n[R"U5 [RRUS5n[R"[RRU5S5 URS[R"[R"555 UR![R""U5[R""S55 [R"U5 UR![R""U5[R""[RRU555 [R"U5 UR![R""U5[R""[RRU555 [R"U5 g![R"U5 f=f)N�level2�level3rTr")rrFr*rrjrHr�r�rIr%r1rJr��relpathr�r4rEr�)r5�level1rvrwrT�orig_dirr"s       r�
test_12084�Win32SymlinkTests.test_12084�s���������!1�!1�2�������f�h�/�������f�h�/�����	�(�(�&�1�
�����
�����
���������������V�W� =�>���E���9�9�;��	��H�H�V���7�7�<�<���/�D��J�J�r�w�w���u�-�v�6��M�M�&�"�*�*�R�Y�Y�[�"9�:�
���R�W�W�U�^�R�W�W�V�_�=�
�H�H�V�����R�W�W�U�^��W�W�R�W�W�_�_�T�%:�;�
=�
�H�H�V�����R�W�W�U�^��W�W�R�W�W�_�_�T�%:�;�
=�
�H�H�X���B�H�H�X��s
�.F7K<�<L�C:\Users\All Users�C:\ProgramDatazTest directories not foundc��[R"S5nUR[RR	US55 g)Nr}r~)rr.rsrF�samefile)r5r�s  r�
test_29248�Win32SymlinkTests.test_29248�s1�����2�3��������(�(��1B�C�Drc��Sn[RR"U/S-6nSU-U4X4USSUSS4/nUH�upE[R"XE5 [R"U5 [R"[R"U5[R"U55 [R"U5 M� g![
a Nhf=f![a Nxf=f![
a M�f=f![a M�f=f)N�XXXXXXXXXXXXXXXXXXXXXXXXXXXr|r(�)rrFrHr�rLrLrKr�)r5�segmentrF�
test_casesr��dests      r�test_buffer_overflow�&Win32SymlinkTests.test_buffer_overflow
s�����w�w�|�|�g�Y��^�,���D�[�'�"�
�O�
�$�3�Z��d�s��$�

�
�$�I�C�
��
�
�3�%���I�I�d�O�
��
�
�2�;�;�s�+�R�[�[��->�?���I�I�d�O�#$�������%�
��
�������%�
��
�sG�C�C�-?C9�-C(�
C�C�
C%�$C%�(
C6�5C6�9
D�Dc�v�[RRS5n[RRU5(dUR	S5 [
R"[R"U5S5Vs/sH"n[RRX5PM$ nnUH�n[R(a[5 [SU5 [R"U5nURU[R"U55 UR[R "UR"55 URUR$[R&5 UR)[RR+U55  g UR	S5 gs snf)Nz$%LOCALAPPDATA%\Microsoft\WindowsAppsz%test requires a WindowsApps directoryz*.exezTesting withz$test requires an app execution alias)rrF�
expandvarsr�r��fnmatch�filterr4rHrrOrPr�rEr�r4�S_ISLNKr^�st_reparse_tag�IO_REPARSE_TAG_APPEXECLINKrsr�)r5r0r>�aliases�aliasr�s      r�test_appexeclink�"Win32SymlinkTests.test_appexeclink-s+���w�w�!�!�"I�J���w�w�}�}�T�"�"��M�M�A�B�$�N�N�2�:�:�d�+;�W�E�G�E�q��7�7�<�<��(�E�	�G��E�������n�e�,����%��B����R������0����T�\�\�"�*�*�5�6����R�.�.��0O�0O�P��O�O�B�G�G�N�N�5�1�2���
�M�M�@�A��Gs�)F6r+N) r`rarbrcr>rrFr*r�r<rWrSrVrXrmr-r_rbrgrjrmrpr^r{rrrir�r�r�r�rdr+rrrRrR�s����H��g�g�o�o�h�/�O��G��W�W�_�_�_�5�N�!�L�5�)�;�=�4�%�;�$�G�!�F��������)>�?�B� "�����/@� A�8�:�
E�:�
E�!�FBrrRc��\rSrSrSr\RR\RR\	55r
SrSrSr
SrSrg)	�Win32JunctionTestsiC�junctiontestc���[RRUR5(de[RR	UR
5(aegr()rrFr��junction_targetri�junctionrls rrm�Win32JunctionTests.setUpHsA���w�w�~�~�d�2�2�3�3�3�3��7�7�?�?�4�=�=�1�1�1�1�1rc��[RRUR5(a![R"UR5 ggr()rrFrir�rkrls rr-�Win32JunctionTests.tearDownLs.��
�7�7�?�?�4�=�=�)�)��I�I�d�m�m�$�*rc�@�[R"URUR5 UR	[
RRUR55 UR	[
RRUR55 UR	[
RRUR55 UR[
R"UR5[
R"UR55 UR[
R"UR5[
R"UR55 UR[
RRUR55 UR[
RR!SUR-5[
RR![
R""UR555 g)Nr	)�_winapi�CreateJunctionr�r�rsrrFrir�r�r�r�r�rEr4r]r5r.rls r�test_create_junction�'Win32JunctionTests.test_create_junctionPs4�����t�3�3�T�]�]�C����������
�
�6�7���������t�}�}�5�6�������
�
�d�m�m�4�5����B�G�G�D�M�M�2�B�H�H�T�]�]�4K�L����������/�����9M�9M�1N�O�	
���������
�
�6�7�������)�)�)�d�6J�6J�*J�K����)�)�"�+�+�d�m�m�*D�E�	Grc���[R"URUR5 UR	[
RRUR55 UR	[
RRUR55 [
R"UR5 UR[
RRUR55 gr()r�r�r�r�rsrrFr�rirkr4rls r�test_unlink_removes_junction�/Win32JunctionTests.test_unlink_removes_junction]s������t�3�3�T�]�]�C���������t�}�}�5�6����������
�
�6�7�
�	�	�$�-�-� ����������
�
�6�7rr+N)r`rarbrcr�rrFrSr*r�r�rmr-r�r�rdr+rrr�r�Cs;���H��g�g�o�o�b�g�g�o�o�h�&?�@�O�2�%�G�8rr�c�v�\rSrSrSr\R"5S5r\R"5S5rSr	g)�Win32NtTestsiec���[R"S5n[R"S5nSSKnURSSS9nURR
URlURRURlURR
URR4URlUR
5nURR5nURXBRU55nURSU5 URnSS	S
[ /n[#S5H5n	UH,n
UR%U
5 [(R*"U
5 M. M7 URXBRU55nURSU5 URU-
nURSU5 g![&a Nf=f![&a M�f=f)Nr�r+rzKernel32.dllT)�use_last_errorr{z\\?\C:z\\?\NULz	\\?\CONINr|)r�
import_module�ctypes.wintypes�WinDLLr�r��GetCurrentProcessr�r��GetProcessHandleCount�LPDWORDr�r��byrefrEr�r�r��_getfinalpathname�	Exceptionrr�)r5r�r+�kernel�hproc�handle_countr2�before_count�	filenamesr�r�handle_deltas            r�test_getfinalpathname_handles�*Win32NtTests.test_getfinalpathname_handlesgs���
�
(�
(��
.���,�,�X�6������~�d��C��+1�?�?�+A�+A�� � �(�/5���/C�/C��$�$�,�17���1G�1G�17���1H�1H�1J��$�$�-��(�(�*�����,�,�.��
�
)�
)�%���l�1K�
L������B��#�)�)��
����	
�	��r��A�!����(�(��.���G�G�D�M�"���
)�
)�%���l�1K�
L������B��#�)�)�L�8������L�)��!�����
!����s$�G�G �
G�G� 
G.�-G.c	��[RnUR[RU5 [R"5S-n[
R"S5n[R"[RSX1[U5/5n[R"5U:a2[R"U5 [R"5U:aM2UR!S5 SSS5 g![anURS:XdeSnANWSnAff=f![R"a UR%5 NXf=f!,(df   g=f)Nr�a�            import os
            import sys
            import time

            filename = sys.argv[1]
            deadline = float(sys.argv[2])

            while time.time() < deadline:
                try:
                    with open(filename, "w") as f:
                        pass
                except OSError:
                    pass
                try:
                    os.remove(filename)
                except OSError:
                    pass
            r�r}r{)rrjr�rkr�textwrap�dedentr�r�r?r�r3rr�rKr�r�r��	terminate)r5r"�deadline�commandr�r�s      r�test_stat_unlink_race�"Win32NtTests.test_stat_unlink_race�s����$�$�����	�(�(�(�3��9�9�;��?���/�/�#���(�
�
�s�~�~�t�W��H�
�V�
W�[_��)�)�+��(�+��G�G�H�%��)�)�+��(�

!��	�	�!��X�
W��)�+��:�:��?�*�?��+���,�,�
!���� �
!��X�
W�sT�E
�+C7�E
�D �7
D�D�E
�D�E
� $E�E
�E�E
�

Ec��^^�[Rm[RR	S5m[TS5nUR
S5 SSS5 [R"T5n[R"TTS/[RS9 UU4S
jnUR+U5 [R(a[ST5 [SU5 [R"T5n[R(a[S
U5 UR-UR.SUR.45 UR-UR0SUR045 UR3UR4UR45 UR3UR6UR65 UR3UR8UR85 UR3UR:UR:5 UR=UR>UR>5 g!,(df   GN�=f![Ra�n[R(aA[TTSS5 [URR!SS5R#55 [R$"T5 O![&a Of=fUR)S	5 SnAGNFSnAff=f)Nz %SystemRoot%\System32\icacls.exer�s	Test dataz/inheritance:r�r�zfailed.r�r�z"Unable to create inaccessible filec�>�[R"TTSS/[RS9 [R"T5 g)Nz/grantz*WD:(D)r�)r�r��STDOUTrrk)�ICACLSr"s��r�cleanup�9Win32NtTests.test_stat_inaccessible_file.<locals>.cleanup�s1����#�#�V�X�x��$K�+5�+<�+<�
>��I�I�h�rzFile:zstat with access:z without access:r) rrjrrFr�r r!r�r�r�r��CalledProcessErrorrrOrPr�r�r�rkrLr�r�r��st_dev�st_inorEr^rRr�r��assertGreaterEqualr�)r5rw�stat1r+r��stat2r�r"s      @@r�test_stat_inaccessible_file�(Win32NtTests.test_stat_inaccessible_file�s����#�#�����#�#�$G�H��
�(�D�
!�Q�
�G�G�L�!�"�����!��	@��#�#�V�X�7G�$H�+5�+<�+<�
>�	 �	
���� ��?�?��'�8�$��%�u�-�����!���?�?��$�e�,�	
�
�
�e�l�l�Q����$5�6��
�
�e�l�l�Q����$5�6�	
�������
�
�6��������
�
�6�	
���������8����������8�	
���������?�g"�
!���,�,�	@�����f�h�(8�)�D��b�i�i�&�&�u�i�8�?�?�A�B�
��	�	�(�#���
��
���M�M�>�?�?��	@�sH�H �/&H2� 
H/�2K �AK�J4�3K�4
K�>K�K�K�K r+N)
r`rarbrcr�rrr�r�rdr+rrr�r�esE��/*�b
� � �"�'!�#�'!�R
� � �"�7@�#�7@rr�c�&�\rSrSrSrSrSrSrg)�NonLocalSymlinkTestsi�c�0�[R"S5 g)z-
Create this structure:

base
 \___ some_dir
z
base/some_dirN)rr0rls rrm�NonLocalSymlinkTests.setUp
s��	���O�$rc�0�[R"S5 g)Nr|)rtr�rls rr-�NonLocalSymlinkTests.tearDown	
s���
�
�f�rc��[RRSS5n[R"SU5 [RR	U5(deg)ay
The symlink target should resolve relative to the link, not relative
to the current directory.

Then, link base/some_link -> base/some_dir and ensure that some_link
is resolved as a directory.

In issue13772, it was discovered that directory detection failed if
the symlink target was not specified relative to the current
directory, which was a defect in the implementation.
r|�	some_link�some_dirN)rrFrHr�r�)r5r�s  r�test_directory_link_nonlocal�1NonLocalSymlinkTests.test_directory_link_nonlocal
s?���g�g�l�l�6�;�/��
�
�
�:�s�#��w�w�}�}�S�!�!�!�!rr+N)r`rarbrcrmr-r�rdr+rrr�r��s��%��"rr�c� �\rSrSrSrSrSrg)�FSEncodingTestsi
c��UR[R"S5S5 UR[R"S5S5 g)Nsabc�uabcŁ)rErr�r]rls r�test_nop�FSEncodingTests.test_nop
s4��������Z�0�*�=�������[�1�;�?rc��SH@n[R"U5nUR[R"U5U5 MB g![a MRf=f)N)u	unicodeŁulatinér�)rr�rprEr])r5r�r�s   r�
test_identity�FSEncodingTests.test_identity"
sM��9�B�
��+�+�b�/��
���R�[�[��1�2�6�:��&�
��
�s�A�
A�Ar+N)r`rarbrcr�r�rdr+rrr�r�
s
��@�7rr�c�V�\rSrSrSr\R"\R"S5=(aN \	"5(+=(a; \
RRS5=(d \
"\S5=(a	 \
"\S5S5\R"\R"S5S	55rS
rg)�DeviceEncodingTestsi-
c�N�UR[R"S55 g)Ni@�)rr�device_encodingrls r�test_bad_fd�DeviceEncodingTests.test_bad_fd/
s�����"�,�,�V�4�5rr�win�nl_langinfo�CODESETz>test requires a tty and either Windows or nl_langinfo(CODESET)z*Cannot get encoding of stdin on Emscriptenc��[R"S5nURU5 UR[R
"U55 gr�)rr��assertIsNotNoners�codecs�lookup)r5r�s  r�test_device_encoding�(DeviceEncodingTests.test_device_encoding3
s7���%�%�a�(�����X�&�����
�
�h�/�0rr+N)r`rarbrcr�rrrrr	r?r@r�r�localer.rr/r�rdr+rrr�r�-
s���6�������1��M�l�n�*<�M�#�,�,�BY�BY�Z_�B`�CL�
�V�]�
+�
J���	�0J�L�N��_�_����K��1��N�1rr�c�B�\rSrSr\R
"\"\S5S5S5rSSjr	Sr
Sr\R
"\RS	:HS
5S5r\R
"\RS	:HS
5S5r\R
"\"\S
5S5S5rSrg)�PidTestsi?
�getppidztest needs os.getppidc�.�[R"[RSS/[R[RS9nUR5up#UR
US5 UR
[U5[R"55 g)Nr�zimport os; print(os.getppid()))r�r�r)
r�r�r?�_base_executabler��communicaterEr>r�getpid)r5r{r�r�s    r�test_getppid�PidTests.test_getppidA
sl�����c�2�2�D�>�@�$.�O�O�$.�O�O�
5���
�
��
�������$�����V��b�i�i�k�2rNc��[RS:XaS[RS3SSUS3/nO[RSU/n[R"[R
[RU5nUbU"U5 [R"US5upgUR[R"U5U5 URXe5 g)Nr��"r�r)	r?r@r�r�spawnv�P_NOWAIT�waitpidrE�waitstatus_to_exitcode)r5r��exitcode�callbackr�r��pid2�statuss        r�
check_waitpid�PidTests.check_waitpidL
s����<�<�7�"�����'�q�)�4�1�T�F�!��=�D��N�N�D�$�/�D��i�i����S�^�^�T�:�����S�M��z�z�#�q�)�������2�2�6�:�H�E�����#rc�$�URSSS9 g)Nr�r)r�r�r	rls r�test_waitpid�PidTests.test_waitpid^
s��������3rc��SnSUS3nURX!S9 UR[5 [R"S5 SSS5 g!,(df   g=f)N�zimport sys; sys.exit(�)�r�)r	r�r�rr)r5rr�s   r�test_waitstatus_to_exitcode�$PidTests.test_waitstatus_to_exitcodea
sN����&�x�j��2�����4��3�
�
�
�y�
)��%�%�c�*�*�
)�
)�s�A
�
Ar��win32-specific testc�2�SnSUS3nURX!S9 g)Nl:z$import _winapi; _winapi.ExitProcess(rrr)r5�STATUS_CONTROL_C_EXITr�s   r�test_waitpid_windows�PidTests.test_waitpid_windowsi
s+��!+��5�6K�5L�A�N�����4��@rc��SnSSSU4H,nUR[R"US-5U5 M. UR[5 [R"US-S-5 SSS5 UR[
5 [R"S5 SSS5 g!,(df   NC=f!,(df   g=f)Nr�rr{r�rKrB)rErrr�r�rr)r5�max_exitcoders   r�#test_waitstatus_to_exitcode_windows�,PidTests.test_waitstatus_to_exitcode_windowsq
s���"���A�q�,�/�H����R�6�6�x�1�}�E�%�
'�0�
�
�
�z�
*��%�%�|�a�'7�A�&=�>�+�
�
�
�}�
-��%�%�b�)�.�
-�+�
*��
-�
-�s�B(�B9�(
B6�9
C�SIGKILLzneed signal.SIGKILLc�~^�S[RS3n[RmU4SjnUR	UT*US9 g)Nzimport time; time.sleep(rc�4>�[R"UT5 gr()rr�)r��signums �r�kill_process�?PidTests.test_waitstatus_to_exitcode_kill.<locals>.kill_process�
s����G�G�C�� r)rr)r�LONG_TIMEOUTr�rr	)r5r�r#r"s   @r� test_waitstatus_to_exitcode_kill�)PidTests.test_waitstatus_to_exitcode_kill
s?���)�'�*>�*>�)?�q�A������	!�	
���4�6�'�L��Irr+r()r`rarbrcrrrrr�r	r
rr?r@rrr�r&rdr+rrr�r�?
s���
�����Y�/�1H�I�3�J�3�$�$4�+��������0�2G�H�A�I�A��������0�2G�H�
*�I�
*�������3�5J�K�J�L�Jrr�c��\rSrSr\S5rSSS.Sjr\"S5S5r\"S5S	5r	\"S
5S5r
\"S5S
5r\"S5S5r\"S5S5r
\"S5S5r\"S5S5r\"S5S5r\"S5S5r\"S5S5r\"S5S5r\"S5S5r\"S5S5rSr\"S5S5r\"S5S5rSrg )!�
SpawnTestsi�
c��[RS:waU$UVs/sHnSUR5;aSUS3OUPM! sn$s snf)Nr�r�r)rrrs)r�r�s  r�
quote_args�SpawnTests.quote_args�
sF���7�7�d�?��K�EI�J�T�c�c�S�Y�Y�[�0�!�C�5��
�c�9�T�J�J��Js�&AF��with_env�	use_bytesc��SUl[RnUR[RU5 U(dSUR-nO�[[R5Ul[[R"55UlURURUR'SUR<SUR<S3n[USSS9nURU5 SSS5 [R nUR#Xc/5nU(a�[R$"U5nUVs/sHn[R$"U5PM nnURR'5V	V
s0sH0up�[R$"U	5[R$"U
5_M2 sn
n	UlXg4$!,(df   N�=fs snfs sn
n	f)	N�zimport sys; sys.exit(%s)z#import sys, os; magic = os.environ[z]; sys.exit(rr�r�r�)rrrjr�rkrUrr�r�r3r��uuid4r]r r!r?r�r+r�r[)r5r.r/r"r�r$r�r�r>r�r�s           r�create_args�SpawnTests.create_args�
sM����
��#�#�����	�(�(�(�3��-��
�
�=�D��B�J�J�'�D�H��4�:�:�<�(�D�H�!%���D�H�H�T�X�X���x�x����0�D��(�C�'�
2�b��H�H�T�N�3��.�.������2�3����k�k�'�*�G�,0�1�D�q�B�K�K��N�D�D�1�$(�H�H�N�N�$4�6�$4�D�A����A�����A��6�$4�6�D�H��}��3�
2��2��6s�F<�: G
�97G�<
G
�spawnlc��UR5up[R"[RU/UQ76nUR	X0R
5 gr()r3rr5�P_WAITrEr�r5r�r�rs    r�test_spawnl�SpawnTests.test_spawnl�
s=���(�(�*�
���9�9�R�Y�Y��7�$�7������=�=�1r�spawnlec��URSS9up[R"[RU/UQURP76nURX0R5 g�NT)r.)r3rr;r7r�rErr8s    r�test_spawnle�SpawnTests.test_spawnle�
sK���(�(�$�(�7�
���:�:�b�i�i��B�4�B����B������=�=�1r�spawnlpc��UR5up[R"[RU/UQ76nUR	X0R
5 gr()r3rr@r7rErr8s    r�test_spawnlp�SpawnTests.test_spawnlp�
s=���(�(�*�
���:�:�b�i�i��8�4�8������=�=�1r�spawnlpec��URSS9up[R"[RU/UQURP76nURX0R5 gr=)r3rrDr7r�rErr8s    r�
test_spawnlpe�SpawnTests.test_spawnlpe�
sK���(�(�$�(�7�
���;�;�r�y�y�'�C�D�C�$�(�(�C������=�=�1rrc�<�UR5up[R"[RX5nUR	X0R
5 [R"[R[
U5U5nUR	X0R
5 gr()r3rrr7rErrr8s    r�test_spawnv�SpawnTests.test_spawnv�
sg���(�(�*�
���9�9�R�Y�Y��6������=�=�1��9�9�R�Y�Y���(9�4�@������=�=�1r�spawnvec��URSS9up[R"[RXUR5nURX0R5 gr=�r3rrKr7r�rErr8s    r�test_spawnve�SpawnTests.test_spawnve�
sC���(�(�$�(�7�
���:�:�b�i�i�����A������=�=�1r�spawnvpc��UR5up[R"[RX5nUR	X0R
5 gr()r3rrPr7rErr8s    r�test_spawnvp�SpawnTests.test_spawnvp�
s8���(�(�*�
���:�:�b�i�i��7������=�=�1r�spawnvpec��URSS9up[R"[RXUR5nURX0R5 gr=)r3rrTr7r�rErr8s    r�
test_spawnvpe�SpawnTests.test_spawnvpe�
sC���(�(�$�(�7�
���;�;�r�y�y�'����B������=�=�1rc��UR5up[R"[RX5n[R
"X0RS9 g)Nr)r3rrrr�wait_processr)r5r�r�r�s    r�test_nowait�SpawnTests.test_nowait�
s8���(�(�*�
���i�i����W�3�����S�=�=�9rc��URSSS9up[R"[RXUR5nURX0R5 g)NTr-rMr8s    r�test_spawnve_bytes�SpawnTests.test_spawnve_bytes�
sG���(�(�$�$�(�G�
���:�:�b�i�i�����A������=�=�1rc��UR5upUR[[R[R
U5 UR[[R[R
US5 g�Nr))r3r�r�rr5r�r5r��__s   r�test_spawnl_noargs�SpawnTests.test_spawnl_noargs�
sL���&�&�(������*�b�i�i����g�F����*�b�i�i����g�r�Jrc��UR5upUR[[R[R
U05 UR[[R[R
US05 gr`)r3r�r�rr;rras   r�test_spawnle_noargs�SpawnTests.test_spawnle_noargs�
sP���&�&�(������*�b�j�j�"�+�+�w��K����*�b�j�j�"�+�+�w��B�Orc���UR5upUR[[R[R
US5 UR[[R[R
U/5 UR[[R[R
US5 UR[[R[R
US/5 g�Nr+r�r))r3r�r�rrrras   r�test_spawnv_noargs�SpawnTests.test_spawnv_noargs�
s����&�&�(������*�b�i�i����g�r�J����*�b�i�i����g�r�J����*�b�i�i����g�u�M����*�b�i�i����g��t�Lrc���UR5upUR[[R[R
US05 UR[[R[R
U/05 UR[[R[R
US05 UR[[R[R
US/05 gri)r3r�r�rrKrras   r�test_spawnve_noargs�SpawnTests.test_spawnve_noargss����&�&�(������*�b�j�j�"�+�+�w��B�O����*�b�j�j�"�+�+�w��B�O����*�b�j�j�"�+�+�w��r�R����*�b�j�j�"�+�+�w���b�Qrc��[RnURUSS/5n[RR5nSUS'U"[RX#U5nURUS5 [RR5nSUS'U"[RX#U5nURUS5 [RR5nSUS	'U"[RX#U5nURUS5 [RnUR[RU5 [US
SS9nURS
5 SSS5 URX&/5n[RR5nSUS'U"[RX#U5nURUS5 g![a GN^f=f![a GN!f=f![a N�f=f!,(df   N�=f)Nr�r�r�r��r�r�r�r�r�r�r�zPimport sys, os
if os.getenv("FRUIT") != "orange=lemon":
    raise AssertionErrorzorange=lemonr)r?r�r+rr�r�r7rEr�rrjr�rkr r!)r5�spawnr�r�r�rr"r$s        r�_test_invalid_env�SpawnTests._test_invalid_envs����.�.�������v�6�7�������"��%.��!�"�	,��R�Y�Y��v�>�H�
���X�s�+������"��5��w��	,��R�Y�Y��v�>�H�
���X�s�+������"��!(��~��	,��R�Y�Y��v�>�H�
���X�s�+��#�#�����	�(�(�(�3�
�(�C�'�
2�b��H�H�0�
1�3�
����2�3�������"��(��w������G�6�:������1�%��K�	��	���	��	���	��	��3�
2�sB�	G�G�%G&�
G6�
G�G�
G#�"G#�&
G3�2G3�6
Hc�B�UR[R5 gr()rrrrKrls r�test_spawnve_invalid_env�#SpawnTests.test_spawnve_invalid_env?s�����r�z�z�*rc�B�UR[R5 gr()rrrrTrls r�test_spawnvpe_invalid_env�$SpawnTests.test_spawnvpe_invalid_envCs�����r�{�{�+r)r�rr]N)r`rarbrcrPr+r3rr9r>rBrFrIrNrRrVrZr]rcrfrjrmrrrurxrdr+rrr)r)�
s����K��K�',�u��<�h��2� �2�
�i� �2�!�2�
�i� �2�!�2�
�j�!�2�"�2�
�h��2� �2��i� �2�!�2�
�i� �2�!�2�
�j�!�2�"�2�
�h��:� �:�
�i� �2�!�2��h��K� �K�
�i� �P�!�P�
�h��M� �M��i� �R�!�R�.&�`�i� �+�!�+��j�!�,�"�,rr)z>Skip due to platform/environment differences on *NIX buildbots�getloginztest needs os.getloginc��\rSrSrSrSrg)�
LoginTestsiJc�d�[R"5nUR[U5S5 gr�)rrzr�rA)r5�	user_names  r�
test_getlogin�LoginTests.test_getloginMs!���K�K�M�	����C�	�N�A�.rr+N)r`rarbrcrrdr+rrr|r|Js��/rr|�getpriority�setpriorityz'needs os.getpriority and os.setpriorityc��\rSrSrSrSrSrg)�ProgramPriorityTestsiRz0Tests for os.getpriority() and os.setpriority().c�$�[R"[R[R"55nSUS3n[	SU5up4n[U5nUS:�aXQ::a[R"SU-5eURXQS-5 g)NzMif 1:
        import os
        os.setpriority(os.PRIO_PROCESS, os.getpid(), zJ + 1)
        print(os.getpriority(os.PRIO_PROCESS, os.getpid()))
        r��z?unable to reliably test setpriority at current nice level of %sr{)	rr��PRIO_PROCESSr�r
r>rr�rE)r5r|r�r�r��new_prios      r�test_set_get_priority�*ProgramPriorityTests.test_set_get_priorityWs����~�~�b�o�o�r�y�y�{�;��6�6:�V�<	���%�T�4�0�	����s�8���2�:�(�*��#�#�%B�DH�%I�J�
J�
���X�a�x�0rr+N)r`rarbrcrr�rdr+rrr�r�Rs��;�1rr��sendfileztest needs os.sendfile()c���\rSrSrSS-r\RRS5(+r\	R"\S5r\	R"\RS:S5r
\S5r\S	5r\S
5rSrSrS
r\S5r\S5rSrSrSrSrSr\S5r\S5r\\
S55r\\
S55r \\	R"\!"\"S5S5S55r#Sr$g)�TestSendfileijs�12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcdei)�linux�android�solaris�sunosz%requires headers and trailers supportrmz(test is only meaningful on 32-bit buildsc�L�[[RUR5 gr()r%rrj�DATArs rr�TestSendfile.setUpClassus���I�$�$�c�h�h�/rc�L�[R"[R5 gr()rrkrjrs rr'�TestSendfile.tearDownClassys������)�)�*rc�# �UR5(d3UR5IShv�N7v� UR5(dM2ggN 7fr()�at_eofr�)�readers r�chunks�TestSendfile.chunks}s/����-�-�/�/����
�%�%��-�-�/�/�%�s�)A�A�A�
Ac���# �SRURU5Vs/sShv�No3PMN
Os snfsn5UlUR5 URR5 g7f)Nr)rHr��
server_bufferrr�server)r5r��writerr@s    r�handle_new_client�TestSendfile.handle_new_client�sI��� �X�X����F�8K�&L�&L�1�q�&L��&L�M�������������s&�A/�3�1
�/�1
�3�1
�3�=A/c��z# �SUl[R"UR[R
5IShv�NUlURRSR5n[R"5Ul
URRS5 [R"5RURU5IShv�N URR5Ul[!["R$S5UlUR&R5UlgN�Nd7f)NrrFr�)r�r)�start_serverr�r�HOSTv4r��sockets�getsockname�socket�client�setblocking�get_running_loop�sock_connectr��socknor rrjrX)r5�server_names  r�
asyncSetUp�TestSendfile.asyncSetUp�s���� ���#�0�0��1G�1G�1>�1E�1E�G�G����k�k�)�)�!�,�8�8�:���m�m�o���������&��&�&�(�5�5�d�k�k�;�O�O�O��k�k�(�(�*�����)�)�4�0��	��i�i�&�&�(���G�
	P�s#�:D;�D7�BD;�D9�A#D;�9D;c��# �URR5 URR5 URR	5IShv�N gN7fr()rXrrr�r��wait_closedrls r�
asyncTearDown�TestSendfile.asyncTearDown�s9����	�	�����������k�k�%�%�'�'�'�s�AA�A�Ac��n# �[R"[R/UQ70UD6IShv�N$N7fr()r)�	to_threadrr�)r�rs  r�async_sendfile�TestSendfile.async_sendfile�s*����&�&�r�{�{�D�T�D�V�D�D�D�D�s�,5�3�5c��# �[R"U0UD6IShv�N$N![aYnUR[R:XaeUR[R
[R4;aSnAMeSnAff=f7f)zVA higher level wrapper representing how an application is
supposed to use sendfile().
N)r�r�rLrM�
ECONNRESET�EAGAIN�EBUSY)r�rr�s   r�sendfile_wrapper�TestSendfile.sendfile_wrapper�sn���
�

�)�8�8�$�I�&�I�I�I�I���
��9�9�� 0� 0�0���Y�Y�5�<�<����"=�=����
�s=�B�%�#�%�B�%�
B�A
B�<B�B�B�Bc��# �SnSnSnU[UR5:a}URURURX#5IShv�NnUS:XaOGX$-
nX-
nURXC:*5 UR
X!5 U[UR5:aM}UR
U[UR55 URR[R5 URR5 URR5IShv�N UR
[UR5[UR55 UR
URUR5 gGN<Nf7f)Nr�)rAr�r�r�r�rsrEr��shutdownr��	SHUT_RDWRrrr�r�r�)r5�
total_sent�offset�nbytes�sents     r�test_send_whole_file�!TestSendfile.test_send_whole_file�s.����
������3�t�y�y�>�)��.�.�t�{�{�D�K�K�/5�?�?�D��q�y���N�F���J��O�O�D�N�+����V�0��3�t�y�y�>�)�	
����S����^�4������V�-�-�.��������k�k�%�%�'�'�'�����T�/�/�0�#�d�i�i�.�A�����+�+�T�Y�Y�7�?�	(�s-�A
F
�F�
AF
�BF
�$F�%A$F
�F
c��# �Sn[UR5S-n[UR5U-
nSnX:aXURURURX$5IShv�NnUS:XaO"X%-
nX-
nURXT:*5 X:aMXURR[R5 URR5 URR5IShv�N UR[UR5S-SnURU[U55 UR[UR5[U55 URURU5 gGNN�7f)Nrr}r�)rAr�r�r�r�rsr�r�r�r�rrr�r�rEr�)r5r�r��	must_sendr�r�rUs       r�test_send_at_certain_offset�(TestSendfile.test_send_at_certain_offset�s=����
��T�Y�Y��1�$����	�	�N�V�+�	����$��.�.�t�{�{�D�K�K�/5�?�?�D��q�y���N�F���J��O�O�D�N�+��$�	
�����V�-�-�.��������k�k�%�%�'�'�'��9�9�S����^�q�0�1�2������S��]�3�����T�/�/�0�#�h�-�@�����+�+�X�6�?�	(�s,�A$F	�&F�'+F	�A F	�4F�5BF	�F	c��8# �[UR5S-nURURURUS5IShv�NnURUS5 URR[R5 URR5 URR5IShv�N URUR S5 gN�![a)nUR[R:waeSnAN�SnAff=fNY7f)Nr�rr)rAr�r�r�r�rErLrM�EINVALr�r�r�r�rrr�r�r�)r5r�r�r�s    r�test_offset_overflow�!TestSendfile.test_offset_overflow�s�����T�Y�Y��$�&��	&��,�,�T�[�[�$�+�+�-3�T�;�;�D�
���T�1�%������V�-�-�.��������k�k�%�%�'�'�'�����+�+�S�1�;���	��w�w�%�,�,�&��'��	��	(�sM�D�+C"�C �C"�A2D�>D�?!D� C"�"
D�,D�D�D�Dc��6# �UR[5nURURURSS5IShv�N SSS5 URWRR[R5 gNA!,(df   NE=f7f)NrBr�)	r�rLr�r�r�rEr�rMr��r5r$s  r�test_invalid_offset� TestSendfile.test_invalid_offset�sh���
�
�
�w�
'�2��%�%�d�k�k�4�;�;��D�I�I�I�(�������+�+�U�\�\�:�
J�(�
'�s.�B�,B�B�B�	=B�B�
B�Bc
��# �URURURSSS9IShv�N UR(a2URURURSSSSSS9IShv�N ggNHN7f)Nrr�)r�r�r�rWr+)r�r�r�rW�headers�trailersr�)r�r�r��SUPPORT_HEADERS_TRAILERSrls r�
test_keywords�TestSendfile.test_keywords�s�����!�!����D�K�K�)*�$�"�8�	8�	8��(�(��%�%�T�[�[����-.�d�.0�2�Q�&�H�
H�
H�)�	8�
H�s"�*A9�A5�AA9�.A7�/A9�7A9c���# �SnSURSS-nURURURSSSS/S9IShv�NnUR	US5 X-
nSnU[U5:ax[
[U5U-
S5nURURURXE5IShv�NnUS:XaO*UR	X55 X-
nXC-
nU[U5:aMxURU[U55 URR5 URR5IShv�N UR[UR5[U55 gGN*N�N87f)	NrsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyrBr�sxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy�r�i)r�r�r�r��assertLessEqualrA�minr�rEr�rrr�r��hashr�)r5r��
expected_datar�r�r�s      r�test_headers�TestSendfile.test_headers�sZ����
�/�$�)�)�C�R�.�@�
��(�(����d�k�k�1�d�2<�j�1I�)�K�K�����T�#3�4���
����3�}�-�-���]�+�j�8�$�?�F��.�.�t�{�{�D�K�K�/5�?�?�D��q�y��� � ��.���J��N�F��3�}�-�-�	
����S��%7�8��������k�k�%�%�'�'�'�����d�0�0�1�4�
�3F�G�%K�?�	(�s>�AE4�E-�A-E4�1E0�23E4�'AE4�9E2�:4E4�0E4�2E4c	��# �[RS-nSnUR[RU5 [	X5 [US5nUR
URUR5SSSS/S9IShv�N URR5 URR5IShv�N URURS	5 SSS5 gNeN+!,(df   g=f7f)
Nr�sabcdefr�rr�s123456s789�r�sabcde123456789)rrjr�rkr%r r�r�r�r�rrr�r�rEr�)r5r��	file_datarws    r�
test_trailers�TestSendfile.test_trailerss�����"�"�S�(���	����	�(�(�'�2��G�'�
�'�4�
 �A��%�%�d�k�k�1�8�8�:�q�!�09�6�/B�&�D�
D�
D��K�K�����+�+�)�)�+�+�+����T�/�/�1B�C�!�
 �
D�
,�	!�
 �sB�A
C;�1C*�C&�;C*�<C(�= C*�	C;�&C*�(C*�*
C8�4C;c	��x# �SURRlUR[5nURURURSSSS-/S-S9IShv�N SSS5 URWRR[R5 gNA!,(df   NE=f7f)NFr�x�r�r��r��handler_instance�
accumulater�rLr�r�r�rEr�rMr�r�s  r�test_headers_overflow_32bits�)TestSendfile.test_headers_overflow_32bits$s����38����$�$�/�
�
�
�w�
'�2��%�%�d�k�k�4�;�;��1�/3�e�|�n�u�.D�&�F�
F�
F�(�	
������+�+�U�\�\�:�
F�(�
'��.�1B:�2B)�%B'�&B)�*=B:�'B)�)
B7�3B:c	��x# �SURRlUR[5nURURURSSSS-/S-S9IShv�N SSS5 URWRR[R5 gNA!,(df   NE=f7f)NFrr�r�r�r�r�r�s  r�test_trailers_overflow_32bits�*TestSendfile.test_trailers_overflow_32bits-s����38����$�$�/�
�
�
�w�
'�2��%�%�d�k�k�4�;�;��1�04�u��~��/E�&�G�
G�
G�(�	
������+�+�U�\�\�:�
G�(�
'�r��SF_NODISKIOztest needs os.SF_NODISKIOc��# �URURURSS[RS9IShv�N gN![
a9nUR[R[R4;aeSnAgSnAff=f7f)Nrr��r�)	r�r�r�rr�rLrMr�r�)r5r�s  r�
test_flags�TestSendfile.test_flags6sn���	��%�%�d�k�k�4�;�;��4�,.�N�N�&�<�
<�
<���	��y�y����e�l�l� ;�;��<��	�s>�B
�8A�A�A�B
�A�
B�/B�=B
�B�B
)r�rXr�r�r�r�N)%r`rarbrcr�r?r@r�r�rr�requires_headers_trailers�maxsize�requires_32br)rr'rPr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr�rdr+rrr�r�js�����$�D��L�L�#�#�$L�M�M�� (� 3� 3�4L�3�!5���&�&�s�{�{�U�':�6�8�L��0��0��+��+��&��&��

)�(��E��E�����"8�,7�.2�";�
H��H��H�.�D��D���;���;���;���;��
�����]�3�4�6��6��rr�c��[[S5(dg[[RSS5n[R
"UR
5SS5 SSS5 [R"[R5 g![a/ SSS5 [R"[R5 gf=f!,(df   No=f![R"[R5 f=f)N�setxattrFrr�	user.testrT)	rrr rrjr�r�rLrk)r$s r�supports_extended_attributesr�Bs����2�z�"�"��+�
�)�"�"�D�!�
,��
����B�I�I�K��s�;�-�	����)�)�*����
��	-�	����)�)�*�
��-�
,��	����)�)�*�sE�C�C�&B	�C�	
C�C�C�C�C�
C�C�&C<z(no non-broken extended attribute supportr}r��'c�2�\rSrSrSrSrSrSrSrSr	g)	�ExtendedAttributeTestsiRc�t�[RnUR[RU5 [	U5 UR[5nU"Xq"S540UD6 SSS5 URWRR[R5 U"U5n	URU	[5 U"Xq"S5S40UD6 [U	5n
U
RS5 UR[U"U55U
5 URU"US40UD6S5 U"Xq"S5S[R 40UD6 URU"US40UD6S5 UR[5nU"Xq"S5S[R"40UD6 SSS5 URURR[R$5 UR[5nU"Xq"S5S[R 40UD6 SSS5 URURR[R5 U"Xq"S5S[R"40UD6 U
RS5 UR[U"U55U
5 U"Xq"S540UD6 UR[5nU"Xq"S540UD6 SSS5 URURR[R5 U
R'S5 UR[U"U55U
5 URU"Xq"S540UD6S5 U"Xq"S5S40UD6 URU"Xq"S540UD6S5 U"Xq"S540UD6 [)S	[+S
555nUH
nU"X|S40UD6 M UR[U"U55[U	5[U5-5 g!,(df   GN�=f!,(df   GN{=f!,(df   GN=f!,(df   GNm=f)N�	user.testrr�rCsbyez
user.test2�foosaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac3�D# �UHnSRU5v� M g7f)zuser.test{}N)r�)r�r�s  rr��;ExtendedAttributeTests._check_xattrs_str.<locals>.<genexpr>�s���A�y�!�m�*�*�1�-�-�y�s� � r�)rrjr�rkr%r�rLrEr�rM�ENODATAr2rCr�r�r�
XATTR_REPLACE�XATTR_CREATE�EEXISTrLr�r�)
r5r��getxattrr��removexattr�	listxattrrr�r$�
init_xattr�xattr�many�things
             r�_check_xattrs_str�(ExtendedAttributeTests._check_xattrs_strXs[��
�
�
�����	�(�(�"�-��B��
�
�
�w�
'�2��R��;��2�6�2�(�������+�+�U�]�]�;��r�]�
����j�$�/���Q�{�^�S�3�F�3��J���
�	�	�+������Y�r�]�+�U�3�����"�l�=�f�=�s�C���Q�{�^�X�r�/?�/?�J�6�J�����"�l�=�f�=�x�H�
�
�
�w�
'�2��R��;������K�F�K�(�������+�+�U�\�\�:�
�
�
�w�
'�2��R��<��&�"�2B�2B�M�f�M�(�������+�+�U�]�]�;���Q�|�_�f�b�o�o�H��H�
�	�	�,������Y�r�]�+�U�3��B��+��1�&�1�
�
�
�w�
'�2��R��;��2�6�2�(�������+�+�U�]�]�;�
���[�!�����Y�r�]�+�U�3�����"�a��o�@��@�&�I���Q�{�^�X�8��8�����"�a��n�?��?��J��B��+��1�&�1��A�u�R�y�A�A���E��R��/��/������Y�r�]�+�S��_�s�4�y�-H�I�S(�
'��(�
'��(�
'��(�
'�s0�O2�0 P�! P�2P(�2
P�
P�
P%�(
P7c��UR"[/UQ70UD6 [R"[R5 UR"[
R/UQ70UD6 [R"[R5 gr()rr3rrkrjrr�r�s   r�
_check_xattrs�$ExtendedAttributeTests._check_xattrs�s^�����s�4�T�4�V�4�����)�)�*����r�{�{�<�T�<�V�<�����)�)�*rc��UR[R[R[R[R
5 gr(�rrrr�r
rrls r�test_simple�"ExtendedAttributeTests.test_simple�s)�����2�;�;����R�^�^��<�<�	)rc��UR[R[R[R[R
SS9 g)NFr;rrls r�
test_lpath�!ExtendedAttributeTests.test_lpath�s1�����2�;�;����R�^�^��<�<��	�	@rc�@�SnSnSnSnURXX45 g)Nc��[US5n[R"UR5/UQ76sSSS5 $!,(df   g=fr�)r rrr��rFr�r$s   rr�1ExtendedAttributeTests.test_fds.<locals>.getxattr�s1���d�D�!�R��{�{�2�9�9�;�6��6�"�!�!��	�%<�
A
c��[USS5n[R"UR5/UQ76 SSS5 g!,(df   g=f�Nr�r)r rr�r�r!s   rr��1ExtendedAttributeTests.test_fds.<locals>.setxattr�s3���d�D�!�$�����B�I�I�K�/�$�/�%�$�$��	�&=�
Ac��[USS5n[R"UR5/UQ76 SSS5 g!,(df   g=fr%)r rr
r�r!s   rr
�4ExtendedAttributeTests.test_fds.<locals>.removexattr�s3���d�D�!�$�����r�y�y�{�2�T�2�%�$�$�r'c��[US5n[R"UR5/UQ76sSSS5 $!,(df   g=fr�)r rrr�r!s   rr�2ExtendedAttributeTests.test_fds.<locals>.listxattr�s1���d�D�!�R��|�|�B�I�I�K�7�$�7�"�!�!�r#)r)r5rr�r
rs     r�test_fds�ExtendedAttributeTests.test_fds�s(��	7�	0�	3�	8�	
���8�{�Frr+N)
r`rarbrcrrrrr,rdr+rrrrRs��.J�`+�)�@�
Grr�get_terminal_sizezrequires os.get_terminal_sizec��\rSrSrSr\R"5S5r\R"\
RS:HS5S5rSr
g)	�
TermsizeTestsi�c���[R"5nURURS5 URURS5 g![a�n[R[R
/n[RS:XaUR[R5 [RS:XdURU;aURS5 eSnAff=f)z�Check if get_terminal_size() returns a meaningful value.

There's no easy portable way to actually check the size of the
terminal, so let's check if it returns something sensible instead.
r�r��failed to query terminal sizeNr)rr.rLrMr��ENOTTYr?r@rK�EACCESr�r��columnsr)r5r�r��known_errnoss    r�test_does_not_crash�!TermsizeTests.test_does_not_crash�s���	��'�'�)�D�	
������a�0�����
�
�A�.���
	�!�L�L�%�,�,�7�L��|�|�y�(��#�#�E�L�L�1��|�|�w�&�!�'�'�\�*A��
�
�=�>���
	�s�A�
C(�B	C#�#C(c�f�[R"SS/[RSS9R5n[WS5[US54n[R"[RR55nUR'X#5 g
![[R
[4a URS5 N�f=f![aYn[RS:Xd.UR [ R"[ R$4;aURS	5 eS
nAff=f)z�Check if stty returns the same results

stty actually tests stdin, so get_terminal_size is invoked on
stdin explicitly. If stty succeeded, then get_terminal_size()
should work too.
�sttyr�T)r�r�zstty invocation failedr{rr�r2N)r�r��DEVNULLrWrKr�r6r�r>rr.r?�	__stdin__r�rLr@rMr�r3rE)r5r�rUr�r�s     r�test_stty_match�TermsizeTests.test_stty_match�s���	4��'�'��V�$�Z�-?�-?�d���%�'�
���Q��L�#�d�1�g�,�/��	��)�)�#�-�-�*>�*>�*@�A�F�	
����*��"�:�#@�#@��!�	4��M�M�2�3�	4���	��|�|�w�&�!�'�'�e�l�l�E�L�L�5Q�*Q��
�
�=�>���	�s*�4B�2C
�0C
�	C
�
D0�AD+�+D0r�zWindows specific testc�P�[SS5nW [R"UR55nSSS5 UR
WRS5 UR
URS5 g![a URS5 N�f=f!,(df   Nh=f)zBCheck if get_terminal_size() returns a meaningful value in Windowszconout$r�zfailed to open conout$Nr)	r rLr�rr.r�r�r5r)r5�conoutr�s   r�test_windows_fd�TermsizeTests.test_windows_fd�s���	4��)�S�)�F���'�'��
�
��8�D��	
������a�0�����
�
�A�.��
�	4��M�M�2�3�	4��
�V�s�A6�%B�6B�B�
B%r+N)r`rarbrcr7rrr=rrr?r@rArdr+rrr0r0�sP��/�.
� � �"�+�#�+�8�������0�2I�J�
/�K�
/rr0�memfd_createzrequires os.memfd_createrr1c��\rSrSrSrSrg)�MemfdCreateTestsi�c�^�[R"S[R5nURUS5 UR	[R
U5 UR
[R"U55 [USSS9nURS5 URUR5S5 SSS5 [R"S5nUR	[R
U5 UR
[R"U55 g!,(df   Nj=f)N�HirBr�F)�closefdsmemfd_createrN)rrC�MFD_CLOEXECr�r�rrr4rDr r!rE�tell)r5r�rwrs    r�test_memfd_create�"MemfdCreateTests.test_memfd_create�s���
�_�_�T�2�>�>�
2�����B��#�������"�%�����+�+�B�/�0�
�"�d�E�
*�a�
�G�G�O�$����Q�V�V�X�r�*�+��o�o�d�#��������#�&�����+�+�C�0�1�
+�
*�s�2D�
D,r+N)r`rarbrcrKrdr+rrrErE�s��2rrE�eventfdzrequires os.eventfdryc�&�\rSrSrSrSrSrSrg)�EventfdTestsi�c�N�SnSnSn[R"U5nURUS5 UR[RU5 UR[R"U55 [R"XB5nURXQ"U55 [R"XA"S55 [R"XB5nURXQ"S55 [R"XA"S55 [R"XA"S55 [R"XB5nURXQ"S55 [R"US5 [R"US	5 [R"U5nURUS5 g)
Nc�0�[R"SU5$)z$Pack as native uint64_t
            z@Q)�struct�pack)r�s rrS�/EventfdTests.test_eventfd_initval.<locals>.packs���;�;�t�U�+�+rrKrMrBr�(r}rr)rrMr�r�rrr4rDr�rEr!�
eventfd_write�eventfd_read)r5rSr��initvalr��ress      r�test_eventfd_initval�!EventfdTests.test_eventfd_initval�s:��	,�����
�Z�Z��
 �����B��#�������"�%�����+�+�B�/�0��g�g�b�������d�7�m�,�
����T�"�X���g�g�b�������d�2�h�'�
����T�"�X��
����T�!�W���g�g�b�������d�2�h�'�	����R� �
����Q���o�o�b�!������b�!rc��Sn[R[R-[R-n[R"X5nURUS5 UR
[RU5 [R"U5nURUS5 [R"U5nURUS5 UR[5 [R"U5 SSS5 UR[5 [R"US5 SSS5 [R"US5 [R"U5nURUS5 UR[5 [R"U5 SSS5 g!,(df   N�=f!,(df   N�=f!,(df   g=f)Nr}rBr{rK)r�EFD_CLOEXEC�
EFD_SEMAPHORE�EFD_NONBLOCKrMr�r�rrrWrEr�ror�rV)r5rXr�r�rYs     r�test_eventfd_semaphore�#EventfdTests.test_eventfd_semaphores<��������!1�!1�1�B�O�O�C��
�Z�Z��
'�����B��#�������"�%��o�o�b�!������a� ��o�o�b�!������a� �
�
�
��
/��O�O�B��0�
�
�
��
/��G�G�B��N�0�	����Q���o�o�b�!������a� �
�
�
��
/��O�O�B��0�
/�0�
/��
/�
/��0�
/�s$�"F*�F;�
G�*
F8�;
G	�
Gc��[R[R-n[R"SU5nUR	US5 UR[RU5 [R"U/U/U/S5up4nURX4U4/U//45 [R"US5 [R"U/U/U/S5up4nURX4U4U/U//45 UR[R"U5S5 [R"US5 [R"U/U/U/S5up4nURX4U4U///45 [R"U5 g)NrrBrl����)rr]r_rMr�r�rr�selectrErVrW)r5r�r��rfd�wfd�xfds      r�test_eventfd_select� EventfdTests.test_eventfd_select8sB��������0��
�Z�Z��5�
!�����B��#�������"�%��
�
�r�d�R�D�2�$��:�
��#����#�C��2��t�R�.�9�	����R� ��
�
�r�d�R�D�2�$��:�
��#����#�C��B�4�"��r�*:�;��������,�b�1�	����[�)��
�
�r�d�R�D�2�$��:�
��#����#�C��B�4��R�.�9�
����rr+N)r`rarbrcrZr`rgrdr+rrrOrO�s��"�> �4rrO�timerfd_createzrequires os.timerfd_creater�z#gh-124873: Test is flaky on Androidc���\rSrSrSrS\*-rSS\-
-rSrSrSr	Sr
\R"\
RRS	5S
5S5rSrS
rSrSrSrSrSrSrSrSrSrg)�TimerfdTestsiNr}r|rLc���[R"U0UD6nURUS5 UR[R"U55 UR[RU5 U$r�)rrir�r4rDr�rr)r5r�rr�s    rri�TimerfdTests.timerfd_createWsW��
�
�
��
/��
/������A�&�����+�+�B�/�0�������"�%��	rc�t�[R"US5n[RU[R
S9$)NrK)�	byteorder)rr�r>�
from_bytesr?ro)r5r�r�s   r�read_count_signaled� TimerfdTests.read_count_signaled^s(���w�w�r�1�~���~�~�d�c�m�m�~�<�<rc��UR[R5nSnSn[R"XUS9upEURUSURS9 URUSURS9 [R"XUS9upEURXSURS9 URXBURS9 [R"U5upEURXSURS9 URXBURS9 g)N��?��?��initial�intervalr��places)rir�CLOCK_REALTIMEr�timerfd_settimerX�CLOCK_RES_PLACES�timerfd_gettime)r5r��initial_expirationrx�next_expiration�	interval2s      r�test_timerfd_initval�!TimerfdTests.test_timerfd_initvalcs��
�
 �
 ��!4�!4�
5��!����&(�%7�%7��ai�%j�"�����y�#�d�6K�6K��L������D�<Q�<Q��R�&(�%7�%7��ai�%j�"�����y�4�;P�;P��Q�����4�K`�K`��a�&(�%7�%7��%;�"�����y�4�;P�;P��Q�����4�K`�K`��arc���UR[R[RS9nSn[R
"XSS9 UR
[5nURU5 SSS5 URWRR[R5 [R"US-5 URURU5S5 g!,(df   N}=f)Nr�r�rrvr{)rirr{r�TFD_NONBLOCKr|r�rLrqrEr�rMr�r�)r5r�rr�s    r�test_timerfd_non_blocking�&TimerfdTests.test_timerfd_non_blockingxs���
�
 �
 ��!4�!4�B�O�O�
 �
L��!��
���2�A�F��
�
�w�
'�3��$�$�R�(�(�������,�,�e�l�l�;�	
�
�
�%��+�,�	
����1�1�"�5�q�9�(�
'�s�C"�"
C0�netbsdzIgh-131263: Skip on NetBSD due to system freeze with negative timer valuesc��SnUR[R5nS[R/n[[S5(a0UR
[R[R-5 SGHupEUGHnURXdUS9 UR[5n[R"X&XES9 SSS5 URWRR[R5 UR[5n[!X-5n[!X-5n	[R""X&X�S9 SSS5 URURR[R5 SSS5 GM GM g!,(df   N�=f!,(df   Nf=f!,(df   GMB=f)N�ʚ;r�TFD_TIMER_CANCEL_ON_SET))rBr)r{rB)rBrB)皙������r)r{r�)r�r��r�rwrx)rirr{r�TFD_TIMER_ABSTIMErrKr�rvr�rLr|rEr�rMr�r>�timerfd_settime_ns)
r5�one_sec_in_nsecr�r�rwrxr��context�
initial_ns�interval_nss
          r�test_timerfd_negative�"TimerfdTests.test_timerfd_negative�sR�� ��
�
 �
 ��!4�!4�
5����-�-�.�
��2�0�1�1����b�2�2�R�5O�5O�O�P�"d��G�#���\�\���\�R��*�*�7�3�w��*�*�2�G�_�4��$�$�W�%6�%6�%<�%<�e�l�l�K��*�*�7�3�w�%(�/�*C�%E�
�&)�?�+E�&G���-�-�b�z�h�4��$�$�W�%6�%6�%<�%<�e�l�l�K�S�R�$�"d�4�3��4�3��S�R�s=�F5�-F	�AF5�0F$	�<F5�
F!
�F5�$
F2
�.F5�5
Gc��UR[R5nSnSn[R"XUS9 [R
"U5upEUR
XSURS9 UR
XBURS9 Sn[R"5n[U5H$nURURU5S5 M& [R"5U-
nX#US-
--n	URXyUR-
5 [R"US-U-5 URURU5U5 g)Nr{��?rvryr)rirr{rr|r~rXr}�perf_counterr�rErqr��	CLOCK_RESr�)
r5r�rrxr�r�rW�tr��
total_times
          r�test_timerfd_interval�"TimerfdTests.test_timerfd_interval�s%��
�
 �
 ��!4�!4�
5������
���2�H�M�&(�%7�%7��%;�"�����y�4�;P�;P��Q�����4�K`�K`��a���������u��A����T�5�5�b�9�1�=������!�#��'�e�a�i�*@�@�
����1�4�>�>�9�:�	
�
�
�U�3�Y�(�*�+�����1�1�"�5�u�=rc�V�UR[R5n[R"[R5nSnX#-nSn[R
"U[RXES9 [R"U5upgURXuURS9 URXcURS9 [R"5nURU5n	[R"5U-
nURU	S5 URX�UR-
5 g)Nr{rr�ry)rirr{�
clock_gettimerr|r�r~rXr}r�rqrEr�r�)
r5r�r#r�rrxr�r�r��count_signaleds
          r�test_timerfd_TFD_TIMER_ABSTIME�+TimerfdTests.test_timerfd_TFD_TIMER_ABSTIME�s���
�
 �
 ��!4�!4�
5��� � ��!4�!4�5���� �\����
���2�R�%9�%9�CU�i�&(�%7�%7��%;�"�����y�4�;P�;P��Q�����t�?T�?T��U�������1�1�"�5������!�#�������+����1�t�~�~�5�6rc��UR[R[RS9n[
R
"U/U/U/S5up#nUR
X#U4///45 SnSn[R"XUS9 Sn[R"5n[U5H]n	[
R
"U/U/U/XV-5up#nUR
X#U4U///45 UR
URU5S5 M_ [R"5U-
nXVUS-
--n
URX�UR-
5 g)Nr�rrtrurvrr{)
rirr{rr�rcrEr|r�r�rqr�r�)r5r�rdrerfrrxrWr�r�r�s           r�test_timerfd_select� TimerfdTests.test_timerfd_select�s-��
�
 �
 ��!4�!4�B�O�O�
 �
L���
�
�r�d�R�D�2�$��:�
��#����#�C��2�r�2�,�7�"����
���2�H�M���������u��A�"�M�M�2�$���r�d�<N�<Y�Z�M�C�c����c��_��t�R��n�=����T�5�5�b�9�1�=��
����!�#��'�e�a�i�*@�@�
����1�4�>�>�9�:rc�L�UR[R[RS9n[
R"5nURU[
R5 URUR5 SnUS-nUS-nU(a[R"UUUS9 O[R"UXT-Xd-S9 SnU(a[R"5nO[R"5n[U5H�n	Un
U	S:XaXV-U
-nOXj-nUR!X�-5nUR#[%U5SU5 USSn
UR#U
[
R5 UR#UR'U5S5 M� XVUS-
--nU(a7[R"5U-
nUR)X�UR*-
5 O9[R"5U-
nUR)X�U-UR,-
5 UR/U5 g)	Nr�r�r�rKrvrrr{)rirr{rr��	selectors�DefaultSelector�register�
EVENT_READr�rrr�r|�perf_counter_nsr�r�rcrErArqr��CLOCK_RES_NSr��
unregister)r5�nanosecondsr��selector�sec_to_nsec�initial_expiration_nsr�rWr�r��timeout_margin_ns�
timeout_ns�readyr�r��dts                r�check_timerfd_poll�TimerfdTests.check_timerfd_poll�s���
�
 �
 ��!4�!4�B�O�O�
 �
L���,�,�.�����"�i�2�2�3�������'��� +�q� 0��!�Q�&����!�!�"�*?�+6�
8�
���r�'<�'J�(3�(A�
C�����$�$�&�A��!�!�#�A��u��A� +���A�v�2�@�CT�T�
�(�<�
��O�O�J�$<�=�E����S��Z��E�2��!�H�Q�K�E����U�I�$8�$8�9����T�5�5�b�9�1�=��+�E�A�I�-F�F�
���%�%�'�!�+�B����r��0A�0A�#A�B��"�"�$�q�(�B����r��#;�d�n�n�#L�M����B�rc�&�URS5 gr�r�rls r�test_timerfd_poll�TimerfdTests.test_timerfd_poll#s������&rc�&�URS5 grCr�rls r�test_timerfd_ns_poll�!TimerfdTests.test_timerfd_ns_poll&s������%rc���SnUS-nUR[R5nSnUS-n[R"X4US9upgURUS5 URUS5 [R"X4US9upgURXu5 URXd5 [R"U5upgURXu5 URXd5 URXdUS9 g)Nr�r;rrvrE)	rirr{rr�rE�timerfd_gettime_nsr�rX)r5r��limit_errorr�r�r��next_expiration_ns�interval_ns2s        r�test_timerfd_ns_initval�$TimerfdTests.test_timerfd_ns_initval)s�����%��.��
�
 �
 ��!4�!4�
5��!"��%��-��,.�,A�,A�"�ny�,z�(������q�)����+�Q�/�,.�+@�+@��mx�+y�(������3����+�C�,.�+@�+@��+D�(������3����/�G����1�P[��\rc��SnUS-nUR[R5nUnUS-n[R"X4US9 [R
"U5upgUR
Xu5 URXd5 Sn[R"5n	[U5H$n
UR
URU5S5 M& [R"5U	-
n	XEUS-
--nURX�UR-
5 [R"US-U-U-5 UR
URU5U5 g)Nr�r;r}rvrr{r�)rirr{rr�r�rEr�r�r�rqr�r�r�)r5r�r�r�r�r�r�r�rWr�r��
total_time_nss            r�test_timerfd_ns_interval�%TimerfdTests.test_timerfd_ns_intervalAs,����%��.��
�
 �
 ��!4�!4�
5��!0��%��*��
���b�+�V�,.�+@�+@��+D�(������3����/�G���� � �"���u��A����T�5�5�b�9�1�=��� � �"�Q�&��-�u�q�y�0I�I�
����1�d�.?�.?�?�@�	
�
�
�U�3�Y�+�-��?�@�����1�1�"�5�u�=rc�p�SnUS-nUR[R5n[R"[R5nUnXE-nSn[R
"U[RXgS9 [R"U5up�UR[X�-
5U5 UR[X�-
5U5 [R"5n
URU5n[R"5U
-
n
URUS5 URX�UR-
5 g)Nr�r;rr�r{)rirr{�clock_gettime_nsrr�r�r��
assertLess�absr�rqrEr�r�)r5r�r�r��now_ns�	offset_nsr�r�r�r�r�r�s            r�!test_timerfd_ns_TFD_TIMER_ABSTIME�.TimerfdTests.test_timerfd_ns_TFD_TIMER_ABSTIME`s����%��.��
�
 �
 ��!4�!4�
5���&�&�t�':�':�;��$�	� &� 2����
���b��(<�(<�F[�r�,.�+@�+@��+D�(������L�6�7�+�F�����.�:�;�k�J�� � �"���1�1�"�5��� � �"�Q�&�������+����1�$�*;�*;�;�<rc��SnUR[R[RS9n[
R
"U/U/U/S5up4nUR
X4U4///45 US-nUS-n[R"X&US9 Sn[R"5n	[U5H`n
[
R
"U/U/U/Xg-S-5up4nUR
X4U4U///45 UR
URU5S	5 Mb [R"5U	-
n	XgUS	-
--nURX�UR-
5 g)
Nr�r�rr�rKrvrge��Ar{)
rirr{rr�rcrEr�r�r�rqr�r�)r5r�r�rdrerfr�r�rWr�r�r�s            r�test_timerfd_ns_select�#TimerfdTests.test_timerfd_ns_select|sD����
�
 �
 ��!4�!4�B�O�O�
 �
L���
�
�r�d�R�D�2�$��:�
��#����#�C��2�r�2�,�7�!0�1� 4��%��*��
���b�+�V���� � �"���u��A�"�M�M�2�$���r�d�=R�=`�dg�<g�i�M�C�c����c��_��t�R��n�=����T�5�5�b�9�1�=��
� � �"�Q�&��-�u�q�y�0I�I�
����1�d�.?�.?�?�@rr+N)r`rarbrcr}r�r�rirqr�r�rr.r?r@r�r�r�r�r�r�r�r�r�r�r�r�rdr+rrrkrkNs���
���'�'�'�I��!�.�.�/�L��=�
b�*:�$�_�_�S�\�\�,�,�X�6�2�3�L�3�L�,>�87�4;�00 �d'�&�]�0>�>=�8Arrkc� �\rSrSrSrSrSrg)�OSErrorTestsi�c��"SS[5n/Ul/Ul[Rb[RnO[R
nURR
U5 URR
U"U55 [Rb[RnO$[R"[R
5nURR
U5 URUR-Ul
g)Nc��\rSrSrSrg)�OSErrorTests.setUp.<locals>.Stri�r+N�r`rarbrcrdr+rr�Strr�����rr�)r3�bytes_filenames�unicode_filenamesrr�rjrK�TESTFN_UNDECODABLErr�r�)r5r��decoded�encodeds    rrm�OSErrorTests.setUp�s���	�#�	� "���!#����'�'�3��2�2�G��&�&�G����%�%�g�.����%�%�c�'�l�3��'�'�3��2�2�G��k�k�)�"2�"2�3�G����#�#�G�,��-�-��0F�0F�F��rc�R	�UR[R4UR[R4UR[R[R
4UR[R4UR[R4UR[R4UR[R4UR[RS4UR[RS4/	n[R"5(a,URUR[RS45 [![S5(a-URUR[R"SS45 [![S5(a-URUR[R$SS45 [![S5(a,URUR[R&S45 [![S5(a,URUR[R(S45 [![S5(a,URUR[R*S45 [![S	5(a+URUR[R,45 [![S
5(a,URUR[R.S45 [![S5(a�UR1UR[R24UR[R4S4UR[R6SS
4UR[R8S445 [![S5(a,URUR[R:S45 [![S5(a+URUR[R<45 UH,tp#nUH!nU"U/UQ76 UR?SU35 M# M. g![@a1nURCURDU[GU55 SnAM`SnAf[Ha Mpf=f)Nr�r�r�r�lchownr+�chflags�lchflags�chrootr"rrsuser�lchmodr.zNo exception thrown by )%r�rrJr�r r�r�r�rkr4r�r�r�	can_chmodrKr3rr�r�r+r�r�r�r"rurrr�r
r�r.r\rLr�r"r3�UnicodeDecodeError)r5�funcsr��func�	func_argsrr�s       r�test_oserror_filename�"OSErrorTests.test_oserror_filename�s��
�^�^�R�X�X�'�
�^�^�R�X�X�'�
�^�^�R�W�W�b�k�k�2�
�^�^�R�X�X�'�
�^�^�R�W�W�&�
�^�^�R�Y�Y�(�
�^�^�R�Z�Z�)�
�^�^�R�Y�Y��.�
�^�^�R�Z�Z��/�

����� � ��L�L�$�.�.�"�(�(�E�:�;��2�w����L�L�$�.�.�"�(�(�A�q�9�:��2�x� � ��L�L�$�.�.�"�)�)�Q��:�;��2�z�"�"��L�L�$�.�.�"�+�+�q�9�:��2�y�!�!��L�L�$�.�.�"�*�*�a�8�9��2�z�"�"��L�L�$�.�.�"�+�+�q�9�:��2�x� � ��L�L�$�.�.�"�)�)�5�6��2�v����L�L�$�.�.�"�'�'�5�9�:��2�{�#�#��L�L�������/�������k�:�������k�7�C��������=�	�
��2�x� � ��L�L�$�.�.�"�)�)�U�;�<��2�z�"�"��L�L�$�.�.�"�+�+�7�8�+0�'�I�i�!��@���*�	�*��I�I� 7��v�>�?�"�,1���A��M�M�#�,�,��c�$�i�@�@��)����s�9	Q�
R&�)&R�
R&�%R&)r�r�r�N)r`rarbrcrmr�rdr+rrr�r��s��G�(1@rr�c�f�\rSrSrSrSrSr\R"\	"\
S5S5S5rSrg	)
�
CPUCountTestsi�c�|�UcURS5 URU[5 URUS5 g)N�&Could not determine the number of CPUsr)r�r2r>r��r5�cpuss  r�check_cpu_count�CPUCountTests.check_cpu_count�s4���<��M�M�B�C����d�C�(����4��#rc�P�[R"5nURU5 gr()r�	cpu_countr�r�s  r�test_cpu_count�CPUCountTests.test_cpu_count�s���|�|�~�����T�"rc��[R"5nURU[R"55 UR	U5 gr()r�process_cpu_countr�r�r�r�s  r�test_process_cpu_count�$CPUCountTests.test_process_cpu_count�s4���#�#�%�����T�2�<�<�>�2����T�"r�sched_setaffinityz!don't have sched affinity supportc���[R"5nUcURS5 [R"S5n[	U5S::aURS[U535 UR
[RS[U55 UR5 [R"SU5 [R"5nURX1S-
5 g)Nr�rr{z.sched_getaffinity() returns less than 2 CPUs: )rr�r��sched_getaffinityrAr�r�r	rCr�rE)r5�	affinity1�mask�	affinity2s    r�test_process_cpu_count_affinity�-CPUCountTests.test_process_cpu_count_affinity�s����(�(�*�	����M�M�B�C��#�#�A�&���t�9��>��M�M�%�%+�D�\�N�4�
5�����,�,�a��d��<����
�
���Q��%��(�(�*�	������M�2rr+N)
r`rarbrcr�r�r�rrrrr	rdr+rrr�r��s=��$�#�#�
�����%8�9�<�>�3�>�3rr�c��\rSrSrSr\R"\SLS5S5r\R"\SLS5S5r	\R"\"\S5S5S	5r
S
rSr\R"\"\S5S
5S5rSrSr\R"\R(S:HS5S5r\R"\"\S5S5S5rSrg)�FDInheritanceTestsic�\�[R"[[R5nUR	[R
U5 UR
[R"U5S5 [R"US5 UR
[R"U5S5 g�NFT)	rr r�r�r�rrrErDrEr�s  r�test_get_set_inheritable�+FDInheritanceTests.test_get_set_inheritablesn��
�W�W�X�r�{�{�
+��������"�%�����+�+�B�/��7�
���2�t�$�����+�+�B�/��6rNz
need fcntlc���[R"[[R5nUR	[R
U5 UR
[R"U5S5 [R"U[R5nU[R)-n[R"U[RU5 UR
[R"U5S5 gr	)rr r�r�r�rrrErD�fcntl�F_GETFD�
FD_CLOEXEC�F_SETFD)r5r�r�s   r�test_get_inheritable_cloexec�/FDInheritanceTests.test_get_inheritable_cloexecs���
�W�W�X�r�{�{�
+��������"�%�����+�+�B�/��7����B��
�
�.��
�%�"�"�"�"��
���B��
�
�u�-�����+�+�B�/��6rc��[R"[[R5nUR	[R
U5 UR
[R"U[R5[R-[R5 [R"US5 UR
[R"U[R5[R-S5 g)NTr)rr r�r�r�rrrEr	r	r	rEr�s  r�test_set_inheritable_cloexec�/FDInheritanceTests.test_set_inheritable_cloexecs���
�W�W�X�r�{�{�
+��������"�%�������R����7�%�:J�:J�J��)�)�	+�	���2�t�$�������R����7�%�:J�:J�J��	r�O_PATHzneed os.O_PATHc���[R"[[R5nUR	[R
U5 UR
[R"U5S5 [R"US5 UR
[R"U5S5 [R"US5 UR
[R"U5S5 gr	)	rr r�r	r�rrrErDrEr�s  r�test_get_set_inheritable_o_path�2FDInheritanceTests.test_get_set_inheritable_o_path's���
�W�W�X�r�y�y�
)��������"�%�����+�+�B�/��7�
���2�t�$�����+�+�B�/��6�
���2�u�%�����+�+�B�/��7rc�
�[R"5nUR[5n[R
"U5 SSS5 UR
WRR[R5 UR[5n[R"US5 SSS5 UR
URR[R5 UR[5n[R"US5 SSS5 UR
URR[R5 g!,(df   GN=f!,(df   N�=f!,(df   Nf=f�NTF)rr�r�rLrrDrEr�rMr�rE)r5r�r�s   r�test_get_set_inheritable_badf�0FDInheritanceTests.test_get_set_inheritable_badf3s���
�
"�
"�
$��
�
�
�w�
'�3����r�"�(�������,�,�e�k�k�:�
�
�
�w�
'�3����r�4�(�(�������,�,�e�k�k�:�
�
�
�w�
'�3����r�5�)�(�������,�,�e�k�k�:�(�
'��(�
'��(�
'�s#�E�E#�<E4�
E �#
E1�4
Fc���[R"[[R5nUR	[R
U5 UR
[R"U5S5 gr)rr r�r�r�rrrErDr�s  rr��FDInheritanceTests.test_openBsC��
�W�W�X�r�{�{�
+��������"�%�����+�+�B�/��7rrzneed os.pipe()c�J�[R"5upUR[RU5 UR[RU5 UR	[R
"U5S5 UR	[R
"U5S5 gr)rrr�rrrErD)r5rdres   r�	test_pipe�FDInheritanceTests.test_pipeGsi���7�7�9���������#�&�������#�&�����+�+�C�0�%�8�����+�+�C�0�%�8rc�N�[R"[[R5nUR	[R
U5 [R"U5nUR	[R
U5 UR[R"U5S5 gr)	rr r�r�r�rrrrErD�r5�fd1rs   r�test_dup�FDInheritanceTests.test_dupOsb���g�g�h����,��������#�&��f�f�S�k��������#�&�����+�+�C�0�%�8rc��[R"S5nUR[RU5 UR	US5 g�Nr{r)rrr�rrr�r�s  r�test_dup_standard_stream�+FDInheritanceTests.test_dup_standard_streamWs1��
�V�V�A�Y��������"�%����2�q�!rr�rc�D�[R"S[R5nUR[RU5 [R
"U5nUR[RU5 UR
[R"U55 g)N�NUL)rr r�r�rrrr4rDr&	s   r�test_dup_nul�FDInheritanceTests.test_dup_nul\sb���g�g�e�R�[�[�)��������#�&��f�f�S�k��������#�&�����+�+�C�0�1rrzneed os.dup2()c���[R"[[R5nUR	[R
U5 [R"[[R5nUR	[R
U5 UR
[R"X5U5 UR[R"U55 [R"[[R5nUR	[R
U5 UR
[R"XSS9U5 UR[R"U55 g)NF)�inheritable)rr r�r�r�rrrErrsrDr4)r5r�r�fd3s    rr�FDInheritanceTests.test_dup2es���
�W�W�X�r�{�{�
+��������"�%��g�g�h����,��������#�&��������)�3�/�����*�*�3�/�0��g�g�h����,��������#�&��������e�<�c�B�����+�+�C�0�1rr+)r`rarbrcr	rr.r	r	r	rrrr	r	r�r#	r(	r,	r?r@r0	rrdr+rrr		r		s��7��_�_�U�d�]�L�1�
7�2�
7��_�_�U�d�]�L�1��2�������X�.�0@�A�	8�B�	8�
;�8�
�����V�,�.>�?�9�@�9�9�"�
�������0�2G�H�2�I�2������V�,�.>�?�2�@�2rr		�openptyzneed os.openpty()c��\rSrSrSrSr\R"\"\	S5S5\R"\"\	S5S5\R"\"\	S5S	5S
555r
\R"\"\	S5S5\R"\"\	S
5S5\R"\"\	S5S5\R"\"\	S5S5\R"\"\	S5S5\R"\"\	S5S	5S555555r\R"\"\	S5S5\R"5S55rSrg)�PseudoterminalTestsivc��[R"5upUR[RU5 UR[RU5 X4$)z/Open a pty fd-pair, and schedule cleanup for it)rr6	r�rr�r5�main_fd�	second_fds   r�open_pty�PseudoterminalTests.open_ptyxs=���Z�Z�\���������'�*�������)�,��!�!rc��UR5upUR[R"U5S5 UR[R"U5S5 gr)r=	rErrDr:	s   r�test_openpty� PseudoterminalTests.test_openptysF��!�]�]�_�������+�+�G�4�e�<�����+�+�I�6��>r�ptsnamezneed os.ptsname()rqzneed os.O_RDWR�O_NOCTTYzneed os.O_NOCTTYc�|�UR5up[R"U5n[R"U[R[R
-5nUR
[RU5 [R"US5 UR[R"US5S5 g)Nrr)r=	rrB	r rqrC	r�rrr!rEr�)r5r;	r<	�second_path�reopened_second_fds     r�test_open_via_ptsname�)PseudoterminalTests.test_open_via_ptsname�s{��"�]�]�_����j�j��)���W�W�[�"�)�)�B�K�K�2G�H��������"4�5�
���#�V�,��������!�,�f�5r�posix_openptzneed os.posix_openpt()�grantptzneed os.grantpt()�unlockptzneed os.unlockpt()c�R�[R"[R[R-5nUR	[R
U5 [R"U5 [R"U5 [R"U5n[R"U[R[R-5nUR	[R
U5 UR[R"U5[R"U55 gr()rrI	rqrC	r�rrrJ	rK	rB	r rEr�)r5�	mother_fd�son_path�son_fds    r�test_posix_pty_functions�,PseudoterminalTests.test_posix_pty_functions�s����O�O�B�I�I�b�k�k�$9�:�	�������)�,�
�
�
�9��
���I���:�:�i�(������2�9�9�R�[�[�#8�9��������&�)�������I�.��
�
�6�0B�Crr5zneed os.spawnl()c��[R"5upUR[RU5 UR[RU5 [R
"SUS35n[RnUR[R[R5 [US5n[X5SS9 SSS5 [RnXd/n[RS:XaSUS;aS	USS	3US'[R"[RU/UQ76nUR!US5 g!,(df   N�=f)
Nz�
            import errno
            import os
            import test.support
            try:
                import msvcrt
            except ImportError:
                msvcrt = None

            fd = aA

            with test.support.SuppressCrashReport():
                if msvcrt is not None:
                    try:
                        handle = msvcrt.get_osfhandle(fd)
                    except OSError as exc:
                        if exc.errno != errno.EBADF:
                            raise
                        # get_osfhandle(fd) failed with EBADF as expected
                    else:
                        raise Exception("get_osfhandle() must fail")

                try:
                    fd3 = os.dup(fd)
                except OSError as exc:
                    if exc.errno != errno.EBADF:
                        raise
                    # os.dup(fd) failed with EBADF as expected
                else:
                    os.close(fd3)
                    raise Exception("dup must fail")
        r�r))rX�endr�r�rr)rrr�rrr�r�rrjrkr rPr?r�rr5r7rE)	r5r�rr�r"r$r�r�rs	         r�test_pipe_spawnl�$PseudoterminalTests.test_pipe_spawnl�s���'�'�)���������"�%�������#�&����	$���	� �
��B�#�#�����	�(�(�)�*:�*:�;�
�(�C�
 �B��$�R�(�!��^�^�
��$��
�7�7�d�?�s�c�!�f�}���Q����]�C��F��9�9�R�Y�Y�
�9�S�9������1�%�!�
 �s�<E�
Er+N)r`rarbrcr=	r@	rrrrrG	rP	rrrT	rdr+rrr8	r8	vso��"�?�
�����Y�/�1D�E�
�����X�.�0@�A�
�����Z�0�2D�E�6�F�B�F�6������^�4�6N�O�
�����Y�/�1D�E�
�����Z�0�2F�G�
�����Y�/�1D�E�
�����X�.�0@�A�
�����Z�0�2D�E�D�F�B�F�H�F�P�D������X�.�0B�C�� � �"�7&�#�D�7&rr8	c
�|�\rSrSrSSSS\R
4S4SSS	S\R4\"\S
S54/rSr	Sr
S
rg)�PathTConverterTestsi�)r�Tr+N)r�Fr+NrtFN)r�F�rN)r�FrX	Nr rrc	��[Rn[RS:XaS=p#O/[R"[R5n[U5n[R"[U5[R[R-5nUR[R[R5 UR[RU5 [U5n[U5nURH�upxp�URUS9 [[U5nXUU4H4nUcMURX|S9 U"U/U	Q76n
U
bU
"U
5 SSS5 M6 UR!["S5 U"U/U	Q76 SSS5 U(aU"U/U	Q76n
U
bU
"U
5 O(UR!["S5 U"U/U	Q76 SSS5 SSS5 M� g![a SSS5 M�f=f!,(df   M�=f!,(df   N�=f!,(df   NW=f!,(df   GM:=f)Nr�r)rrFzto return str or byteszos.PathLike)rrjrrr�rr r�rpr�rkrr�	functionsrvrVr[�assertRaisesRegexr�)r5�str_filename�bytes_fspath�bytes_filenamer��
int_fspath�
str_fspathr�allow_fd�
extra_args�
cleanup_fnr�rFrbs              r�test_path_t_converter�)PathTConverterTests.test_path_t_converter�s��� �'�'��
�7�7�d�?�,0�0�L�>��[�[��)9�)9�:�N�#�N�3�L�
�W�W�X�l�+�R�[�[����-C�
D�����	�(�(�)�*:�*:�;�������"�%��b�\�
��l�+�
�6:�n�n�2�D�J����4��(�� ��T�*�B�*�:�)�+�D��|� ����4��;�!#�D�!6�:�!6��%�1�&�v�.�<�;�	+��+�+�!�#;�=��z�/�J�/�=����0�Z�0�F�!�-�"�6�*���/�/�%�)�+��2�+�
�+�+�1)�(�7E��&���	)�(���<�;��
=�=��+�+��1)�(�sx�H1�G$�.H1�
G=	�"H1�
H�:H1�
H �H1�$
G:�.H1�9G:�:H1�=
H
�H1�
H�H1� 
H.�*H1�1
I	c��SnUR[US-5 [R"[	S55 SSS5 UR[US-5 [R"[	S55 SSS5 UR[US-5 [R"[	[555 SSS5 g!,(df   N�=f!,(df   Ni=f!,(df   g=f)Nz-__fspath__\(\) to return str or bytes, not %sr>r}�floatg���Q�@�object)r[	r�rr�rrh	)r5rs  r�&test_path_t_converter_and_custom_class�:PathTConverterTests.test_path_t_converter_and_custom_classs���>��
�
#�
#�I�s�V�|�
<��G�G�H�Q�K� �=�
�
#�
#�I�s�X�~�
>��G�G�H�T�N�#�?�
�
#�
#�I�s�Y��
?��G�G�H�V�X�&�'�@�
?�	=�
<��
>�
>��
?�
?�s#� C� C �(C1�
C� 
C.�1
C?r+)r`rarbrcr�F_OKr�rVrZ	rd	ri	rdr+rrrW	rW	�sO��	!�"�	�5�2�7�7�*�d�+�&�'�	��������G�T�(B�C�
�I�*,�X(rrW	rHrIzCannot unset blocking flagz'Windows only supports blocking on pipesc��\rSrSrSrSrg)�
BlockingTestsic���[R"[[R5nUR	[R
U5 UR
[R"U5S5 [R"US5 UR
[R"U5S5 [R"US5 UR
[R"U5S5 gr	)	rr r�r�r�rrrErHrKr�s  rrL�BlockingTests.test_blocking"s���
�W�W�X�r�{�{�
+��������"�%��������,�d�3�
����E�"��������,�e�4�
����D�!��������,�d�3rr+N)r`rarbrcrLrdr+rrrm	rm	s��
	4rrm	c��\rSrSrSrSrg)�ExportsTestsi/c��URS[R5 URS[R5 g)Nr r)r�r�__all__rls r�test_os_all�ExportsTests.test_os_all0s&���
�
�f�b�j�j�)��
�
�f�b�j�j�)rr+N)r`rarbrcrt	rdr+rrrq	rq	/s��*rrq	c�&�\rSrSrSrSrSrSrg)�TestDirEntryi5c��[RR[R5UlUR[RUR5 [R"UR5 gr()rrF�realpathrrjr�r�rIrls rrm�TestDirEntry.setUp6sF���G�G�$�$�Y�%5�%5�6��	����	�(�(�$�)�)�4�
������rc�L�UR[[R5 gr()r�r�r�DirEntryrls r�test_uninstantiable� TestDirEntry.test_uninstantiable;s�����)�R�[�[�1rc��[[RRURS5S5n[R"UR5Vs/sHo"PM snR5nUR
U[R5 URURS5 SSK
nUR[URX!5 gs snf)Nr:�pythonr)r%rrFrH�scandirr�r2r|	rErrtr�r�rw)r5r"�entryrts    r�test_unpickable�TestDirEntry.test_unpickable>s����r�w�w�|�|�D�I�I�z�B�I�N��$&�J�J�t�y�y�$9�:�$9�5��$9�:�>�>�@�����e�R�[�[�1�������Z�0�����)�V�\�\�5�C��	;s�C)rFN)r`rarbrcrmr}	r�	rdr+rrrw	rw	5s���
2�Drrw	c���\rSrSr\R
rSrS%SjrSrSr	Sr
SrSrS	r
\R"\R"S
:gS5S5rS
rS%SjrSrSrSrSrSrSrSrSrSr\R<"\R@\RB;S5S5r"\R"\#RHS5S5r%Sr&Sr'Sr(Sr)S r*S!r+S"r,S#r-g$)&�TestScandiriGc�F�[RR[R5Ul[R
"UR5UlUR[RUR5 [R"UR5 gr()
rrFry	rrjr��
bytes_pathr�r�rIrls rrm�TestScandir.setUpJsZ���G�G�$�$�Y�%5�%5�6��	��+�+�d�i�i�0������	�(�(�$�)�)�4�
������rc��[U[5(aUROURn[RRX!5n[
US5 U$)Nr�	)r�r\r�	rFrrHr%)r5rrFr"s    rr%�TestScandir.create_filePs>��",�T�5�"9�"9�t���t�y�y���7�7�<�<��+���H�i�(��rc��[S[R"UR555nUR	[UR
55U5 U$)Nc3�># �UHnURU4v� M g7fr(r�r�r�	s  rr��*TestScandir.get_entries.<locals>.<genexpr>Ws ���;�$9�5��
�
�E�*�$9�s�)rUrr�	rFrEr��keys)r5�names�entriess   r�get_entries�TestScandir.get_entriesVsF���;�$&�J�J�t�y�y�$9�;�;����������/��7��rc���U(aZ[U5HJnURS5(dMUS;aM#UR[X5[X$5XU45 ML gURX5 g)N�st_)r�r��st_nlinkr��st_ctime_ns)rSr�rErV)r5r�r��skip_fieldsrds     r�assert_stat_equal�TestScandir.assert_stat_equal\sj����E�
�����u�-�-���+�+��� � ���!5�!(��!5�"'��!5�7�
#�
���U�*rc��[R"UR5nUR[[U55 UR
5 gr()rr�	rFr�r�r�rr)r5�scandir_iters  rr}	�TestScandir.test_uninstantiablejs5���z�z�$�)�)�,�����)�T�,�%7�8����rc���URS5n[R"UR5nSSKnUR[URX!5 UR5 g)Nr:r)	r%rr�	rFrtr�r�rwrr)r5r"r�	rts    rr�	�TestScandir.test_unpickableosI���#�#�J�/���z�z�$�)�)�,������)�V�\�\�<�J����rc��URU[R5 URURU5 URUR
[R
R
UR
U55 URUR5[R"UR
SS9R5 [R"UR
5nURUR5[R"UR55 URUR5[R"UR55 URUR5[R
R!UR
55 [R"UR
SS9nURURSS9[R"UR55 URURSS9[R"UR55 URUR#5[R
R%UR
55 UR'UR5U[RS:H=(a U(+5 UR'URSS9U[RS:H5 g)NFr;r�)r2rr|	rErrFrH�inoder�r��is_dir�S_ISDIRr^�is_file�S_ISREG�
is_symlinkr]�is_junction�
isjunctionr�	)r5r�	rr�	r�	r�	�
entry_stat�entry_lstats        r�check_entry�TestScandir.check_entryvs�����e�R�[�[�1�������T�*�������R�W�W�\�\�$�)�)�T�%B�C��������������U�C�J�J�	L��W�W�U�Z�Z�(�
�����������j�&8�&8�9�	;�����������j�&8�&8�9�	;�����)�)�+�������
�
�3�	5��g�g�e�j�j�%�@��������e��<����k�&9�&9�:�	<�������u��=����k�&9�&9�:�	<�	
����*�*�,�b�g�g�.@�.@����.L�M����u�z�z�|�)�!�w�w�$��A�z�>�	C�	
���u�z�z�%�z�@�*�!�w�w�$��	0rc��[R"5n[R"5n[RRURS5n[R"U5 URS5nU(a@[R"U[RRURS55 U(a}[R"U[RRURS5SS9 [R"U[RRURS55 SS/nU(aURS5 U(aURS	5 URU5nUSnURUSSS
S
5 USnURUSS
SS
5 U(aUSnURUSS
SS
5 U(a5USnURUSSS
S5 USnURUSS
SS5 gg![anURSU-5 SnAGNSnAff=f)NrSr:z
link_file.txtr[�symlink_dirT)r��symlink_file.txt)r�	r�	F)r�can_hardlinkr1rrFrHrIr%r"r6r�r�rKrur�	r�	)	r5r"r�rSr"r�r�	r�	r�	s	         r�test_attributes�TestScandir.test_attributes�s����%�%�'���'�'�)���'�'�,�,�t�y�y�%�0��
������#�#�J�/���
3�����"�'�'�,�,�t�y�y�/�"J�K���J�J�w������T�Y�Y�
� F�+/�
1��J�J�x������d�i�i�9K�!L�M��
�#����L�L��)���L�L�<�=��"�"�5�)�����������t�U�E�:��
�#������
�E�4��?���O�,�E����U�O�U�D�%�H���M�*�E����U�M�4���E��.�/�E����U�$6��t�T�J���1#�
3��
�
�o��1�2�2��
3�s�?H�
I�(I�Ir�z/Can only test junctions with creation on win32.c��[RRURS5n[R"U5 SSKnUR
"U[RRURS55 URSS/5nURUSR5S5 URUSR5S5 g![a [R"S5ef=f)N�tgtdirr�srcjuncz!creating the test junction failedTF)rrFrHrIr�r�rLrr�r�	rEr�	)r5rSr�r�	s    r�test_attributes_junctions�%TestScandir.test_attributes_junctions�s����'�'�,�,�t�y�y�(�3��
������	I��"�"�7�B�G�G�L�L����I�,N�O��"�"�I�x�#8�9�������+�7�7�9�4�@������*�6�6�8�%�@���	I��#�#�$G�H�H�	I�s�;C�!C<c��[U[5(aUROURn[	[
R"U55nUR[U5S5 USnURURU5 U$r+	)
r�r\r�	rFrCrr�	rErAr)r5rrFr�	r�	s     r�	get_entry�TestScandir.get_entry�sf��",�T�5�"9�"9�t���t�y�y���r�z�z�$�'�(������W��q�)���
��������T�*��rc�|�URUS9nUR[RR	U55$)Nr)r%r�	rrF�basename)r5rr"s   r�create_file_entry�TestScandir.create_file_entry�s3���#�#��#�.���~�~�b�g�g�.�.�x�8�9�9rc���UR5n[R"5n[R"UR5 [S[R"555nUR[UR55[RRU5/5 [R"U5 g![R"U5 f=f)Nc3�<# �UHoRU4v� M g7fr(rr�	s  rr��5TestScandir.test_current_directory.<locals>.<genexpr>�s���I�L�5�J�J��.�L�s�)r%rr1rJrFrUr�	rEr�r�	r�	)r5r"�old_dirr�	s    r�test_current_directory�"TestScandir.test_current_directory�s����#�#�%���)�)�+��		��H�H�T�Y�Y���I�B�J�J�L�I�I�G����V�G�L�L�N�3� �g�g�.�.�x�8�9�
;�
�H�H�W���B�H�H�W��s�BC
�
C"c�Z�UR5nUR[U5S5 g)Nz<DirEntry 'file.txt'>)r�	rEr��r5r�	s  r�	test_repr�TestScandir.test_repr�s%���&�&�(������e��&=�>rc��UR5nUR[R"U5[RRURS55 g�Nr:)r�	rEr�fspathrFrHr�	s  r�test_fspath_protocol� TestScandir.test_fspath_protocol�s<���&�&�(��������5�)�2�7�7�<�<��	�	�:�+N�Orc�B�[R"S5nURUS9n[R"U5nUR	U[
5 UR
U[RR[R"UR5U55 g)Nz
bytesfile.txtr)	rr�r�	r�	r2r\rErFrH)r5r^	�bytes_entryr�	s    r�test_fspath_protocol_bytes�&TestScandir.test_fspath_protocol_bytes�sq�����_�5���,�,�.�,�A�����;�'�����f�e�,����������b�k�k�$�)�)�&<�^�L�	Nrc��[RRURS5n[R"U5 UR	S5n[R
"U5 [RS:XaURUR55 URUR55 URUR55 [RS:Xa@UR[UR5 UR5 URSS9 gUR!UR5S5 UR[UR5 UR[URSS9 g)NrSr�Fr;r)rrFrHrIr�	r�rrsr�	r4r�	r�	r�rKr�	r�r�)r5rFr�	s   r�test_removed_dir�TestScandir.test_removed_dir�s���w�w�|�|�D�I�I�u�-��
��������u�%��
������7�7�d�?��O�O�E�L�L�N�+��������)�����)�)�+�,�
�7�7�d�?����/����=��J�J�L��J�J�u�J�-����u�{�{�}�a�0����/����<����/����U��Src��UR5n[R"UR5 UR	UR55 [RS:XaURUR55 UR	UR55 [RS:Xa@UR[UR5 UR5 URSS9 gURUR5S5 UR[UR5 UR[URSS9 g)Nr�Fr;r)r�	rrkrFr4r�	rrsr�	r�	r�rKr�	r�r�r�	s  r�test_removed_file�TestScandir.test_removed_file
s����&�&�(��
�	�	�%�*�*���������(�
�7�7�d�?��O�O�E�M�M�O�,�����)�)�+�,�
�7�7�d�?����/����=��J�J�L��J�J�u�J�-����u�{�{�}�a�0����/����<����/����U��Src�&�[R"5(dURS5$URS5n[R
"U[RRURS55 URSS/5nUSn[R"U5 URUR5S5 URUR55 URUR55 URURSS95 URURSS95 URUR!55 UR#[$UR&5 UR'SS9 g)Nzcannot create symbolic linkr:zsymlink.txtrFr;)rr1r�r%rr�rFrHr�	rkr�r�	r4r�	r�	rsr�	r�rKr�)r5r"r�	r�	s    r�test_broken_symlink�TestScandir.test_broken_symlink s(���$�$�&�&��=�=�!>�?�?��#�#�J�/��
�
�
�8��7�7�<�<��	�	�=�9�	;��"�"�J�
�#>�?���
�&��
�	�	�(�����5�;�;�=�!�,��������(��������)�������e��<�=�������u��=�>�����(�(�*�+����+�U�Z�Z�8�
�
�
�5�
�)rc	���URS5 [R"UR5n[	[R
"U55nUR
[U5SU5 USnUR
URS5 UR
UR[R"[RRURS555 g)Nr:r{rsfile.txt)
r%rr�rFrCr�	rErArrH)r5�
path_bytesr�	r�	s    rrN�TestScandir.test_bytes5s�������$��[�[����+�
��r�z�z�*�-�.������W��q�'�2���
��������[�1����������R�W�W�\�\�$�)�)�Z�%H�I�	Krc�$�URS5 [[4H]nU"[R"UR
55nUR
[5 [R"U5 SSS5 M_ g!,(df   Mq=fr�	)	r%r�r�rr�rFr�r�r�	)r5rr�	s   r�test_bytes_like�TestScandir.test_bytes_likeAs_������$��j�(�C��R�[�[����3�4�J��"�"�9�-��
�
�:�&�.�-�)�-�-�s�B�
B	z.fd support for listdir required for this test.c�j�UR[R[R5 UR	S5 S/n[
R"5(aP[R"S[RRURS55 URS5 [
R"UR5n[R"U5n[U5nSSS5 WVs/sHoURPM nnUR[U5U5 URU[R "U55 UGH)nURURUR5 UR[R""U5UR5 URUR%5URS:H5 [R&[R(;dM�[R&"URUS9nURUR'5U5 [R&"URUSS9nURUR'SS9U5 GM, SSS5 g!,(df   GN�=fs snf!,(df   g=f)Nr:r"r<F)r�r�r;)r�rr�	r>r%rr1r�rFrHrKrrCrrEr�r4r�	r�	r�r?)r5�expected_namesr�rzr�	r�	r�	r�s        r�test_fd�TestScandir.test_fdIs���	
�
�
�b�j�j�"�.�.�1�����$�$���� � �"�"��J�J�z�2�7�7�<�<��	�	�6�#B�C��!�!�&�)�
�
"�
"�4�9�9�
-�����B��2��r�(�� �-4�5�W�E�Z�Z�W�E�5����V�E�]�N�;����U�B�J�J�r�N�3� ��� � ����U�Z�Z�8�� � ����5�!1�5�:�:�>�� � ��!1�!1�!3�U�Z�Z�6�5I�J��7�7�b�0�0�0�������B�7�B��$�$�U�Z�Z�\�2�6�������B��N�B��$�$�U�Z�Z��Z�%F��K�!�
.�
-����5�.�
-�s8�
J$�$J
�0J$�<J�C,J$�BJ$�
J	�
J$�$
J2zWASI maps '' to cwdc�N�UR[[RS5 gr`)r�rKrr�	rls r�test_empty_path�TestScandir.test_empty_pathcs�����+�R�Z�Z��<rc��URS5 [R"UR5n[	U5nUR[
U5SU5 [	U5nUR[
U5SU5 g)Nr:r{r)r%rr�	rFrCrErA)r5r�r�	�entries2s    r�test_consume_iterator_twice�'TestScandir.test_consume_iterator_twicegsb������$��:�:�d�i�i�(���x�.������W��q�'�2���>������X���8�4rc�f�S0/4H(nUR[[RU5 M* g)NgX9��v��?)r�r�rr�	)r5�objs  r�test_bad_path_type�TestScandir.test_bad_path_typers(���2�r�?�C����i����S�9�#rc�4�URS5 URS5 [R"UR5n[	U5 UR5 UR5 UR
5 ASSS5 g!,(df   g=f�Nr:�	file2.txt)r%rr�	rFrxrr�check_no_resource_warning�r5r�s  r�
test_close�TestScandir.test_closevsf������$�����%��:�:�d�i�i�(���X����������
�
+�
+�
-��.�
-�
-�s�>B	�	
Bc�(�URS5 URS5 [R"UR5n[	U5 SSS5 UR5 ASSS5 g!,(df   N)=f!,(df   g=fr�	)r%rr�	rFrxr�	r�	s  r�test_context_manager� TestScandir.test_context_manager�sc������$�����%�
�Z�Z��	�	�
"�h���N�#�
�
+�
+�
-��.�
-�#�
"��
-�
-�s�A2�'B�2
B�
Bc���URS5 URS5 [R"UR5n[	U5 UR5 SSS5 g!,(df   g=fr�	)r%rr�	rFrxrrr�	s  r�test_context_manager_close�&TestScandir.test_context_manager_close�sM������$�����%�
�Z�Z��	�	�
"�h���N��N�N��#�
"�
"�s�A(�(
A6c��URS5 URS5 UR[5 [R"UR
5n[
U5 SS- SSS5 SSS5 UR5 ASSS5 g!,(df   N1=f!,(df   N:=f!,(df   g=f)Nr:r�	r{r)r%r��ZeroDivisionErrorrr�	rFrxr�	r�	s  r�test_context_manager_exception�*TestScandir.test_context_manager_exception�s�������$�����%�
�
�
�0�
1����D�I�I�&�(��X���!��'�2��
+�
+�
-��.�
-�'�&��2�
1��.�
-�s/�!B&�B�*B&�
B7�
B#	�B&�&
B4�7
Cc���URS5 URS5 [R"UR5n[	U5 UR[5 A[R"5 SSS5 [R"UR5n[U5 UR5 ASSS5 g!,(df   NT=f!,(df   g=fr�	)r%rr�	rFrx�assertWarns�ResourceWarningr�
gc_collectrCr�	r�	s  r�test_resource_warning�!TestScandir.test_resource_warning�s�������$�����%��:�:�d�i�i�(���X��
�
�
�o�
.����� �/��:�:�d�i�i�(���X��
�
+�
+�
-��.�
-�
/�
.��.�
-�s�#C�=C�
C�
C')r�	rFN)r:).r`rarbrcrr�	rmr%r�	r�	r}	r�	r�	r�	rr.r?r@r�	r�	r�	r�	r�	r�	r�	r�	r�	r�	rNr�	rrr4r>r�	rr0r�	r�	r�	r�	r�	r�	r
r
rdr+rrr�	r�	Gs�� /� I� I�����+��
�0�<'K�R�_�_�S�\�\�W�,�._�`�A�a�A��:��?�P�N�T�,T�&*�*
K�'�������r�~�~�5�I�K�L�K�L�0�_�_�W�_�_�&;�<�=�=�=�	5�:�	����rr�	c�z�\rSrSr\"\R5rSrSrSr	Sr
SrSrSr
S	rS
rSrSrS
rg)�
TestPEP519i�c�V�SH#nURXRU55 M% g)N)rCsgoodbyessome/path/and/file�rEr�	)r5�bs  r�test_return_bytes�TestPEP519.test_return_bytes�s"��<�A����Q���A��/�=rc�V�SH#nURXRU55 M% g)N)�hello�goodbyezsome/path/and/filer
)r5r�s  r�test_return_string�TestPEP519.test_return_string�s"��9�A����Q���A��/�:rc��SHzn[U5nURXRU55 URS[R"U55 URS[R
"U55 M| g)N)�path/like/object�path/like/objectr
r
)rrEr�	rr�r])r5r{�pathlikes   r�test_fsencode_fsdecode�!TestPEP519.test_fsencode_fsdecode�s`��8�A���{�H����Q���H� 5�6����0�"�+�+�h�2G�H����/����X�1F�G�9rc��URSUR[S555 UR[	[[
R55 UR[[S5[
R55 g)Nz#feelthegilr@)rEr�	rrs�
issubclassr�PathLiker�rls rrH�TestPEP519.test_pathlike�sR���������H�]�4K�(L�M����
�8�R�[�[�9�:����
�8�C�=�"�+�+�>�?rc��[SS05n[[[U"54H$nUR[UR
U5 M& g)N�blahr+)r�r>rr�r�r�	)r5�vapor�os   r�test_garbage_in_exception_out�(TestPEP519.test_garbage_in_exception_out�s;���V�R��$���d�B���'�A����i����a�8�(rc�D�UR[UR5 gr()r�r�r�	rls r�test_argument_required�!TestPEP519.test_argument_required�s�����)�T�[�[�1rc�0�UR[UR[S55 [	SS05nSUlUR[URU"55 UR[UR[[
555 g)NrM�foor+r{)r�r�r�	rr��
__fspath__r�	)r5�cs  r�test_bad_pathlike�TestPEP519.test_bad_pathlike�sl�����)�T�[�[�(�2�,�?����B���������)�T�[�[�!�#�6����+�T�[�[�"�#4�#6�7�	9rc���"SS[R5nUR[[U55 UR[[[R55 g)Nc��\rSrSrSrg)�0TestPEP519.test_pathlike_subclasshook.<locals>.Ai�r+Nr�r+rr�Ar/
�r�rr0
)rr
r4r
rrs�r5r0
s  r�test_pathlike_subclasshook�%TestPEP519.test_pathlike_subclasshook�s>��	����	�����H�a�0�1����
�8�R�[�[�9�:rc�n�UR[R[[R
5 gr()r2rr
r\�types�GenericAliasrls r�test_pathlike_class_getitem�&TestPEP519.test_pathlike_class_getitem�s!�����b�k�k�%�0�%�2D�2D�Erc�v�"SS[R5nUR[U"5S55 g)Nc��\rSrSrSrSrSrg)�2TestPEP519.test_pathlike_subclass_slots.<locals>.Ai�r+c��gr`r+rls rr)
�=TestPEP519.test_pathlike_subclass_slots.<locals>.A.__fspath__�s��rN)r`rarbrc�	__slots__r)
rdr+rrr0
r;
�s���I�
rr0
�__dict__)rr
r4rr1
s  r�test_pathlike_subclass_slots�'TestPEP519.test_pathlike_subclass_slots�s+��	����	�	
������j�1�2rc�R�"SS5n"SS5n"SSU5nSRnUR[U"S55 URU"55 SSS5 UR	URU"55S5 UR[U"S55 URU"55 SSS5 UR[U"S55 [U"55 SSS5 UR[U"S55 [U"55 SSS5 S	RnUR[U"S55 [R"U"5S
5 SSS5 UR[U"S55 [R"U"5S5 SSS5 g!,(df   GNi=f!,(df   GN=f!,(df   N�=f!,(df   N�=f!,(df   N�=f!,(df   g=f)Nc��\rSrSrSrSrg)�/TestPEP519.test_fspath_set_to_None.<locals>.Fooi�Nr+�r`rarbrcr)
rdr+rr�FoorD
�����JrrF
c��\rSrSrSrSrg)�/TestPEP519.test_fspath_set_to_None.<locals>.Bari�c��g)N�barr+rls rr)
�:TestPEP519.test_fspath_set_to_None.<locals>.Bar.__fspath__�s��rr+NrE
r+rr�BarrI
�s��
rrM
c��\rSrSrSrSrg)�/TestPEP519.test_fspath_set_to_None.<locals>.Bazi�Nr+rE
r+rr�BazrO
�rG
rrP
z1expected str, bytes or os.PathLike object, not {}rK
z.should be string, bytes or os.PathLike, not {}�foooo�bazzz)r�r[	r�r�	rEr rr�)r5rF
rM
rP
�good_error_msg�other_good_error_msgs      r�test_fspath_set_to_None�"TestPEP519.test_fspath_set_to_None�s���	�	�	�	�	�#�	�
A�G�G�	��
#�
#�I�~�e�/D�
E��K�K����F�	
������S�U�+�U�3�
�
#�
#�I�~�e�/D�
E��K�K����F��
#�
#�I�~�e�/D�
E����K�F��
#�
#�I�~�e�/D�
E����K�F�
>�D�D�	��
#�
#�I�/C�E�/J�
K��I�I�c�e�W�%�L��
#�
#�I�/C�E�/J�
K��I�I�c�e�W�%�L�
K�+F�
E��
F�
E��F�
E��F�
E��L�
K��L�
K�sH�G�)G�$G%�G6�H�H�
G�
G"�%
G3�6
H�
H�
H&r+N)r`rarbrcrPrr�	r
r
r
rHr"
r%
r+
r2
r7
r@
rU
rdr+rrr	
r	
�sL���"�)�)�
$�F�0�0�H�@�
9�
2�	9�;�F�3�%&rr	
c��\rSrSrSrSrg)�
TimesTestsic��[R"5nURU[R5 SH$n[	X5nURU[
5 M& [RS:XaUURURS5 URURS5 URURS5 gg)N)�user�system�
children_user�children_system�elapsedr�r)rr�r2�times_resultrVrg	rrEr\
r]
r^
)r5r��fieldr�s    r�
test_times�TimesTests.test_timess������
�����e�R�_�_�5�!�E��E�)�E��!�!�%��/�!�
�7�7�d�?����U�0�0�!�4����U�2�2�A�6����U�]�]�A�.�rr+N)r`rarbrcra
rdr+rrrX
rX
s��/rrX
c��\rSrSrSr\R"\RS;S5\R"\
SLS5S55rSrS	r
g)
�	ForkTestsi c�x�Sn[SU5 [R(a[SUSS9 g[SUSS9 g)Nz�if 1:
            import os
            from test import support
            pid = os.fork()
            if pid != 0:
                support.wait_process(pid, exitcode=0)
        r��mimalloc_debug)�PYTHONMALLOC�malloc_debug)r
r�Py_GIL_DISABLEDr�s  r�	test_fork�ForkTests.test_fork"s7����	��t�$��"�"��T�4�6F�G��T�4�n�Er)r�r��darwinz'Only Linux and macOS detect this today.Nzrequires _testcapic��Sn[SUSS9up#nURURS5S5 URURS5S5 g)Naif 1:
            import os, threading, warnings
            from _testcapi import _spawn_pthread_waiter, _end_spawned_pthread
            _spawn_pthread_waiter()
            try:
                with warnings.catch_warnings(record=True) as ws:
                    warnings.filterwarnings(
                            "always", category=DeprecationWarning)
                    if os.fork() == 0:
                        assert not ws, f"unexpected warnings in child: {ws}"
                        os._exit(0)  # child
                    else:
                        assert ws[0].category == DeprecationWarning, ws[0]
                        assert 'fork' in str(ws[0].message), ws[0]
                        # Waiting allows an error in the child to hit stderr.
                        exitcode = os.wait()[1]
                        assert exitcode == 0, f"child exited {exitcode}"
                assert threading.active_count() == 1, threading.enumerate()
            finally:
                _end_spawned_pthread()
        r��0)�PYTHONOPTIMIZEr�r))r
rEr��r5r�r�r�r�s     r�-test_fork_warns_when_non_python_thread_exists�7ForkTests.test_fork_warns_when_non_python_thread_exists2sO����*'�t�T�#�F����������G�,�b�1�������G�,�b�1rc�n�Sn[SU5up#nURSU5 URSU5 g)NaNif 1:
            import atexit
            import os

            class AtFinalization:
                def __del__(self):
                    print("OK")
                    pid = os.fork()
                    if pid != 0:
                        print("shouldn't be printed")
            at_finalization = AtFinalization()
        r�sOK
s"can't fork at interpreter shutdown)r
rEr�rp
s     r�test_fork_at_finalization�#ForkTests.test_fork_at_finalizationOs:����'�t�T�2��������#�&��
�
�;�S�Arr+)r`rarbrcrj
rrr?r@r.�	_testcapirq
rt
rdr+rrrd
rd
 sW��F� ������)G�G�B�D�
�_�_�Y�$�&�(<�=�2�>�D�2�4Brrd
�_fspathc�<�\rSrSrSr\"\R5rSr	g)�TestPEP519PurePythonidz>Explicitly test the pure Python implementation of os.fspath().r+N)
r`rarbrcrrPrrw
r�	rdr+rrry
ry
ds��L��b�j�j�)�rry
�__main__)scontentr()�r)r��
contextlibrrMr�rr�r�rrtrcr�rtr�r�r�rRr�r?�	sysconfigrBr�rr5
rr�r��testr�test.supportrrrrrr@r	r��ImportErrorr	r��pwd�getpwall�pw_uidrr[rv
r
rr�r��test.support.script_helperr
r�test.support.os_helperrr*rrr�versionr�r��getgidrxrr%r.r3r,�TestCaser.rfr5r�rQ�BasicTestMappingProtocolrSrrr�r�r�r�rr,r0rArHr_�get_config_var�OS_URANDOM_DONT_USE_FDry�contextmanagerr�r�r�r�rRrlr�r�r�rrr0rPrRr�r�r�r�r�rr�r)r�r|r��IsolatedAsyncioTestCaser�r��requires_linux_versionrr0rErOrkr�r�r		r8	rW	r/rm	rq	rw	r�	r	
rX
�
requires_forkrd
ry
r`�main)�us0r�<module>r�
s���
�
�������
�	�
�
��
�
�
��
��
����������&�"�&�+�(�!���������#&�<�<�>�2�>�a���>�2�I�+��1�
��8�#�+��
�
�2�y����Z�Z�\�Q�&�M��3�
���3�?�?�#:�#:����0�0�;�;�N�K�����<�<�*�*�9�5�J�"�)�)�+��:J��K�� ���s�|�|�'>�'>�u�'E�'N�P��(�A8��!�!�A8�JZ8��!�!�Z8�|
l7��*�*�l7�^_A��"�"�_A�D�nJ�=�9�9�nJ�b	t(��!�!�t(�n	
���W�R��)�+B�C�`%��`%�D�`%�F6�Y�6�
���W�R��)�+B�C�	6�j�	6�D�	6�t�8�$�$�t�n
���W�R��)�+@�A�8#�X�&�&�8#�B�8#�v&:�h�'�'�&:�R
������"9�:�,�8�$�$�,�;�,�*�8�$�$�*�>
���W�R��-�/D�E�'*�X�&�&�'*�F�'*�Z���.�/�1�4�?���� 0�1�Q�6�?���� 8�9�Q�>��

���'�=�?�	�������*�7�9�J'�X�&�&�J'�9�?�J'�Z���"��"�@
���W�R��)�&�(�L+��!�!�L+�(�L+�^
���S�\�\�W�,�.D�E� B�h�'�'� B�F� B�F
������"E�F�V*�H�%�%�V*�G�V*�r
���W�R��(�*<�=�#0��!�!�#0�>�#0�J
�������(�*@�A�DA�x�(�(�DA�B�DA�L
�������(�*@�A�G0�(�#�#�G0�B�G0�R
���S�\�\�W�,�.D�E�wK�X�&�&�wK�F�wK�t
���S�\�\�W�,�.D�E�,D��)�)�,D�F�,D�^
���R�W�W��_�&9�:�,�(�+�+�,�;�,�^
���W�R��,�.C�D�9+�H�%�%�9+�E�9+�x
���S�\�\�W�,�.D�E�
���nB��)�)�nB��F�nB�`
���S�\�\�W�,�.D�E�8��*�*�8�F�8�B
���S�\�\�W�,�.D�E�T@�8�$�$�T@�F�T@�n���"�8�,�,�"��"�>7�h�'�'�7� 1�(�+�+�1�$	����GJ�x� � �GJ��GJ�T	����z,��"�"�z,��z,�~
���O�P�	���W�R��,�.F�G�/��"�"�/�H�Q�/�
���W�R��/�N�G�B�
�4N�>�@�1�8�,�,�1�@�1�,
���W�R��,�.H�I�T�8�3�3�T�J�T�n
� 
���1�3�?�A�	����1�b�)�NG�X�.�.�NG�*�A�NG�b
���W�R�!4�5�7V�W�@/�H�%�%�@/�X�@/�F
���W�R��0�2L�M�����2�&�2�x�(�(�2�'�N�2�
���W�R��+�-B�C�����1�b�)�N�8�$�$�N�*�D�N�`
���W�R�!1�2�4P�Q�	�������*�,Q�R�����1�b�)�CA�8�$�$�CA�*�S�R�CA�J
F@�8�$�$�F@�P#3�H�%�%�#3�N	����n2��*�*�n2��n2�`
���W�R��+�-@�A�a&�(�+�+�a&�B�a&�H?(�(�+�+�?(�D
���W�R��0�D�F�	����&�&�(D�E�	�������(�*S�T�
4�H�%�%�
4�U�F�F�
4�*�8�$�$�*�D�8�$�$�D�$_�(�#�#�_�De&��"�"�e&�N
/��"�"�
/� 	����=B��!�!�=B��=B�D�2�y���*�z�*��z���M�M�O���Aj���H������E������G���3���^�$���I���
�+��I�"�{�{�*�G�n�+�����D��s~�o�!o�&o �+o4�o/�o4�p�(p"�o�
o�o�o� o,�+o,�/o4�4
p�p�p�p�"p.�-p.

Youez - 2016 - github.com/yon3zu
LinuXploit