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

�KeNw���ddlZddlmZddlmZddlmZddlmZddlmZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZ	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&d
kZ'e'rdZ(ndZ(d
Z)e*e+e,fZ-e	j.ddfa/d�Z0Gd�dej1��Z2Gd�de3��Z4Gd�dej5��Z6Gd�de2��Z7Gd�de2��Z8d�Z9ej:e'd��Gd�de2����Z;ej<e'd��Gd �d!e2����Z=Gd"�d#ej1��Z>ej<e?ed$��d%��Gd&�d'e7����Z@ej<e'd(��Gd)�d*e2����ZAGd+�d,e2��ZBeCd-krejD��dSdS).�N)�mock)�support)�
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 �>/usr/local/apps/python3/lib/python3.11/test/test_subprocess.py�setUpModulerIsg����f�%�%�J�����
�	�*�b�g�&�&�(���
�|�$�$�/�1�4�4�%�-����(�(�4�4�c��eZdZd�Zd�ZdS)�BaseTestCasec�,�tj��dS�N)r�
reap_children��selfs r�setUpzBaseTestCase.setUpTs��	������rc��tsVtjD]}|����tj��|�tjd��|���tj��dS)Nzsubprocess._active not empty)	�	mswindowsr�_active�wait�_cleanup�assertFalse�
doCleanupsrr!)r#�insts  r�tearDownzBaseTestCase.tearDownYs����	�"�*�
�
���	�	�������!�!�!�����"�$B�
�
�
�	
������������rN��__name__�
__module__�__qualname__r$r-�rrrrSs2������ � � �

 �
 �
 �
 �
 rrc��eZdZdS)�PopenTestExceptionN)r/r0r1r2rrr4r4fs�������Drr4c��eZdZ	d�ZdS)�PopenExecuteChildRaisesc� �td���)NzForced Exception for Test)r4)r#�args�kwargss   r�_execute_childz&PopenExecuteChildRaises._execute_childns�� �!<�=�=�=rN)r/r0r1r:r2rrr6r6js(�������>�>�>�>�>rr6c��eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zej e!d��d���Z"ej e!d��d���Z#ej e!d��d ���Z$d!�Z%d"�Z&d#�Z'd$�Z(d%�Z)d&�Z*ej e!d'��d(���Z+ej e!d'��d)���Z,d*�Z-ej e.j/e.j0kd+��d,���Z1ej e.j/e.j0kd+��ej e2j3��d-��d.�����Z4d/�Z5d0�Z6d1�Z7d2�Z8d3�Z9d4�Z:d5�Z;d6�Z<d7�Z=d8�Z>d9�Z?d:�Z@d;�ZAd<�ZBd=�ZCd>�ZDejEeFoeGeFd?��d@��dA���ZHejEeFoeGeFd?��d@��dB���ZIdC�ZJej e.jKdDkdE��ej e2jLdF��dGkdH��dI�����ZMdJ�ZNdK�ZOdL�ZPdM�ZQdN�ZRdO�ZSdP�ZTdQ�ZUdR�ZVdS�ZWdT�ZXdU�ZYdV�ZZdW�Z[dX�Z\dY�Z]dZ�Z^d[�Z_d\�Z`d]�Zad^�Zbd_�Zcd`�Zdda�Zedb�Zfdc�Zgdd�Zhde�Zidf�Zjdg�Zkdh�Zldi�Zmdj�Zndk�Zodl�Zpdm�Zqdn�Zrdo�ZsejEeGetdp��dq��ejEeGeudr��ds��ejEeGeudt��du��dv�������ZvejEeujw�xdweujy��z��dx��dy���Zzej e!dz��d{���Z{ej e!dz��d|���Z|d}�Z}ej e2jLd~��d��e~jd���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�BufferedIOBaser@rA�closer(�r#�ps  r�test_io_buffered_by_defaultz+ProcessTestCase.test_io_buffered_by_defaultts����_�#-�?�:�?�$.�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?r@rA�bufsize)rrBrrCrDr?rE�	RawIOBaser@rArGr(rHs  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�TimeoutExpiredrTrUrVr"s r�test_call_timeoutz!ProcessTestCase.test_call_timeout�sD��
	
���*�3�Z�_��>�4�1C�D�"%�	�	'�	'�	'�	'�	'rc�d�tjt��}|�|d��dS�Nr)r�
check_callrrWrXs  r�test_check_call_zeroz$ProcessTestCase.test_check_call_zero�s.��
�
"�?�
3�
3������Q�����rc��|�tj��5}tjtjddg��ddd��n#1swxYwY|�|jjd��dSrP)	r`r�CalledProcessErrorrerUrVrW�	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�r@z1check argument not allowed, it will be overriddenF��check)r�check_outputrUrV�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)�)	r`rrhrtrUrVrWrirrjs  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�3rmc��tjtjddgtj���}|�d|��dS)Nr�$import sys; sys.stderr.write('BDFL')�rArp)rrtrUrV�STDOUTrurxs  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�
addCleanuprG�write�seekrrtrUrVru)r#�tfrys   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��rrtrUrVrurxs  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�rrtrUrV�assertNotInrxs  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�rxs  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�rxs  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�rxs  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')rqz-Expected ValueError when stdout arg supplied.r@r)r`rwrrtrUrVr@�failrurir8�r#rkrys   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�rGr�r�r`rwrrtrUrVr�rurir8�r#r�rkrys    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<c�$�|�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.rp)
r`rrartrUrVr�rWriryr�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�copyrrTrUrVrW)r#�newenvrYs   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_stderrr`�	TypeErrorrrB�__init__�__code__�co_argcountrW�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")�r@rA)rrBrUrVrCr�r@rGrAr(rWr?rHs  r�test_stdin_nonezProcessTestCase.test_stdin_none1s�����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�
rrBrUrVrCr�r@rGrA�communicaterWr�rstrip�r#�coderI�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?r@)rrBrUrVrCr�r@rGr?r(rWrArHs  r�test_stderr_nonez ProcessTestCase.test_stderr_noneQs�����c�n�d�4E�F�)��z��
H�
H�
H��������'�'�'������
�&�&�&�	�����������4�(�(�(�(�(rc��|dgz}tj|fi|��}|���|�d|j��dS�NrQrR)rrBr(rWr)r#�pre_argsr9r8rIs     r�_assert_pythonzProcessTestCase._assert_pythonZsU���5�6�6����T�,�,�V�,�,��	����������Q�\�*�*�*�*�*rc���tj�tj�tj��d��}|�|dgtj���dS�N�doesnotexistr�rV)r�path�join�dirnamerUrVr��r#r�s  r�test_executablezProcessTestCase.test_executablebsT���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�rUrVr��fsencoder�s  r�test_bytes_executablez%ProcessTestCase.test_bytes_executablemsn���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�rUrVr�rr�s  r�test_pathlike_executablez(ProcessTestCase.test_pathlike_executablessl���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�)rUrVr�r`�NONEXISTING_ERRORS�NONEXISTING_CMD)r#r�s  r� test_executable_takes_precedencez0ProcessTestCase.test_executable_takes_precedenceys^���N�D�)�����H�%�%�%����,��-�x�%4�Q�%7�	�	9�	9�	9�	9�	9rz"executable argument replaces shellc�J�|�gtjd���dS�NT)rV�shell)r�rUrVr"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�rUrVr"s r�$test_bytes_executable_replaces_shellz4ProcessTestCase.test_bytes_executable_replaces_shell�s<�����B�2�;�s�~�+F�+F�"&�	�	(�	(�	(�	(�	(rc�d�|�gttj��d���dSr�)r�rrUrVr"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��realpathrUrV�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)r@rR)rrBrCr�r@rGr(rWrrr��normcase�read�decode)r#�expected_cwd�
python_argr9rIrs      r�_assert_cwdzProcessTestCase._assert_cwd�s���
��j�$�-�.�
(�
(�&0�_�

(�!'�
(�
(��	
������'�'�'�	����������Q�\�*�*�*��7�#�������,�/�/�!��!�(�-�-�/�/�"8�"8�":�":�;�;�	=�	=�	=�	=�	=rc��tj��}|�|��}|�|tj|���dS�N�r�)r��
gettempdirr�r
rUrV�r#�temp_dirs  r�test_cwdzProcessTestCase.test_cwd�sF���&�(�(���&�&�x�0�0������3�>�x��@�@�@�@�@rc��tj��}|�|��}|�|tjt
j|�����dSr)r�rr�r
rUrVrr�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�rr�r
rUrVrrs  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_cwdr`�FileNotFoundErrorrrBr�r
)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��rVr�r)r#rrr�doesntexistrs      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�rrrr`rrrBr�r
)r#rr�
abs_pythonrrs      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")rr�r
rUrV)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�rUrVr"s r�test_executable_without_cwdz+ProcessTestCase.test_executable_without_cwd�s;��	
�������&<�$'�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�)rrBrUrVrCr?r�rGr(rWrrHs  r�test_stdin_pipezProcessTestCase.test_stdin_pipes}����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�rG�filenorr��lseekrrBrUrVr(rWr�r#r��drIs    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��dSr0)
r�r�r�rGr�r�rrBrUrVr(rWr�r#r�rIs   r�test_stdin_fileobjz"ProcessTestCase.test_stdin_fileobjs���
�
#�
%�
%�������!�!�!�
�������
����
�
�
���c�n�d�K�M�!�
#�
#�
#��	
�����������q�)�)�)�)�)rc���tjtjddgtj���}|5|�|j���d��ddd��dS#1swxYwYdS)Nr�&import sys; sys.stdout.write("orange")rq�orange�rrBrUrVrCrWr@rrHs  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:rqr�r;�r�r�r�rGr1rrBrUrVr(rr2rWrr3s    r�test_stdout_filedesz#ProcessTestCase.test_stdout_filedes3s���
�
#�
%�
%�������!�!�!��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:rqrr;�r�r�r�rGrrBrUrVr(r�rWrr7s   r�test_stdout_fileobjz#ProcessTestCase.test_stdout_fileobj?s���
�
#�
%�
%�������!�!�!���c�n�d�B�D� "�
$�
$�
$��	
������
����
�
�
���������I�.�.�.�.�.rc���tjtjddgtj���}|5|�|j���d��ddd��dS#1swxYwYdS)Nr�*import sys; sys.stderr.write("strawberry")r��
strawberry)rrBrUrVrCrWrArrHs  r�test_stderr_pipez ProcessTestCase.test_stderr_pipeJs�����c�n�d�F�H� *��
1�
1�
1���	=�	=����Q�X�]�]�_�_�m�<�<�<�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=����	=�	=�	=�	=�	=�	=r>c�t�tj��}|�|j��|���}tjtjddg|���}|�	��tj|dd��|�tj
|d��d��dS)NrrGr�rr@rHrAr3s    r�test_stderr_filedesz#ProcessTestCase.test_stderr_filedesRs���
�
#�
%�
%�������!�!�!��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rGr�rrHrDr7s   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�rrBrUrVrCr�rWr�r#rIr@rAs    r�,test_stderr_redirect_with_no_stdout_redirectz<ProcessTestCase.test_stderr_redirect_with_no_stdout_redirectis���
��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)	rrBrUrVrCr�rWr@rrHs  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rSr�rrTrDr7s   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)rq)rrBrUrV�DEVNULLr(rWr@rHs  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�)rrBrUrVr[r(rWrArHs  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�)rrBrUrVr[r(rWr?rHs  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?r@rA�pipesizer�)r�pipe�fcntlrarG�unittest�SkipTestrrBrUrVrCr?r@rArWr1r��killr()r#�test_pipe_r�test_pipe_w�pipesize_defaultrfrI�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��tjtjddgtjtjtjd���}	tj��\}}	tj|tj��}|j	|j
|jfD]G}|�tj|�
��tj��|���H	tj|��tj|��n-#tj|��tj|��wxYw|j	���|j
���|j���|���|���dS#|���|���wxYw)Nrrd���re)rrBrUrVrCrrgrhrar?r@rArWr1rGrkr()r#rI�fp_r�fp_w�default_pipesizeros      r�test_pipesize_defaultz%ProcessTestCase.test_pipesize_default�s|��
��
�^�T�*�
+��/�*�/��?�R�
1�
1�
1��	�����J�D�$�
�#(�;�t�U�5G�#H�#H� ��W�a�h���9�*�*�D��$�$���D�K�K�M�M�5�3E�F�F�(�*�*�*�*�*�
������������������������������
�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&�F$�A;D�)F$�*D,�,AF$�$*Gc�4�tj���}d|d<tjt
jddgtj|���5}|���\}}|�	|d��ddd��dS#1swxYwYdS)N�oranger�r�2import sys,os;sys.stdout.write(os.getenv("FRUIT"))�r@r�r;)
rr�r�rrBrUrVrCr�rW�r#r�rIr@rAs     r�test_envzProcessTestCase.test_envs�������"�"��"��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	z#cannot test an empty env on Windows�Py_ENABLE_SHAREDr�zEThe Python shared library cannot be loaded with an empty 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_ignoresL��L� �1�$�$��!��$���%�$�)*���i�)@�)@�$���O�
%rrz)import os; print(list(os.environ.keys()))rzc�*��g|]}�|���
|��Sr2r2)�.0�kr�s  �r�
<listcomp>z2ProcessTestCase.test_empty_env.<locals>.<listcomp>*s8���?�?�?�Q�&:�&:�1�&=�&=�?�q�?�?�?r)rrBrUrVrCr��eval�striprD�listrW)r#rIr@rA�child_env_namesr�s     @r�test_empty_envzProcessTestCase.test_empty_envs"���	:�	%�	%�	%��
�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=c�^�tjdz}|�t��5t	j|ddg��ddd��n#1swxYwY|�t��5t	jtjddg��ddd��dS#1swxYwYdS)N�rr
zpass#)rUrVr`rwrrB)r#�cmds  r�test_invalid_cmdz ProcessTestCase.test_invalid_cmd.s7���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��lemonzFRUIT=ORANGEzorange=lemonrz3import sys, os;sys.stdout.write(os.getenv("FRUIT"))rzsorange=lemon)
rr�r�r`rwrrBrrUrVrCr�rWr{s     r�test_invalid_envz ProcessTestCase.test_invalid_env8s�������"�"��%.��!�"�
�
�
�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��tjtjddgtj���}|�d��|�|jd��dS)Nrz/import sys;sys.exit(sys.stdin.read() == "pear")r�r�r�rOrHs  r�test_communicate_stdinz&ProcessTestCase.test_communicate_stdinVsd����c�n�d�E�F�$.�?�
4�
4�
4��	
�
�
�g���������q�)�)�)�)�)rc���tjtjddgtj���}|���\}}|�|d��|�|d��dS)Nrz)import sys; sys.stdout.write("pineapple")rq�	pineapple�rrBrUrVrCr�rWrPs    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�rPs    r�test_communicate_stderrz'ProcessTestCase.test_communicate_stderrfss����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�)rrBrUrVrCr�r@rGrAr?r�rWrPs    r�test_communicatez ProcessTestCase.test_communicatens�����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?r@rAr�g333333�?r^spineapple
pear
)
rrBrUrVrCr`rar�rW�encoderPs    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));rqg�������?r^i)
rrBrUrVrCr`rar�rW�len)r#rIr@�_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?r@rA)
rrCrBrr�r?�
assertTrue�closedr@rA)r#�
stdin_pipe�stdout_pipe�stderr_pipe�optionsrIs      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rQ)rrBrUrVr�rWrPs    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)rrgrGrrBrUrVr�
PIPE_MAX_SIZErCr�r@rAr?r�rW)r#�x�yrI�string_to_writer@rAs       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)
rrBrUrVrCr�r@rGrAr?r�r�rWrPs    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?r@Tzline1
zline3
zline2
�zline4
line5
line6
line7
line8)rUrV�	SETBINARYrrBrCr?r��flushrWr@�readlinerGr�r)r#r8�extra_kwargrIs    r� test_universal_newlines_and_textz0ProcessTestCase.test_universal_newlines_and_text�s����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�)rAr@r�z#line2
line4
line5
line6
line7
line8)rrBrUrVr�rCr�r@rGrAr�rWrPs    r�#test_universal_newlines_communicatez3ProcessTestCase.test_universal_newlines_communicate
s�����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)rrBrUrVr��textwrap�dedentrCr�rWrrPs    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?r@r�r)rrBrrCr�rWrrHs  r�.test_universal_newlines_communicate_input_nonez>ProcessTestCase.test_universal_newlines_communicate_input_none4sW��

��_�#-�?�$.�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?rAr@r�r�rzline1
line2
line3
line4
line5
zeline2
eline6
eline7
)rrBrUrVr�r�r�rCr�r@rGrAr�rWrr�r�rPs    r�7test_universal_newlines_communicate_stdin_stdout_stderrzGProcessTestCase.test_universal_newlines_communicate_stdin_stdout_stderr@s�����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?r@r�r
r�z1
2
3
4)rUrVrrBrCr�rW)r#r�r�r8�popenr@rAs       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
)�replaceu��)�surrogateescapeu��)�backslashreplacez\x80\x80z2import sys; sys.stdout.buffer.write(b'[\x80\x80]')rr�)r?r@r�r�r
r�z[{}])rUrVrrBrCr�rW�format)r#r��expectedr�r8r�r@rAs        r�test_communicate_errorsz'ProcessTestCase.test_communicate_errorsrs���!
�	>�	>��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�skipTestrG�poprrBrUrVrCr�rWr�rmtree)
r#�max_handles�handles�tmpdir�i�tmpfile�erI�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 cr4r�z"a b c" d e)�ab"c�\r4z	ab\"c \ d)r�z \r4z
ab\"c " \\" d)za\\\bzde fgr�za\\\b "de fg" h)za\"brkr4z
a\\\"b c d)za\\b cr4r�z"a\\b c" d e)za\\b\ cr4r�z
"a\\b\ c" d e�abr
zab "")rWr�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)rrBrUrVrCr�r?rG�assertIsNone�pollrr�r1r(rWrHs  r�	test_pollzProcessTestCase.test_poll�s�����c�n�d�8�:�#-�?�
4�
4�
4��	
�����
�&�&�&����!�&�&�(�(�#�#�#�
������!�!�4�(�(�(�	��������������1�%�%�%�%�%rc���tjt��}|�|���d��|�|���d��dSrd�rrBrrWr(rHs  r�	test_waitzProcessTestCase.test_wait�sT����_�-�-����������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)
rrBrUrVr`rar(ru�strrirWr�
SHORT_TIMEOUT)r#rIrks   r�test_wait_timeoutz!ProcessTestCase.test_wait_timeout�s�����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)Nrx)r`r�rrBrr"s r�test_invalid_bufsizez$ProcessTestCase.test_invalid_bufsize�s����
�
�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)rLrrHs  r�test_bufsize_is_nonez$ProcessTestCase.test_bufsize_is_none�sk����_�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?r@rArLr�r)rrBrUrVrCr[r?r�rrGr1r@r�r�SuppressCrashReportr�rWr)r#�liner�r�rI�	read_lines      r�_test_bufsize_equal_onez'ProcessTestCase._test_bufsize_equal_one�s���
�
�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#rs  r� test_bufsize_equal_one_text_modez0ProcessTestCase.test_bufsize_equal_one_text_mode�s*�����$�$�T�4�D�$�I�I�I�I�Irc���dtj���z}|�td��5|�|dd���ddd��dS#1swxYwYdS)Nslinezline bufferingrFr)r�linesepr��assertWarnsRegex�RuntimeWarningrrs  r�"test_bufsize_equal_one_binary_modez2ProcessTestCase.test_bufsize_equal_one_binary_modes������*�*�,�,�,��
�
"�
"�>�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'c���td��D]d}|�t��5tjt
tjtj���ddd��n#1swxYwY�edS)Nr@r�)r�r`r�rrBr�rC)r#r�s  r�test_leaking_fds_on_errorz)ProcessTestCase.test_leaking_fds_on_error
s����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)rAr�r�r
)�msvcrt�CrtSetReportMode�AttributeError�ImportErrorr�r�r�r�rUrVrrBrCr�rWr)r#rr�r��procrAs      r�test_nonexisting_with_pipesz+ProcessTestCase.test_nonexisting_with_pipessY��	:��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��extendrrg�time�sleep)r��fdss �r�open_fdsz<ProcessTestCase.test_double_close_on_error.<locals>.open_fdsBsM����2�Y�Y�
"�
"���
�
�2�7�9�9�%�%�%��
�5�!�!�!�!�
"�
"r)�targetr>)
�	threading�Thread�startr`�EnvironmentErrorrrBr�rCr�rrGr�)r#r*�t�exc�fdr�r)s      @r�test_double_close_on_errorz*ProcessTestCase.test_double_close_on_error?s������	"�	"�	"�	"�	"�
��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�r�rkr(r)r!�resultss��r�kill_proc_timer_threadzDProcessTestCase.test_threadsafe_wait.<locals>.kill_proc_timer_threadcs�����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.)r6Nr7r8)rrBrUrVrWrr,�Timerr.r&r(rrr�)r#r:r0�expected_errorcoder!r9s    @@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�rrtrUrVr�r��ascii)r#r�rys   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��mkstemprrBr�rrG�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�)
rrBrrCr�r@rGrAr?r�rHs  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...>rVFz&<Popen: returncode: None args: ['ls']>)rVz	--my-optsrXzP<Popen: returncode: None args: ['ls', '--my-opts', 'aaaaaaaaaaaaaaaaaaaaaaaa...>�z<Popen: returncode: 7 args: z('my-tool.py')>r:�r�)
�pathlib�Path�	__class__r/rir�patch�objectrrBrrW�repr)	r#�path_cmd�pathlib_cls�casesr�r�r��sxrIs	         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�rRrS)	rrBrrCr�r?rGr(r�rHs  r�!test_communicate_epipe_only_stdinz1ProcessTestCase.test_communicate_epipe_only_stdin�s_����_�#-�?�
4�
4�
4�������
�&�&�&�	������	�
�
�d�U�l�#�#�#�#�#r�SIGUSR1zRequires signal.SIGUSR1rkzRequires os.kill�getppidzRequires os.getppidc�`�d�}tjtj|��}|�tjtj|��tjddg}dD]N}|t
ji}tj|fi|��5}|���ddd��n#1swxYwY�OdS)Nc��dSr r2)�signum�frames  r�handlerz7ProcessTestCase.test_communicate_eintr.<locals>.handler�����Drrz7import os, signal;os.kill(os.getppid(), signal.SIGUSR1)r�)	�signalrhr�rUrVrrCrBr�)r#rn�old_handlerr8�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)Nrvr>)
r�getpid�listdirr`r4r6rrrCrW)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�somer8r)r`rrrTrWri�filenamerjs  r�%test_file_not_found_includes_filenamez5ProcessTestCase.test_file_not_found_includes_filenames���
�
�
�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
)r`rrrBrWrir�rjs  r� test_file_not_found_with_bad_cwdz0ProcessTestCase.test_file_not_found_with_bad_cwds���
�
�
�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 )rDrrB�bytes�types�GenericAlias�CompletedProcessrr"s r�test_class_getitemsz#ProcessTestCase.test_class_getitemssJ�����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r
rr�
_USE_VFORKF)r�rr��RuntimeError�side_effectr`rrUrV�assert_called_once�	call_argsr8rr^r_r*�call_args_list)r#�mock_fork_execs  r�test__use_vforkzProcessTestCase.test__use_vforks��	
���
�-�.�.�.�%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�9E6N)�r/r0r1rJrNrZrbrfrlrzr}r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�ri�skipIfr&r�r�r�r�rr
rrrrr$r'rU�base_prefix�prefixr)�	sysconfig�is_python_buildr+r.r5r8r=rBrErIrKrMrQrUrWrYr\r^r`�
skipUnlessrh�hasattrrprvr|�platform�get_config_varr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr	rrrrrr"r3r@rDrPrTrergrprrur��isdirrxr}r�r�r�rr^r�r2rrr<r<rs�	������������!�!�!�'�'�'� � � �
5�5�5�5�5�5�4�4�4�'�'�'�
'�
'�
'�'�'�'�(�(�(�'�'�'�'�'�'�%�%�%�5�5�5�4�4�4�
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��6	0�	0�	0��X�_�S�\�W�,�:�<�<��X�_�-�Y�-�.@�A�A�Q�F�2�3�3�2�2�3�3�<�<�
2�,@�@�@�6�6�6�<*�*�*�'�'�'�/�/�/�
/�
/�
/�@�@�@�&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�
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�
I�
Irr<c��eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zejed��d���Zd�ZdS)�RunFuncTestCasec�F�	tjd|g}tj|fi|��S)Nr)rUrVrr)r#r�r9�argvs    r�
run_pythonzRunFuncTestCase.run_python!s+��B����d�+���~�d�-�-�f�-�-�-rc��|�d��}|�|jd��|�tj��5|���ddd��dS#1swxYwYdSr�)r�rWrr`rrh�check_returncode�r#�cps  r�test_returncodezRunFuncTestCase.test_returncode&s���
�_�_�7�
8�
8��������+�+�+�
�
�
�z�<�
=�
=�	"�	"����!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	"�	"s�A2�2A6�9A6c���|�tj��5}|�dd���ddd��n#1swxYwY|�|jjd��dS)NrQTrrrR)r`rrhr�rWrirrjs  r�
test_checkzRunFuncTestCase.test_check-s���
�
�
�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)NTrrr)rrrrWrr�s  r�test_check_zerozRunFuncTestCase.test_check_zero2s4��
�^�O�4�
8�
8�
8��������*�*�*�*�*rc��|�tj��5|�dd���ddd��dS#1swxYwYdS)Nr\rr^)r`rrar�r"s r�test_timeoutzRunFuncTestCase.test_timeout7s���
�
�
�z�8�
9�
9�	@�	@��O�O�.��O�?�?�?�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@�	@�	@s�A�A	�A	c�~�|�dtj���}|�d|j��dS)Nrorqrp�r�rrCrur@r�s  r�test_capture_stdoutz#RunFuncTestCase.test_capture_stdout?s5��
�_�_�_�Z�_�_�
E�
E���
�
�g�r�y�)�)�)�)�)rc�~�|�dtj���}|�d|j��dS)Nrr�rp)r�rrCrurAr�s  r�test_capture_stderrz#RunFuncTestCase.test_capture_stderrDs>��
�_�_�C�$.�O��5�5���
�
�g�r�y�)�)�)�)�)rc�.�tj��}|�|j��|�d��|�d��|�d|tj���}|�	d|j
��dS)Nr�rr�r�r�)r�r�r�rGr�r�r�rrCrur@)r#r�r�s   rr�z+RunFuncTestCase.test_check_output_stdin_argIs���
�
#�
%�
%�������!�!�!�
�������
����
�
�
�
�_�_�I�����2�2��	
�
�
�g�r�y�)�)�)�)�)rc��|�ddtj���}|�d|j��dS)Nr�r�)r�r@r�r�r�s  rr�z+RunFuncTestCase.test_check_output_input_argTsB��
�_�_�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�r<r�r�r�r?r�)r�r�r�rGr�r�r`rwr�rurir8r�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� Bc�8�|�tj��5}|�ddtj���}ddd��n#1swxYwY|�|jjd��|�|jjd��dS)Nr�r�)r_r@rp)	r`rrar�rCrWriryr@)r#rkr�s   rr�z)RunFuncTestCase.test_check_output_timeouths���
�
�
�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�rWr)r#r�r�s   r�test_run_kwargszRunFuncTestCase.test_run_kwargsvs]������"�"��"��w��
�_�_�M�!'��)�)��	
������+�+�+�+�+rc��trdnd}tj|��}|�|�|�d���t	|��}tj|t
j���}|�|j	d��|�
t��5tj|t
jd���ddd��dS#1swxYwYdS)Nztree.comrVz required for this testrqrT)r@r�)r&rrr�rrrr[rWrr`r�)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�rUrVrrrWr�r#r�r8r�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�)rrUrVrrrWrr�s    r�)test_run_with_pathlike_path_and_argumentsz9RunFuncTestCase.test_run_with_pathlike_path_and_arguments�sK�����'�'���d�6�7���n�T�"�"��������,�,�,�,�,rc��|�dd���}|�d|j��|�d|j��dS)Nz>import sys;sys.stdout.write('BDFL'); sys.stderr.write('FLUFL')T��capture_outputrpsFLUFL)r�rur@rAr�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.r<r�T)r�r@r@rr��
r�r�r�rGr`rwr�rurir8r�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.r<r�T)r�rArArr�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```r<)	r'�	monotonicrrr�ra�	traceback�
format_exc�
assertLess)r#�before_secsr1�
after_secs�stackss     r�.test_run_with_shell_timeout_and_capture_outputz>RunFuncTestCase.test_run_with_shell_timeout_and_capture_output�s���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�rcrs<string>:2: EncodingWarning: r�s<string>:3: EncodingWarning: )r�r�rrrUrVrA�
splitlinesrWr�r�r�)r#r�r��liness    r�test_encoding_warningz%RunFuncTestCase.test_encoding_warning�s����� ����
�^�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)r/r0r1r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rir�r&r�r�r2rrr�r� sh������.�.�.�
"�"�"�5�5�5�
+�+�+�
@�@�@�*�*�*�
*�*�*�
	*�	*�	*�*�*�*�4�4�4�6�6�6�,�,�,�H�H�H�-�-�-�-�-�-�+�+�+�
=�
=�
=�
=�
=�
=� �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�KeyErrorrirj)�
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#r]s �rr$zPOSIXProcessTestCase.setUp�s"���
���
�
���� =����rc��	tj|j��|�d|jz��n#t$r}|}Yd}~nd}~wwxYw|S)Nz,chdir to nonexistent directory %s succeeded.)r�chdirr�r�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r
r
�Expected OSError: %s�r�rrBrUrVr�r�r�rWr��strerrorr��r#r�rIr�s    r�test_exception_cwdz'POSIXProcessTestCase.test_exception_cwd�s���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r
r�r�r�r�s    r�test_exception_bad_executablez2POSIXProcessTestCase.test_exception_bad_executables���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���r�c��	|���}	tj|jddg��}|�d|z��dS#t
$rk}|�|j|j��|�|j|j��|�|j	|j	��Yd}~dSd}~wwxYw)Nrr
r�)
r�rrBr�r�r�rWr�r�r�r�s    r�test_exception_bad_args_0z.POSIXProcessTestCase.test_exception_bad_args_0s���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 r2r"s r�__del__z.POSIXProcessTestCase.PopenNoDestructor.__del__0rorN)r/r0r1rr2rr�PopenNoDestructorr/s#������	�	�	�	�	rrr�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�)r8�
errpipe_write�err_codes   r�proper_errorzHPOSIXProcessTestCase.test_exception_errpipe_normal.<locals>.proper_error6sK�� ��H�M��}�}�U�\�2�2�9�9�;�;�H��H�]�K�(�$:�T�$A�B�B�B��1r�subprocess.os.waitpid�r��non_existent_command)r�rr^�ChildProcessErrorr`�IsADirectoryErrorr)r#�	fork_execrs   r�test_exception_errpipe_normalz2POSIXProcessTestCase.test_exception_errpipe_normal3sF��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)Nrr)rr�)r8r
�
error_datas  �r�	bad_errorzGPOSIXProcessTestCase.test_exception_errpipe_bad_data.<locals>.bad_errorIs%��� ��H�M�
�H�]�J�/�/�/��1rr
rr)r�rr^rr`r�SubprocessErrorrrur`rri)r#rrr�rs    @r�test_exception_errpipe_bad_dataz4POSIXProcessTestCase.test_exception_errpipe_bad_dataDsr���	"�(�
�	�	�	�	�	�!*�	��
�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�catrF)�restore_signalssSigIgnz&SigIgn not found in /proc/self/status.Tz=restore_signals=True should've unblocked SIGPIPE and friends.r<)rrtr�r�r��assertNotEqual)r#�default_proc_statusr�default_sig_ign_mask�restored_proc_status�restored_sig_ign_masks      r�test_restore_signalsz)POSIXProcessTestCase.test_restore_signalsZs��)�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)rrtrUrVr�getsid�intr�PermissionErrorr��EPERM)r#ry�
parent_sid�	child_sidr�s     r�test_start_new_sessionz+POSIXProcessTestCase.test_start_new_sessionrs���
	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)rrtrUrVrr/r'rr(r�r))r#ry�parent_pgid�
child_pgidr�s     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�%�+�%�%��&�%�%�%�%�%�����	���r-�setreuidzno setreuid on platformc��tj��}|dkrdnd|g}tjdkrdnd}t�=	t	j|��|�|��n#t$rd}YnwxYw|D]�}dD]�}|�||���5	tj
tjdd	g||���}t|t��rt	j|��j}n|}t|��}|�||��nB#t"$rYn6t$$r*}	|	jt&jt&jfvr�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())rr�r;�)r�r�r;)r�geteuidrUr��pwd�getpwnamr�r��subTestrrtrV�
isinstancer�pw_uidr'rWr(r�r��EACCESr)r`rwrer�
OverflowErrorrr�)
r#�uid�
test_users�name_uidr;r<ry�user_uid�
child_userr�s
          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�5�<���*E�E�E�!�F�E�E�E�E�����"����?�?�?�?�?�?�?�?�?�?�?����?�?�?�?��
?�*�
�
�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�E"�$D�=AE"�
E	�E"� 	E	�) E	�	E"�E	�E"�"E&�)E&�	F1�1F5�8F5�2H�H�H�I+�+I/�2I/z setreuid() available on platformc��|�t��5tjtd���ddd��dS#1swxYwYdS)N�r=�r`rwrrerr"s r�test_user_errorz$POSIXProcessTestCase.test_user_error�s���
�
�
�z�
*�
*�	?�	?��!�/��>�>�>�>�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?����	?�	?�	?�	?�	?�	?��A�A�A�setregidzno setregid() on platformc�6�tj��}|dkrdndg}t��}t�|�|��||gzD]�}dD]�}|�||���5	t
jtj	ddg||���}t|t��rtj|��j
}n|}t|��}|�||��n#t $rYnwxYwddd��n#1swxYwY����|�t$��5t
jt(d���ddd��n#1swxYwY|�t*��5t
jt(tjtjd	�
��ddd��n#1swxYwYt�P|�t$��5t
jt(|���ddd��dS#1swxYwYdSdS)Nr7r8r�)�groupr<rzimport os; print(os.getgid())rr�rTr>)r�r�rT)r�getegidr�r�r�rBrrtrUrVrCrr��gr_gidr'rWr(r`rwrerrFrr�)	r#�gid�
group_listr�rTr<ry�	group_gid�child_groups	         r�
test_groupzPOSIXProcessTestCase.test_group�so���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�@�@�@�@��+����������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��;sm�,D�.$C)�AD�)
C6	�3D�5C6	�6D�D	�D	�,E�E�E�92F7�7F;�>F;�#H�H�Hz setregid() available on platformc��|�t��5tjtd���ddd��dS#1swxYwYdS)NrNrUrOr"s r�test_group_errorz%POSIXProcessTestCase.test_group_error�s���
�
�
�z�
*�
*�	@�	@��!�/��?�?�?�?�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@�	@�	@rQ�	setgroupszno setgroups() on platformc��tj��}|dkrdndg}t��}d}t�|�|��	tjtjddg|���}tj	��}tj|��}t�
d�|D��}n|}|r1|�t|��t|����n`|�t|��t|����n/#t$r"}	|	jtjkr�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)Nr7r8Frz;import os, sys, json; json.dump(os.getgroups(), sys.stdout)��extra_groupsc�n�g|]2}t|t��rtj|��jn|��3Sr2)rCrr�r�rW)r��gs  rr�z:POSIXProcessTestCase.test_extra_groups.<locals>.<listcomp>sI�� 5� 5� 5�$%�;E�Q��:L�:L� S���Q��� 6� 6�RS� 5� 5� 5rTrrr>)r�r�rb)rrVr�r�r�rrtrUrV�	getgroups�json�loadsrW�setr�r�r)r`rwrerrr�)
r#rXrYr��
perm_errorry�
parent_groups�child_groups�desired_gids�exs
          r�test_extra_groupsz&POSIXProcessTestCase.test_extra_groups�sG���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�;�&�&���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�
D<�D7�7D<�F�F�	F�'3G&�&G*�-G*�H<�<I�Iz!setgroups() available on platformc��|�t��5tjtg���ddd��dS#1swxYwYdS)NrarOr"s r�test_extra_groups_errorz,POSIXProcessTestCase.test_extra_groups_error-s���
�
�
�z�
*�
*�	D�	D��!�/��C�C�C�C�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D�	D�	DrQ�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()�+)rqi�i�z != r<)r�r�rr�r�rrerUrV�stat�st_moderW�octrr�)r#r��namerv�
expected_modes     r�
test_umaskzPOSIXProcessTestCase.test_umask2s����	&��%�'�'�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
rrBrUrVr(rWrrp�SIGABRTrHs  r�test_run_abortz#POSIXProcessTestCase.test_run_abortHs���
�
(�
*�
*�	�	�� �#�.�$�"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 cmdrp�SIG)rrhr'rpr|rru�lower�r#r��error_strings   r�"test_CalledProcessError_str_signalz7POSIXProcessTestCase.test_CalledProcessError_str_signalPs����+�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�rzunknown signal 9876543.�rrhrrur�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)Nrcrznon-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ryc�,�tjdd��S)Nr��apple)r�putenvr2rr�<lambda>z3POSIXProcessTestCase.test_preexec.<locals>.<lambda>ls���	�'�7�0K�0K�r)r@�
preexec_fn�appler<rHs  r�test_preexecz!POSIXProcessTestCase.test_preexeces���
��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?�rwr2rr�raise_itz=POSIXProcessTestCase.test_preexec_exception.<locals>.raise_itqs���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)rrBrUrVr�rr��
_fork_execrwrur8)r#r�rIr�s    r�test_preexec_exceptionz+POSIXProcessTestCase.test_preexec_exceptionps��	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 )�	_testcaserrBr�)r#�testcaser8r9s    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.r<)rrBr:r�r�r�r?r1r@rArrG)r#r8r9�devzero_fdsr2s     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)r/r0r1r�r:r2rr�_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.)rrr2rrr�zWPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes.<locals>.raise_it�s���,�C�E�E�
Er)r?r@rAr�)r`rrr�rrC)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r
c��dSr r2r2rrr�zEPOSIXProcessTestCase.test_preexec_gc_module_failure.<locals>.<lambda>����t�rr�z#Popen enabled gc when it shouldn't.c��dSr r2r2rrr�zEPOSIXProcessTestCase.test_preexec_gc_module_failure.<locals>.<lambda>�r�rzPopen left gc disabled.)
�gc�	isenabled�disabler*rrTrUrV�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�6Er9z!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r
c��dSr r2r2rrr�z@POSIXProcessTestCase.test_preexec_fork_failure.<locals>.<lambda>�r�rr�z.RLIMIT_NPROC had no effect; probably superuser)�resourcer�r�r�r r�r�rrTrUrV�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�rR)r�rGr�r�r�
unix_shellrUrVr�chmodrrBr(rHrWr)r#r2�fname�fobjrIs     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rQrR��startupinfo��
creationflags�r`rwrrTrUrVr"s rr�z&POSIXProcessTestCase.test_invalid_args�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�r@r�s 	
r��
rr�r�rrBrCrWr@rr��r#r�rIs   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_string�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�rGr�r�rr�rUrVrr�rrTrHrW)r#r2r�r�rYs     r�test_call_stringz%POSIXProcessTestCase.test_call_string�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)rVr�r@rC)rr�r��isfiler�r��islinkrrBrCrWr@rr�r�)r#�shellsr�rx�shrIs      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?r@rAr�)rp�SIGINT�default_int_handlerrrBrUrVrCr@r�getattr)r#�methodr8rqrIs     r�
_kill_processz"POSIXProcessTestCase._kill_process 	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()
                             Tr�r�)rrBrUrVrCr@rr'r(r�r�)r#r�r8rIs    r�_kill_dead_processz'POSIXProcessTestCase._kill_dead_process9	s���

��c�n�d�5!�"�
(,�#-�?�$.�O�$.�O�
5�
5�
5��	
��
�
�a�����
�1�
�
�
����6���D�!�!�	�
�
�����rc���|�dtj��}|���\}}|�d|��|�|���d��dS)N�send_signalsKeyboardInterruptr)r�rpr�r�rurr(�r#rIr�rAs    r�test_send_signalz%POSIXProcessTestCase.test_send_signalP	sc�����}�f�m�<�<���M�M�O�O�	��6��
�
�*�F�3�3�3����A�F�F�H�H�a�(�(�(�(�(rc���|�d��}|���\}}|�|d��|�|���tj��dS)Nrkr)r�r�rWr(rp�SIGKILLr�s    r�	test_killzPOSIXProcessTestCase.test_killV	sd�����v�&�&���M�M�O�O�	��6������%�%�%���������F�N�?�3�3�3�3�3rc���|�d��}|���\}}|�|d��|�|���tj��dS)N�	terminater)r�r�rWr(rp�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�rpr�r"s r�test_send_signal_deadz*POSIXProcessTestCase.test_send_signal_deadb	s �����
�v�}�=�=�=�=�=rc�0�|�d��dS�Nrk�r�r"s r�test_kill_deadz#POSIXProcessTestCase.test_kill_deadf	s������'�'�'�'�'rc�0�|�d��dS�Nr�r�r"s r�test_terminate_deadz(POSIXProcessTestCase.test_terminate_deadj	s������,�,�,�,�,rc��g}|D]B}tj|��}tj|��}|�|||f���C|Sr )r�get_inheritable�dupr�)r#�save_fdsr)r2�inheritable�saveds      r�	_save_fdszPOSIXProcessTestCase._save_fdsn	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�dup2rG)r#r)r2rrs     r�_restore_fdsz!POSIXProcessTestCase._restore_fdsv	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rSr>r�r;)rrrGrrBrUrVrCr�rWr)	r#r)r?�	saved_fdsr2rrr�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��dSrd�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�	rrc�2�|�dg��dS)Nrcrr"s r�test_close_fd_2z$POSIXProcessTestCase.test_close_fd_2�	rrc�4�|�ddg��dS)Nrr�rr"s r�test_close_fds_0_1z'POSIXProcessTestCase.test_close_fds_0_1�	� ��� � �!�Q��(�(�(�(�(rc�4�|�ddg��dS)Nrrcrr"s r�test_close_fds_0_2z'POSIXProcessTestCase.test_close_fds_0_2�	rrc�4�|�ddg��dS)Nr�rcrr"s r�test_close_fds_1_2z'POSIXProcessTestCase.test_close_fds_1_2�	rrc�4�|�gd���dS)N)rr�rcr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.'))	rrrGrrBrUrVr(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����Sr2�r�rG�r�r�s  rr�z?POSIXProcessTestCase.test_remapping_std_fds.<locals>.<listcomp>�	�!��6�6�6���!�#�#�6�6�6rr�c��g|]\}}|��Sr2r2�r�r2r�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")rcr>r@�	got STDIN�err)r�r�unlinkr�r2r�	enumeraterrrBrUrVr(rrr�rWrG)
r#�temps�temp_fdsr2r�r	�temp_fdrIr�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����Sr2r#r$s  rr�z7POSIXProcessTestCase.check_swap_fds.<locals>.<listcomp>�	r%rr�c��g|]\}}|��Sr2r2r's   rr�z7POSIXProcessTestCase.check_swap_fds.<locals>.<listcomp>�	s��.�.�.�9�2�u�B�.�.�.rr(rrr)r>r@r*r+)r�rr,rr-rr�r2rrBrUrVr(rr�rrWrG)
r#�stdin_no�	stdout_no�	stderr_nor.r/r2r�r	r0rIr�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�rc)r8r"s r�
test_swap_fdsz"POSIXProcessTestCase.test_swap_fds
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rr@rCz"
                    When testing z to z4 redirection,
                    parent descriptor z5 got redirected
                    to descriptor(s) z instead of descriptor z.
                )rr�r�r�rrr1rhr�rG�zipr�r�rrTrUrVrrWr2�SEEK_SETrr��mapr'rr)r#�from_fds�to_fdsr	�from_fd�f�fd_to_close�	arg_namesr9�to_fdr��
skipped_fdrY�
read_bytes�read_fdsr=s                r�#_check_swap_std_fds_with_one_closedz8POSIXProcessTestCase._check_swap_std_fds_with_one_closed%
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�rc)�	itertools�combinationsr��permutationsrI)r#r?r@s   r�!test_swap_std_fds_with_one_closedz6POSIXProcessTestCase.test_swap_std_fds_with_one_closedQ
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�r2rr�preparezCPOSIXProcessTestCase.test_surrogates_error_message.<locals>.prepareW
s���/�0�0�0rr�z1Expected ValueError or subprocess.SubprocessErrorrQz!Exception occurred in preexec_fn.)rrTrr�rwr�r�rWrr�assertIsNotNone)r#rRr�s   r�test_surrogates_error_messagez2POSIXProcessTestCase.test_surrogates_error_messageV
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��42rCr�z&import os; print(ascii(os.getenv(%s)))�C�LC_ALLrr�s

z'import os; print(ascii(os.getenvb(%s))))
r�r`rr�r�rrtrUrVr�rWrrC)r#�key�value�
encoded_value�scriptr��
decoded_valuer@s        r�test_undecodable_envz)POSIXProcessTestCase.test_undecodable_envi
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�TrZ�PATHr�sPATH)rr�rr�r�rrrTrWr�r�r�r��environb)	r#�abs_programr8r��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?r@rAr<r�r@r<�,zExpected no fds from z to be open in child, found )r�findfilerrBrUrVrCr�r�rhr>r'rr?r1r@rAr*)	r#�sleeper�	fd_status�p1�p2ry�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.pyrjrkzqgrep.pyszxcvbn��
F)r?r@r<c�T��	����dS#t$rYdSwxYwr �r��ProcessLookupError)rss�r�kill_p1zBPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p1�
�;���
����������%�
�
�
����
������
'�'c�T��	����dS#t$rYdSwxYwr r})rts�r�kill_p2zBPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p2�
r�r�r�zThe child hung)rrprrBrUrVrCr@r�r(r?r�rG�selectr�rWr)r#�qcat�qgrep�subdatar�rr��	readfiles�ignored1�ignored2rsrts          @@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)Nrmrjrkrr��	TFrnrozSome fds were closedzSome fds were left openzSubprocess failedc3�@�K�|]}����V��dSr )r�)r�r�r*s  �r�	<genexpr>z6POSIXProcessTestCase.test_close_fds.<locals>.<genexpr>s+�����;�;�Q�(�,�,�.�.�;�;�;�;�;�;rr��r@r<�pass_fdsz'Some fds not in pass_fds were left open)rrprrgr�rGrhr�r��devnullr��add�set_inheritablerrBrUrVrCr�r>r'rrWr*ru)r#rrr)r�r2rIry�ignored�
remaining_fds�fds_to_keepr*s          @r�test_close_fdsz#POSIXProcessTestCase.test_close_fds�
s�����$�^�<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)Nrmrjrkr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))
        rqrcz(expected exactly two lines of output:
%rr<rror�zSome fds were left open.)rrprrBrUrVr�r�rCr�r�rWr�rhr>r'r�rr*)r#rrrIry�
unused_stderr�output_lines�
opened_fdsr�s        r�%test_close_fds_when_max_fd_is_loweredz:POSIXProcessTestCase.test_close_fds_when_max_fd_is_lowereds_��	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)Nrmrjrkr|rr�Tr�rozfd to be passed not passedzfd to be closed passedF)r<r�zoverriding close_fds)rrprhr�rrgr�rGr��updaterrBrUrVrCr�r>r'rrur*�assertWarnsrrTrr�warning)r#rrr*r�r)r2rIryr�r��to_be_closed�contexts            r�
test_pass_fdsz"POSIXProcessTestCase.test_pass_fdsds<���$�^�<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)	NrmrjrkTFr�roz	output=%a)rrprrgr�rGr�rUrVr�r>rrrBrCr�rhr'rrWr�)
r#r]r�non_inheritabler�r8rIryr�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)Nrmrjrkrcr�rT)r?r@rAr<r�r@c�,�h|]}t|����Sr2)r')r��nums  r�	<setcomp>z@POSIXProcessTestCase.test_pass_fds_redirected.<locals>.<setcomp>�s��6�6�6�C�s�3�x�x�6�6�6rro>rr�rczoutput=)rrpr�rr�r��O_RDWRr�rGr�rg�insertrrBrUrVrrrW�	frozenset)	r#rrr�r�r2�stdout_r�stdout_wryr)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+)r@r?�rEr�rr�rrBrr(�r#�inoutrIs   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�)rAr?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.pyrjrkr�rz6sigchild_ignore.py exited non-zero with this error:
%sr�)rrprrBrUrVrCr�rWrr)r#�sigchild_ignorerIr@rAs     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)r@rLrzsapplg)r�
import_modulerrBrUrVrCr@r�rGrWrrur�r()r#r�rIrBs    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�r
c�,�g|]}t|����Sr2��id�r��os  rr�zEPOSIXProcessTestCase.test_zombie_fast_process_del.<locals>.<listcomp>���!D�!D�!D�A�"�Q�%�%�!D�!D�!Dr)rrBrUrVrCr�r@rGrAr��pidr�check_warnings�ResourceWarningr&r�r'ru)r#rI�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�r
c�,�g|]}t|����Sr2r�r�s  rr�zJPOSIXProcessTestCase.test_leak_fast_process_del_killed.<locals>.<listcomp>r�rr;rc�,�g|]}t|����Sr2r�r�s  rr�zJPOSIXProcessTestCase.test_leak_fast_process_del_killed.<locals>.<listcomp>-s��$G�$G�$G�q�R��U�U�$G�$G�$Gr)rrBrUrVrCr�r@rGrAr�r�rr�r�r�
gc_collectrrkrpr�r&r�r'rur'r(r`r�r��waitpidr�)r#rIr�r�r!s     r�!test_leak_fast_process_del_killedz6POSIXProcessTestCase.test_leak_fast_process_del_killed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)	Nrmrjrkr�Tc�.��tjd���Sr)rr)r2s�rr�zCPOSIXProcessTestCase.test_close_fds_after_preexec.<locals>.<lambda>9s������2���r)r@r<r�ro)rrprrr�rGrrBrUrVrCr�rhr>r'rr�)r#rrrIryr�r�r2s      @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 r2r2rrr�z5POSIXProcessTestCase.test_fork_exec.<locals>.<lambda>Js��4�rrWsexe�envsargTr2rrr�rcr�rzFz
takes exactly)�_posixsubprocessr�r�r�r`r�rr�rrir�)	r#r��
gc_enabled�funcr8�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__ns
��"��
�
�
rc�:�|jrd|_|jSt�)NF)�firstr[rwr"s r�__int__zRPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__int__ps!���:�&�!&�D�J��:�%� � rN)r/r0r1r�r�r�r2rr�BadIntr�ls7�������E�
#�
#�
#�
!�
!�
!�
!�
!rr�)rrrcr�rzr|)rrz)���*l)r|rz)r�rYrYr�r�rczfds_to_keep={}r<sfalseTr�rrr�rzr�)r�r�r�r�r`rwr�rrurrir�)r#r�r�r�r�rks      r�%test_fork_exec_sorted_fd_sanity_checkz:POSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_checkh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?)rrBrrr^r_�BrokenPipeErrorrGr�r��assert_called_with�r#r!�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)rrBrrr^r_r�r�r�r��assert_called_once_withrGr�s   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�)rrBrUrVrCrr^r_r�rr�r�r�r�r1�return_valuer�r�)r#r!r��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)Nr�r�r?i�r^)
rrBrUrVrCrr^r_r�rGr�r�r�r�s   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�rfr�r
)r����)rrrBr�wait_processr��	_testcapirrr^r(rW)r#r8r!�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)Nrrzos.kill)rrBrrrr�r�rrr^r�rpr��assert_not_calledrS)r#r!�	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)r�c��dSr r2r2rrr�z=POSIXProcessTestCase.test_send_signal_race2.<locals>.<lambda>�s��d�r)�new)
rrBrUrVrr�rr^r_r�rpr�rkrHs  r�test_send_signal_race2z+POSIXProcessTestCase.test_send_signal_race2�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)rqTr]r^)rrBrUrVrCr�ra�r#r!s  r�1test_communicate_repeated_call_after_stdout_closezFPOSIXProcessTestCase.test_communicate_repeated_call_after_stdout_close�s{�������!N�!P�'1��8�8�8��	�
�� � �� �-�-�-�����,�
�
�
���
����		s�A�A�A)or/r0r1r$r�r�r�r�rrBrrr^rrrir�rr�rIr#r,r�r�r4rLrPr\r^rnrpr&rzr}r�r�r�r�r�r�r�r�rUr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr
r
rrrrrrr r1r8r:rIrNrTr_rhrxr�r�ru�st_devr�r�requires_mac_verr�r�r�r�r�r�r�r�r�r�r��cpython_onlyr�r�r�r�r�rrrrrr�
__classcell__�r]s@rr�r��s	�������>�>�>�>�>�!�!�!�
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�`�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�)�.�.�.�,���	�	�	�	�	�	�	rr�zWindows 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�wShowWindowrTr)r#�STARTF_USESHOWWINDOW�SW_MAXIMIZEr�s    r�test_startupinfoz%Win32ProcessTestCase.test_startupinfo
sW�� !���� �,�.�.��2���"-���	���$/�	1�	1�	1�	1�	1�	1rc�p�d}d}tj||���}tjt|���dS)Nr�r�)rrr�)rrrTr)r#�STARTF_USERSHOWWINDOWr r�s    r�test_startupinfo_keywordsz.Win32ProcessTestCase.test_startupinfo_keywords
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)Nrcr�)r@rAr�r�handle_list)rrrr�SW_HIDErr�rr�rr�rBr�r�rWrr��	hStdInput�
hStdOutput�	hStdError�lpAttributeList)r#r�r�r��nullr!s      r�test_startupinfo_copyz*Win32ProcessTestCase.test_startupinfo_copy#
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�)rUrAr�rrTrV)r#�CREATE_NEW_CONSOLEs  r�test_creationflagsz'Win32ProcessTestCase.test_creationflags>
sQ�����
���C�D�D�D�����=�>�&8�	:�	:�	:�	:�	:�	:rc�r�|�ttjtjddgd����dS)NrrQc��dSrr2r2rrr�z8Win32ProcessTestCase.test_invalid_args.<locals>.<lambda>K
s��Q�rr�r�r"s rr�z&Win32ProcessTestCase.test_invalid_argsF
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)r/r0r1�keysr2rr�BadEnvr6Q
s�������D�D�Drr8r�)�dictr`r�rrBr)r#r8s  r�test_issue31471z$Win32ProcessTestCase.test_issue31471M
s���	�	�	�	�	�T�	�	�	�
�
�
�y�
)�
)�	<�	<���_�&�&�(�(�;�;�;�;�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�	<�	<s�$A�A#�&A#c�x�tjtjddgd���}|�|d��dS)NrrQT)r<rRrSrXs  rr�z#Win32ProcessTestCase.test_close_fdsV
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))Frn)r@rAr<sOSErrorr&)r@rAr�r<z.*overriding close_fds)rrrgr�rGr�r��
get_osfhandlerrBrUrVr�rCr�rWrr'r�rurr+rr�r)
r#rr)r�r2rIr@rAr&r�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��rrr+rTr�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)Nr&r�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�rhr�r�sphysalis�	rr�r�rrBrCrur@rr�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�rhr�)r�r@r�r�rH)r#�encr�rIs    r�test_shell_encodingsz)Win32ProcessTestCase.test_shell_encodings�
s���"�	@�	@�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)"rRrSrXs  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)rrBrUrVrCr@rr�r�rWr(r)r#r�r8rIr�rArs       rr�z"Win32ProcessTestCase._kill_process�
s����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�)
rrBrUrVrCr@rr'r(r�r�rWr()r#r�r8rIr�rArYs       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�)r�rpr�r"s rr�z%Win32ProcessTestCase.test_send_signal�
s �����=�&�.�9�9�9�9�9rc�0�|�d��dSr��r�r"s rr�zWin32ProcessTestCase.test_kill�
s�����6�"�"�"�"�"rc�0�|�d��dSr�rTr"s rr�z#Win32ProcessTestCase.test_terminate�
s�����;�'�'�'�'�'rc�F�|�dtj��dSr�)r�rpr�r"s rr�z*Win32ProcessTestCase.test_send_signal_dead�
s �����
�v�~�>�>�>�>�>rc�0�|�d��dSr�r�r"s rr�z#Win32ProcessTestCase.test_kill_dead�
s������'�'�'�'�'rc�0�|�d��dSr�r�r"s rr�z(Win32ProcessTestCase.test_terminate_dead�
s������,�,�,�,�,rN)r/r0r1r!r$r-r1r�rrr:r�r>rBrDr�r�rNr�r�r�r�r�r�r�r�r�r2rrrr
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�
@�
@�
@�!�!�!�+�+�+�*!�!�!�.:�:�:�#�#�#�(�(�(�?�?�?�(�(�(�-�-�-�-�-rrc��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 )r�r��instances_createdr�)r#r8r9r]s   �rr�z!MiscTests.RecordingPopen.__init__s<����E�G�G��d�-�f�-�-�-��"�)�)�$�/�/�/�/�/r)r/r0r1r^r�rrs@r�RecordingPopenr\sA�������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�_waitrBrzLimport time
time.sleep(9)
import sys
sys.stderr.write('\n!runaway child!\n')r@r�r^z.no open-ended wait() after the first allowed: g�?rcr<)�KeyboardInterruptr�rr^r_rrBr_r`rUrVr[r�rrTr��assertLessEqual�
call_countrWr�r^r�rkr()r#�popener�mock__communicater9�
mock__waitrT�sigint_callsrts        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^)rjrrTr"s r�#test_call_keyboardinterrupt_no_killz-MiscTests.test_call_keyboardinterrupt_no_kill5s#���,�,�Z�_�e�,�L�L�L�L�Lrc�H�|�tjd���dSrl)rjrrr"s r�"test_run_keyboardinterrupt_no_killz,MiscTests.test_run_keyboardinterrupt_no_kill8s#���,�,�Z�^�U�,�K�K�K�K�Krc�6�d�}|�|��dS)Nc�N�tj|i|��5}t�#1swxYwYdSr )rrBrc)r8r9�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���)rj)r#rss  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)rrvr�ztype zcat r)rWr�	getoutput�getstatusoutputr�r�rr�r�r&r�rmdir)r#�dirrxrrys     r�test_getoutputzMiscTests.test_getoutputAs�������-�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>r�r@rh�Handler�rr�)rhr�__all__r��__dict__�itemsr�rC�
ModuleTyper�rW)r#�intentionally_excluded�exported�possible_exportsr�rxr[s       r�test__all__zMiscTests.test__all__Ts���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)r/r0r1rrBr_rr^r_rjrmrortr{r�r2rrrZrZ�
s�������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.setUpfs2��'�6���$-�$<�
�!����d�#�#�#�#�#rc�\�|jt_t�|��dSr )r�rr�r<r-r"s rr-zProcessTestCaseNoPoll.tearDownks'��$(�$6�
�!�� � ��&�&�&�&�&rNr.r2rrr�r�cs2������$�$�$�
'�'�'�'�'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])))	r�r$r�rGr�r�rr�rG)r#rBr�r]s   �rr$zCommandsWithSpaces.setUpssh���
���
�
�����#�E�7�3�3���5��[�[�^�^��
�
���c�	
�	
�	
�	�������rc�z��tj|j��t�����dSr )rrHr�r�r-r�s �rr-zCommandsWithSpaces.tearDown|s1���
�	�$�*����
���������rc��tj|d<tj|i|��}|5|�|j����d��d|jz��ddd��dS#1swxYwYdS)Nr@�mbcsz2 [%r, 'ab cd'])rrCrBrWr@rrr�)r#r8r9rIs    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�rZ�r�rUrVr�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�rZr�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)r/r0r1r$r-r�r�r�r�r�rrs@rr�r�ps���������������������@�@�@�
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)rrBrUrVrCrWr@rrAr�r�rs  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)rrBrUrVrWrrs  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�rOrs  rr�z*ContextManagerTests.test_communicate_stdin�s���
�
�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�)r`r�rrBr�rCrs  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)Nrc)r?rLrRr)rrBrrCrr��	__enter__r?r�r�rr`r��__exit__rWr�r�rs  r�test_broken_pipe_cleanupz,ContextManagerTests.test_broken_pipe_cleanup�s���G����&0�o�(/�(=�a�(?�A�A�A���~�~����	
�
����� 5�5�6�6�6����$�/�*�*�*����'�4�=�$��d�C�C�C������!�,�,�,�����
�)�*�*�*�*�*rN)r/r0r1r�r�r�r�r�r2rrr�r��s_������,�,�,�/�/�/�1�1�1����+�+�+�+�+rr��__main__)ErirrVr�test.supportrrrrrUrprErKrr�r�r'r�r�r�r�r�rr,r�r�rfr[�test.support.os_helperrrr r@r�rh�PGOrj�has_subprocess_supportr�r&r�r�r�NotADirectoryErrorr(r�rVrr�TestCaser�	Exceptionr4rBr6r<r�r�r�r�r�rrZr�r�r�r�r/�mainr2rr�<module>r�sy������������������&�&�&�&�&�&�"�"�"�"�"�"�(�(�(�(�(�(�����
�
�
�
�
�
�
�
�	�	�	�	�����	�	�	�	�����������������������������
�
�
�
�
�
�
�
�����	�	�	�	�������������+�+�+�+�+�+�������������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�.�>�>�>�kI�kI�kI�kI�kI�l�kI�kI�kI�\-yO�yO�yO�yO�yO�l�yO�yO�yO�x	c�	c�	c�����2�3�3�U�U�U�U�U�<�U�U�4�3�U�p0���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�:A?�?B	�B	�
B�B�B� B%�%B/�.B/�3B8�8B>