Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.11/test/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.11/test/__pycache__/test_subprocess.cpython-311.opt-2.pyc

�

SԚge����ddlZddlmZddlmZddlmZddlmZddlmZddlmZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZ	ddlZn
#e $rdZYnwxYw	ddl!Z!n
#e $rdZ!YnwxYw	ddl"Z"n
#e $rdZ"YnwxYw	ddl#Z#n	#dZ#YnxYwej$rej%d	���ej&sej%d
���e
j'dkZ(e(rdZ)nd
Z)dZ*e+e,e-fZ.e
j/ddfa0d�Z1Gd�dej2��Z3Gd�de4��Z5Gd�de	j6��Z7Gd�de3��Z8Gd�de3��Z9d�Z:ej;e(d��Gd�de3����Z<ej=e(d ��Gd!�d"e3����Z>Gd#�d$ej2��Z?ej=e@ed%��d&��Gd'�d(e8����ZAej=e(d)��Gd*�d+e3����ZBGd,�d-e3��ZCeDd.krejE��dSdS)/�N)�mock)�support)�check_sanitizer)�
import_helper)�	os_helper)�warnings_helper)�FakePathztest is not helpful for PGOztest module requires subprocess�win32z@import msvcrt; msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY);�)�nonexisting_i_hope�-c�passc��tjd��}|�dStj|tj��r#tj|g��jdkr|fadSdSdS)N�truer)	�shutil�which�os�access�X_OK�
subprocess�run�
returncode�ZERO_RETURN_CMD)�
shell_trues �1/usr/local/lib/python3.11/test/test_subprocess.py�setUpModulerJsg����f�%�%�J�����
�	�*�b�g�&�&�(���
�|�$�$�/�1�4�4�%�-����(�(�4�4�c��eZdZd�Zd�ZdS)�BaseTestCasec�,�tj��dS�N)r�
reap_children��selfs r�setUpzBaseTestCase.setUpUs��	������rc��tsVtjD]}|����tj��|�tjd��|���tj��dS)Nzsubprocess._active not empty)	�	mswindowsr�_active�wait�_cleanup�assertFalse�
doCleanupsrr")r$�insts  r�tearDownzBaseTestCase.tearDownZs����	�"�*�
�
���	�	�������!�!�!�����"�$B�
�
�
�	
������������rN��__name__�
__module__�__qualname__r%r.�rrrrTs2������ � � �

 �
 �
 �
 �
 rrc��eZdZdS)�PopenTestExceptionN)r0r1r2r3rrr5r5gs�������Drr5c��eZdZ	d�ZdS)�PopenExecuteChildRaisesc� �td���)NzForced Exception for Test)r5)r$�args�kwargss   r�_execute_childz&PopenExecuteChildRaises._execute_childos�� �!<�=�=�=rN)r0r1r2r;r3rrr7r7ks(�������>�>�>�>�>rr7c�	�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zejd��d���Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z e!j"e#d��d���Z$e!j"e#d��d ���Z%e!j"e#d��d!���Z&d"�Z'd#�Z(d$�Z)d%�Z*d&�Z+d'�Z,e!j"e#d(��d)���Z-e!j"e#d(��d*���Z.d+�Z/e!j"e0j1e0j2kd,��d-���Z3e!j"e0j1e0j2kd,��e!j"e4j5��d.��d/�����Z6d0�Z7d1�Z8d2�Z9d3�Z:d4�Z;d5�Z<d6�Z=d7�Z>d8�Z?d9�Z@d:�ZAd;�ZBd<�ZCd=�ZDd>�ZEd?�ZFe!jGeHoeIeHd@��dA��dB���ZJe!jGeHoeIeHd@��dA��dC���ZKdD�ZLe!jGe0jMdEkdF��dG���ZNe!j"e0jMdEkdH��e!j"e4jOdI��dJkdK��e!j"ePdL�M��dN��dO�������ZQe!j"e4jOdI��dJkdP��e!j"ePdL�M��dN��dQ�����ZRdR�ZSdS�ZTe!jGe0jMdEkdF��dT���ZUdU�ZVdV�ZWdW�ZXdX�ZYdY�ZZdZ�Z[d[�Z\d\�Z]d]�Z^d^�Z_d_�Z`d`�Zada�Zbdb�Zcdc�Zddd�Zede�Zfdf�Zgdg�Zhdh�Zidi�Zjdj�Zkdk�Zldl�Zmdm�Zndn�Zodo�Zpejdp��dq���Zqdr�Zrds�Zsdt�Ztdu�Zudv�Zvdw�Zwdx�Zxdy�Zye!jGeIezdz��d{��e!jGeIe{d|��d}��e!jGeIe{d~��d��d��������Z|e!jGe{j}�~d�e{j��z��d���d����Z�e!j"e#d���d����Z�e!j"e#d���d����Z�d��Z�e!j"e4jOd���d���e�j�d���d������Z�e!jGeIe�d���d���d����Z�d�S)��ProcessTestCasec���tjttjtjtj���}	|�|jtj��|�|jtj��|�|j	tj��|j�
��|j�
��|j	�
��|���dS#|j�
��|j�
��|j	�
��|���wxYw)N��stdin�stdout�stderr)r�Popenr�PIPE�assertIsInstancer@�io�BufferedIOBaserArB�closer)�r$�ps  r�test_io_buffered_by_defaultz+ProcessTestCase.test_io_buffered_by_defaultus����_�#-�?�:�?�$.�O�
5�
5�
5��	��!�!�!�'�2�+<�=�=�=��!�!�!�(�B�,=�>�>�>��!�!�!�(�B�,=�>�>�>�
�G�M�M�O�O�O�
�H�N�N����
�H�N�N����
�F�F�H�H�H�H�H��
�G�M�M�O�O�O�
�H�N�N����
�H�N�N����
�F�F�H�H�H�H���s
�A/D
�
A!E.c���tjttjtjtjd���}	|�|jtj��|�|jtj��|�|j	tj��|j�
��|j�
��|j	�
��|���dS#|j�
��|j�
��|j	�
��|���wxYw)Nr)r@rArB�bufsize)rrCrrDrEr@rF�	RawIOBaserArBrHr)rIs  r�test_io_unbuffered_worksz(ProcessTestCase.test_io_unbuffered_works�s
����_�#-�?�:�?�$.�O�Q�
@�
@�
@��	��!�!�!�'�2�<�8�8�8��!�!�!�(�B�L�9�9�9��!�!�!�(�B�L�9�9�9�
�G�M�M�O�O�O�
�H�N�N����
�H�N�N����
�F�F�H�H�H�H�H��
�G�M�M�O�O�O�
�H�N�N����
�H�N�N����
�F�F�H�H�H�H���s
�A/D�A!E/c�t�tjtjddg��}|�|d��dS�Nr
�import sys; sys.exit(47)�/�r�call�sys�
executable�assertEqual�r$�rcs  r�
test_call_seqzProcessTestCase.test_call_seq�s=��
�_�c�n�d�8�:�;�;������R� � � � � rc�z�|�tjtjtjddgd���dS)Nr
�while True: pass皙�����?��timeout)�assertRaisesr�TimeoutExpiredrUrVrWr#s r�test_call_timeoutz!ProcessTestCase.test_call_timeout�sD��
	
���*�3�Z�_��>�4�1C�D�"%�	�	'�	'�	'�	'�	'rc�d�tjt��}|�|d��dS�Nr)r�
check_callrrXrYs  r�test_check_call_zeroz$ProcessTestCase.test_check_call_zero�s.��
�
"�?�
3�
3������Q�����rc��|�tj��5}tjtjddg��ddd��n#1swxYwY|�|jjd��dSrQ)	rar�CalledProcessErrorrfrVrWrX�	exceptionr�r$�cs  r�test_check_call_nonzeroz'ProcessTestCase.test_check_call_nonzero�s���
�
�
�z�<�
=�
=�	@���!�3�>�4�#=�#?�
@�
@�
@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@�	
�����/��4�4�4�4�4��"A�A�Ac��tjtjddg��}|�d|��|�td��5tjgd���ddd��n#1swxYwY|�td��5tjgd���ddd��dS#1swxYwYdS)	Nr
�
print('BDFL')�BDFLz2stdout argument not allowed, it will be overridden�rAz1check argument not allowed, it will be overriddenF��check)r�check_outputrVrW�assertIn�assertRaisesRegex�
ValueError�r$�outputs  r�test_check_outputz!ProcessTestCase.test_check_output�sU���(�����7�9�9���
�
�g�v�&�&�&�
�
#�
#�J�D�F�F�	5�	5��#�B�t�4�4�4�4�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5��
#�
#�J�C�E�E�	5�	5��#�B�e�4�4�4�4�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5�	5�	5s$�A6�6A:�=A:�C�C�Cc��|�tj��5}tjtjddg��ddd��n#1swxYwY|�|jjd��dS)Nr
zimport sys; sys.exit(5)�)	rarrirurVrWrXrjrrks  r�test_check_output_nonzeroz)ProcessTestCase.test_check_output_nonzero�s���
�
�
�z�<�
=�
=�	G���#��^�T�+D�E�
G�
G�
G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G����	G�	G�	G�	G�	
�����/��3�3�3�3�3rnc��tjtjddgtj���}|�d|��dS)Nr
�$import sys; sys.stderr.write('BDFL')�rBrq)rrurVrW�STDOUTrvrys  r�test_check_output_stderrz(ProcessTestCase.test_check_output_stderr�sH���(����'M�N�!�(�*�*�*��	
�
�
�g�v�&�&�&�&�&rc�&�tj��}|�|j��|�d��|�d��t
jtj	ddg|���}|�
d|��dS)N�pearrr
�6import sys; sys.stdout.write(sys.stdin.read().upper())�r@�PEAR)�tempfile�
TemporaryFile�
addCleanuprH�write�seekrrurVrWrv)r$�tfrzs   r�test_check_output_stdin_argz+ProcessTestCase.test_check_output_stdin_arg�s���
�
#�
%�
%�������!�!�!�
�������
����
�
�
��(����I�K������	
�
�
�g�v�&�&�&�&�&rc�x�tjtjddgd���}|�d|��dS)Nr
r�r���inputr��rrurVrWrvrys  r�test_check_output_input_argz+ProcessTestCase.test_check_output_input_arg�sH���(����I�K������	
�
�
�g�v�&�&�&�&�&rc�z�	tjtjddgd���}|�d|��dS)Nr
�3import sys; print('XX' if sys.stdin.read() else '')r�sXX�rrurVrW�assertNotInrys  r�test_check_output_input_nonez,ProcessTestCase.test_check_output_input_none�sM��J��(����F�H������	
�����'�'�'�'�'rc�z�tjtjddgdd���}|�d|��dS)Nr
r�T)r��text�XXr�rys  r�!test_check_output_input_none_textz1ProcessTestCase.test_check_output_input_none_text�sL���(����F�H���'�'�'��	
����v�&�&�&�&�&rc�z�tjtjddgdd���}|�d|��dS)Nr
r�T)r��universal_newlinesr�r�rys  r�/test_check_output_input_none_universal_newlinesz?ProcessTestCase.test_check_output_input_none_universal_newlines�sL���(����F�H��t�5�5�5��	
����v�&�&�&�&�&rc�|�tjtjddgddd���}|�d|��dS)Nr
zprint('foo')�utf-8�ignore)r��encoding�errors�foor�rys  r�,test_check_output_input_none_encoding_errorsz<ProcessTestCase.test_check_output_input_none_encoding_errors�sH���(����~�6��W�X�?�?�?��	
�
�
�e�V�$�$�$�$�$rc�:�|�t��5}tjtjddgtj���}|�d��ddd��n#1swxYwY|�d|j	j
d��dS)Nr
�print('will not be run')rrz-Expected ValueError when stdout arg supplied.rAr)rarxrrurVrWrA�failrvrjr9�r$rlrzs   r�test_check_output_stdout_argz,ProcessTestCase.test_check_output_stdout_arg�s���
�
�
�z�
*�
*�	G�a��,��^�T�+E�F��:�'�'�'�F�
�I�I�E�F�F�F�		G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G����	G�	G�	G�	G�
	
�
�
�h��� 0�� 3�4�4�4�4�4s�AA*�*A.�1A.c�"�tj��}|�|j��|�d��|�d��|�t��5}tj	tjddg|d���}|�d��ddd��n#1swxYwY|�
d|jjd��|�
d	|jjd��dS)
Nr�rr
r��hare�r@r��7Expected ValueError when stdin and input args supplied.r@r�)r�r�r�rHr�r�rarxrrurVrWr�rvrjr9�r$r�rlrzs    r�&test_check_output_stdin_with_input_argz6ProcessTestCase.test_check_output_stdin_with_input_args=��
�
#�
%�
%�������!�!�!�
�������
����
�
�
�
�
�
�z�
*�
*�	Q�a��,��^�T�+E�F��G�-�-�-�F�
�I�I�O�P�P�P�		Q�	Q�	Q�	Q�	Q�	Q�	Q�	Q�	Q�	Q�	Q����	Q�	Q�	Q�	Q�
	
�
�
�g�q�{�/��2�3�3�3��
�
�g�q�{�/��2�3�3�3�3�3s�2:B8�8B<�?B<�walltimec�$�|�tj��5}tjtjddgd���}|�d��ddd��n#1swxYwY|�|jj	d��dS)Nr
�Mimport sys, time
sys.stdout.write('BDFL')
sys.stdout.flush()
time.sleep(3600)�r_zExpected TimeoutExpired.rq)
rarrbrurVrWr�rXrjrzr�s   r�test_check_output_timeoutz)ProcessTestCase.test_check_output_timeouts����
�
�z�8�
9�
9�
	2�Q��,��^�T�(�)�����F�
�I�I�0�1�1�1�
	2�
	2�
	2�
	2�
	2�
	2�
	2�
	2�
	2�
	2�
	2����
	2�
	2�
	2�
	2�	
�����+�W�5�5�5�5�5s�9A%�%A)�,A)c��tj���}d|d<tjt
jddg|���}|�|d��dS)N�banana�FRUITr
z5import sys, os;sys.exit(os.getenv("FRUIT")=="banana")��env�)r�environ�copyrrUrVrWrX)r$�newenvrZs   r�test_call_kwargsz ProcessTestCase.test_call_kwargssg������"�"��"��w��
�_�c�n�d�G�H�"(�)�)�)��	
����Q�����rc�~�tj��5}|�ttjd���tjjjj}dg|dzz}|jttjg|�R�ddd��n#1swxYwY|�	|�
��d��dS)Nr�)�invalid_arg_namerr)r�captured_stderrra�	TypeErrorrrC�__init__�__code__�co_argcountrX�getvalue)r$�s�argcount�
too_many_argss    r�test_invalid_argsz!ProcessTestCase.test_invalid_args)s����
$�
&�
&�	K�!����i��)9�A��N�N�N�!�'�0�9�E�H��C�8�a�<�0�M��D��i��)9�J�M�J�J�J�J�		K�	K�	K�	K�	K�	K�	K�	K�	K�	K�	K����	K�	K�	K�	K�
	
��������r�*�*�*�*�*s�A*B
�
B�Bc�P�tjtjddgtjtj���}|�|jj��|�|jj��|�	��|�
|jd��dS)Nr
�print("banana")�rArB)rrCrVrWrDr�rArHrBr)rXr@rIs  r�test_stdin_nonezProcessTestCase.test_stdin_none3s�����c�n�d�4E�F� *��
��
I�
I�
I��������'�'�'�������'�'�'�	�����������$�'�'�'�'�'rc��d}tjtjd|gtjtj���}|�|jj��|�|jj��|�	��\}}|�
|jd|��|�
|���d��dS)Nz�import sys; from subprocess import Popen, PIPE;p = Popen([sys.executable, "-c", "print('test_stdout_none')"],          stdin=PIPE, stderr=PIPE);p.wait(); assert p.stdout is None;r
r�rstest_stdout_none�
rrCrVrWrDr�rArHrB�communicaterXr�rstrip�r$�coderJ�out�errs     r�test_stdout_nonez ProcessTestCase.test_stdout_none<s���5��
��c�n�d�D�9�$.�O�J�O�
M�
M�
M��������'�'�'�������'�'�'��=�=�?�?���S������q�#�.�.�.���������':�;�;�;�;�;rc�P�tjtjddgtjtj���}|�|jj��|�|jj��|�	��|�
|jd��dS)Nr
r��r@rA)rrCrVrWrDr�rArHr@r)rXrBrIs  r�test_stderr_nonez ProcessTestCase.test_stderr_noneSs�����c�n�d�4E�F�)��z��
H�
H�
H��������'�'�'������
�&�&�&�	�����������4�(�(�(�(�(rc��|dgz}tj|fi|��}|���|�d|j��dS�NrRrS)rrCr)rXr)r$�pre_argsr:r9rJs     r�_assert_pythonzProcessTestCase._assert_python\sU���5�6�6����T�,�,�V�,�,��	����������Q�\�*�*�*�*�*rc���tj�tj�tj��d��}|�|dgtj���dS�N�doesnotexistr
�rW)r�path�join�dirnamerVrWr��r$r�s  r�test_executablezProcessTestCase.test_executabledsT���w�|�|�B�G�O�O�C�N�$C�$C�$2�4�4�����\�4�0�S�^��L�L�L�L�Lrc��tj�tj�tj��d��}|�|dgtjtj�����dSr�)rr�r�r�rVrWr��fsencoder�s  r�test_bytes_executablez%ProcessTestCase.test_bytes_executableosn���w�|�|�B�G�O�O�C�N�$C�$C�$2�4�4�����\�4�0�')�{�3�>�'B�'B�	�	D�	D�	D�	D�	Drc���tj�tj�tj��d��}|�|dgttj�����dSr�)rr�r�r�rVrWr�r	r�s  r�test_pathlike_executablez(ProcessTestCase.test_pathlike_executableusl���w�|�|�B�G�O�O�C�N�$C�$C�$2�4�4�����\�4�0�'/���'?�'?�	�	A�	A�	A�	A�	Arc��tjdg}|�|��|�t|j|t
d���dS)Nr
rr�)rVrWr�ra�NONEXISTING_ERRORS�NONEXISTING_CMD)r$r�s  r� test_executable_takes_precedencez0ProcessTestCase.test_executable_takes_precedence{s^���N�D�)�����H�%�%�%����,��-�x�%4�Q�%7�	�	9�	9�	9�	9�	9rz"executable argument replaces shellc�J�|�gtjd���dS�NT)rW�shell)r�rVrWr#s r�test_executable_replaces_shellz.ProcessTestCase.test_executable_replaces_shell�s'��	
���B�3�>���F�F�F�F�Frc�n�|�gtjtj��d���dSr�)r�rr�rVrWr#s r�$test_bytes_executable_replaces_shellz4ProcessTestCase.test_bytes_executable_replaces_shell�s<�����B�2�;�s�~�+F�+F�"&�	�	(�	(�	(�	(�	(rc�d�|�gttj��d���dSr�)r�r	rVrWr#s r�'test_pathlike_executable_replaces_shellz7ProcessTestCase.test_pathlike_executable_replaces_shell�s:�����B�8�C�N�+C�+C�"&�	�	(�	(�	(�	(�	(rc��tj|��5tj��cddd��S#1swxYwYdSr!)r�
change_cwdr�getcwd)r$�cwds  r�_normalize_cwdzProcessTestCase._normalize_cwd�s����
!�#�
&�
&�	�	��9�;�;�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�5�9�9c��tj�tj��}tj�|��Sr!)rr��realpathrVrW�split)r$�python_paths  r�_split_python_pathz"ProcessTestCase._split_python_path�s-���g�&�&�s�~�6�6���w�}�}�[�)�)�)rc��tj|ddgfdtji|��}|�|jj��|���|�d|j��tj
j}|�||��||j����
������dS)Nr
zcimport os, sys; buf = sys.stdout.buffer; buf.write(os.getcwd().encode()); buf.flush(); sys.exit(47)rArS)rrCrDr�rArHr)rXrrr��normcase�read�decode)r$�expected_cwd�
python_argr:rJrs      r�_assert_cwdzProcessTestCase._assert_cwd�s���
��j�$�-�.�
(�
(�&0�_�

(�!'�
(�
(��	
������'�'�'�	����������Q�\�*�*�*��7�#�������,�/�/�!��!�(�-�-�/�/�"8�"8�":�":�;�;�	=�	=�	=�	=�	=rc��tj��}|�|��}|�|tj|���dS�N�r�)r��
gettempdirrrrVrW�r$�temp_dirs  r�test_cwdzProcessTestCase.test_cwd�sF���&�(�(���&�&�x�0�0������3�>�x��@�@�@�@�@rc��tj��}|�|��}|�|tjt
j|�����dSr)r�rrrrVrWrr�rs  r�test_cwd_with_bytesz#ProcessTestCase.test_cwd_with_bytes�sP���&�(�(���&�&�x�0�0������3�>�r�{�8�7L�7L��M�M�M�M�Mrc��tj��}|�|��}|�|tjt
|�����dSr)r�rrrrVrWr	rs  r�test_cwd_with_pathlikez&ProcessTestCase.test_cwd_with_pathlike�sN���&�(�(���&�&�x�0�0������3�>�x��7I�7I��J�J�J�J�Jrz"pending resolution of issue #15533c���|���\}}tj�tj|��}tj��5}|�ttj
|g��|�ttj
|g|���|�|��}|�|||���ddd��dS#1swxYwYdSr�
rrr�r��curdirr�temp_cwdra�FileNotFoundErrorrrCrr)r$�
python_dir�python_base�
rel_python�	wrong_dirs     r�test_cwd_with_relative_argz*ProcessTestCase.test_cwd_with_relative_arg�s5��#'�"9�"9�";�";��
�K��W�\�\�"�)�[�9�9�
�
�
�
!�
!�	E�Y�
���/��1A�)�l�
,�
,�
,����/��1A�)�l�	�
�
;�
;�
;��,�,�Z�8�8�J����Z����D�D�D�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E����	E�	E�	E�	E�	E�	Es�A>C � C$�'C$c���|���\}}tj�tj|��}d}tj��5}|�ttj
|g|���|�ttj
|g||���|�|��}|�||||���ddd��dS#1swxYwYdS)N�somethingyoudonthaver��rWr�r)r$rrr�doesntexistr s      r�!test_cwd_with_relative_executablez1ProcessTestCase.test_cwd_with_relative_executable�sA��#'�"9�"9�";�";��
�K��W�\�\�"�)�[�9�9�
�,��
�
�
!�
!�
	-�Y�
���/��1A�*�m�
�
�
D�
D�
D����/��1A�*�m�
�"+�
�
-�
-�
-��,�,�Z�8�8�J����Z���!+�
�
-�
-�
-�
	-�
	-�
	-�
	-�
	-�
	-�
	-�
	-�
	-�
	-�
	-�
	-����
	-�
	-�
	-�
	-�
	-�
	-s�BC&�&C*�-C*c���|���\}}tj�||��}tj�tj|��}tj��5}|�ttj
|g|���|�|��}|�|||���ddd��dS#1swxYwYdSr)
rrr�r�rrrrarrrCrr)r$rr�
abs_pythonrr s      r�test_cwd_with_absolute_argz*ProcessTestCase.test_cwd_with_absolute_arg�s%��#'�"9�"9�";�";��
�K��W�\�\�*�k�:�:�
��W�\�\�"�)�[�9�9�
�
�
�
!�
!�	C�Y�
���/��1A�)�l�	�
�
;�
;�
;��+�+�I�6�6�I����Y�
�	��B�B�B�
	C�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C����	C�	C�	C�	C�	C�	Cs�5AC�C� CzTest is not venv-compatiblec��|���\}}|�|��}|�|dtj|���dS)Nr#r$)rrrrVrW)r$rrs   r�test_executable_with_cwdz(ProcessTestCase.test_executable_with_cwd�se��#'�"9�"9�";�";��
�K��(�(��4�4�
�����%;�$'�N�
�	�	D�	D�	D�	D�	Drz#need an installed Python. See #7774c�l�|�tj��dtj���dS)Nr#r�)rrr�rVrWr#s r�test_executable_without_cwdz+ProcessTestCase.test_executable_without_cwds;��	
�������&<�$'�N�	�	4�	4�	4�	4�	4rc�$�tjtjddgtj���}|j�d��|j���|���|�	|j
d��dS)Nr
�0import sys; sys.exit(sys.stdin.read() == "pear")r�r�r�)rrCrVrWrDr@r�rHr)rXrrIs  r�test_stdin_pipezProcessTestCase.test_stdin_pipe
s}����c�n�d�K�M�(�o�
/�
/�
/��	
��
�
�g����	��
�
����	�����������q�)�)�)�)�)rc��tj��}|�|j��|���}tj|d��tj|dd��tj	tjddg|���}|���|�
|jd��dS�Nr�rr
r/r�r�)r�r�r�rH�filenorr��lseekrrCrVrWr)rXr�r$r��drJs    r�test_stdin_filedesz"ProcessTestCase.test_stdin_filedess���
�
#�
%�
%�������!�!�!��I�I�K�K��
���G����
���A�q������c�n�d�K�M� �
"�
"�
"��	
�����������q�)�)�)�)�)rc�X�tj��}|�|j��|�d��|�d��t
jtj	ddg|���}|�
��|�|jd��dSr2)
r�r�r�rHr�r�rrCrVrWr)rXr�r$r�rJs   r�test_stdin_fileobjz"ProcessTestCase.test_stdin_fileobj!s���
�
#�
%�
%�������!�!�!�
�������
����
�
�
���c�n�d�K�M�!�
#�
#�
#��	
�����������q�)�)�)�)�)rc���tjtjddgtj���}|5|�|j���d��ddd��dS#1swxYwYdS)Nr
�&import sys; sys.stdout.write("orange")rr�orange�rrCrVrWrDrXrArrIs  r�test_stdout_pipez ProcessTestCase.test_stdout_pipe-s�����c�n�d�B�D� *��
1�
1�
1���	9�	9����Q�X�]�]�_�_�i�8�8�8�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9����	9�	9�	9�	9�	9�	9��.A+�+A/�2A/c�t�tj��}|�|j��|���}tjtjddg|���}|�	��tj|dd��|�tj
|d��d��dS)Nr
r<rrr�r=�r�r�r�rHr3rrCrVrWr)rr4rXrr5s    r�test_stdout_filedesz#ProcessTestCase.test_stdout_filedes5s���
�
#�
%�
%�������!�!�!��I�I�K�K����c�n�d�B�D� !�
#�
#�
#��	
������
���A�q����������D�)�)�9�5�5�5�5�5rc�H�tj��}|�|j��t	jtjddg|���}|���|�	d��|�
|���d��dS)Nr
r<rrrr=�r�r�r�rHrrCrVrWr)r�rXrr9s   r�test_stdout_fileobjz#ProcessTestCase.test_stdout_fileobjAs���
�
#�
%�
%�������!�!�!���c�n�d�B�D� "�
$�
$�
$��	
������
����
�
�
���������I�.�.�.�.�.rc���tjtjddgtj���}|5|�|j���d��ddd��dS#1swxYwYdS)Nr
�*import sys; sys.stderr.write("strawberry")r��
strawberry)rrCrVrWrDrXrBrrIs  r�test_stderr_pipez ProcessTestCase.test_stderr_pipeLs�����c�n�d�F�H� *��
1�
1�
1���	=�	=����Q�X�]�]�_�_�m�<�<�<�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=����	=�	=�	=�	=�	=�	=r@c�t�tj��}|�|j��|���}tjtjddg|���}|�	��tj|dd��|�tj
|d��d��dS)Nr
rIr�rrBrJrCr5s    r�test_stderr_filedesz#ProcessTestCase.test_stderr_filedesTs���
�
#�
%�
%�������!�!�!��I�I�K�K����c�n�d�F�H� !�
#�
#�
#��	
������
���A�q����������D�)�)�=�9�9�9�9�9rc�H�tj��}|�|j��t	jtjddg|���}|���|�	d��|�
|���d��dS)Nr
rIr�rrJrFr9s   r�test_stderr_fileobjz#ProcessTestCase.test_stderr_fileobj`s���
�
#�
%�
%�������!�!�!���c�n�d�F�H� "�
$�
$�
$��	
������
����
�
�
���������M�2�2�2�2�2rc�2�tjtjddgtjtj���}|���\}}|�|d��|�|d��|�|jd��dS)Nr
z�import sys, subprocess;rc = subprocess.call([sys.executable, "-c",    "import sys;"    "sys.stderr.write('42')"],    stderr=subprocess.STDOUT);sys.exit(rc)r�s42rr�rrCrVrWrDr�rXr�r$rJrArBs    r�,test_stderr_redirect_with_no_stdout_redirectz<ProcessTestCase.test_stderr_redirect_with_no_stdout_redirectks���
��c�n�d�-�.�%/�O�$.�O�
5�
5�
5���������������'�'�'������%�%�%������q�)�)�)�)�)rc��tjtjddgtjtj���}|5|�|j���d��ddd��dS#1swxYwYdS)Nr
�Rimport sys;sys.stdout.write("apple");sys.stdout.flush();sys.stderr.write("orange")r��appleorange)	rrCrVrWrDr�rXrArrIs  r�test_stdout_stderr_pipez'ProcessTestCase.test_stdout_stderr_pipe�s�����c�n�d�;�<�
%/�O�$.�$5�

7�
7�
7���	>�	>����Q�X�]�]�_�_�n�=�=�=�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>����	>�	>�	>�	>�	>�	>s�.A6�6A:�=A:c�J�tj��}|�|j��t	jtjddg||���}|���|�	d��|�
|���d��dS)Nr
rUr�rrVrFr9s   r�test_stdout_stderr_filez'ProcessTestCase.test_stdout_stderr_file�s���
�
#�
%�
%�������!�!�!���c�n�d�;�<�
%'�$&�

(�
(�
(��	
������
����
�
�
���������N�3�3�3�3�3rc��d}tjtjd|gtjtj���}|�|jj��|�|jj��|�	��\}}|�
|jd|��|�
|���d��dS)Nz�import sys, subprocess; rc = subprocess.call([sys.executable, "-c",     "import os, sys; sys.exit(os.write(sys.stdout.fileno(), b'test with stdout=1'))"], stdout=1); assert rc == 18r
r�rstest with stdout=1r�r�s     r�test_stdout_filedes_of_stdoutz-ProcessTestCase.test_stdout_filedes_of_stdout�s���"��

��c�n�d�D�9�$.�O�J�O�
M�
M�
M��������'�'�'�������'�'�'��=�=�?�?���S������q�#�.�.�.���������'<�=�=�=�=�=rc��tjtjddgtj���}|���|�|jd��dS)Nr
z'for i in range(10240):print("x" * 1024)rr)rrCrVrW�DEVNULLr)rXrArIs  r�test_stdout_devnullz#ProcessTestCase.test_stdout_devnull�s^����c�n�d�2�3�&0�%7�
9�
9�
9��	
�����������4�(�(�(�(�(rc��tjtjddgtj���}|���|�|jd��dS)Nr
z=import sys
for i in range(10240):sys.stderr.write("x" * 1024)r�)rrCrVrWr]r)rXrBrIs  r�test_stderr_devnullz#ProcessTestCase.test_stderr_devnull�s^����c�n�d�=�>�&0�%7�	
9�
9�
9��
	
�����������4�(�(�(�(�(rc��tjtjddgtj���}|���|�|jd��dS)Nr
zimport sys;sys.stdin.read(1)r�)rrCrVrWr]r)rXr@rIs  r�test_stdin_devnullz"ProcessTestCase.test_stdin_devnull�s^����c�n�d�2�3�%/�$6�
8�
8�
8��	
�����������$�'�'�'�'�'r�F_GETPIPE_SZz%fcntl.F_GETPIPE_SZ required for test.c��tj��\}}	tj|tj��}tj|��tj|��n-#tj|��tj|��wxYw|dz}|dkrtjd���tjtj
ddgtjtjtj|���}	|j|j
|jfD]G}|�tj|���tj��|���H|j�d��|j���|j
���|j���|���|���dS#|���|���wxYw)N�iz+default pipesize too small to perform test.r
�Qimport sys; sys.stdin.read(); sys.stdout.write("out"); sys.stderr.write("error!")�r@rArB�pipesizer�)r�pipe�fcntlrcrH�unittest�SkipTestrrCrVrWrDr@rArBrXr3r��killr))r$�test_pipe_r�test_pipe_w�pipesize_defaultrhrJ�fifos       r�test_pipesizeszProcessTestCase.test_pipesizes�s���$&�7�9�9� ��[�	"�$�{�;��8J�K�K���H�[�!�!�!��H�[�!�!�!�!��
�H�[�!�!�!��H�[�!�!�!�!����#�q�(���c�>�>��#�=�?�?�
?���
�^�T�*�
+��/�*�/��?�X�
7�
7�
7��	���!�(�A�H�5�
�
��� � ��K����
�
�u�/A�B�B������
�G�M�M�'�"�"�"�
�G�M�M�O�O�O�
�H�N�N����
�H�N�N����
�F�F�H�H�H�
�F�F�H�H�H�H�H��
�F�F�H�H�H�
�F�F�H�H�H�H���s�A � *B
�1CG�*Hc�6�tjtjddgtjtjtjd���}|5	tj��\}}	tj|tj��}tj|tj��}tj	|��tj	|��n-#tj	|��tj	|��wxYw|�
tj|j���tj��|��|�
tj|j
���tj��|��|�
tj|j���tj��|��|���n#|���wxYw	ddd��dS#1swxYwYdS)Nr
rf���rg)rrCrVrWrDrrirjrcrHrXr@r3rArBrm)r$�proc�fp_r�fp_w�default_read_pipesize�default_write_pipesizes      r�test_pipesize_defaultz%ProcessTestCase.test_pipesize_default�s����
�^�T�*�
+��/�*�/��?�R�1�1�1���	�	�
��W�Y�Y�
��d�#�,1�K��e�>P�,Q�,Q�)�-2�[��u�?Q�-R�-R�*��H�T�N�N�N��H�T�N�N�N�N���H�T�N�N�N��H�T�N�N�N�N����� � ��K��
� 1� 1� 3� 3�U�5G�H�H�)�+�+�+�� � ��K��� 2� 2� 4� 4�e�6H�I�I�*�,�,�,�� � ��K��� 2� 2� 4� 4�e�6H�I�I�*�,�,�,��	�	�������	�	���������-	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	sC�H�	G'� >C�)G'�*C1�1C!G'�H�'G=�=H�H�Hc�4�tj���}d|d<tjt
jddgtj|���5}|���\}}|�	|d��ddd��dS#1swxYwYdS)N�oranger�r
�2import sys,os;sys.stdout.write(os.getenv("FRUIT"))�rAr�r=)
rr�r�rrCrVrWrDr�rX�r$r�rJrArBs     r�test_envzProcessTestCase.test_env
s�������"�"��"��w��
�
�s�~�t� F�G�&0�_�"(�	*�*�*�	0�./��]�]�_�_�N�F�F����V�Y�/�/�/�
	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0����	0�	0�	0�	0�	0�	0s�.B
�
B�Br
zWindows only issuec�`�tj���}d|d<d|d<d|d<d|d<tjgd	�tj|�
��5}|���\}}|�|���d��ddd��dS#1swxYwYdS)N�cherry�fRUit�lemon�fruitr|r�r��frUit��CMDz/c�SETr�r~sfrUit=banana)	rr�r�rrCrDr�rX�strip)r$r�rJrA�_s     r�test_win32_duplicate_envsz)ProcessTestCase.test_win32_duplicate_envss�������"�"��"��w��!��w��"��w��"��w��
�
�;�;�;�%/�_�"(�*�*�*�	>�-.��
�
���I�F�A����V�\�\�^�^�_�=�=�=�		>�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>����	>�	>�	>�	>�	>�	>s�AB#�#B'�*B'z#cannot test an empty env on Windows�Py_ENABLE_SHAREDr�zEThe Python shared library cannot be loaded with an empty environment.T)�addressz)AddressSanitizer adds to the environment.c���	d��tjtjddgtji���5}|���\}}t
|�����}|�|t���fd�|D��}|�
|g��ddd��dS#1swxYwYdS)Nc�V�	d|vp$d|vp |dkp|�d��p|dkS)N�	VERSIONER�__CF�
LD_PRELOAD�SANDBOX�LC_CTYPE)�
startswith)�ns r�is_env_var_to_ignorez<ProcessTestCase.test_empty_env.<locals>.is_env_var_to_ignore1sL��L� �1�$�$��!��$���%�$�)*���i�)@�)@�$���O�
%rr
z)import os; print(list(os.environ.keys()))r~c�*��g|]}�|���
|��Sr3r3)�.0�kr�s  �r�
<listcomp>z2ProcessTestCase.test_empty_env.<locals>.<listcomp>@s8���?�?�?�Q�&:�&:�1�&=�&=�?�q�?�?�?r)rrCrVrWrDr��evalr�rE�listrX)r$rJrArB�child_env_namesr�s     @r�test_empty_envzProcessTestCase.test_empty_env's"���	:�	%�	%�	%��
�s�~�t�J�L�%/�_�"�>�>�>�	2�AB��]�]�_�_�N�F�F�"�6�<�<�>�>�2�2�O��!�!�/�4�8�8�8�?�?�?�?�/�?�?�?�O����_�b�1�1�1�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2����	2�	2�	2�	2�	2�	2s�A8B9�9B=�B=zLThe Python shared library cannot be loaded without some system environments.c�H�ddi}tjddg}tjdkrgd�}tj|tjtj|���5}|���\}}|jrTtj	rHtd|�d	d
����td|�d	d
����|�|jd��|�|�
��d
��ddd��dS#1swxYwYdS)Nr�r|r
z;import sys,os;sys.stdout.write("fruit="+os.getenv("fruit"))r
r�)rArBr�zSTDOUT:�ascii�replacezSTDERR:rsfruit=orange)rVrW�platformrrCrDr�rr�verbose�printr	rXr�)r$r��cmdrJrArBs      r�test_one_environment_variablez-ProcessTestCase.test_one_environment_variableDsV���8�$���~�t� O�P���<�7�"�"�/�/�/�C�
�
�c�*�/�*�/�W]�
^�
^�
^�	>�bc��]�]�_�_�N�F�F��|�
D���
D��i����w�	�!B�!B�C�C�C��i����w�	�!B�!B�C�C�C����Q�\�1�-�-�-����V�\�\�^�^�_�=�=�=�
	>�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>����	>�	>�	>�	>�	>�	>s�B6D�D�Dc�^�tjdz}|�t��5t	j|ddg��ddd��n#1swxYwY|�t��5t	jtjddg��ddd��dS#1swxYwYdS)N�r
rzpass#)rVrWrarxrrC)r$r�s  r�test_invalid_cmdz ProcessTestCase.test_invalid_cmdXs7���n�t�#��
�
�
�z�
*�
*�	2�	2���c�4��0�1�1�1�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2����	2�	2�	2�	2��
�
�z�
*�
*�	@�	@���c�n�d�I�>�?�?�?�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@�	@�	@s#�A�A�A�3"B"�"B&�)B&c���tj���}d|d<|�t��5tjt|���ddd��n#1swxYwYtj���}d|d<|�t��5tjt|���ddd��n#1swxYwYtj���}d|d<|�t��5tjt|���ddd��n#1swxYwYtj���}d|d<tjtj	d	d
gt
j
|���5}|���\}}|�|d��ddd��dS#1swxYwYdS)
N�cabbagezFRUITVEGETABLEr�zorangeVEGETABLE=cabbager�r�zFRUIT=ORANGEzorange=lemonr
z3import sys, os;sys.stdout.write(os.getenv("FRUIT"))r~sorange=lemon)
rr�r�rarxrrCrrVrWrDr�rXrs     r�test_invalid_envz ProcessTestCase.test_invalid_envbs�������"�"��%.��!�"�
�
�
�z�
*�
*�	:�	:���_�&�9�9�9�9�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:����	:�	:�	:�	:�����"�"��5��w��
�
�
�z�
*�
*�	:�	:���_�&�9�9�9�9�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:����	:�	:�	:�	:�����"�"��!(��~��
�
�
�z�
*�
*�	:�	:���_�&�9�9�9�9�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:����	:�	:�	:�	:�����"�"��(��w��
�
�s�~�t� F�G�&0�_�"(�	*�*�*�	6�./��]�]�_�_�N�F�F����V�_�5�5�5�
	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6����	6�	6�	6�	6�	6�	6sG�A&�&A*�-A*�.C�C�C�E�E
�
E
�".G�G!�$G!c���tj���}d|d<|�t��5tjt|���ddd��n#1swxYwYtj���}d|d<|�t��5tjt|���ddd��dS#1swxYwYdS)Nr�zFRUIT=VEGETABLEr�z==FRUIT)rr�r�rarxrrCr)r$r�s  r�test_win32_invalid_envz&ProcessTestCase.test_win32_invalid_env�sJ������"�"��$-�� �!�
�
�
�z�
*�
*�	:�	:���_�&�9�9�9�9�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:����	:�	:�	:�	:�����"�"��%��y��
�
�
�z�
*�
*�	:�	:���_�&�9�9�9�9�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:����	:�	:�	:�	:�	:�	:s#�A&�&A*�-A*�.C�C�Cc��tjtjddgtj���}|�d��|�|jd��dS)Nr
z/import sys;sys.exit(sys.stdin.read() == "pear")r�r�r�rQrIs  r�test_communicate_stdinz&ProcessTestCase.test_communicate_stdin�sd����c�n�d�E�F�$.�?�
4�
4�
4��	
�
�
�g���������q�)�)�)�)�)rc���tjtjddgtj���}|���\}}|�|d��|�|d��dS)Nr
z)import sys; sys.stdout.write("pineapple")rr�	pineapple�rrCrVrWrDr�rXrRs    r�test_communicate_stdoutz'ProcessTestCase.test_communicate_stdout�ss����c�n�d�I�K�$.�O�
5�
5�
5���=�=�?�?���������.�.�.������&�&�&�&�&rc���tjtjddgtj���}|���\}}|�|d��|�|d��dS)Nr
z)import sys; sys.stderr.write("pineapple")r�r�r�rRs    r�test_communicate_stderrz'ProcessTestCase.test_communicate_stderr�ss����c�n�d�I�K�$.�O�
5�
5�
5���=�=�?�?���������&�&�&������.�.�.�.�.rc���tjtjddgtjtjtj���}|�|jj��|�|jj��|�|j	j��|�
d��\}}|�|d��|�|d��dS)Nr
zNimport sys,os;sys.stderr.write("pineapple");sys.stdout.write(sys.stdin.read())r?�bananar�)rrCrVrWrDr�rArHrBr@r�rXrRs    r�test_communicatez ProcessTestCase.test_communicate�s�����c�n�d�C�D�$.�?�$.�O�$.�O�

5�
5�
5��	
������'�'�'�������'�'�'������
�&�&�&��=�=��3�3���������+�+�+������.�.�.�.�.rc��tjtjddgdtjtjtj���}|�tj|jdd���|���\}}|�|d��|�|�	��d��dS)	Nr
z~import sys,os,time;sys.stderr.write("pineapple\n");time.sleep(1);sys.stderr.write("pear\n");sys.stdout.write(sys.stdin.read())T)r�r@rArBr�g333333�?r_spineapple
pear
)
rrCrVrWrDrarbr�rX�encoderRs    r�test_communicate_timeoutz(ProcessTestCase.test_communicate_timeout�s�����c�n�d�C�D�15�#-�?�$.�O�$.�O�	
5�	
5�	
5��	
���*�3�Q�]�H�"%�	�	'�	'�	'��=�=�?�?���������*�*�*���������*>�?�?�?�?�?rc�"�tjtjddgtj���}|�tj|jd���|���\}}|�t|��d��dS)Nr
z�import sys,os,time;sys.stdout.write("a" * (64 * 1024));time.sleep(0.2);sys.stdout.write("a" * (64 * 1024));time.sleep(0.2);sys.stdout.write("a" * (64 * 1024));time.sleep(0.2);sys.stdout.write("a" * (64 * 1024));rrg�������?r_i)
rrCrVrWrDrarbr�rX�len)r$rJrAr�s    r�%test_communicate_timeout_large_outputz5ProcessTestCase.test_communicate_timeout_large_output�s�����c�n�d�E�F�%/�O�	
5�	
5�	
5��	
���*�3�Q�]�C��P�P�P��m�m�o�o��������V���m�4�4�4�4�4rc���dD]�}dD]�}dD]�}i}|rtj|d<|rtj|d<|rtj|d<|s�:tjtfi|��}|���|j�|�|jj��|j�|�|jj��|j	�|�|j	j���،݌�dS)N�FTr@rArB)
rrDrCrr�r@�
assertTrue�closedrArB)r$�
stdin_pipe�stdout_pipe�stderr_pipe�optionsrJs      r�test_communicate_pipe_fd_leakz-ProcessTestCase.test_communicate_pipe_fd_leak�s��'�	9�	9�J�,�
9�
9��#0�9�9�K� �G�!�;�+5�?���(�"�<�,6�O���)�"�<�,6�O���)�"�!� �"�(��D�D�G�D�D�A��M�M�O�O�O��w�*�������7�7�7��x�+�������8�8�8��x�+�������8�8�8��#9�
9�	9�	9rc���tjtjddg��}|���\}}|�|d��|�|d��dS)Nr
rR)rrCrVrWr�rXrRs    r�test_communicate_returnsz(ProcessTestCase.test_communicate_returns�sf����c�n�d�8�:�
;�
;���=�=�?�?���������&�&�&������&�&�&�&�&rc�V�tj��\}}tj|��tj|��tjt
jddtjzgtj	tj	tj	���}|�
|jj��|�
|jj��|�
|j
j��dtjz}|�|��\}}|�||��dS)Nr
zpimport sys,os;sys.stdout.write(sys.stdin.read(47));sys.stderr.write("x" * %d);sys.stdout.write(sys.stdin.read())r?�a)rrirHrrCrVrWr�
PIPE_MAX_SIZErDr�rArBr@r�rX)r$�x�yrJ�string_to_writerArBs       r�test_communicate_pipe_bufz)ProcessTestCase.test_communicate_pipe_buf�s����w�y�y���1�
������
��������c�n�d�C�&�3�	4�5�$.�?�$.�O�$.�O�
5�
5�
5��	
������'�'�'�������'�'�'������
�&�&�&���!6�6���=�=��9�9���������1�1�1�1�1rc��tjtjddgtjtjtj���}|�|jj��|�|jj��|�|j	j��|j	�
d��|�d��\}}|�|d��|�|d��dS)Nr
z0import sys,os;sys.stdout.write(sys.stdin.read())r?r�ssplitsbananasplitr)
rrCrVrWrDr�rArHrBr@r�r�rXrRs    r�test_writes_before_communicatez.ProcessTestCase.test_writes_before_communicate
s�����c�n�d�C�D�$.�?�$.�O�$.�O�
5�
5�
5��	
������'�'�'�������'�'�'������
�&�&�&�	��
�
�i� � � ��=�=��2�2���������0�0�0������%�%�%�%�%rc�H�tjddtzdzg}dD�]�}tj|fidtjdtj|di��}|5|j�d��|j���|�	|j
���d��|j�d	��|j���|�
|j
j��|�	|j
���d
��|�	|j
�d��d	��|�	|j
���d��ddd��n#1swxYwY���dS)
Nr
�import sys,os;a@buf = sys.stdout.buffer;buf.write(sys.stdin.readline().encode());buf.flush();buf.write(b"line2\n");buf.flush();buf.write(sys.stdin.read().encode());buf.flush();buf.write(b"line4\n");buf.flush();buf.write(b"line5\r\n");buf.flush();buf.write(b"line6\r");buf.flush();buf.write(b"\nline7");buf.flush();buf.write(b"\nline8");)r�r�r@rATzline1
zline3
zline2
�zline4
line5
line6
line7
line8)rVrW�	SETBINARYrrCrDr@r��flushrXrA�readlinerHr�r)r$r9�extra_kwargrJs    r� test_universal_newlines_and_textz0ProcessTestCase.test_universal_newlines_and_texts����N�D��y�(�
&�
&�'��(:�	F�	F�K�� ��>�>�'�:�?�*2�J�O�*5�t�*=�>�>�A��
F�
F���
�
�i�(�(�(���
�
����� � ���!2�!2�!4�!4�i�@�@�@���
�
�i�(�(�(���
�
����������/�/�/�� � ���!2�!2�!4�!4�!*�,�,�,�� � �����q�!1�!1�!*�,�,�,�� � �������!D�F�F�F�
F�
F�
F�
F�
F�
F�
F�
F�
F�
F�
F����
F�
F�
F�
F��		F�	Fs�D;F�F	�F	c�d�tjtjddtzdzgtjtjd���}|�|jj��|�|j	j��|�
��\}}|�|d��dS)Nr
r�z�buf = sys.stdout.buffer;buf.write(b"line2\n");buf.flush();buf.write(b"line4\n");buf.flush();buf.write(b"line5\r\n");buf.flush();buf.write(b"line6\r");buf.flush();buf.write(b"\nline7");buf.flush();buf.write(b"\nline8");r�)rBrAr�z#line2
line4
line5
line6
line7
line8)rrCrVrWr�rDr�rArHrBr�rXrRs    r�#test_universal_newlines_communicatez3ProcessTestCase.test_universal_newlines_communicateDs�����c�n�d�.��:�8�8�
9�%/�O�$.�O�01�!
3�
3�
3��"	
������'�'�'�������'�'�'��=�=�?�?��������C�	E�	E�	E�	E�	Erc��tjtjddtztjd��zgtjd���}|�d��\}}|�	|j
d��dS)Nr
r�a
                               s = sys.stdin.readline()
                               assert s == "line1\n", repr(s)
                               s = sys.stdin.read()
                               assert s == "line3\n", repr(s)
                              r�)r@r��line1
line3
r)rrCrVrWr��textwrap�dedentrDr�rXrrRs    r�)test_universal_newlines_communicate_stdinz9ProcessTestCase.test_universal_newlines_communicate_stdin]s�����c�n�d�.��:�X�_�N"�>#�>#�#�$�$.�?�01�
3�
3�
3���=�=�)9�:�:���������q�)�)�)�)�)rc���tjttjtjd���}|���|�|jd��dS)NT)r@rAr�r)rrCrrDr�rXrrIs  r�.test_universal_newlines_communicate_input_nonez>ProcessTestCase.test_universal_newlines_communicate_input_noneksW��

��_�#-�?�$.�O�04�
6�
6�
6��	
�
�
���������q�)�)�)�)�)rc�&�tjtjddtztjd��zgtjtjtjd���}|�|j	j
��|�|jj
��|�d��\}}|�
|jd��|�
d|��|�|�d	����dS)
Nr
r�a�
                               s = sys.stdin.buffer.readline()
                               sys.stdout.buffer.write(s)
                               sys.stdout.buffer.write(b"line2\r")
                               sys.stderr.buffer.write(b"eline2\n")
                               s = sys.stdin.buffer.read()
                               sys.stdout.buffer.write(s)
                               sys.stdout.buffer.write(b"line4\n")
                               sys.stdout.buffer.write(b"line5\r\n")
                               sys.stderr.buffer.write(b"eline6\r")
                               sys.stderr.buffer.write(b"eline7\r\nz")
                              T)r@rBrAr�r�rzline1
line2
line3
line4
line5
zeline2
eline6
eline7
)rrCrVrWr�r�r�rDr�rArHrBr�rXrr�r�rRs    r�7test_universal_newlines_communicate_stdin_stdout_stderrzGProcessTestCase.test_universal_newlines_communicate_stdin_stdout_stderrws�����c�n�d�.��:�X�_�N"�>#�>#�#�$�$.�?�$.�O�$.�O�04�!
6�
6�
6��"	
������'�'�'�������'�'�'��=�=�)9�:�:���������q�)�)�)����>��G�G�G�	
����)�)�*D�E�E�F�F�F�F�Frc���dD]q}d|z}tjd|g}tj|tjtj|���}|�d���\}}|�|d���rdS)N)zutf-16z	utf-32-bez@import sys; sys.stdout.buffer.write('1\r\n2\r3\n4'.encode('%s'))r
)r@rAr�rr�z1
2
3
4)rVrWrrCrDr�rX)r$r�r�r9�popenrArBs       r�-test_universal_newlines_communicate_encodingsz=ProcessTestCase.test_universal_newlines_communicate_encodings�s���0�
	3�
	3�H�L���D��N�D�$�/�D��$�T�+5�?�,6�O�.6�8�8�8�E�#�.�.�R�.�8�8�N�F�F����V�\�2�2�2�2�
	3�
	3rc��dD]�\}}d}tjd|g}tj|tjtjd|���}|�d���\}}|�|d�|������dS)	N))r�r)r�u��)�surrogateescapeu��)�backslashreplacez\x80\x80z2import sys; sys.stdout.buffer.write(b'[\x80\x80]')r
r�)r@rAr�r�rr�z[{}])rVrWrrCrDr�rX�format)r$r��expectedr�r9r�rArBs        r�test_communicate_errorsz'ProcessTestCase.test_communicate_errors�s���!
�	>�	>��F�H�>�D��N�D�$�/�D��$�T�+5�?�,6�O�.5�,2�	4�4�4�E�
#�.�.�R�.�8�8�N�F�F����V�V�]�]�8�%<�%<�=�=�=�=�%	>�	>rc�
�tsd}nd}g}tj��}	t|��D]�}	tj�|tj��}|�	t	j
|tjtjz�����m#t$r!}|jtjkr�Yd}~n d}~wwxYw|�d|z��td��D](}t	j|������)td��D]v}t'jt*jddgt&jt&jt&j���}|�d	��d
}|�|d	���w	|D]}	t	j|	���t5j|��dS#|D]}	t	j|	���t5j|��wxYw)Niiz4failed to reach the file descriptor limit (tried %d)�
�r
z-import sys;sys.stdout.write(sys.stdin.read())r?slimer)r'r��mkdtemp�rangerr�r�r�TESTFN�append�open�O_WRONLY�O_CREAT�OSError�errno�EMFILE�skipTestrH�poprrCrVrWrDr�rXr�rmtree)
r$�max_handles�handles�tmpdir�i�tmpfile�erJ�data�hs
          r�test_no_leakingzProcessTestCase.test_no_leaking�s���	��K�K��K����!�#�#��	"��;�'�'�

0�

0��� �g�l�l�6�9�3C�D�D�G��N�N�2�7�7�B�K��
�4J�#K�#K�L�L�L�L�������w�%�,�.�.���E�E�E�E�E���������
�
�
�!�#.�/�0�0�0��2�Y�Y�
(�
(���������'�'�'�'��2�Y�Y�
0�
0���$�c�n�d�'K�&L�,6�?�,6�O�,6�O�=�=�=���}�}�W�-�-�a�0��� � ��w�/�/�/�/�
0��
�
����������M�&�!�!�!�!�!���
�
����������M�&�!�!�!�!���s6�G�A)B�G�
C
�)C�?G�C
�
CG�/Hc��|�tjgd���d��|�tjgd���d��|�tjgd���d��|�tjgd���d��|�tjgd	���d
��|�tjgd���d��|�tjgd
���d��|�tjddg��d��dS)N)za b cr6rz"a b c" d e)�ab"c�\r6z	ab\"c \ d)rz \r6z
ab\"c " \\" d)za\\\bzde fgr	za\\\b "de fg" h)za\"brlr6z
a\\\"b c d)za\\b cr6rz"a\\b c" d e)za\\b\ cr6rz
"a\\b\ c" d e�abrzab "")rXr�list2cmdliner#s r�test_list2cmdlinez!ProcessTestCase.test_list2cmdline�s�������0�1D�1D�1D�E�E�&�	(�	(�	(�����0�1D�1D�1D�E�E�&�	(�	(�	(�����0�1E�1E�1E�F�F�+�	-�	-�	-�����0�1K�1K�1K�L�L�-�	/�	/�	/�����0�1D�1D�1D�E�E�(�	*�	*�	*�����0�1G�1G�1G�H�H�)�	+�	+�	+�����0�1I�1I�1I�J�J�+�	-�	-�	-�����0�$���<�<� �	"�	"�	"�	"�	"rc��tjtjddgtj���}|�|jj��|�|�	����tj|j���d��|�
��|�|�	��d��dS)Nr
zimport os; os.read(0, 1)r��Ar)rrCrVrWrDr�r@rH�assertIsNone�pollrr�r3r)rXrIs  r�	test_pollzProcessTestCase.test_poll�s�����c�n�d�8�:�#-�?�
4�
4�
4��	
�����
�&�&�&����!�&�&�(�(�#�#�#�
������!�!�4�(�(�(�	��������������1�%�%�%�%�%rc���tjt��}|�|���d��|�|���d��dSre�rrCrrXr)rIs  r�	test_waitzProcessTestCase.test_waitsT����_�-�-����������1�%�%�%���������1�%�%�%�%�%rc��tjtjddg��}|�tj��5}|�d���ddd��n#1swxYwY|�dt|j	����|�
|�tj���d��dS)Nr
zimport time; time.sleep(0.3)�-C��6?r_z0.0001r)
rrCrVrWrarbr)rv�strrjrXr�
SHORT_TIMEOUT)r$rJrls   r�test_wait_timeoutz!ProcessTestCase.test_wait_timeouts�����c�n�"�$B�D�
E�
E��
�
�
�z�8�
9�
9�	#�Q�
�F�F�6�F�"�"�"�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#����	#�	#�	#�	#��
�
�h��A�K� 0� 0�1�1�1��������(=��>�>��B�B�B�B�Bs�A$�$A(�+A(c��|�t��5tjtd��ddd��dS#1swxYwYdS)Nr|)rar�rrCrr#s r�test_invalid_bufsizez$ProcessTestCase.test_invalid_bufsizes����
�
�y�
)�
)�	8�	8���_�h�7�7�7�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8����	8�	8�	8�	8�	8�	8s�A�A�
Ac��tjtd��}|�|���d��tjtd���}|�|���d��dS)Nr)rMrrIs  r�test_bufsize_is_nonez$ProcessTestCase.test_bufsize_is_nonesk����_�d�3�3����������1�%�%�%���_�d�;�;�;����������1�%�%�%�%�%rc��tjtjddgtjtjtjd|���5}|j�|��tj	|j�
����|j���}tj��5	|j�	��n#t$rYnwxYwddd��n#1swxYwYd|_ddd��n#1swxYwY|�|jd��|�||��dS)Nr
zDimport sys;sys.stdout.write(sys.stdin.readline());sys.stdout.flush()r�)r@rArBrMr�r)rrCrVrWrDr]r@r�rrHr3rAr�r�SuppressCrashReportr�rXr)r$�liner�r�rJ�	read_lines      r�_test_bufsize_equal_onez'ProcessTestCase._test_bufsize_equal_ones���
�
�s�~�t�64�5�%/�O�%/�_�%/�%7�&'�1C�E�E�E�	�IJ�
�G�M�M�$�����H�Q�W�^�^�%�%�&�&�&���)�)�+�+�I��,�.�.�
�
���G�M�M�O�O�O�O�������D�����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�
�A�G�!	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�"	
�����q�)�)�)�����H�-�-�-�-�-s[�A2D�8C0�:C�C0�
C!�C0� C!�!C0�$D�0C4	�4D�7C4	�8
D�D�Dc�:�d}|�||d���dS)Nzline
T�r�)r&�r$r$s  r� test_bufsize_equal_one_text_modez0ProcessTestCase.test_bufsize_equal_one_text_mode4s*�����$�$�T�4�D�$�I�I�I�I�Irc���dtj���z}|�td��5|�|dd���ddd��dS#1swxYwYdS)Nslinezline bufferingrFr()r�linesepr��assertWarnsRegex�RuntimeWarningr&r)s  r�"test_bufsize_equal_one_binary_modez2ProcessTestCase.test_bufsize_equal_one_binary_mode:s������*�*�,�,�,��
�
"�
"�>�3C�
D�
D�	N�	N��(�(��s�u�(�M�M�M�	N�	N�	N�	N�	N�	N�	N�	N�	N�	N�	N�	N����	N�	N�	N�	N�	N�	Ns�A#�#A'�*A'�cpuc���td��D]d}|�t��5tjt
tjtj���ddd��n#1swxYwY�edS)NrBr�)r�rar�rrCr�rD)r$rs  r�test_leaking_fds_on_errorz)ProcessTestCase.test_leaking_fds_on_errorAs����t���	9�	9�A��"�"�#5�6�6�
9�
9�� ��(2��(2��9�9�9�9�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9����
9�
9�
9�
9��	9�	9s�1A)�)A-	�0A-	c���	ddl}|jn,#ttf$r|�d��YnwxYwtjdt�d���}tj	d|g}tj|tjd���}|5|�
��d}ddd��n#1swxYwY|�|d	��|�|jd��dS)
Nrzneed msvcrt.CrtSetReportModezL
            import msvcrt
            import subprocess

            cmd = a

            for report_type in [msvcrt.CRT_WARN,
                                msvcrt.CRT_ERROR,
                                msvcrt.CRT_ASSERT]:
                msvcrt.CrtSetReportMode(report_type, msvcrt.CRTDBG_MODE_FILE)
                msvcrt.CrtSetReportFile(report_type, msvcrt.CRTDBG_FILE_STDERR)

            try:
                subprocess.Popen(cmd,
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE)
            except OSError:
                pass
        r
T)rBr�r�r)�msvcrt�CrtSetReportMode�AttributeError�ImportErrorr�r�r�r�rVrWrrCrDr�rXr)r$r4r�r�rurBs      r�test_nonexisting_with_pipesz+ProcessTestCase.test_nonexisting_with_pipesNsY��	:��M�M�M��#�#�#����,�	:�	:�	:��M�M�8�9�9�9�9�9�	:������ �#�	 � � �
�
��&�~�t�T�*�����'1��37�9�9�9���	+�	+��%�%�'�'��*�F�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+����	+�	+�	+�	+������$�$�$������!�,�,�,�,�,s��&7�7�	B0�0B4�7B4c���g��fd�}tj|���}|���	|�t��5tjtt
jt
jt
j���ddd��n#1swxYwY|�	��d}�D]0}	tj|���#t$r}|}Yd}~�)d}~wwxYw|�|�dS#|�	��d}�D]0}	tj|���#t$r}|}Yd}~�)d}~wwxYw|�|�wxYw)Nc���td��D]<}��tj����t	jd���=dS)N�g����MbP?)r��extendrri�time�sleep)r�fdss �r�open_fdsz<ProcessTestCase.test_double_close_on_error.<locals>.open_fdszsM����2�Y�Y�
"�
"���
�
�2�7�9�9�%�%�%��
�5�!�!�!�!�
"�
"r)�targetr?)
�	threading�Thread�startra�EnvironmentErrorrrCr�rDr�rrHr�)r$r@�t�exc�fdrr?s      @r�test_double_close_on_errorz*ProcessTestCase.test_double_close_on_errorws������	"�	"�	"�	"�	"�
��H�-�-�-��	���	�	�	�	��"�"�#3�4�4�
9�
9�� ��'1��(2��(2��9�9�9�9�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9����
9�
9�
9�
9�
�F�F�H�H�H��C��
�
����H�R�L�L�L�L�������C�C�C�C�C�C������������	����
�F�F�H�H�H��C��
�
����H�R�L�L�L�L�������C�C�C�C�C�C������������	�	�	�	�	sq�C/�
<B�	C/�B�C/�B�C/�;C�
C&�C!�!C&�/D>�D �D>� 
D6	�*D1	�,D>�1D6	�6D>c�<���	tjtjddg���|��jd��g���fd�}t
jd|��}|���trd}nd}��
tj���|��j|d�	����
��|��j|d
�	��|�
��|�dd|fd
|fg���dS)Nr
zimport time; time.sleep(12)c�B����d����f������������d�jf��������d�jf��dS)N�thread-start-poll-result�thread-after-kill-and-wait�thread-after-second-wait)r�rrmr)r)ru�resultss��r�kill_proc_timer_threadzDProcessTestCase.test_threadsafe_wait.<locals>.kill_proc_timer_thread�s�����N�N�6��	�	���D�E�E�E��I�I�K�K�K��I�I�K�K�K��N�N�8�$�/�J�K�K�K��I�I�K�K�K��N�N�6���H�I�I�I�I�Ir皙�����?r�i����r_z*unexpected result in wait from main thread��msgz&unexpected result in second main wait.)rLNrMrN)rrCrVrWrXrrB�TimerrDr'r)rrr�)r$rPrF�expected_errorcoderurOs    @@r�test_threadsafe_waitz$ProcessTestCase.test_threadsafe_wait�st����M������!>�!@�A�A�������$�/�/�/���	J�	J�	J�	J�	J�	J�
�O�C�!7�8�8��	���	�	�	��	$�!"���"$��
	
�	�	�'�/�	�0�0�0������*<�I�	�	K�	K�	K�	
�	�	���������*<�E�	�	G�	G�	G�	
������
	
���<�7�9K�L�5�7I�J�L�!�	"�	"�	"�	"�	"rc���d�d��}tjtjd|g��}|�|�d��t|����dS)N�;)zimport subprocess, syszJretcode = subprocess.call([sys.executable, '-c', 'print("Hello World!")'])zassert retcode == 0r
sHello World!)r�rrurVrWr�r�r�)r$r�rzs   r�test_issue8780zProcessTestCase.test_issue8780�se���x�x�#�$�$��
�(�#�.�$��)E�F�F������)�)�/�:�:�E�&�M�M�J�J�J�J�Jrc��tj��\}}tj��\}}tj��\}}	tjdg|||���n�#t$r{tj|��tj|��tj|��tj|��tj|��tj|��YnwxYw|�t
j	�
|����|�t
j	�
|����|�t
j	�
|����dS)N�*r?)r��mkstemprrCr�rrH�remover+r��exists)r$�ifhandle�ifname�ofhandle�ofname�efhandle�efnames       r� test_handles_closed_on_exceptionz0ProcessTestCase.test_handles_closed_on_exception�s[��$�+�-�-���&�#�+�-�-���&�#�+�-�-���&�		���s�e�8�H��
�
�
�
�
���	�	�	��H�X�����I�f�����H�X�����I�f�����H�X�����I�f������
	����	
��������/�/�0�0�0���������/�/�0�0�0���������/�/�0�0�0�0�0s�A�BC#�"C#c�f�tjttjtjtj���}|�|jj��|�|jj��|�|jj��|�	ddz��dS)Nr?�x�)
rrCrrDr�rArHrBr@r�rIs  r�test_communicate_epipez&ProcessTestCase.test_communicate_epipe�s�����_�#-�?�$.�O�$.�O�
5�
5�
5��	
������'�'�'�������'�'�'������
�&�&�&�	�
�
�d�U�l�#�#�#�#�#rc
��tjd��}|jj}dddgdddfgd�dddf|dd	d
|�d�fg}tjj�tj	d��5|D]G\}}}}tj	||�
��}||_
|�t|��|���H	ddd��dS#1swxYwYdS)Nz
my-tool.py)�lsT�{z#<Popen: returncode: 123 args: 'ls'>)�daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTrzP<Popen: returncode: 0 args: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...>rkFz&<Popen: returncode: None args: ['ls']>)rkz	--my-optsrmzP<Popen: returncode: None args: ['ls', '--my-opts', 'aaaaaaaaaaaaaaaaaaaaaaaa...>�z<Popen: returncode: 7 args: z('my-tool.py')>r;�r�)
�pathlib�Path�	__class__r0rkr�patch�objectrrCrrX�repr)	r$�path_cmd�pathlib_cls�casesr�r�r��sxrJs	         r�	test_reprzProcessTestCase.test_repr�sI���<��-�-���(�1��
E�
a��V�U�D�"J�K�
+�
+�
+�U�D�
_�
a�
�u�a�!\��!\�!\�!\�]�
���]�
 �
'�
'�
�(8�:J�
K�
K�	.�	.�(-�
.�
.�$��U�D�"��$�S��6�6�6��#���� � ��a���"�-�-�-�-�
.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.����	.�	.�	.�	.�	.�	.s�*AC�C�
Cc���tjttj���}|�|jj��|���|�ddz��dS)Nr�rgrh)	rrCrrDr�r@rHr)r�rIs  r�!test_communicate_epipe_only_stdinz1ProcessTestCase.test_communicate_epipe_only_stdins_����_�#-�?�
4�
4�
4�������
�&�&�&�	������	�
�
�d�U�l�#�#�#�#�#r�SIGUSR1zRequires signal.SIGUSR1rmzRequires os.kill�getppidzRequires os.getppidc�`�d�}tjtj|��}|�tjtj|��tjddg}dD]N}|t
ji}tj|fi|��5}|���ddd��n#1swxYwY�OdS)Nc��dSr!r3)�signum�frames  r�handlerz7ProcessTestCase.test_communicate_eintr.<locals>.handler����Drr
z7import os, signal;os.kill(os.getppid(), signal.SIGUSR1)r�)	�signalr}r�rVrWrrDrCr�)r$r��old_handlerr9�stream�kw�processs       r�test_communicate_eintrz&ProcessTestCase.test_communicate_eintr
s���	�	�	��m�F�N�G�<�<������
�v�~�{�C�C�C����8�9��+�	&�	&�F��*�/�*�B��!�$�-�-�"�-�-�
&���#�#�%�%�%�
&�
&�
&�
&�
&�
&�
&�
&�
&�
&�
&����
&�
&�
&�
&��	&�	&s�B"�"B&	�)B&	�/proc/%d/fdzLinux specificc��	dtj��z}tj|��}|�t��5tttjtjtj���ddd��n#1swxYwYtj|��}|�	||��dS)Nr�r?)
r�getpid�listdirrar5r7rrrDrX)r$�fd_directory�fds_before_popen�fds_after_exceptions    r�!test_failed_child_execute_fd_leakz1ProcessTestCase.test_failed_child_execute_fd_leak&s���	J�$�r�y�{�{�2���:�l�3�3��
�
�
�1�
2�
2�	D�	D�#�#�:�?�%�?�:�?�
D�
D�
D�
D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D�!�j��6�6�����)�+>�?�?�?�?�?s�7B	�	B
�B
z+behavior currently not supported on Windowsc���|�t��5}tjgd���ddd��n#1swxYwY|�|jjd��dS)N)�/opt/nonexistent_binary�with�somer9r�)rarrrUrXrj�filenamerks  r�%test_file_not_found_includes_filenamez5ProcessTestCase.test_file_not_found_includes_filename8s���
�
�
�0�
1�
1�	Q�Q��O�O�O�O�P�P�P�	Q�	Q�	Q�	Q�	Q�	Q�	Q�	Q�	Q�	Q�	Q����	Q�	Q�	Q�	Q������-�/H�I�I�I�I�Is�>�A�Ac���|�t��5}tjddgd���ddd��n#1swxYwY|�|jjd��dS)N�exit�0z/some/nonexistent/directoryr)rarrrCrXrjr�rks  r� test_file_not_found_with_bad_cwdz0ProcessTestCase.test_file_not_found_with_bad_cwd>s���
�
�
�0�
1�
1�	O�Q���f�c�]�0M�N�N�N�N�	O�	O�	O�	O�	O�	O�	O�	O�	O�	O�	O����	O�	O�	O�	O������-�/L�M�M�M�M�Ms�A�A�Ac���|�tjttj��|�tjttj��dSr!)rErrC�bytes�types�GenericAlias�CompletedProcessrr#s r�test_class_getitemsz#ProcessTestCase.test_class_getitemsDsJ�����j�.�u�5�u�7I�J�J�J����j�9�#�>��@R�S�S�S�S�Sr�
HAVE_VFORKz!vfork() not enabled by configure.�subprocess._fork_execc��|�tj��td��|_|�t��5tjtjddg��ddd��n#1swxYwY|�	��|�|j
jd��tj
�tdd��5|�t��5tjtjddg��ddd��n#1swxYwY|�|jdjd��ddd��dS#1swxYwYdS)Nzjust testing argsr
rrt�
_USE_VFORKF)r�rr��RuntimeError�side_effectrarrVrW�assert_called_once�	call_argsr9rrsrtr+�call_args_list)r$�mock_fork_execs  r�test__use_vforkzProcessTestCase.test__use_vforkHs��	
���
�-�.�.�.�%1�2E�%F�%F��"�
�
�
�|�
,�
,�	;�	;��N�C�N�D�&�9�:�:�:�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;����	;�	;�	;�	;��)�)�+�+�+�����0�5�b�9�:�:�:�
�Z�
�
�z�<��
?�
?�	I�	I��"�"�<�0�0�
?�
?������f�=�>�>�>�
?�
?�
?�
?�
?�
?�
?�
?�
?�
?�
?����
?�
?�
?�
?����^�:�2�>�C�B�G�H�H�H�	I�	I�	I�	I�	I�	I�	I�	I�	I�	I�	I�	I����	I�	I�	I�	I�	I�	IsH�"A<�<B�B�&E2�"D/�#E2�/D3	�3E2�6D3	�7.E2�2E6�9E6�_winapizneed subprocess._winapic���tjt��}|5tj�tjdtjj���}|5}|�d��|�	|j
d��d|_ddd��n#1swxYwY|�|���d��ddd��dS#1swxYwYdS)N�WaitForSingleObject��return_valuertr)
rrCrrrsrtr��
WAIT_OBJECT_0r)�assert_called_once_with�_handlerrX)r$rurs�	mock_waits    r�test_wait_negative_timeoutz*ProcessTestCase.test_wait_negative_timeoutWsT�����0�0��
�
	-�
	-��J�%�%��"�%�'�/�=�&�?�?�E��
'�)��	�	�"�
�
�
��1�1�$�,��B�B�B�"&���
'�
'�
'�
'�
'�
'�
'�
'�
'�
'�
'����
'�
'�
'�
'�

���T�Y�Y�[�[�!�,�,�,�
	-�
	-�
	-�
	-�
	-�
	-�
	-�
	-�
	-�
	-�
	-�
	-����
	-�
	-�
	-�
	-�
	-�
	-s5�>C�8B�C�B"	�"C�%B"	�&+C�C"�%C"N)�r0r1r2rKrOr[rcrgrmr{r~r�r�r�r�r�r�r�r�r�r�requires_resourcer�r�r�r�r�r�r�r�r�r�r�rk�skipIfr'r�r�r�rrrrrrr!r&r)rV�base_prefix�prefixr+�	sysconfig�is_python_buildr-r0r7r:r?rDrGrKrMrOrSrWrYr[r^r`rb�
skipUnlessrj�hasattrrrrzr�r�r��get_config_varrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r
rrrrrr!r&r*r/r2r8rIrVrYrerirzr|r�rr�r��isdirr�r�r�r�r�rrsr�rr�r3rrr=r=ssM������������!�!�!�'�'�'� � � �
5�5�5�5�5�5�4�4�4�'�'�'�
'�
'�
'�'�'�'�(�(�(�'�'�'�'�'�'�%�%�%�5�5�5�4�4�4��W��z�*�*�
6�
6�+�*�
6� � � �+�+�+�(�(�(�<�<�<�.)�)�)�+�+�+�	M�	M�	M�D�D�D�A�A�A�9�9�9��X�_�Y� D�E�E�G�G�F�E�G�
�X�_�Y� D�E�E�(�(�F�E�(��X�_�Y� D�E�E�(�(�F�E�(�
���*�*�*�=�=�=�&A�A�A�N�N�N�
K�K�K�
�X�_�Y� D�E�E�
E�
E�F�E�
E��X�_�Y� D�E�E�-�-�F�E�-�$C�C�C��X�_�S�_��
�2�2�4�4�D�D�4�4�D��X�_�S�_��
�2�2�4�4��X�_�.�Y�.�0�0�:�<�<�4�4�<�<�4�4�4�*�*�*�*�*�*�
*�
*�
*�9�9�9�
6�
6�
6�	/�	/�	/�=�=�=�
:�
:�
:�	3�	3�	3�*�*�*�*
>�
>�
>�
4�
4�
4�>�>�>�&)�)�)�)�)�)�(�(�(��X���A�7�7�5�.�#A�#A�@�B�B� � �B�B� �D�X���A�7�7�5�.�#A�#A�@�B�B���B�B��@	0�	0�	0��X�����0�2F�G�G�
>�
>�H�G�
>��X�_�S�\�W�,�:�<�<��X�_�-�Y�-�.@�A�A�Q�F�2�3�3��X�_�_�_�T�2�2�2�@�B�B�2�2�B�B�3�3�<�<�2�,�X�_�-�Y�-�.@�A�A�Q�F�9�:�:��X�_�_�_�T�2�2�2�@�B�B�
>�
>�B�B�:�:�

>�@�@�@�6�6�6�<�X�����0�2F�G�G�
:�
:�H�G�
:�*�*�*�'�'�'�/�/�/�
/�
/�
/�@�@�@�&5�5�5�"9�9�9�,'�'�'�2�2�2�.&�&�&� %F�%F�%F�NE�E�E�2*�*�*�
*�
*�
*�G�G�G�83�3�3�,>�>�>�*%"�%"�%"�N"�"�"�$	&�	&�	&�&�&�&�C�C�C�8�8�8�&�&�&�.�.�.�,J�J�J�N�N�N��W��u�%�%�
9�
9�&�%�
9�'-�'-�'-�R���:2"�2"�2"�h	K�	K�	K�1�1�1�(	$�	$�	$�.�.�.�&$�$�$��X������3�3�2�4�4��X�����V�,�,�+�-�-��X�����Y�/�/�.�0�0�&�&�0�0�-�-�4�4�&�&�X������}�y�r�y�{�{�'B�C�C�)�+�+�@�@�+�+�@� �X�_�Y� M�N�N�J�J�O�N�J�
�X�_�Y� M�N�N�N�N�O�N�N�
T�T�T��X�_�1��1�,�?�?�?�8�:�:��T�Z�'�(�(�
I�
I�)�(�:�:�
I��X�����Y�7�7�2�4�4�-�-�4�4�-�-�-rr=c��eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Ze
jd��d���Zd
�Zd�Zd�Zd�Zejed��d���Zd�Zd�Zd�Zejed��d���Zd�ZdS)�RunFuncTestCasec�F�	tjd|g}tj|fi|��S)Nr
�rVrWrr)r$r�r:�argvs    r�
run_pythonzRunFuncTestCase.run_pythonis+��B����d�+���~�d�-�-�f�-�-�-rc��|�d��}|�|jd��|�tj��5|���ddd��dS#1swxYwYdSr�)r�rXrrarri�check_returncode�r$�cps  r�test_returncodezRunFuncTestCase.test_returncodens���
�_�_�7�
8�
8��������+�+�+�
�
�
�z�<�
=�
=�	"�	"����!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	"�	"s�A2�2A6�9A6c���|�tj��5}|�dd���ddd��n#1swxYwY|�|jjd��dS)NrRTrsrS)rarrir�rXrjrrks  r�
test_checkzRunFuncTestCase.test_checkus���
�
�
�z�<�
=�
=�	D���O�O�6�d�O�C�C�C�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D������/��4�4�4�4�4s�A�A�Ac�r�tjtd���}|�|jd��dS)NTrsr)rrrrXrr�s  r�test_check_zerozRunFuncTestCase.test_check_zerozs4��
�^�O�4�
8�
8�
8��������*�*�*�*�*rc��|�tj��5|�dd���ddd��dS#1swxYwYdS)Nr]rr_)rarrbr�r#s r�test_timeoutzRunFuncTestCase.test_timeouts���
�
�
�z�8�
9�
9�	@�	@��O�O�.��O�?�?�?�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@�	@�	@s�A�A	�A	c�~�|�dtj���}|�d|j��dS)Nrprrrq�r�rrDrvrAr�s  r�test_capture_stdoutz#RunFuncTestCase.test_capture_stdout�s5��
�_�_�_�Z�_�_�
E�
E���
�
�g�r�y�)�)�)�)�)rc�~�|�dtj���}|�d|j��dS)Nr�r�rq)r�rrDrvrBr�s  r�test_capture_stderrz#RunFuncTestCase.test_capture_stderr�s>��
�_�_�C�$.�O��5�5���
�
�g�r�y�)�)�)�)�)rc�.�tj��}|�|j��|�d��|�d��|�d|tj���}|�	d|j
��dS)Nr�rr�r�r�)r�r�r�rHr�r�r�rrDrvrA)r$r�r�s   rr�z+RunFuncTestCase.test_check_output_stdin_arg�s���
�
#�
%�
%�������!�!�!�
�������
����
�
�
�
�_�_�I�����2�2��	
�
�
�g�r�y�)�)�)�)�)rc��|�ddtj���}|�d|j��dS)Nr�r�)r�rAr�r�r�s  rr�z+RunFuncTestCase.test_check_output_input_arg�sB��
�_�_�H��j�o��7�7��	
�
�
�g�r�y�)�)�)�)�)rc���tj��}|�|j��|�d��|�d��|�td���5}|�d|d���}ddd��n#1swxYwY|�	d|j
jd��|�	d	|j
jd��dS)
Nr�rr�rRr�r�r�r@r�)r�r�r�rHr�r�rarxr�rvrjr9r�s    rr�z6RunFuncTestCase.test_check_output_stdin_with_input_arg�s��
�
#�
%�
%�������!�!�!�
�������
����
�
�
�
�
�
�z�K��M�M�	>�PQ��_�_�%?�+-�W�%�>�>�F�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>����	>�	>�	>�	>�	
�
�
�g�q�{�/��2�3�3�3��
�
�g�q�{�/��2�3�3�3�3�3s�4B�B� Br�c�8�|�tj��5}|�ddtj���}ddd��n#1swxYwY|�|jjd��|�|jjd��dS)Nr�r�)r`rArq)	rarrbr�rDrXrjrzrA)r$rlr�s   rr�z)RunFuncTestCase.test_check_output_timeout�s���
�
�
�z�8�
9�
9�	7�Q����(��j�o�!�7�7�B�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7����	7�	7�	7�	7�	
�����+�W�5�5�5������+�W�5�5�5�5�5s�#A�A�Ac��tj���}d|d<|�d|���}|�|jd��dS)Nr�r�zCimport sys, os;sys.exit(33 if os.getenv("FRUIT")=="banana" else 31)r��!)rr�r�r�rXr)r$r�r�s   r�test_run_kwargszRunFuncTestCase.test_run_kwargs�s]������"�"��"��w��
�_�_�M�!'��)�)��	
������+�+�+�+�+rc��trdnd}tj|��}|�|�|�d���t	|��}tj|t
j���}|�|j	d��|�
t��5tj|t
jd���ddd��dS#1swxYwYdS)Nztree.comrkz required for this testrrrT)rAr�)r'rrr�r	rrr]rXrrar�)r$�progr��ress    r�test_run_with_pathlike_pathz+RunFuncTestCase.test_run_with_pathlike_path�s!��'�0�z�z�D���|�D�!�!���<��M�M�T�:�:�:�;�;�;���~�~���n�T�*�*<�=�=�=��������+�+�+�
�
�
�y�
)�
)�	H�	H��N�4�
�(:�$�G�G�G�G�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H����	H�	H�	H�	H�	H�	Hs�"C
�
C�Cc��tjtj��}|ddg}t	j|��}|�|jd��dS)Nr
simport sys; sys.exit(57)�9)rr�rVrWrrrXr�r$r�r9r�s    r�&test_run_with_bytes_path_and_argumentsz6RunFuncTestCase.test_run_with_bytes_path_and_arguments�sM���{�3�>�*�*���d�7�8���n�T�"�"��������,�,�,�,�,rc��ttj��}|ddg}tj|��}|�|jd��dS)Nr
zimport sys; sys.exit(57)r�)r	rVrWrrrXrr�s    r�)test_run_with_pathlike_path_and_argumentsz9RunFuncTestCase.test_run_with_pathlike_path_and_arguments�sK�����'�'���d�6�7���n�T�"�"��������,�,�,�,�,rz#Maybe test trigger a leak on Ubuntuc�P�tjddg}tj|i���dS)Nr
rr�r�)r$r9s  r�test_run_with_an_empty_envz*RunFuncTestCase.test_run_with_an_empty_env�s/�����f�-��	��t��$�$�$�$�$�$rc��|�dd���}|�d|j��|�d|j��dS)Nz>import sys;sys.stdout.write('BDFL'); sys.stderr.write('FLUFL')T��capture_outputrqsFLUFL)r�rvrArBr�s  r�test_capture_outputz#RunFuncTestCase.test_capture_output�sX��
�_�_�:�-1��2�2��	
�
�
�g�r�y�)�)�)��
�
�h��	�*�*�*�*�*rc��tj��}|�|j��|�t
d���5}|�dd|���}ddd��n#1swxYwY|�d|jj	d��|�d|jj	d��dS)	NzAExpected ValueError when stdout and capture_output args supplied.rRr�T)r�rArArr��
r�r�r�rHrarxr�rvrjr9r�s    r�#test_stdout_with_capture_output_argz3RunFuncTestCase.test_stdout_with_capture_output_arg����
�
#�
%�
%�������!�!�!�
�
�
�z�"��$�$�	F�'(��_�_�%?�59�"�%�F�F�F�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F����	F�	F�	F�	F�
	
�
�
�h��� 0�� 3�4�4�4��
�
�&���(8��(;�<�<�<�<�<��
A/�/A3�6A3c��tj��}|�|j��|�t
d���5}|�dd|���}ddd��n#1swxYwY|�d|jj	d��|�d|jj	d��dS)	NzAExpected ValueError when stderr and capture_output args supplied.rRr�T)r�rBrBrr�r�r�s    r�#test_stderr_with_capture_output_argz3RunFuncTestCase.test_stderr_with_capture_output_arg�r�r�z)requires posix like 'sleep' shell commandc�N�	tj��}	tjdddd���|�d��nB#tj$r0}tj��}t
j��}Yd}~nd}~wwxYw|�||z
dd|�d��	��dS)
Nzsleep 3Tr^)r�r`r�zTimeoutExpired not raised.g�?z/TimeoutExpired was delayed! Bad traceback:
```
z```rR)	r=�	monotonicrrr�rb�	traceback�
format_exc�
assertLess)r$�before_secsrG�
after_secs�stackss     r�.test_run_with_shell_timeout_and_capture_outputz>RunFuncTestCase.test_run_with_shell_timeout_and_capture_outputs���X��n�&�&��	4��N�9�D�#�*.�
0�
0�
0�
0�
�I�I�2�3�3�3�3��	�(�	,�	,�	,���)�)�J��)�+�+�F�F�F�F�F�F�����	,����
	
���
�[�0�#�'�!�'�'�'�	�	(�	(�	(�	(�	(s�A�B�&A>�>Bc��tjd��}tjtjdd|gd���}|j���}|�t|��d|��|�
|d�d����|�
|d	�d
����dS)Nz�            from subprocess import *
            run("echo hello", shell=True, text=True)
            check_output("echo hello", shell=True, text=True)
            z-Xwarn_default_encodingr
Tr�rers<string>:2: EncodingWarning: r�s<string>:3: EncodingWarning: )r�r�rrrVrWrB�
splitlinesrXr�r�r�)r$r�r��liness    r�test_encoding_warningz%RunFuncTestCase.test_encoding_warnings����� ����
�^�S�^�-F��d�S�+/�1�1�1���	�$�$�&�&������U���Q��.�.�.�����a��+�+�,L�M�M�N�N�N�����a��+�+�,L�M�M�N�N�N�N�NrN)r0r1r2r�r�r�r�r�r�r�r�r�r�rr�r�r�r�r�r�rkr�r'r�r�r�r�r�r�rr3rrr�r�hs�������.�.�.�
"�"�"�5�5�5�
+�+�+�
@�@�@�*�*�*�
*�*�*�
	*�	*�	*�*�*�*�4�4�4��W��z�*�*�6�6�+�*�6�,�,�,�H�H�H�-�-�-�-�-�-��X���$I�J�J�%�%�K�J�%�+�+�+�
=�
=�
=�
=�
=�
=� �X�_�Y� K�L�L�
(�
(�M�L�
(�O�O�O�O�Orr�c��dD]3}tr*	tj|��n#t$rY�+wxYw|cS�4tjd���)N)�staff�nogroup�grp�nobody�	nfsnobodyz?No identified group name to use for this test on this platform.)r�getgrnam�KeyErrorrkrl)�
name_groups r�_get_test_grp_namer-sx��H�c�c�
��	�
���Z�(�(�(�(���
�
�
���
��������	��� a�b�b�bs�"�
/�/zPOSIX specific testsc���eZdZ�fd�Zd�Zd�Zd�Zd�ZGd�dej	��Z
ejd��d	���Z
ejd��d
���Zejej�d��d��d
���Zd�Zejeed��oeed��d��d���Zejeed��d��d���Zejeed��d��d���Zejeed��d��d���Zejeed��d��d���Zejeed��d��d���Zejeed��d ��d!���Zejepeed"��d#��d$���Z d%�Z!d&�Z"d'�Z#d(�Z$d)�Z%d*�Z&Gd+�d,ej	��Z'ejej�d-��d.��d/���Z(d0�Z)eje*j+d1kd2��d3���Z,d4�Z-d5�Z.d6�Z/d7�Z0d8�Z1d9�Z2d:�Z3eje*j+�4d;��d<��d=���Z5d>�Z6d?�Z7d@�Z8dA�Z9dB�Z:dC�Z;dD�Z<dE�Z=dF�Z>dG�Z?dH�Z@dI�ZAdJ�ZBdK�ZCdL�ZDdM�ZEdN�ZFdO�ZGdP�ZHdQ�ZIdR�ZJdS�ZKdT�ZLdU�ZMdV�ZNdW�ZOdX�ZPdY�ZQeje*j+�4dZ��o+ejRd[��jSejRd\��jSkd]��d^���ZTeUjVd_d`��da���ZWdb�ZXdc�ZYdd�ZZde�Z[df�Z\dg�Z]dh�Z^di�Z_dj�Z`dk�ZaeUjbdl���ZceUjbdm���Zddn�Zedo�Zfdp�Zgdq�Zhejeidruoeeids��dt��du���Zjdv�Zkdw�Zldx�Zm�xZnS)y�POSIXProcessTestCasec�V��t�����d|_dS)Nz/_this/pa.th/does/not/exist)�superr%�_nonexistent_dir�r$rrs �rr%zPOSIXProcessTestCase.setUp<s"���
���
�
���� =����rc��	tj|j��|�d|jz��n#t$r}|}Yd}~nd}~wwxYw|S)Nz,chdir to nonexistent directory %s succeeded.)r�chdirrr�r�)r$r�desired_exceptions   r�_get_chdir_exceptionz)POSIXProcessTestCase._get_chdir_exception@s���		-��H�T�*�+�+�+�
�I�I�D��+�,�
-�
-�
-�
-��
�	"�	"�	"�!"�����������		"����!� s�9�
A�A
�
Ac��	|���}	tjtjddg|j���}|�d|z��dS#t$rk}|�|j	|j	��|�|j
|j
��|�|j|j��Yd}~dSd}~wwxYw)Nr
rr�Expected OSError: %s�rrrCrVrWrr�r�rXr��strerrorr��r$rrJrs    r�test_exception_cwdz'POSIXProcessTestCase.test_exception_cwdMs���I� �5�5�7�7��
	B�� �#�.�$��!;�%)�%:�<�<�<�A�
�I�I�,�/@�@�A�A�A�A�A���	E�	E�	E�
���.�4�a�g�>�>�>����.�7���D�D�D����.�7���D�D�D�D�D�D�D�D�D�����	E�����(A�
C�#A C	�	Cc��	|���}	tjtjddg|j���}|�d|z��dS#t$rk}|�|j	|j	��|�|j
|j
��|�|j|j��Yd}~dSd}~wwxYw)Nr
rr�rrrs    r�test_exception_bad_executablez2POSIXProcessTestCase.test_exception_bad_executable\s���P� �5�5�7�7��
	B�� �#�.�$��!;�,0�,A�C�C�C�A�
�I�I�,�/@�@�A�A�A�A�A���	E�	E�	E�
���.�4�a�g�>�>�>����.�7���D�D�D����.�7���D�D�D�D�D�D�D�D�D�����	E���rc��	|���}	tj|jddg��}|�d|z��dS#t
$rk}|�|j|j��|�|j|j��|�|j	|j	��Yd}~dSd}~wwxYw)Nr
rr)
rrrCrr�r�rXr�rr�rs    r�test_exception_bad_args_0z.POSIXProcessTestCase.test_exception_bad_args_0ks���M� �5�5�7�7��		B�� �$�"7��r�!B�C�C�A�
�I�I�,�/@�@�A�A�A�A�A���	E�	E�	E�
���.�4�a�g�>�>�>����.�7���D�D�D����.�7���D�D�D�D�D�D�D�D�D�����	E���s�A
�
C�A B=�=Cc��eZdZd�ZdS)�&POSIXProcessTestCase.PopenNoDestructorc��dSr!r3r#s r�__del__z.POSIXProcessTestCase.PopenNoDestructor.__del__�r�rN)r0r1r2r%r3rr�PopenNoDestructorr#�s#������	�	�	�	�	rr&r�c��	d�}||_tjdt���5|�t
��5|�dg��ddd��n#1swxYwYddd��dS#1swxYwYdS)Nc��|d}d�tj�����}t	j|d|zdz��dS)N�
z{:x}sOSError:�:r)r�r��EISDIRr�rr�)r9�
errpipe_write�err_codes   r�proper_errorzHPOSIXProcessTestCase.test_exception_errpipe_normal.<locals>.proper_error�sK�� ��H�M��}�}�U�\�2�2�9�9�;�;�H��H�]�K�(�$:�T�$A�B�B�B��1r�subprocess.os.waitpid�r��non_existent_command)r�rrs�ChildProcessErrorra�IsADirectoryErrorr&)r$�	fork_execr.s   r�test_exception_errpipe_normalz2POSIXProcessTestCase.test_exception_errpipe_normal�sF��L�	�	�	�!-�	��
�Z�/�$5�7�7�7�	A�	A��"�"�#4�5�5�
A�
A��&�&�(>�'?�@�@�@�
A�
A�
A�
A�
A�
A�
A�
A�
A�
A�
A����
A�
A�
A�
A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A����	A�	A�	A�	A�	A�	As5�A=�A%�A=�%A)	�)A=�,A)	�-A=�=B�Bc���	d��fd�}||_tjdt���5|�t
j��5}|�dg��ddd��n#1swxYwYddd��n#1swxYwY|�t���t|j����dS)Ns�ޭc�B��|d}tj|���dS)Nr)r)rr�)r9r,�
error_datas  �r�	bad_errorzGPOSIXProcessTestCase.test_exception_errpipe_bad_data.<locals>.bad_error�s%��� ��H�M�
�H�]�J�/�/�/��1rr/r0r1)r�rrsr2rar�SubprocessErrorr&rvrurrj)r$r4r9rr8s    @r�test_exception_errpipe_bad_dataz4POSIXProcessTestCase.test_exception_errpipe_bad_data�sr���	"�(�
�	�	�	�	�	�!*�	��
�Z�/�$5�7�7�7�	A�	A��"�"�:�#=�>�>�
A�!��&�&�(>�'?�@�@�@�
A�
A�
A�
A�
A�
A�
A�
A�
A�
A�
A����
A�
A�
A�
A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A����	A�	A�	A�	A�
	
�
�
�d�:�&�&��A�K�(8�(8�9�9�9�9�9s5� B�A/�#B�/A3	�3B�6A3	�7B�B
�
B
�/proc/self/statuszneed /proc/self/statusc��tjddgd���}|���D]}|�d��r|}n�|�d��tjddgd���}|���D]}|�d��r|}n�|�||d�	��dS)
N�catr<F)�restore_signalssSigIgnz&SigIgn not found in /proc/self/status.Tz=restore_signals=True should've unblocked SIGPIPE and friends.rR)rrurr�r��assertNotEqual)r$�default_proc_statusr$�default_sig_ign_mask�restored_proc_status�restored_sig_ign_masks      r�test_restore_signalsz)POSIXProcessTestCase.test_restore_signals�s��)�5��+�,� %�'�'�'��(�2�2�4�4�	D�	D�D����y�)�)�
�'+�$���
�
�M�M�B�C�C�C�)�6��+�,� $� &� &� &��)�3�3�5�5�	�	�D����y�)�)�
�(,�%���
�	
���0�2G�!3�	�	4�	4�	4�	4�	4rc��	tjtjddgd���}t	jd��}t
|��}|�||��dS#t$r!}|j	tj
kr�Yd}~dSd}~wwxYw)Nr
zimport os; print(os.getsid(0))T)�start_new_sessionr)rrurVrWr�getsid�intr@�PermissionErrorr��EPERM)r$rz�
parent_sid�	child_sidrs     r�test_start_new_sessionz+POSIXProcessTestCase.test_start_new_session�s���
	7��,��^�T�+K�L�&*�,�,�,�F���1���J��F���I����
�I�6�6�6�6�6��
�	�	�	��w�%�+�%�%��&�%�%�%�%�%�����	�����#A � 
B�*B�B�setpgid�getpgidz!no setpgid or getpgid on platformc��	tjtjddgd���}t	jd��}t
|��}|�||��dS#t$r!}|j	tj
kr�Yd}~dSd}~wwxYw)Nr
zimport os; print(os.getpgid(0))r)�
process_group)rrurVrWrrQrIr@rJr�rK)r$rz�parent_pgid�
child_pgidrs     r�test_process_group_0z)POSIXProcessTestCase.test_process_group_0�s���
	9��,��^�T�+L�M�"#�%�%�%�F��*�Q�-�-�K��V���J�����Z�8�8�8�8�8��
�	�	�	��w�%�+�%�%��&�%�%�%�%�%�����	���rO�setreuidzno setreuid on platformc�T�tj��}|dkrdnd|g}tjdkrdnd}t�=	t	j|��|�|��n#t$rd}YnwxYw|D�]!}dD�]}|�||���5	tj
tjdd	g||���}t|t��rt	j|��j}n|}t|��}|�||��nl#t"$r_}	|	jt$jkr&|�|	jtj��n|�|	j��Yd}	~	nd}	~	wwxYwddd��n#1swxYwY����#|�t.��5tjt2d
���ddd��n#1swxYwY|�t4��5tjt2tjtjd�
��ddd��n#1swxYwYt�R|�R|�t.��5tjt2|���ddd��dS#1swxYwYdSdSdS)N���darwinr�unknownr�)�user�	close_fdsr
zimport os; print(os.getuid())rt�r]�)r�r�r])r�geteuidrVr��pwd�getpwnamr�r
�subTestrrurW�
isinstancer�pw_uidrIrXrJr��EACCESr�rrarxrfr�
OverflowErrorrr�)
r$�uid�
test_users�name_uidr]r^rz�user_uid�
child_userrs
          r�	test_userzPOSIXProcessTestCase.test_user�s����j�l�l��"�e�|�|�e�e���<�
�"�|�x�7�7�8�8�Y���?�
 ���X�&�&�&��!�!�(�+�+�+�+���
 �
 �
 �����
 �����	?�	?�D�*�
?�
?�	��\�\�t�y�\�A�A�?�?�?�!+�!8�!$���!@�!B�%)�*3�	"5�"5�"5��&�d�C�0�0�,�'*�|�D�'9�'9�'@�H�H�'+�H�%(��[�[�
��(�(��X�>�>�>�>��+�:�:�:��7�e�l�2�2� �,�,�Q�Z���H�H�H�H� �-�-�a�j�9�9�9����������	:����?�?�?�?�?�?�?�?�?�?�?����?�?�?�?��
?�*�
�
�z�
*�
*�	<�	<��!�/��;�;�;�;�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<��
�
�}�
-�
-�	M�	M��!�/�&(�i�R�Z�e�
M�
M�
M�
M�	M�	M�	M�	M�	M�	M�	M�	M�	M�	M�	M����	M�	M�	M�	M��;�8�/��"�"�:�.�.�
F�
F��%�o�H�E�E�E�E�
F�
F�
F�
F�
F�
F�
F�
F�
F�
F�
F�
F����
F�
F�
F�
F�
F�
F��;�/�/s��)A&�&A5�4A5�F�$D�?AF�
E?	� AE:	�5F�:E?	�?F�F�F�7G�G#�&G#�2I�I�	I�0J�J� Jz setreuid() available on platformc��|�t��5tjtd���ddd��dS#1swxYwYdS)N�r_�rarxrrfrr#s r�test_user_errorz$POSIXProcessTestCase.test_user_errors���
�
�
�z�
*�
*�	?�	?��!�/��>�>�>�>�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?����	?�	?�	?�	?�	?�	?��A�A�A�setregidzno setregid() on platformc�x�tj��}|dkrdndg}t��}t�|�|��||gzD]�}dD]�}|�||���5	t
jtj	ddg||���}t|t��rtj|��j
}n|}t|��}|�||��n1#t $r$}	|�|	j��Yd}	~	nd}	~	wwxYwddd��n#1swxYwY�ߌ�|�t(��5t
jt,d���ddd��n#1swxYwY|�t.��5t
jt,tjtjd	�
��ddd��n#1swxYwYt�P|�t(��5t
jt,|���ddd��dS#1swxYwYdSdS)NrYrZr�)�groupr^r
zimport os; print(os.getgid())rt�rvr`)r�r�rv)r�getegidrrr�rdrrurVrWrerr	�gr_gidrIrXrJrr�rarxrfrrhrr�)
r$�gid�
group_listrrvr^rz�	group_gid�child_grouprs
          r�
test_groupzPOSIXProcessTestCase.test_groups����j�l�l��"�e�|�|�e�e��7�
�'�)�)�
��?����j�)�)�)��3�%�'�	A�	A�E�*�
A�
A�	��\�\���\�C�C�A�A�A�!+�!8�!$���!@�!B�&+�*3�	"5�"5�"5��&�e�S�1�1�.�(+��U�(;�(;�(B�I�I�(-�I�&)�&�k�k���(�(��i�@�@�@�@��+�6�6�6��)�)�!�*�5�5�5�5�5�5�5�5�����6����A�A�A�A�A�A�A�A�A�A�A����A�A�A�A��
A�(�
�
�z�
*�
*�	=�	=��!�/��<�<�<�<�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=����	=�	=�	=�	=��
�
�}�
-�
-�	N�	N��!�/�&(�i�R�Z�u�
N�
N�
N�
N�	N�	N�	N�	N�	N�	N�	N�	N�	N�	N�	N����	N�	N�	N�	N��;��"�"�:�.�.�
I�
I��%�o�Z�H�H�H�H�
I�
I�
I�
I�
I�
I�
I�
I�
I�
I�
I�
I����
I�
I�
I�
I�
I�
I��;ss�,D&�.$C)�AD&�)
D	�3D	�
D&�D	�D&�&D*�-D*�
E5�5E9�<E9�2G�G�G�H-�-H1�4H1z setregid() available on platformc��|�t��5tjtd���ddd��dS#1swxYwYdS)Nrprwrqr#s r�test_group_errorz%POSIXProcessTestCase.test_group_errorHs���
�
�
�z�
*�
*�	@�	@��!�/��?�?�?�?�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@�	@�	@rs�	setgroupszno setgroups() on platformc���tj��}|dkrdndg}t��}d}t�|�|��	tjtjddg|���}tj	��}tj|��}t�
d�|D��}n|}|r1|�t|��t|����nz|�t|��t|����nI#t$r<}	|	jtjkr�|�|	j��d}Yd}	~	nd}	~	wwxYw|�t(��5tjt,d	g���ddd��n#1swxYwY|�t(��5tjt,tjtjd
g���ddd��n#1swxYwYt�Q|�t(��5tjt,|g���ddd��dS#1swxYwYdSdS)NrYrZFr
z;import os, sys, json; json.dump(os.getgroups(), sys.stdout)��extra_groupsc�n�g|]2}t|t��rtj|��jn|��3Sr3)rerrr	ry)r��gs  rr�z:POSIXProcessTestCase.test_extra_groups.<locals>.<listcomp>gsI�� 5� 5� 5�$%�;E�Q��:L�:L� S���Q��� 6� 6�RS� 5� 5� 5rTrtr`)r�r�r�)rrxrrr�rrurVrW�	getgroups�json�loadsrX�setr�r�rKrr�rarxrfrrr�)
r$rzr{r�
perm_errorrz�
parent_groups�child_groups�desired_gids�exs
          r�test_extra_groupsz&POSIXProcessTestCase.test_extra_groupsMs]���j�l�l��"�e�|�|�e�e��7�
�'�)�)�
��
��?����j�)�)�)�	G��,��^�T�R�T�!+�-�-�-�F��L�N�N�M��:�f�-�-�L��� 5� 5�)3� 5� 5� 5��� *���
G�� � ��\�!2�!2�C�
�4F�4F�G�G�G�G�� � ��\�!2�!2�C��4E�4E�F�F�F�F��'�	�	�	��x�5�;�&�&�����b�k�*�*�*��J�J�J�J�J�J�����		����,�
�
�z�
*�
*�	F�	F��!�/���E�E�E�E�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F����	F�	F�	F�	F��
�
�z�
*�
*�	8�	8��!�/�&(�i�R�Z�05�w�
8�
8�
8�
8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8����	8�	8�	8�	8�
�;��"�"�:�.�.�
A�
A��%�o�4>�<�A�A�A�A�
A�
A�
A�
A�
A�
A�
A�
A�
A�
A�
A�
A����
A�
A�
A�
A�
A�
A��;sN�#D�
E�2E�E�3F�F �#F �3H�H�H�,I�I�Iz!setgroups() available on platformc��|�t��5tjtg���ddd��dS#1swxYwYdS)Nr�rqr#s r�test_extra_groups_errorz,POSIXProcessTestCase.test_extra_groups_errors���
�
�
�z�
*�
*�	D�	D��!�/��C�C�C�C�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D�	D�	Drs�umaskzPOSIX umask() is not available.c	���d}	tj��}tj�|d��}tjtjdd|�d�gd���tj	|��j
dz}d}|�||t|���d	t|�����
��|�tj|��dSdS#|�tj|��wwxYw)N�beansr
zopen(z, 'w').close()�+)r�i�i�z != rR)r�r�rr�r�rrfrVrW�stat�st_moderX�octrr)r$r�namer��
expected_modes     r�
test_umaskzPOSIXProcessTestCase.test_umask�s����	&��%�'�'�F��7�<�<���0�0�D�
�!��^�T�+I�4�+I�+I�+I�J��
!�
!�
!�
!�
�g�d�m�m�+�e�3�G�!�M����]�G�$'�
�$6�$6�!J�!J�C��L�L�!J�!J�
�
L�
L�
L��!��
�f�%�%�%�%�%�"�!��v�!��
�f�%�%�%�%�"���s�B/C
�
C&c��tj��5tjtjddg��}|���ddd��n#1swxYwY|�|jtj
��dS)Nr
zimport os; os.abort())rr#rrCrVrWr)rXrr��SIGABRTrIs  r�test_run_abortz#POSIXProcessTestCase.test_run_abort�s���
�
(�
*�
*�	�	�� �#�.�$�"9�";�<�<�A�
�F�F�H�H�H�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
���!�,����7�7�7�7�7s�6A�A�Ac�T�tjttj��d��}t|��}|�d|�����|�d|��|�ttj��|��dS)N�fake cmdr��SIG)rrirIr�r�rrv�lower�r$r��error_strings   r�"test_CalledProcessError_str_signalz7POSIXProcessTestCase.test_CalledProcessError_str_signal�s����+�S���-@�-@�,@�*�M�M���3�x�x��	
�
�
�h�� 2� 2� 4� 4�5�5�5�	
�
�
�e�\�*�*�*��
�
�c�&�.�)�)�<�8�8�8�8�8rc�z�tjdd��}t|��}|�d|��dS)Ni�Ki�r�zunknown signal 9876543.�rrirrvr�s   r�*test_CalledProcessError_str_unknown_signalz?POSIXProcessTestCase.test_CalledProcessError_str_unknown_signal�s:���+�H�j�A�A���3�x�x���
�
�/��>�>�>�>�>rc�z�tjdd��}t|��}|�d|��dS)Nrer�znon-zero exit status 2.r�r�s   r�$test_CalledProcessError_str_non_zeroz9POSIXProcessTestCase.test_CalledProcessError_str_non_zero�s:���+�A�z�:�:���3�x�x���
�
�/��>�>�>�>�>rc���tjtjddgtjd����}|5|�|j���d��ddd��dS#1swxYwYdS)Nr
r}c�,�tjdd��S)Nr��apple)r�putenvr3rr�<lambda>z3POSIXProcessTestCase.test_preexec.<locals>.<lambda>�s���	�'�7�0K�0K�r)rA�
preexec_fn�appler>rIs  r�test_preexecz!POSIXProcessTestCase.test_preexec�s���
��c�n�d�E�F�%/�O�(K�(K�	
M�
M�
M��
�	8�	8����Q�X�]�]�_�_�h�7�7�7�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8����	8�	8�	8�	8�	8�	8s�.A-�-A1�4A1c�`�d�}	tjtjddg|���}|�d��dS#tj$r+}|�tjd��Yd}~dSd}~wt$r,}|�	d|j
d��Yd}~dSd}~wwxYw)	Nc� �td���)Nz'What if two swallows carried a coconut?�rxr3rr�raise_itz=POSIXProcessTestCase.test_preexec_exception.<locals>.raise_it�s���F�G�G�Grr
r�r�zEException raised by preexec_fn did not make it to the parent process.z)Expected a ValueError from the preexec_fn�coconutr)rrCrVrWr�r:r��
_fork_execrxrvr9)r$r�rJrs    r�test_preexec_exceptionz+POSIXProcessTestCase.test_preexec_exception�s��	H�	H�	H�	0�� �#�.�$��!;�,4�6�6�6�A�
�I�I�/�
0�
0�
0�
0�
0���)�	A�	A�	A��O�O��)�?�
A�
A�
A�
A�
A�
A�
A�
A�
A������	0�	0�	0��M�M�)�Q�V�A�Y�/�/�/�/�/�/�/�/�/�����	0���s!�#?�B-� A4�4
B-�!B(�(B-c��eZdZ	d�Zd�ZdS)�+POSIXProcessTestCase._TestExecuteChildPopenc�H�||_tjj|g|�Ri|��dSr!)�	_testcaserrCr�)r$�testcaser9r:s    rr�z4POSIXProcessTestCase._TestExecuteChildPopen.__init__�s3��%�D�N���%�d�<�T�<�<�<�V�<�<�<�<�<rc
�6�	tjj|g|�Ri|��d�td��D��}	|D]g}|j�||j���|j���|j	���fd����h	|D]}tj|���dS#|D]}tj|���wxYw#d�td��D��}	|D]g}|j�||j���|j���|j	���fd����h	|D]}tj|���w#|D]}tj|���wxYwxYw)Nc�L�g|]!}tjdtj����"S)�	/dev/zero)rr��O_RDONLY)r�r�s  rr�zNPOSIXProcessTestCase._TestExecuteChildPopen._execute_child.<locals>.<listcomp>�s6��2�2�2�#$� "�w�{�B�K�@�@�2�2�2r�z!At least one fd was closed early.rR)rrCr;r�r�r�r@r3rArBrrH)r$r9r:�devzero_fdsrHs     rr;z:POSIXProcessTestCase._TestExecuteChildPopen._execute_child�s��
%�� �/��F�t�F�F�F�v�F�F�F�
2�2�(-�a���2�2�2��%�)�I�I����2�2� "�T�Z�%6�%6�%8�%8�$�+�:L�:L�:N�:N�%)�[�%7�%7�%9�%9�%;�$G�3�I�I�I�I�I�*�%�%���������%�%��k�%�%���������%�����2�2�(-�a���2�2�2��%�)�I�I����2�2� "�T�Z�%6�%6�%8�%8�$�+�:L�:L�:N�:N�%)�[�%7�%7�%9�%9�%;�$G�3�I�I�I�I�I�*�%�%���������%��k�%�%���������%������s0�C�A*B<�<C�F�5A*E:� F�:F�FN)r0r1r2r�r;r3rr�_TestExecuteChildPopenr��s5������A�	=�	=�	=�	%�	%�	%�	%�	%rr�r�z/dev/zero required.c	��	d�}|�tj��5|�|ttjtjtj|���ddd��dS#1swxYwYdS)Nc�*�tjd���)Nz-force the _execute_child() errpipe_data path.)rr:r3rrr�zWPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes.<locals>.raise_it�s���,�C�E�E�
Er)r@rArBr�)rarr:r�rrD)r$r�s  r�0test_preexec_errpipe_does_not_double_close_pipeszEPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes�s���D�	E�	E�	E��
�
�z�9�
:�
:�	E�	E��'�'��o�(�o�j�o�)��8�
(�
E�
E�
E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E����	E�	E�	E�	E�	E�	Es�?A0�0A4�7A4c��tj��}	tj��|�tj����t	jtjddgd����|�tj��d��tj��|�	tj����t	jtjddgd����|�	tj��d��|stj��dSdS#|stj��wwxYw)Nr
rc��dSr!r3r3rrr�zEPOSIXProcessTestCase.test_preexec_gc_module_failure.<locals>.<lambda>	���t�rr�z#Popen enabled gc when it shouldn't.c��dSr!r3r3rrr�zEPOSIXProcessTestCase.test_preexec_gc_module_failure.<locals>.<lambda>	r�rzPopen left gc disabled.)
�gc�	isenabled�disabler+rrUrVrW�enabler�)r$�enableds  r�test_preexec_gc_module_failurez3POSIXProcessTestCase.test_preexec_gc_module_failure�s/���,�.�.��	��J�L�L�L����R�\�^�^�,�,�,��O�S�^�T�2�6�'3�|�
5�
5�
5�
5����R�\�^�^�B�
D�
D�
D�
�I�K�K�K��O�O�B�L�N�N�+�+�+��O�S�^�T�2�6�'3�|�
5�
5�
5�
5��O�O�B�L�N�N�,E�F�F�F��
��
������
�
��7�
��
�����
���s�DD6�6Er[z!setrlimit() seems to fail on OS Xc�v�	ddlm}m}m}n,#t$r}|�|��Yd}~nd}~wwxYw||��}|\}}||d|f��|�|||��	tjtj
ddgd����|�d��dS#t$rYdSwxYw)Nr)�	getrlimit�	setrlimit�RLIMIT_NPROCr
rc��dSr!r3r3rrr�z@POSIXProcessTestCase.test_preexec_fork_failure.<locals>.<lambda>	r�rr�z.RLIMIT_NPROC had no effect; probably superuser)�resourcer�r�r�r7r�r�rrUrVrW�BlockingIOError)r$r�r�r�r��limitsr��hards        r�test_preexec_fork_failurez.POSIXProcessTestCase.test_preexec_fork_failure	s��
	�C�C�C�C�C�C�C�C�C�C�C���	�	�	��M�M�#�������������	������<�(�(���	��D��	�,��D�	�*�*�*����	�<��8�8�8�	L��O�S�^�T�2�6�'3�|�
5�
5�
5�
5�
�M�M�J�K�K�K�K�K��	�	�	�	��D�D�	���s"�

�
6�1�6�/$B*�*
B8�7B8c���tj��\}}t|dd���5}|�dtjz��|�dtjz��ddd��n#1swxYwYtj	|d��tj|��}|���tj
|��|�|jd��dS�N�wr�)r�z#!%s
z(exec '%s' -c 'import sys; sys.exit(47)'
i�rS)r�r\r�r�r�
unix_shellrVrWr�chmodrrCr)r]rXr)r$rH�fname�fobjrJs     r�test_args_stringz%POSIXProcessTestCase.test_args_string$	s���$�&�&�	��E�
�"�c�"3�
4�
4�
4�	'���J�J�x�'�"4�4�5�5�5��J�J�B��~�&�
'�
'�
'�	'�	'�	'�	'�	'�	'�	'�	'�	'�	'�	'����	'�	'�	'�	'�	���������U�#�#��	������
�	�%���������r�*�*�*�*�*��AA:�:A>�A>c���|�ttjtjddgd���|�ttjtjddgd���dS)Nr
rRrS��startupinfo��
creationflags�rarxrrUrVrWr#s rr�z&POSIXProcessTestCase.test_invalid_args2	sx�����*�j�o��>�4�5�7�&(�	�	*�	*�	*�	
���*�j�o��>�4�5�7�(*�	�	,�	,�	,�	,�	,rc�H�tj���}d|d<tjdgdtj|���}|5|�|j����	d��d��ddd��dS#1swxYwYdS�Nr�r�zecho $FRUITr��r�rAr�s 	
r��
rr�r�rrCrDrXrArr��r$r�rJs   r�test_shell_sequencez(POSIXProcessTestCase.test_shell_sequence=	s�������"�"��!��w����m�_�A�$.�O�!'�
)�
)�
)���	L�	L����Q�X�]�]�_�_�2�2�<�@�@�(�K�K�K�	L�	L�	L�	L�	L�	L�	L�	L�	L�	L�	L�	L����	L�	L�	L�	L�	L�	Ls�	AB�B�Bc�F�tj���}d|d<tjddtj|���}|5|�|j����	d��d��ddd��dS#1swxYwYdSr�r�r�s   r�test_shell_stringz&POSIXProcessTestCase.test_shell_stringG	s�������"�"��!��w����]�!�$.�O�!'�
)�
)�
)���	L�	L����Q�X�]�]�_�_�2�2�<�@�@�(�K�K�K�	L�	L�	L�	L�	L�	L�	L�	L�	L�	L�	L�	L����	L�	L�	L�	L�	L�	Ls�AB�B�Bc��tj��\}}t|dd���5}|�dtjz��|�dtjz��ddd��n#1swxYwYtj	|d��tj|��}tj|��|�
|d��dSr�)r�r\r�r�rr�rVrWrr�rrUr]rX)r$rHr�r�rZs     r�test_call_stringz%POSIXProcessTestCase.test_call_stringQ	s���$�&�&�	��E�
�"�c�"3�
4�
4�
4�	'���J�J�x�'�"4�4�5�5�5��J�J�B��~�&�
'�
'�
'�	'�	'�	'�	'�	'�	'�	'�	'�	'�	'�	'����	'�	'�	'�	'�	�������
�_�U�
#�
#��
�	�%��������R� � � � � r�c	��g}dD][}dD]V}tj�||��}tj�|��r|�|���W�\|s|�d��d}tj�|��r4tj�|��s|�|��|D]�}tjd|dtj	���}|5|�
|j����
��t|d����ddd��n#1swxYwY��dS)	N)z/binz	/usr/bin/z/usr/local/bin)�bash�kshz"bash or ksh required for this testz/bin/shzecho $0T)rWr�rAr�)rr�r��isfiler�r��islinkrrCrDrXrArr�r�)r$�shellsr�r��shrJs      r�test_specific_shellz(POSIXProcessTestCase.test_specific_shell^	s�����=�	&�	&�F�'�
&�
&���W�\�\�&�$�/�/���7�>�>�"�%�%�&��M�M�"�%�%�%��
&��	@��M�M�>�?�?�?�
��
�7�>�>�"���	�b�g�n�n�R�&8�&8�	��M�M�"�����	N�	N�B�� ��r��(2��9�9�9�A��
N�
N�� � �������!6�!6�!8�!8�%��G�:L�:L�M�M�M�
N�
N�
N�
N�
N�
N�
N�
N�
N�
N�
N����
N�
N�
N�
N��	N�	Ns�5AE�E	�E	c���tjtjtj��}	tjt
jddgdtjtjtj���}tjtj|��n$#tjtj|��wxYw|j�	d��t||��|�|S)Nr
z�if 1:
                                 import sys, time
                                 sys.stdout.write('x\n')
                                 sys.stdout.flush()
                                 time.sleep(30)
                                 T�r^r@rArBr�)r��SIGINT�default_int_handlerrrCrVrWrDrAr�getattr)r$�methodr9r�rJs     r�
_kill_processz"POSIXProcessTestCase._kill_processr	s���
�m�F�M�6�3M�N�N��	6�� �#�.�$�9%�"&�,0�'1��(2��(2��	9�	9�	9�A�
�M�&�-��5�5�5�5��F�M�&�-��5�5�5�5����	
��
�
�a�������6���D�!�!��s�AB�!B0)�netbsd�openbsdz"Due to known OS bug (issue #16762)c�8�tjtjddgdtjtjtj���}|j�d��tjd��t||��|�|�
��dS)Nr
z�if 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             Trr�)rrCrVrWrDrArr=r>rr�)r$rr9rJs    r�_kill_dead_processz'POSIXProcessTestCase._kill_dead_process�	s���

��c�n�d�5!�"�
(,�#-�?�$.�O�$.�O�
5�
5�
5��	
��
�
�a�����
�1�
�
�
����6���D�!�!�	�
�
�����rc���|�dtj��}|���\}}|�d|��|�|���d��dS)N�send_signalsKeyboardInterruptr)rr�rr�rvr@r)�r$rJr�rBs    r�test_send_signalz%POSIXProcessTestCase.test_send_signal�	sc�����}�f�m�<�<���M�M�O�O�	��6��
�
�*�F�3�3�3����A�F�F�H�H�a�(�(�(�(�(rc���|�d��}|���\}}|�|d��|�|���tj��dS)Nrmr)rr�rXr)r��SIGKILLr
s    r�	test_killzPOSIXProcessTestCase.test_kill�	sd�����v�&�&���M�M�O�O�	��6������%�%�%���������F�N�?�3�3�3�3�3rc���|�d��}|���\}}|�|d��|�|���tj��dS)N�	terminater)rr�rXr)r��SIGTERMr
s    r�test_terminatez#POSIXProcessTestCase.test_terminate�	sd�����{�+�+���M�M�O�O�	��6������%�%�%���������F�N�?�3�3�3�3�3rc�F�|�dtj��dS�Nr)r
r�rr#s r�test_send_signal_deadz*POSIXProcessTestCase.test_send_signal_dead�	s �����
�v�}�=�=�=�=�=rc�0�|�d��dS�Nrm�r
r#s r�test_kill_deadz#POSIXProcessTestCase.test_kill_dead�	s������'�'�'�'�'rc�0�|�d��dS�Nrrr#s r�test_terminate_deadz(POSIXProcessTestCase.test_terminate_dead�	s������,�,�,�,�,rc��g}|D]B}tj|��}tj|��}|�|||f���C|Sr!)r�get_inheritable�dupr�)r$�save_fdsr?rH�inheritable�saveds      r�	_save_fdszPOSIXProcessTestCase._save_fds�	sT�����	1�	1�B��,�R�0�0�K��F�2�J�J�E��J�J��E�;�/�0�0�0�0��
rc�n�|D]1\}}}tj|||���tj|���2dS)N)r$)r�dup2rH)r$r?rHr%r$s     r�_restore_fdsz!POSIXProcessTestCase._restore_fds�	sH��&)�	�	�"�B��{��G�E�2�;�7�7�7�7��H�U�O�O�O�O�	�	rc���d}|�|��}|D]\}}}|dkr|}n�	|D]}tj|���tjt
jddg|tjtj������\}}|�	|d��|�	|d��|�
|��dS#|�
|��wxYw)Nrr
rUr?r�r=)r&rrHrrCrVrWrDr�rXr))	r$r?r@�	saved_fdsrHr%r$r�r�s	         r�check_close_std_fdsz(POSIXProcessTestCase.check_close_std_fds�	s�����N�N�3�'�'�	�&/�	�	�"�B��{��Q�w�w������	)��
�
���������!�'����;�)<�
#�(�o�(�o�/�/�/�0;�{�}�}�
�C��
���S�(�+�+�+����S�)�,�,�,����i�(�(�(�(�(��D���i�(�(�(�(���s�BC�C-c�2�|�dg��dSre�r,r#s r�test_close_fd_0z$POSIXProcessTestCase.test_close_fd_0�	���� � �!��%�%�%�%�%rc�2�|�dg��dS�Nr�r.r#s r�test_close_fd_1z$POSIXProcessTestCase.test_close_fd_1�	r0rc�2�|�dg��dS)Nrer.r#s r�test_close_fd_2z$POSIXProcessTestCase.test_close_fd_2�	r0rc�4�|�ddg��dS)Nrr�r.r#s r�test_close_fds_0_1z'POSIXProcessTestCase.test_close_fds_0_1�	� ��� � �!�Q��(�(�(�(�(rc�4�|�ddg��dS)Nrrer.r#s r�test_close_fds_0_2z'POSIXProcessTestCase.test_close_fds_0_2�	r8rc�4�|�ddg��dS)Nr�rer.r#s r�test_close_fds_1_2z'POSIXProcessTestCase.test_close_fds_1_2�	r8rc�4�|�gd���dS)N)rr�rer.r#s r�test_close_fds_0_1_2z)POSIXProcessTestCase.test_close_fds_0_1_2�	s"��	
� � ����+�+�+�+�+rc�b�	tjd��}tjd��}	tjd��tjd��tjt
jddg�����tj|d��tj|d��tj|��tj|��dS#tj|d��tj|d��tj|��tj|��wxYw)Nrr�r
z*print('AssertionError:0:CLOEXEC failure.'))	rr"rHrrCrVrWr)r()r$�	new_stdin�
new_stdouts   r�test_small_errpipe_write_fdz0POSIXProcessTestCase.test_small_errpipe_write_fd�	s��K��F�1�I�I�	��V�A�Y�Y�
�	!��H�Q�K�K�K��H�Q�K�K�K�

���N�D�@�B�
C�
C�CG�4�6�6�6�
�G�I�q�!�!�!��G�J��"�"�"��H�Y�����H�Z� � � � � ��
�G�I�q�!�!�!��G�J��"�"�"��H�Y�����H�Z� � � � ���s
�AC�AD.c��d�td��D��}	d�|D��}|D]\}}tj|���tj|dd��tj|ddd��|�td����}	t
|��D]\}}tj||���tj	tjddg|d|d	|d�
��}|���|�
|��n#|�
|��wxYw|D]}tj|dd���tj|d	d��}tj|dd�����}	|�|d��|�|	d
��|D]}tj|���dS#|D]}tj|���wxYw)Nc�4�g|]}tj����Sr3�r�r\�r�rs  rr�z?POSIXProcessTestCase.test_remapping_std_fds.<locals>.<listcomp>
�!��6�6�6���!�#�#�6�6�6rr�c��g|]\}}|��Sr3r3�r�rHr�s   rr�z?POSIXProcessTestCase.test_remapping_std_fds.<locals>.<listcomp>
s��2�2�2�y�r�5��2�2�2rr��STDINrr
�Zimport sys; got = sys.stdin.read();sys.stdout.write("got %s"%got); sys.stderr.write("err")rer?rB�	got STDIN�err)r�r�unlinkr�r4r&�	enumerater(rrCrVrWr)r)rr�rXrH)
r$�temps�temp_fdsrHr�r+�temp_fdrJr�r�s
          r�test_remapping_std_fdsz+POSIXProcessTestCase.test_remapping_std_fds
s3��6�6�U�1�X�X�6�6�6��(	�2�2�E�2�2�2�H�#�
!�
!�	��E��	�%� � � � �
�H�X�a�[�(�+�+�+��H�X�a�[�!�Q�'�'�'����u�Q�x�x�0�0�I�
-�#,�X�#6�#6�)�)�K�B���G�G�R�(�(�(�(��$�c�n�d�N�&O�#�1�+�#�A�;�#�A�;�(�(�(���������!�!�)�,�,�,�,���!�!�)�,�,�,�,�����
#�
#�����Q��"�"�"�"��'�(�1�+�t�,�,�C��'�(�1�+�t�,�,�2�2�4�4�C����S�,�/�/�/����S�&�)�)�)��
�
���������
�
��h�
�
���������
���s&�BG,�A5D(�G,�(D?�?BG,�,Hc��d�td��D��}d�|D��}	|D]\}}tj|���|�td����}	t	|��D]\}}	tj|	|���tj|d��tj|dd��tj	tjddg|||���}
|
���|D]}tj|dd���tj
|d	��}tj
|d	�����}|�|��n#|�|��wxYw|�|d
��|�|d��|D]}tj|���dS#|D]}tj|���wxYw)Nc�4�g|]}tj����Sr3rErFs  rr�z7POSIXProcessTestCase.check_swap_fds.<locals>.<listcomp>A
rGrr�c��g|]\}}|��Sr3r3rIs   rr�z7POSIXProcessTestCase.check_swap_fds.<locals>.<listcomp>B
s��.�.�.�9�2�u�B�.�.�.rrJrr
rKr?rBrLrM)r�rrNr&rOr(r�r4rrCrVrWr)rr�r)rXrH)
r$�stdin_no�	stdout_no�	stderr_norPrQrHr�r+rRrJr�r�s
             r�check_swap_fdsz#POSIXProcessTestCase.check_swap_fds?
s��6�6�U�1�X�X�6�6�6��.�.��.�.�.��'	�"�
!�
!�	��E��	�%� � � � ����u�Q�x�x�0�0�I�
-�#,�X�#6�#6�)�)�K�B���G�G�R�(�(�(�(����8�,�,�,����1�a�(�(�(��$�c�n�d�N�&O�#�$�$�&�&�&��������"�'�'�B��H�R��A�&�&�&�&��g�i��.�.���g�i��.�.�4�4�6�6���!�!�)�,�,�,�,���!�!�)�,�,�,�,�������S�,�/�/�/����S�&�)�)�)��
�
���������
�
��h�
�
���������
���s$�>G�&C%E!�G�!E8�8/G�Gc��|�ddd��|�ddd��|�ddd��|�ddd��|�ddd��|�ddd��dS)Nrr�re)rZr#s r�
test_swap_fdsz"POSIXProcessTestCase.test_swap_fdso
s������A�q�!�$�$�$����A�q�!�$�$�$����A�q�!�$�$�$����A�q�!�$�$�$����A�q�!�$�$�$����A�q�!�$�$�$�$�$rc���|�td����}	|D]T}tj��5}t	j|���|��ddd��n#1swxYwY�Uttd����t|��z
���}t	j	|��gd�}i}t||��D]\}}	||||	<�tjd��}
ttd����t|��z
���}tjtjd|
t#|��gfi|��}|�|d��t||��D]�\}}	t	j|dtj��t	j|d��}
t-t/t0|
�d������}tjd|�d	|�d
|�d|�d|	�d
���}|�|	g||����	|�|��dS#|�|��wxYw)Nr�r?z�
                import os, sys
                skipped_fd = int(sys.argv[1])
                for fd in range(3):
                    if fd != skipped_fd:
                        os.write(fd, str(fd).encode('ascii'))
            r
rrBr�z"
                    When testing z to z4 redirection,
                    parent descriptor z5 got redirected
                    to descriptor(s) z instead of descriptor z.
                )r&r�r�r�rr(r3r�rrH�zipr�r�rrUrVrWrrXr4�SEEK_SETrr��maprIr	r))r$�from_fds�to_fdsr+�from_fd�f�fd_to_close�	arg_namesr:�to_fdr��
skipped_fdrZ�
read_bytes�read_fdsrSs                r�#_check_swap_std_fds_with_one_closedz8POSIXProcessTestCase._check_swap_std_fds_with_one_closedw
s����N�N�5��8�8�,�,�	�&	)�#�
1�
1���+�-�-�1���G�A�H�H�J�J��0�0�0�1�1�1�1�1�1�1�1�1�1�1����1�1�1�1���u�Q�x�x�=�=�3�x�=�=�8�=�=�?�?�K��H�[�!�!�!�5�5�5�I��F�"%�h��"7�"7�
3�
3����+2��y��'�(�(��?�$���D��e�A�h�h�-�-�#�f�+�+�5�:�:�<�<�J���#�.�$��c�*�o�o�!N�+�+�#)�+�+�B����R��#�#�#�"%�h��"7�"7�	
9�	
9�������!�R�[�1�1�1��W�W�d�3�3�
���C��):�):�7�)C�)C� D� D�E�E���o�'�"*�'�'�06�'�'�'.�'�'�'/�'�'�HM�'�'�'����
� � �%��(�C�8�8�8�8�	
9�
���i�(�(�(�(�(��D���i�(�(�(�(���s/�I�(A/�#I�/A3	�3I�6A3	�7GI�I4c���tjtd��d��D]=}tjtd��d��D]}|�||����>dS)Nr�re)�	itertools�combinationsr��permutationsrk)r$rarbs   r�!test_swap_std_fds_with_one_closedz6POSIXProcessTestCase.test_swap_std_fds_with_one_closed�
su��!�.�u�Q�x�x��;�;�	K�	K�H�#�0��q���1�=�=�
K�
K���8�8��6�J�J�J�J�
K�	K�	Krc���d�}	tjt|���|�d��dS#t$rM}|�tj��|�t|��d��Yd}~dSd}~wtj	$rM}|�
tj��|�t|��d��Yd}~dSd}~wwxYw)Nc� �td���)N�
surrogate:�r�r3rr�preparezCPOSIXProcessTestCase.test_surrogates_error_message.<locals>.prepare�
s���/�0�0�0rr�z1Expected ValueError or subprocess.SubprocessErrorrsz!Exception occurred in preexec_fn.)rrUrr�rxrr�rXrr:�assertIsNotNone)r$rtr�s   r�test_surrogates_error_messagez2POSIXProcessTestCase.test_surrogates_error_message�
s��	1�	1�	1�
	K��O��"�
$�
$�
$�
$�
�I�I�I�J�J�J�J�J���	;�	;�	;����j�3�4�4�4����S��X�X�'9�:�:�:�:�:�:�:�:�:������)�	L�	L�	L�� � ��!6�7�7�7����S��X�X�'J�K�K�K�K�K�K�K�K�K�����	L���s#�7�
C(�AB	�	C(�AC#�#C(c��dD�]\}}|�dd��}dt|��z}tj���}|||<d|d<|}tjtjd|g|���}|�	d	��}|�
|�d��t|����|�dd��}d
t|��z}tj���}|||<tjtjd|g|���}|�	d	��}|�
|�d��t|�������dS)N))�testuabc�)utest��42r�r�z&import os; print(ascii(os.getenv(%s)))�C�LC_ALLr
r�s

z'import os; print(ascii(os.getenvb(%s))))
r�rurr�r�rrurVrWr�rXr	r�)r$�key�value�
encoded_value�scriptr��
decoded_valuerAs        r�test_undecodable_envz)POSIXProcessTestCase.test_undecodable_env�
s|��G�	K�	K�J�C��!�L�L��2C�D�D�M�>��S�	�	�I�F��*�/�/�#�#�C��C��H� �C��M�!�M��,����v�.�����F��]�]�7�+�+�F����V�]�]�7�3�3�U�=�5I�5I�J�J�J��*�*�W�&7�8�8�C�>��c���J�F��*�/�/�#�#�C�$�C��H��,����v�.�����F��]�]�7�+�+�F����V�]�]�7�3�3�U�=�5I�5I�J�J�J�J�5	K�	Krc�|�tjtd��}ttdd���}tj�td��\}}tj|��}t
j|g|z��}|�|d��d|d�	|���
d��fz}t
j|d���}|�|d��tj���}||d<t
j|g|z|�	��}|�|d��tj
���}tj|��|d
<t
j|g|z|�	��}|�|d��dS)Nrr�s'%s' %s� r�Tro�PATHr�sPATH)rr�rr�r�rrrUrXr�r�r�r��environb)	r$�abs_programr9r��program�exitcoder�r��envbs	         r�test_bytes_programz'POSIXProcessTestCase.test_bytes_program�
s����k�/�!�"4�5�5���O�A�B�B�'�(�(����
�
�o�a�&8�9�9�
��g��+�g�&�&���?�K�=��#5�6�6������1�%�%�%��K����$���)>�)>�w�)G�)G�H�H���?�3�d�3�3�3������1�%�%�%��j�o�o������F���?�G�9�T�>�s�;�;�;������1�%�%�%��{���!�!����D�)�)��W�
��?�G�9�T�>�t�<�<�<������1�%�%�%�%�%rc��tjdd���}tjdd���}tjtj|gtjtjtjd���}|�|jd��tjtj|gtjd���}|���\}}ttt|�d	������}t|j
���|j���|j���g��}|�||zd
|�d||z����dS)Nzinput_reader.py�subprocessdata��subdir�fd_status.pyF)r@rArBr^r�rAr^�,zExpected no fds from z to be open in child, found )r�findfilerrCrVrWrDr�r�r�r`rIrr@r3rArBr+)	r$�sleeper�	fd_status�p1�p2rz�error�
result_fds�unwanted_fdss	         r�test_pipe_cloexecz&POSIXProcessTestCase.test_pipe_cloexec�
sk���"�#4�=M�N�N�N���$�^�<L�M�M�M�	�
�
�s�~�w�7�$.�O�J�O�%/�_��G�G�G��	
������,�,�,�
�
�s�~�y�9�%/�_��G�G�G�����(�(�
�����S�&�,�,�t�"4�"4�5�5�6�6�
��B�H�O�O�-�-�r�y�/?�/?�/A�/A��I�,�,�.�.�0�1�1��	
����l�2�2� ,�|�|�Z�,�-F�-F�H�	I�	I�	I�	I�	Irc��
��tjdd���}tjdd���}d}|dzdz}tjtj|gtjtjd�	���
tjtj||g�
jtjd�	���|��
j	��|��j	���
fd
�}�fd�}|�|��|�|���
j
�|���
j
���tj
�jgggd��\}}}	|�|d
��|��j���|���
j����j���dS)Nzqcat.pyr�r�zqgrep.pyszxcvbn��
F)r@rAr^c�T��	����dS#t$rYdSwxYwr!�r�ProcessLookupError)r�s�r�kill_p1zBPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p1�;���
����������%�
�
�
����
������
'�'c�T��	����dS#t$rYdSwxYwr!r�)r�s�r�kill_p2zBPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p2 r�r�r�zThe child hung)rr�rrCrVrWrDrAr�r)r@r�rH�selectr�rXr)r$�qcat�qgrep�subdatarr�r��	readfiles�ignored1�ignored2r�r�s          @@r�test_pipe_cloexec_real_toolsz1POSIXProcessTestCase.test_pipe_cloexec_real_tools
s�������	�2B�C�C�C��� ��4D�E�E�E������{�U�"��
�
�s�~�t�4�$.�O�J�O�(-�/�/�/���
�s�~�u�g�>�$&�I�j�o�(-�/�/�/��	
����� � � ������ � � �	�	�	�	�	�
	�	�	�	�	�
	
���� � � ����� � � �
����t����
�������(.�
�r�y�k�2�r�2�(N�(N�%�	�8�X����	�#3�4�4�4��������)�)�4�0�0�0�
�	������
�	�������rc�F�
�tjdd���}tj��}|�tj|d��|�tj|d��t
|���
td��D]`}tjtj	tj
��}|�tj|���
�|���a�
D]}tj|d���tjtj|gtjd�	��}|���\}}t
t't(|�d
������}|�|�
z�
d��tjtj|gtjd�	��}|���\}}t
t't(|�d
������}|�|�
zd��|�d|d
��t
�
fd�td��D����}	tjtj|gtjd|	���}|���\}}t
t't(|�d
������}|�||	z
�
zd��|�d|d
��dS)Nr�r�r�rr��	TFr�r�zSome fds were closedzSome fds were left openzSubprocess failedc3�@�K�|]}����V��dSr!)r)r�r�r@s  �r�	<genexpr>z6POSIXProcessTestCase.test_close_fds.<locals>.<genexpr>Ws+�����;�;�Q�(�,�,�.�.�;�;�;�;�;�;rr��rAr^�pass_fdsz'Some fds not in pass_fds were left open)rr�rrir�rHr�r�r��devnullr��add�set_inheritablerrCrVrWrDr�r`rIrrXr+rv)r$r�r?r�rHrJrz�ignored�
remaining_fds�fds_to_keepr@s          @r�test_close_fdsz#POSIXProcessTestCase.test_close_fds3s�����$�^�<L�M�M�M�	��g�i�i�������#�a�&�)�)�)������#�a�&�)�)�)��s�8�8���q���	�	�A�����R�[�1�1�B��O�O�B�H�b�)�)�)��L�L�������	)�	)�B���r�4�(�(�(�(���c�n�i�8�$.�O�u�
F�
F�
F���-�-�/�/�����C��V�\�\�$�%7�%7�8�8�9�9�
������1�8�/�	1�	1�	1�
��c�n�i�8�$.�O�t�
E�
E�
E���-�-�/�/�����C��V�\�\�$�%7�%7�8�8�9�9�
������1�2�	4�	4�	4��
�
�a��(;�<�<�<��;�;�;�;�%��(�(�;�;�;�;�;����c�n�i�8�$.�O�t�&1�
3�
3�
3���-�-�/�/�����C��V�\�\�$�%7�%7�8�8�9�9�
����-�+�5��A�B�	D�	D�	D��
�
�a��(;�<�<�<�<�<r�freebsdz/devz/dev/fdz.Requires fdescfs mounted on /dev/fd on FreeBSDc���	tjdd���}tjtjdt
jd|z��gtj���}|�	��\}}|�
��}|�t|��dd|z�	��ttt|d
����d������}ttt|d����d������}|�||zd
�	��dS)Nr�r�r�r
aK
        import os, resource, subprocess, sys, textwrap
        open_fds = set()
        # Add a bunch more fds to pass down.
        for _ in range(40):
            fd = os.open(os.devnull, os.O_RDONLY)
            open_fds.add(fd)

        # Leave a two pairs of low ones available for use by the
        # internal child error pipe and the stdout pipe.
        # We also leave 10 more open as some Python buildbots run into
        # "too many open files" errors during the test if we do not.
        for fd in sorted(open_fds)[:14]:
            os.close(fd)
            open_fds.remove(fd)

        for fd in open_fds:
            #self.addCleanup(os.close, fd)
            os.set_inheritable(fd, True)

        max_fd_open = max(open_fds)

        # Communicate the open_fds to the parent unittest.TestCase process.
        print(','.join(map(str, sorted(open_fds))))
        sys.stdout.flush()

        rlim_cur, rlim_max = resource.getrlimit(resource.RLIMIT_NOFILE)
        try:
            # 29 is lower than the highest fds we are leaving open.
            resource.setrlimit(resource.RLIMIT_NOFILE, (29, rlim_max))
            # Launch a new Python interpreter with our low fd rlim_cur that
            # inherits open fds above that limit.  It then uses subprocess
            # with close_fds=True to get a report of open fds in the child.
            # An explicit list of fds to check is passed to fd_status.py as
            # letting fd_status rely on its default logic would miss the
            # fds above rlim_cur as it normally only checks up to that limit.
            subprocess.Popen(
                [sys.executable, '-c',
                 textwrap.dedent("""
                     import subprocess, sys
                     subprocess.Popen([sys.executable, %r] +
                                      [str(x) for x in range({max_fd})],
                                      close_fds=True).wait()
                     """.format(max_fd=max_fd_open+1))],
                close_fds=False).wait()
        finally:
            resource.setrlimit(resource.RLIMIT_NOFILE, (rlim_cur, rlim_max))
        rrrez(expected exactly two lines of output:
%rrRrr�r�zSome fds were left open.)rr�rrCrVrWr�r�rDr�rrXr�r�r`rIr�rr+)r$r�rJrz�
unused_stderr�output_lines�
opened_fdsr�s        r�%test_close_fds_when_max_fd_is_loweredz:POSIXProcessTestCase.test_close_fds_when_max_fd_is_loweredcs_��	J��$�^�<L�M�M�M�	�
��c�n�d�H�O�/	�^�_/	�05�05�0�`#-�/�a0
3�0
3�0
3��d!"�
�
�����
��(�(�*�*������\�*�*�A�H�6�Q�	�	S�	S�	S���S�,�q�/�"7�"7�"9�"9�"?�"?��"E�"E�F�F�G�G�
��C��\�!�_�%:�%:�%<�%<�%B�%B�4�%H�%H�I�I�J�J�
������3�7�	�	9�	9�	9�	9�	9rr�r}c	�J�tjdd���}t��}td��D]�}t	j��}|�tj|d��|�tj|d��t	j|dd��t	j|dd��|�	|����|D�]>}tjtj
|gtjd|f���}|���\}}tt!t"|�d	������}	||hz
}
|�||	d
��|�|	|
zd��|�t,��5}|�tjt0d|f�
����ddd��n#1swxYwY|�dt3|j������@dS)Nr�r�r�r}rr�Tr�r�zfd to be passed not passedzfd to be closed passedF)r^r�zoverriding close_fds)rr�r�r�rrir�rHr��updaterrCrVrWrDr�r`rIrrvr+�assertWarnsr.rUrr�warning)r$r�r@r�r?rHrJrzr�r��to_be_closed�contexts            r�
test_pass_fdsz"POSIXProcessTestCase.test_pass_fds�s<���$�^�<L�M�M�M�	��5�5���q���	!�	!�A��'�)�)�C��O�O�B�H�c�!�f�-�-�-��O�O�B�H�c�!�f�-�-�-���s�1�v�t�,�,�,���s�1�v�t�,�,�,��O�O�C� � � � ��	H�	H�B�� �#�.�)�!<�(2��4�+-�&�2�2�2�A� �m�m�o�o�O�F�G���C����d�);�);� <� <�=�=�M�#�r�d�?�L��M�M�"�m�-I�J�J�J����]�\�9�5�
7�
7�
7��!�!�.�1�1�
;�W�� � ���'�"'�2�&�":�":�":�;�;�;�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;����
;�
;�
;�
;�
�M�M�0�#�g�o�2F�2F�G�G�G�G�%	H�	Hs�11G.�.G2	�5G2	c�j�tjdd���}tj��\}}|�tj|��|�tj|��tj|d��tj|d��||f}tj|g}|ttt|����z
}tj
|tjd|���}|���\}}t!tt"|�d������}	|�|	t!|��d|z��|�tj|��d��|�tj|��d��dS)	Nr�r�r�TFr�r�z	output=%a)rr�rrir�rHr�rVrWr�r`rrrCrDr�r�rIrrXr!)
r$rr$�non_inheritabler�r9rJrzr�r?s
          r�test_pass_fds_inheritablez.POSIXProcessTestCase.test_pass_fds_inheritable�st���!�.�9I�J�J�J��')�w�y�y�$��_������+�.�.�.������/�2�2�2�
��;��-�-�-�
��?�E�2�2�2���1�����'����S��h�'�'�(�(�(����T�$.�O�t�&.�
0�
0�
0���-�-�/�/�����#�c�6�<�<��-�-�.�.�/�/��	
����c�(�m�m�[�6�-A�B�B�B�	
����+�K�8�8�$�?�?�?�����+�O�<�<�e�D�D�D�D�Drc�P�	tjdd���}g}td��D]`}tjtjtj��}|�tj|��|�	|���atj
��\}}|�tj|��|�tj|��|�d|��tj
tj|g|d|d|dd|���5tj|d	��}ddd��n#1swxYwYd
�|�d��D��}|�|hd�t'|��zd
|����dS)Nr�r�r�rer�rT)r@rArBr^r�rBc�,�h|]}t|����Sr3)rI)r��nums  r�	<setcomp>z@POSIXProcessTestCase.test_pass_fds_redirected.<locals>.<setcomp>s��6�6�6�C�s�3�x�x�6�6�6rr�>rr�rezoutput=)rr�r�rr�r��O_RDWRr�rHr�ri�insertrrCrVrWrrrX�	frozenset)	r$r�r�r�rH�stdout_r�stdout_wrzr?s	         r�test_pass_fds_redirectedz-POSIXProcessTestCase.test_pass_fds_redirected�s���E��$�^�<L�M�M�M�	����q���	 �	 �A�����R�Y�/�/�B��O�O�B�H�b�)�)�)��O�O�B������W�Y�Y���(������(�+�+�+������(�+�+�+�����8�$�$�$�
�
�s�~�y�9�$,�Q�K�%-�a�[�%-�a�[�(,�'/�1�1�1�	-�	-��W�X�t�,�,�F�
	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-����	-�	-�	-�	-�7�6�6�<�<��#5�#5�6�6�6������i�i�i�)�H�*=�*=�=�?S��?S�?S�T�T�T�T�Ts�.E�E�Ec���tjtjd��5}t	jt||���}|���ddd��dS#1swxYwYdS)N�r+)rAr@�rFr�rr�rrCrr)�r$�inoutrJs   r�%test_stdout_stdin_are_single_inout_fdz:POSIXProcessTestCase.test_stdout_stdin_are_single_inout_fd���
�W�R�Z��
&�
&�	�%�� ��(-�U�<�<�<�A�
�F�F�H�H�H�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	��1A�A"�%A"c���tjtjd��5}t	jt||���}|���ddd��dS#1swxYwYdS)Nr�r�r�r�s   r�&test_stdout_stderr_are_single_inout_fdz;POSIXProcessTestCase.test_stdout_stderr_are_single_inout_fds���
�W�R�Z��
&�
&�	�%�� ��(-�e�=�=�=�A�
�F�F�H�H�H�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	r�c���tjtjd��5}t	jt||���}|���ddd��dS#1swxYwYdS)Nr�)rBr@r�r�s   r�%test_stderr_stdin_are_single_inout_fdz:POSIXProcessTestCase.test_stderr_stdin_are_single_inout_fdr�r�c�2�tjdd���}tjtj|gtjtj���}|���\}}|�d|j	d|�
d��z��dS)Nzsigchild_ignore.pyr�r�r�rz6sigchild_ignore.py exited non-zero with this error:
%sr�)rr�rrCrVrWrDr�rXrr	)r$�sigchild_ignorerJrArBs     r�test_wait_when_sigchild_ignoredz4POSIXProcessTestCase.test_wait_when_sigchild_ignored"s���!�*�+?�2B�D�D�D����c�n�o�>�$.�O�J�O�
M�
M�
M��������������A�L�+:����w�/�/�+0�	1�	1�	1�	1�	1rc	���tjd��}tjtjddgtjd���}|j}|�|j	��	|�
|�d��d��|�||j
|gggd��d��|���dS#|���wxYw)	Nr�r
z$import sys;sys.stdout.write("apple")r)rArMr�sapplg)r�
import_modulerrCrVrWrDrAr�rHrXrrvr�r))r$r�rJrds    r�test_select_unbufferedz+POSIXProcessTestCase.test_select_unbuffered-s����,�X�6�6����c�n�d�:�;�%/�O�%&�	
(�
(�
(��

�H������� � � �	����Q�V�V�A�Y�Y��0�0�0��M�M�!�]�V�]�A�3��B��<�<�Q�?�@�@�@�
�F�F�H�H�H�H�H��A�F�F�H�H�H�H���s
�%AC�C(c�,�tjtjddgtjtj���}|�|jj��|�|jj��t|��}|j
}tjdtf��5d}ddd��n#1swxYwYtr!|�tj��dS|�|d�tjD����dS)Nr
z import sys, time;time.sleep(0.2)r�rc�,�g|]}t|����Sr3��id�r��os  rr�zEPOSIXProcessTestCase.test_zombie_fast_process_del.<locals>.<listcomp>T���!D�!D�!D�A�"�Q�%�%�!D�!D�!Dr)rrCrVrWrDr�rArHrBr��pidr�check_warnings�ResourceWarningr'rr(rv)r$rJ�identr�s    r�test_zombie_fast_process_delz1POSIXProcessTestCase.test_zombie_fast_process_del>s=��

��c�n�d�0�1�%/�O�$.�O�	
5�
5�
5��
	
������'�'�'�������'�'�'��1�����e��
�
+�R��,A�
B�
B�	�	��A�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��	F����j�0�1�1�1�1�1�
�M�M�%�!D�!D��1C�!D�!D�!D�E�E�E�E�Es�(B7�7B;�>B;c��tjtjddgtjtj���}|�|jj��|�|jj��t|��}|j
}tjdtf��5d}tj��ddd��n#1swxYwYt!j|t$j��t(r |�tj��n*|�|d�tjD����t1jd��|�t6��5tjt8tjtj���5}	ddd��n#1swxYwYddd��n#1swxYwY|�t6t j|d��t(r!|�tj��dS|�|d�tjD����dS)	Nr
zimport time;time.sleep(3)r�rc�,�g|]}t|����Sr3r�r�s  rr�zJPOSIXProcessTestCase.test_leak_fast_process_del_killed.<locals>.<listcomp>or�rrQrc�,�g|]}t|����Sr3r�r�s  rr�zJPOSIXProcessTestCase.test_leak_fast_process_del_killed.<locals>.<listcomp>s��$G�$G�$G�q�R��U�U�$G�$G�$Gr)rrCrVrWrDr�rArHrBr�r�rr�r�r�
gc_collectrrmr�rr'rr(rvr=r>rar�r��waitpidr�)r$rJr�r�rus     r�!test_leak_fast_process_del_killedz6POSIXProcessTestCase.test_leak_fast_process_del_killedVs���
��c�n�d�.�/�%/�O�$.�O�	
5�
5�
5��
	
������'�'�'�������'�'�'��1�����e��
�
+�R��,A�
B�
B�	!�	!��A��� � � �	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!�	���V�^�$�$�$��	F����j�0�1�1�1�1�
�M�M�%�!D�!D��1C�!D�!D�!D�E�E�E�	
�
�3����
�
�
�w�
'�
'�	�	��!�/�)3��)3��:�:�:�
�=A��
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
���'�2�:�s�A�6�6�6��	I����j�0�1�1�1�1�1����U�$G�$G�J�4F�$G�$G�$G�H�H�H�H�HsH�(C
�
C�C�31G	�$F2�&G	�2F6	�6G	�9F6	�:G	�	G
�G
c����tjdd���}tjd���|�tj���t
jtj	|gtj
d�fd����}|���\}}ttt|�d������}|��|��dS)	Nr�r�r�r�Tc�.��tjd���Sr2)rr()rHs�rr�zCPOSIXProcessTestCase.test_close_fds_after_preexec.<locals>.<lambda>�s������2���r)rAr^r�r�)rr�rr"r�rHrrCrVrWrDr�r�r`rIrr�)r$r�rJrzr�r�rHs      @r�test_close_fds_after_preexecz1POSIXProcessTestCase.test_close_fds_after_preexec�s�����$�^�<L�M�M�M�	��V�A�Y�Y�������"�%�%�%���c�n�i�8�$.�O�t�(>�(>�(>�(>�
@�
@�
@���-�-�/�/�����C��V�\�\�$�%7�%7�8�8�9�9�
�����]�+�+�+�+�+rc� �ddl}tj��}	d�}tj��ddgddgfdgdddgfdgdgddgfdgdgddffD]�\}}}}|�t
��5}|�||dd||d	d	d	d	d
ddd
ddddgdd	|d��ddd��n#1swxYwY|�dt|j	������	|stj
��dSdS#|stj
��wwxYw)Nrc��dSr!r3r3rrr�z5POSIXProcessTestCase.test_fork_exec.<locals>.<lambda>�s��4�rrlsexe�envsargTr3rtr�rer�r�Fz
takes exactly)�_posixsubprocessr�r�r�rar�r4r�rrjr�)	r$r��
gc_enabled�funcr9�exe_listr��env_listr�s	         r�test_fork_execz#POSIXProcessTestCase.test_fork_exec�s���	 �����\�^�^�
� 	� �<�D��I�K�K�K��F�8�T�F�8�4���3�T�F�8�4���F�8�S�F�8�4���F�8�T�3�/�	2�
F�
F�-��h��X��&�&�y�1�1�%�S�$�.�.��h��b�#�x��B��B��1�a���d�A��r�1�b��e�%�%�%�%�%�%�%�%�%�%�%�%�%�%����%�%�%�%� � � ��#�c�m�2D�2D�E�E�E�E�-
F�0�
��
������
�
��:�
��
�����
���s0�AC5�/,B'�C5�'B+	�+C5�.B+	�/,C5�5D
c�T�ddl}Gd�d��}tj��}	tj��ddddd|d	��|d
��ffD]�}|�t
d�|�����5}|�d
gd
gd|ddgddddd	d
ddddddddddd��ddd��n#1swxYwY|�dt|j
������	|stj��dSdS#|stj��wwxYw)Nrc��eZdZdZd�Zd�ZdS)�JPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadIntTc��||_dSr!)r})r$r}s  rr�zSPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__init__�s
��"��
�
�
rc�:�|jrd|_|jSt�)NF)�firstr}rxr#s r�__int__zRPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__int__�s!���:�&�!&�D�J��:�%� � rN)r0r1r2r
r�rr3rr�BadIntr�s7�������E�
#�
#�
#�
!�
!�
!�
!�
!rr)rtrer�r�r})rr�)���*l)r}r�)r�rnrnr�r�rezfds_to_keep={}rRsfalseTr�rtr�r�r�)r�r�r�r�rarxr�r4rvrrjr�)r$r�rrr�rls      r�%test_fork_exec_sorted_fd_sanity_checkz:POSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check�s���	 ����	!�	!�	!�	!�	!�	!�	!�	!��\�^�^�
�	��I�K�K�K�!��#��������F�F�1�I�I�&�
 �
?�
?���&�&�"�,�3�3�K�@�@�'�B�B�
$�EF�$�.�.�!�
�X�J��k�4�&���B��B��1�a���d�A��d�D�"��d�$�$�$�
$�
$�
$�
$�
$�
$�
$�
$�
$�
$�
$����
$�
$�
$�
$��
�
�m�S���-=�-=�>�>�>�>�'
?�*�
��
������
�
��:�
��
�����
���s0�A D�/C�5D�C	�D�C	�	,D�D'c�Z�tjt��}|5tj�|d��5}t|j_|�	��|j�
��ddd��n#1swxYwYddd��dS#1swxYwYdS)Nr@)rrCrrrsrt�BrokenPipeErrorrHr�r��assert_called_with�r$ru�mock_proc_stdins   r�,test_communicate_BrokenPipeError_stdin_closezAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_close�s�����0�0��
�	7�	7�4�:�$�$�T�7�3�3�	7��0?�O�!�-��������!�4�4�6�6�6�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7����	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7����	7�	7�	7�	7�	7�	7s4�!B �?B�<B �B	�B �B	�B � B$�'B$c��tjt��}|5tj�|d��5}t|j_|�	d��|j�
d��|j�
��ddd��n#1swxYwYddd��dS#1swxYwYdS)Nr@�stuff)rrCrrrsrtrr�r�r�r�rHrs   r�,test_communicate_BrokenPipeError_stdin_writezAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_write�s2�����0�0��
�	<�	<�4�:�$�$�T�7�3�3�	<��0?�O�!�-����X�&�&�&��!�9�9�(�C�C�C��!�9�9�;�;�;�		<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�	<�	<s5�!B;�AB#�B;�#B'	�'B;�*B'	�+B;�;B?�B?c�8�tjtjdgtjtj���}|5t
j�|d��5}ttj
d��5}t|j_
|���|j_|�d��|j���ddd��n#1swxYwYddd��n#1swxYwYddd��dS#1swxYwYdS)N�-hr�r@�wbr)rrCrVrWrDrrsrtr�rr�rr�r�r3r�r�r�)r$rur�dev_nulls    r�,test_communicate_BrokenPipeError_stdin_flushzAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_flush�s�������� 6�&0�o�'1��8�8�8���	<�	<�4�:�$�$�T�7�3�3�	<���R�Z��&�&�	<�*2�0?�O�!�-�2:�/�/�2C�2C�O�"�/����X�&�&�&��!�9�9�;�;�;�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�	<�	<sZ�!D�C7�6AC �C7� C$�$C7�'C$�(C7�+D�7C;	�;D�>C;	�?D�D�Dc��tjtjdgtjtj���}|5t
j�|d��5}t|j	_
|�d���|j	���ddd��n#1swxYwYddd��dS#1swxYwYdS)Nrr�r@i�r_)
rrCrVrWrDrrsrtrrHr�r�r�rs   r�9test_communicate_BrokenPipeError_stdin_close_with_timeoutzNPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_close_with_timeout
s:������� 6�&0�o�'1��8�8�8���	<�	<�4�:�$�$�T�7�3�3�	<��0?�O�!�-����S��)�)�)��!�9�9�;�;�;�		<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�	<�	<s6�!C�AB(�C�(B,	�,C�/B,	�0C�C�CN�
W_STOPCODEzneed _testcapi.W_STOPCODEc�Z�	t}tj|��}tj|jd���t
jd��}tj	d|j|f���5|�
��}ddd��n#1swxYwY|�|d��dS)Nr�r�r�r/r����)rrrCr�wait_processr��	_testcapir!rrsr)rX)r$r9ru�statusrs     r�test_stoppedz!POSIXProcessTestCase.test_stopped
s���	P������%�%��	��T�X��2�2�2�2��%�a�(�(��
�Z�/�t�x��>P�
Q�
Q�
Q�	%�	%������J�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%����	%�	%�	%�	%�	
����R�(�(�(�(�(s�)B
�
B�Bc��tjt��}tj|jd���|�|j��tj	d��5}|�
tj��ddd��n#1swxYwY|�
��|�|j��dS)Nrr#zos.kill)rrCrrr%r�rrrrsrr�r�assert_not_calledru)r$ru�	mock_kills   r�test_send_signal_racez*POSIXProcessTestCase.test_send_signal_race#
s������0�0��	��T�X��2�2�2�2�	
���$�/�*�*�*�
�Z�	�
"�
"�	-�i����V�^�,�,�,�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-����	-�	-�	-�	-�
	�#�#�%�%�%�	
���T�_�-�-�-�-�-s�# B�B�Bc�v�tjtjddg��}|js|���|j�tj�|dd����5d|_|�	tj��ddd��n#1swxYwY|���dS)Nr
zexit(1)rc��dSr!r3r3rrr�z=POSIXProcessTestCase.test_send_signal_race2.<locals>.<lambda>B
s��d�r)�new)
rrCrVrWrrrrsrtrr�rrmrIs  r�test_send_signal_race2z+POSIXProcessTestCase.test_send_signal_race29
s���
��c�n�d�I�>�?�?���,�	�
�F�F�H�H�H��,�	��Z�
�
�q�&�l�l�
�
;�
;�	*�	*��A�L�
�M�M�&�.�)�)�)�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*����	*�	*�	*�	*�	
�������s�''B�B�!Bc��tjtjddgtj���}		|�d���dS#tj$rYnwxYw�/)Nr
z+import os, time; os.close(1), time.sleep(2)rrTr^r_)rrCrVrWrDr�rb�r$rus  r�1test_communicate_repeated_call_after_stdout_closezFPOSIXProcessTestCase.test_communicate_repeated_call_after_stdout_closeG
s{�������!N�!P�'1��8�8�8��	�
�� � �� �-�-�-�����,�
�
�
���
����		s�A�A�A)or0r1r2r%rrrr!rrCr&rrsr5r;rkr�rr�r^rErNr�r�rVrnrrr~r�r�r�r'r�r�r�r�r�r�r�r�r�r�rVr�r�r�r�r�r�r�r�rr�r
rrrrrrr&r)r,r/r3r5r7r:r<r>rBrSrZr\rkrprvr�r�r�r�r�r��st_devr�r�requires_mac_verr�r�r�r�r�r�r�r�r�r�r��cpython_onlyrrrrrr r&r(r,r0r3�
__classcell__�rrs@rrr9s	�������>�>�>�>�>�!�!�!�
B�
B�
B�
B�
B�
B�B�B�B�*�����J�,�����T�Z�'�(�(�A�A�)�(�A� �T�Z�'�(�(�:�:�)�(�:�*�X�_�����(;�<�<�<�-�/�/�4�4�/�/�4�,7�7�7� �X�����Y�/�/�J�G�G�B�	�4J�4J�<�>�>�9�9�>�>�9� �X�����Z�0�0�2K�L�L�1F�1F�M�L�1F�f�X�_�W�W�R��,�,�.P�Q�Q�?�?�R�Q�?��X�����Z�0�0�2M�N�N�'I�'I�O�N�'I�R�X�_�W�W�R��,�,�.P�Q�Q�@�@�R�Q�@��X�����[�1�1�3O�P�P�/A�/A�Q�P�/A�b�X�_�W�W�R��-�-�/R�S�S�D�D�T�S�D��X�_�Y�:�g�g�b�'�&:�&:�":�6�8�8�&�&�8�8�&�(8�8�8�	9�	9�	9�?�?�?�
?�?�?�
	8�	8�	8�0�0�0� %�%�%�%�%��!1�%�%�%�2�X�_������4�4�4�6K�L�L�E�E�M�L�E����*�X�_���� �"E�G�G�L�L�G�G�L�(+�+�+�	,�	,�	,�L�L�L�L�L�L�!�!�!�N�N�N�(���2�X�_�S�\�,�,�-B�C�C�9�;�;���;�;��*)�)�)�4�4�4�4�4�4�>�>�>�(�(�(�-�-�-�������
)�)�)�2&�&�&�&�&�&�&�&�&�)�)�)�)�)�)�)�)�)�,�,�,�
!�!�!�*+�+�+�Z+�+�+�`%�%�%�()�()�()�XK�K�K�
K�K�K�&K�K�K�:&�&�&�6I�I�I�.'�'�'�R-=�-=�-=�`�X�_�S�\�,�,�Y�7�7�I��R�W�V�_�_�+�w�r�w�y�/A�/A�/H�H�E�G�G�I9�I9�G�G�I9�`�W��b�!�$�$�H�H�%�$�H�BE�E�E�<U�U�U�4���������	1�	1�	1����"F�F�F�0)I�)I�)I�V,�,�,�"
��%�%���%�N
��'�'���'�R7�7�7�<�<�<�
<�
<�
<�
<�
<�
<��X���$�.�>�$�W�Y��=�=�4�6�6�)�)�6�6�)�.�.�.�,���	�	�	�	�	�	�	rrzWindows specific testsc��eZdZd�Zd�Zd�Zd�Zd�Zej	d���Z
d�Zd�Zd	�Z
d
�Zd�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZdS)�Win32ProcessTestCasec��d}d}tj��}||_||_tjt
|���dS)Nr�r�r�)r�STARTUPINFO�dwFlags�wShowWindowrUr)r$�STARTF_USESHOWWINDOW�SW_MAXIMIZEr�s    r�test_startupinfoz%Win32ProcessTestCase.test_startupinfoV
sW�� !���� �,�.�.��2���"-���	���$/�	1�	1�	1�	1�	1�	1rc�p�d}d}tj||���}tjt|���dS)Nr�r�)r=r>r�)rr<rUr)r$�STARTF_USERSHOWWINDOWr@r�s    r�test_startupinfo_keywordsz.Win32ProcessTestCase.test_startupinfo_keywordse
sV��!"���� �,�)�#�
�
�
��	���$/�	1�	1�	1�	1�	1�	1rc�J�tj��}tj|_tj|_t
d��D�]\}t}ttj
d��5}tj||tj|���}|5|�
��ddd��n#1swxYwY|�|jd��ddd��n#1swxYwY|�|jtj��|�|j��|�|j��|�|j��|�|jtj��|�|jdgi����^dS)Nrer�)rArBr�r�handle_list)rr<r?r=�SW_HIDEr>r�rr�rr�rCr�r�rXrr�	hStdInput�
hStdOutput�	hStdError�lpAttributeList)r$r�r�r��nullrus      r�test_startupinfo_copyz*Win32ProcessTestCase.test_startupinfo_copyu
s
�� �,�.�.��(�=���",�"4����q���	O�	O�A�!�C��b�j�#�&�&�
5�$�!�'��/3�/9�/@�4?�A�A�A���'�'��$�$�&�&�&�'�'�'�'�'�'�'�'�'�'�'����'�'�'�'�� � ���!�4�4�4�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5����
5�
5�
5�
5�
���[�0�'�<�
>�
>�
>����k�3�4�4�4����k�4�5�5�5����k�3�4�4�4����[�4�j�6H�I�I�I����[�8�=�"�:M�N�N�N�N�#	O�	Os6�)%C!�B/�#C!�/B3�3C!�6B3�7C!�!C%	�(C%	c��d}tj�d��tjtjdz|���dS)N�z'    a DOS box should flash briefly ...
z# -c "import time; time.sleep(0.25)"r�)rVrBr�rrUrW)r$�CREATE_NEW_CONSOLEs  r�test_creationflagsz'Win32ProcessTestCase.test_creationflags�
sQ�����
���C�D�D�D�����=�>�&8�	:�	:�	:�	:�	:�	:rc�r�|�ttjtjddgd����dS)Nr
rRc��dSr2r3r3rrr�z8Win32ProcessTestCase.test_invalid_args.<locals>.<lambda>�
s��Q�rr�r�r#s rr�z&Win32ProcessTestCase.test_invalid_args�
sC�����*�j�o��>�4�5�7�%.�Y�	�	0�	0�	0�	0�	0rc���Gd�dt��}|�t��5tjt
|�����ddd��dS#1swxYwYdS)Nc��eZdZdZdS)�4Win32ProcessTestCase.test_issue31471.<locals>.BadEnvN)r0r1r2�keysr3rr�BadEnvrV�
s�������D�D�DrrXr�)�dictrar�rrCr)r$rXs  r�test_issue31471z$Win32ProcessTestCase.test_issue31471�
s���	�	�	�	�	�T�	�	�	�
�
�
�y�
)�
)�	<�	<���_�&�&�(�(�;�;�;�;�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�	<�	<s�$A�A#�&A#c�x�tjtjddgd���}|�|d��dS)Nr
rRT)r^rSrTrYs  rr�z#Win32ProcessTestCase.test_close_fds�
sG��
�_�c�n�d�8�:�(,�.�.�.��	
����R� � � � � rc	���ddl}tj��}|�tj|d��|�tj|d��g}|D]?}tj|d��|�|�|�����@tj	tjdd�|d��gtj
d���}|���\}}|�|jd��t#|�����tj	tjdd�|d��gtj
tj
d���}|���\}}|�|jd��|�d	|��g}tj��}	d
|i|	_tj	tjdd�|d��gtj
tj
|	d���}|���\}}|�|jd��|�d	|��t-jdt0f��5tj��}	d
|dd�i|	_tj	tjdd�|d��gtj
tj
|	d���}|���\}}|�|jd��ddd��dS#1swxYwYdS)
Nrr�Tr
z2import msvcrt; print(msvcrt.open_osfhandle({}, 0))Fr�)rArBr^sOSErrorrF)rArBr�r^z.*overriding close_fds)r4rrir�rHr�r��
get_osfhandlerrCrVrWr�rDr�rXrrIr�rvr<rKrr�r.)
r$r4r?rrHrJrArBrFr�s
          r�test_close_fds_with_stdioz.Win32ProcessTestCase.test_close_fds_with_stdio�
sn���
�
�
��g�i�i�������#�a�&�)�)�)������#�a�&�)�)�)����	5�	5�B���r�4�(�(�(��N�N�6�/�/��3�3�4�4�4�4���c�n�d�R�Y�Y�Za�bc�Zd�e�e�g�$.�O�u�
F�
F�
F���������������q�)�)�)��F�L�L�N�N������c�n�d�R�Y�Y�Za�bc�Zd�e�e�g�$.�O�J�O�W[�
]�
]�
]���������������q�)�)�)��
�
�j�&�)�)�)��� �,�.�.��'4�k�&B��#���c�n�d�R�Y�Y�Za�bc�Zd�e�e�g�$.�O�J�O�)4��
F�
F�
F���������������q�)�)�)��
�
�j�&�)�)�)��
+�-E�-;�-=�>�>�		.�		.�$�0�2�2�K�+8�'�!�!�!�*�*E�K�'�� �#�.�$�"V�"]�"]�^e�fg�^h�"i�"i�"k�(2��
��-8�E�K�K�K�A��]�]�_�_�N�F�F����Q�\�1�-�-�-�		.�		.�		.�		.�		.�		.�		.�		.�		.�		.�		.�		.����		.�		.�		.�		.�		.�		.s�0B*M'�'M+�.M+c�p�tj��}i|_tjt|���dS)Nr��rr<rKrUr�r$r�s  r�test_empty_attribute_listz.Win32ProcessTestCase.test_empty_attribute_list�
s@�� �,�.�.��&(��#����$/�	1�	1�	1�	1�	1�	1rc�t�tj��}dgi|_tjt|���dS)NrFr�r`ras  r�test_empty_handle_listz+Win32ProcessTestCase.test_empty_handle_list�
sE�� �,�.�.��'4�b�&9��#����$/�	1�	1�	1�	1�	1�	1rc�"�tj���}d|d<tjdgdtj|���}|5|�d|j�����ddd��dS#1swxYwYdS�N�physalisr�r�r�r�sphysalis�	rr�r�rrCrDrvrArr�s   rr�z(Win32ProcessTestCase.test_shell_sequence�
s�������"�"��$��w����e�W�A�$.�O�!'�
)�
)�
)���	8�	8��M�M�+�q�x�}�}���7�7�7�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8����	8�	8�	8�	8�	8�	8s�	.B�B�Bc� �tj���}d|d<tjddtj|���}|5|�d|j�����ddd��dS#1swxYwYdSrfrhr�s   rr�z&Win32ProcessTestCase.test_shell_string�
s�������"�"��$��w����U�!�$.�O�!'�
)�
)�
)���	8�	8��M�M�+�q�x�}�}���7�7�7�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8����	8�	8�	8�	8�	8�	8s�.B�B�
Bc�,�dD]�}tj���}d|d<tjddtj||���}|5|�d|j���|��ddd��n#1swxYwY��dS)N)�ansi�oemrgr�r�r�)r�rAr�r�rh)r$�encr�rJs    r�test_shell_encodingsz)Win32ProcessTestCase.test_shell_encodingss���"�	@�	@�C��Z�_�_�&�&�F�(�F�7�O�� ��a�(2��%+�*-�/�/�/�A��
@�
@��
�
�j�!�(�-�-�/�/�3�?�?�?�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@����
@�
@�
@�
@��	@�	@s�
/B�B	�B	c�t�tjtjdz��}|�|d��dS)Nz -c "import sys; sys.exit(47)"rSrTrYs  rr�z%Win32ProcessTestCase.test_call_string
s;��
�_�S�^�=�>�?�?������R� � � � � rc���tjtjddgtjtjtj���}|5|j�d��t||��|�|���\}}|�	|d��|�
��}ddd��n#1swxYwY|�|d��dS)Nr
z�if 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             time.sleep(30)
                             r?r�rr)rrCrVrWrDrArrr�rXr)r@)r$rr9rJr�rBrs       rrz"Win32ProcessTestCase._kill_processs����c�n�d�5!�"�$.�?�$.�O�$.�O�
5�
5�
5���	"�	"�
�H�M�M�!�����G�A�v����%�%��
�
���I�A�v����V�S�)�)�)������J�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	
���J��*�*�*�*�*s�A/C�C�Cc���tjtjddgtjtjtj���}|5|j�d��tjd��t||��|�|�
��\}}|�|d��|���}ddd��n#1swxYwY|�|d��dS)Nr
z�if 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             sys.exit(42)
                             r?r�rr)
rrCrVrWrDrArr=r>rr�rXr))r$rr9rJr�rBrZs       rr
z'Win32ProcessTestCase._kill_dead_process(s#����c�n�d�5!�"�$.�?�$.�O�$.�O�
5�
5�
5���
	�
	�
�H�M�M�!�����J�q�M�M�M��G�A�v����%�%��
�
���I�A�v����V�S�)�)�)������B�
	�
	�
	�
	�
	�
	�
	�
	�
	�
	�
	����
	�
	�
	�
	�	
����R� � � � � s�BC�C�Cc�F�|�dtj��dSr)rr�rr#s rrz%Win32ProcessTestCase.test_send_signal?s �����=�&�.�9�9�9�9�9rc�0�|�d��dSr�rr#s rrzWin32ProcessTestCase.test_killBs�����6�"�"�"�"�"rc�0�|�d��dSrrtr#s rrz#Win32ProcessTestCase.test_terminateEs�����;�'�'�'�'�'rc�F�|�dtj��dSr)r
r�rr#s rrz*Win32ProcessTestCase.test_send_signal_deadHs �����
�v�~�>�>�>�>�>rc�0�|�d��dSrrr#s rrz#Win32ProcessTestCase.test_kill_deadKs������'�'�'�'�'rc�0�|�d��dSrrr#s rrz(Win32ProcessTestCase.test_terminate_deadNs������,�,�,�,�,rN)r0r1r2rArDrMrQr�rr6rZr�r^rbrdr�r�rnr�rr
rrrrrrr3rrr:r:S
su������
1�
1�
1�1�1�1� O�O�O�6:�:�:�0�0�0�
��<�<���<�!�!�!�0.�0.�0.�d1�1�1�1�1�1�8�8�8�8�8�8�
@�
@�
@�!�!�!�+�+�+�*!�!�!�.:�:�:�#�#�#�(�(�(�?�?�?�(�(�(�-�-�-�-�-rr:c��eZdZGd�dej��Zej�ejd��d���Z	d�Z
d�Zd�Zd�Z
d	�Zd
S)�	MiscTestsc�$��eZdZ	gZ�fd�Z�xZS)�MiscTests.RecordingPopenc�n��t��j|i|��|j�|��dSr!)rr��instances_createdr�)r$r9r:rrs   �rr�z!MiscTests.RecordingPopen.__init__Ws<����E�G�G��d�-�f�-�-�-��"�)�)�$�/�/�/�/�/r)r0r1r2r~r�r7r8s@r�RecordingPopenr|SsA�������J���	0�	0�	0�	0�	0�	0�	0�	0�	0rr�_communicatec�"�	t|_	tj�t
jd��5}t|_tj�t
d|j��5|�t��5|tj
ddgfdt
ji|��ddd��n#1swxYwYddd��n#1swxYwY|jdd�D]4}|�
|tjd���d|j�����5g}|jD]0}|tjd	���kr|�|���1|�|jd
|j���|�t'|��d|j���ddd��n#1swxYwY|jj���}|���|���|�g|jj��dS#|jj���}|���|���|�g|jj��wxYw)N�_waitrCr
zLimport time
time.sleep(9)
import sys
sys.stderr.write('\n!runaway child!\n')rAr�r_z.no open-ended wait() after the first allowed: g�?rerR)�KeyboardInterruptr�rrsrtrrCrrarVrWr]r�r@rUr��assertLessEqual�
call_countrXr�r~rrmr))r$�popener�mock__communicater:�
mock__waitrU�sigint_callsr�s        r�_test_keyboardinterrupt_no_killz)MiscTests._test_keyboardinterrupt_no_kill[s���	�):��%�	H���"�"�:�#3�W�=�=�
@��*;�
�&��Z�&�&�z�7�'+�':�<�<�E�E��*�*�+<�=�=�E�E������"M�!N�E�E�(2�'9�E�>D�E�E�E�E�E�E�E�E�E�E�E�E�E�E����E�E�E�E�E�E�E�E�E�E�E�E�E�E�E����E�E�E�E�'�5�a�b�b�9�<�<�D��'�'� �$�)�D�"9�"9�"9�;�)�8�;�;�<�<�<�<� "��&�5�2�2�D��t�y��6�6�6�6�6�$�+�+�D�1�1�1���$�$�Z�%:�A�)3�)B�%�D�D�D�� � ��\�!2�!2�A�%/�%>�!�@�@�@�-
@�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@����
@�
@�
@�
@�4�)�;�?�?�A�A�G��L�L�N�N�N��L�L�N�N�N����R��!4�!F�G�G�G�G�G���)�;�?�?�A�A�G��L�L�N�N�N��L�L�N�N�N����R��!4�!F�G�G�G�G���sx�*H&�8F3�1C�#B;�/C�;B?�?C�B?�C�F3�C	�F3�C	�C
F3�'H&�3F7�7H&�:F7�;H&�&A(Jc�H�|�tjd���dS�NgT㥛� @r_)r�rrUr#s r�#test_call_keyboardinterrupt_no_killz-MiscTests.test_call_keyboardinterrupt_no_kill�s#���,�,�Z�_�e�,�L�L�L�L�Lrc�H�|�tjd���dSr�)r�rrr#s r�"test_run_keyboardinterrupt_no_killz,MiscTests.test_run_keyboardinterrupt_no_kill�s#���,�,�Z�^�U�,�K�K�K�K�Krc�6�d�}|�|��dS)Nc�N�tj|i|��5}t�#1swxYwYdSr!)rrCr�)r9r:�unused_processs   r�popen_via_context_managerz[MiscTests.test_context_manager_keyboardinterrupt_no_kill.<locals>.popen_via_context_manager�sW���!�4�2�6�2�2�
(�n�'�'�
(�
(�
(�
(����
(�
(�
(�
(�
(�
(s���)r�)r$r�s  r�.test_context_manager_keyboardinterrupt_no_killz8MiscTests.test_context_manager_keyboardinterrupt_no_kill�s.��	(�	(�	(�	
�,�,�-F�G�G�G�G�Grc���|�tjd��d��|�tjd��d��d}	t	j��}tj�|d��}tjtrdnd|z��\}}|�
|d��|�t
j|��dSdS#|�t
j|��wwxYw)Nz
echo xyzzy�xyzzy)rr�r�ztype zcat r)rXr�	getoutput�getstatusoutputr�r�rr�r�r'r@�rmdir)r$�dirr�r'rzs     r�test_getoutputzMiscTests.test_getoutput�s�������-�l�;�;�W�E�E�E�����3�L�A�A�%�	'�	'�	'���	��"�$�$�C��7�<�<��U�+�+�D�'�7�%�1���6�T�9�;�;�N�F�F������*�*�*������
�
�
�
�
����s�����
�
�
�
����s
�A,C�C3c�d�	hd�}ttj��}t��}ddl}tj���D]G\}}|�d��r�t||jf��r�2|�	|���H|�
|||z
��dS)N>rrbrj�Handlerrr�)r�r�__all__r��__dict__�itemsr�re�
ModuleTyper�rX)r$�intentionally_excluded�exported�possible_exportsr�r�r}s       r�test__all__zMiscTests.test__all__�s���8�!R�!R�!R���z�)�*�*���5�5������%�.�4�4�6�6�	'�	'�K�D�%����s�#�#�
���%�%�"2�!4�5�5�
��� � ��&�&�&�&�����#3�6L�#L�M�M�M�M�MrN)r0r1r2rrCrrrsrtr�r�r�r�r�r�r3rrrzrzQs�������0�0�0�0�0��)�0�0�0�
�Z���z�'��8�8�)H�)H�9�8�)H�VM�M�M�L�L�L�H�H�H����&N�N�N�N�Nrrz�PollSelectorz!Test needs selectors.PollSelectorc��eZdZd�Zd�ZdS)�ProcessTestCaseNoPollc��tj|_tjt_t
�|��dSr!)r�_PopenSelector�
orig_selector�	selectors�SelectSelectorr=r%r#s rr%zProcessTestCaseNoPoll.setUp�s2��'�6���$-�$<�
�!����d�#�#�#�#�#rc�\�|jt_t�|��dSr!)r�rr�r=r.r#s rr.zProcessTestCaseNoPoll.tearDown�s'��$(�$6�
�!�� � ��&�&�&�&�&rNr/r3rrr�r��s2������$�$�$�
'�'�'�'�'rr�zWindows-specific testsc�F��eZdZ�fd�Z�fd�Zd�Zd�Zd�Zd�Zd�Z	�xZ
S)�CommandsWithSpacesc���t�����tjdd��\}}|���|_t
j|d��t
j|��dS)Nz.pyzte stsVimport sys;sys.stdout.write('%d %s' % (len(sys.argv), [a.lower () for a in sys.argv])))	rr%r�r\r�r�rr�rH)r$rdr�rrs   �rr%zCommandsWithSpaces.setUp�sh���
���
�
�����#�E�7�3�3���5��[�[�^�^��
�
���c�	
�	
�	
�	�������rc�z��tj|j��t�����dSr!)rr]r�rr.rs �rr.zCommandsWithSpaces.tearDown�s1���
�	�$�*����
���������rc��tj|d<tj|i|��}|5|�|j����d��d|jz��ddd��dS#1swxYwYdS)NrA�mbcsz2 [%r, 'ab cd'])rrDrCrXrArr	r�)r$r9r:rJs    r�with_spaceszCommandsWithSpaces.with_spaces�s���%�?��x����d�-�f�-�-��
�	�	�����h�m�m���%�%�f�-�-��$�*�,�
�
�
�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�A	A9�9A=�A=c	�f�|�dtj�d|j�dd�d�d���dS)N�"�" "�ab cdr�ro�r�rVrWr�r#s r�test_shell_string_with_spacesz0CommandsWithSpaces.test_shell_string_with_spaces�sP������S�^�^�^�T�Z�Z�Z�-4�W�W�6�=>�	�	@�	@�	@�	@�	@rc�X�|�tj|jdgd���dS)Nr�r�ror�r#s r�test_shell_sequence_with_spacesz2CommandsWithSpaces.test_shell_sequence_with_spaces�s,�����#�.�$�*�g�>�a��H�H�H�H�Hrc	�b�|�dtj�d|j�dd�d���dS)Nr�r�r�r�r#s r�test_noshell_string_with_spacesz2CommandsWithSpaces.test_noshell_string_with_spaces�sC������S�^�^�^�T�Z�Z�Z�$�W�W�&�	'�	'�	'�	'�	'rc�T�|�tj|jdg��dS)Nr�r�r#s r�!test_noshell_sequence_with_spacesz4CommandsWithSpaces.test_noshell_sequence_with_spaces�s'�����#�.�$�*�g�>�?�?�?�?�?r)r0r1r2r%r.r�r�r�r�r�r7r8s@rr�r��s���������������������@�@�@�
I�I�I�'�'�'�
@�@�@�@�@�@�@rr�c�,�eZdZd�Zd�Zd�Zd�Zd�ZdS)�ContextManagerTestsc���tjtjddgtjtj���5}|�|j���d��|�|j���d��ddd��n#1swxYwY|�	|jj
��|�	|jj
��dS)Nr
zAimport sys;sys.stdout.write('stdout');sys.stderr.write('stderr');r�sstdoutsstderr)rrCrVrWrDrXrArrBr�r�r2s  r�	test_pipezContextManagerTests.test_pipe�s	��
�
�s�~�t� =�>�&0�_�%/�_�6�6�6�	<�
:>����T�[�-�-�/�/��;�;�;����T�[�-�-�/�/��;�;�;�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�	
�����*�+�+�+������*�+�+�+�+�+s�AB � B$�'B$c��tjtjddg��5}	ddd��n#1swxYwY|�|jd��dS)Nr
zimport sys; sys.exit(100)�d)rrCrVrWrXrr2s  rr�z#ContextManagerTests.test_returncode�s���
�
�s�~�t�:�<�=�=�	�@D��	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
�����#�.�.�.�.�.s�0�4�4c���tjtjddgtj���5}|�d��|�|jd��ddd��dS#1swxYwYdS)Nr
z2import sys;sys.exit(sys.stdin.read() == 'context')r�scontextr�rQr2s  rr�z*ContextManagerTests.test_communicate_stdins���
�
�s�~�t�H�I�$.�?�4�4�4�	1�8<����Z�(�(�(����T�_�a�0�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1s�1A,�,A0�3A0c��|�t��5tjttjtj���5}	ddd��n#1swxYwYddd��dS#1swxYwYdS)Nr�)rar�rrCr�rDr2s  rr�z%ContextManagerTests.test_invalid_argss���
�
�
�1�
2�
2�	�	��!�/�)3��)3��:�:�:�
�=A��
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s5�1A2�A�A2�A	�A2�!A	�"A2�2A6�9A6c���	tjttjtjdz���}|���}|j�dtjz��|�	|j
��|�t|j
ddd��|�|j
d��|�|jj��dS)Nre)r@rMrgr)rrCrrDrr��	__enter__r@r�rrrar��__exit__rXr�r�r2s  r�test_broken_pipe_cleanupz,ContextManagerTests.test_broken_pipe_cleanups���G����&0�o�(/�(=�a�(?�A�A�A���~�~����	
�
����� 5�5�6�6�6����$�/�*�*�*����'�4�=�$��d�C�C�C������!�,�,�,�����
�)�*�*�*�*�*rN)r0r1r2r�r�r�r�r�r3rrr�r��s_������,�,�,�/�/�/�1�1�1����+�+�+�+�+rr��__main__)Frkrrxr�test.supportrrrrrrVr�rFrmrr�r�r=r�r�r�r�r�rrBr�r�r�rp�test.support.os_helperr	r&r7rbrrj�PGOrl�has_subprocess_supportr�r'r�r�r�NotADirectoryErrorrJr�rWrr�TestCaser�	Exceptionr5rCr7r=r�rr�rr�r:rzr�r�r�r�r0�mainr3rr�<module>r�s�������������������(�(�(�(�(�(�&�&�&�&�&�&�"�"�"�"�"�"�(�(�(�(�(�(�����
�
�
�
�
�
�
�
�	�	�	�	�����	�	�	�	�����������������������������
�
�
�
�
�
�
�
�����	�	�	�	�������������+�+�+�+�+�+�������������I�I�I�������J�J�J�J������
�C�C�C�������J�J�J�J������
�C�C�C�������L�L�L�L����E�E�E����
�;�;�
�(�
�9�
:�
:�:��%�?�
�(�
�=�
>�
>�>�
�\�W�
$�	�
��@�I�I��I�)��'�);�_�M���>�4��0��(�(�(� � � � � �8�$� � � �&	�	�	�	�	��	�	�	�>�>�>�>�>�j�.�>�>�>�r-�r-�r-�r-�r-�l�r-�r-�r-�j/BO�BO�BO�BO�BO�l�BO�BO�BO�J	c�	c�	c�����2�3�3�V�V�V�V�V�<�V�V�4�3�V�r0���Y� 8�9�9�{-�{-�{-�{-�{-�<�{-�{-�:�9�{-�zaN�aN�aN�aN�aN��!�aN�aN�aN�H���W�W�Y��7�7�8�:�:�'�'�'�'�'�O�'�'�:�:�'����Y� 8�9�9�(@�(@�(@�(@�(@�,�(@�(@�:�9�(@�V3+�3+�3+�3+�3+�,�3+�3+�3+�l�z����H�M�O�O�O�O�O��sB�B�B�B�B�B"�!B"�&B+�+B5�4B5�9B>�>C

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists