python (3.12.0)

(root)/
lib/
python3.12/
test/
__pycache__/
test_subprocess.cpython-312.opt-1.pyc

ΑeI|ddlZddlmZddlmZddlmZddlmZddlmZddlmZddl	m
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZdd	lm Z 	ddl!Z!	ddl#Z#	ddl$Z$	ddl%Z%ejLrejNd
ejPsejNdejRdk(Z*e*rd
Z+ndZ+dZ,e-e.e/fZ0ejbddfa2dZ3GddejhZ5Gdde6Z7GddejpZ9Gdde5Z:Gdde5Z;dZ<ejze*dGdd e5Z>ej~e*d!Gd"d#e5Z@Gd$d%ejhZAej~eBed&d'Gd(d)e:ZCej~e*d*Gd+d,e5ZDGd-d.e5ZEeFd/k(rejyy#e"$rdZ!YwxYw#e"$rdZ#YwxYw#e"$rdZ$YwxYw#dZ%YxYw)0N)mock)support)check_sanitizer)
import_helper)	os_helper)warnings_helper)assert_python_ok)FakePathztest is not helpful for PGOztest module requires subprocesswin32z@import msvcrt; msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY);)nonexisting_i_hope-cpassctjd}|ytj|tjr(tj|gjdk(r|fayyy)Ntruer)	shutilwhichosaccessX_OK
subprocessrun
returncodeZERO_RETURN_CMD)
shell_trues H/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/test/test_subprocess.pysetUpModulerKsUf%J
		*bgg&
|$//14%-	5	'ceZdZdZdZy)BaseTestCasec,tjyN)r
reap_childrenselfs rsetUpzBaseTestCase.setUpVs	rc
tsYtjD]}|jtj|jtjd|j
tjy)Nzsubprocess._active not empty)		mswindowsr_activewait_cleanupassertFalse
doCleanupsrr#)r%insts  rtearDownzBaseTestCase.tearDown[sa"**
		
!""$B
	
rN__name__
__module____qualname__r&r/rrr r Us 

 rr ceZdZy)PopenTestExceptionN)r1r2r3r4rrr6r6hsrr6ceZdZdZdZy)PopenExecuteChildRaiseszePopen subclass for testing cleanup of subprocess.PIPE filehandles when
    _execute_child fails.
    ctd)NzForced Exception for Test)r6)r%argskwargss   r_execute_childz&PopenExecuteChildRaises._execute_childps !<==rN)r1r2r3__doc__r<r4rrr8r8ls>rr8ceZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZej*ddZdZdZdZdZdZdZdZdZdZdZ e!jDe#ddZ$e!jDe#dd Z%e!jDe#dd!Z&d"Z'd#Z(d$Z)d%Z*d&Z+d'Z,e!jDe#d(d)Z-e!jDe#d(d*Z.d+Z/e!jDe0jbe0jdk7d,d-Z3e!jDe0jbe0jdk7d,e!jDe4jjd.d/Z6d0Z7d1Z8d2Z9d3Z:d4Z;d5Z<d6Z=d7Z>d8Z?d9Z@d:ZAd;ZBd<ZCd=ZDd>ZEd?ZFe!jeHxr	eIeHd@dAdBZJe!jeHxr	eIeHd@dAdCZKdDZLe!jDe0jdEk(dFe!jDe4jdGdHk(dIe!jDeOdJKdLdMZPdNZQdOZRdPZSdQZTdRZUdSZVdTZWdUZXdVZYdWZZdXZ[dYZ\dZZ]d[Z^d\Z_d]Z`d^Zad_Zbd`ZcdaZddbZedcZfddZgdeZhdfZidgZjdhZkdiZldjZmej*dkdlZndmZodnZpdoZqdpZrdqZsdrZtdsZudtZve!jeIewdudve!jeIexdwdxe!jeIexdydzd{Zye!jexjjd|exjzd}d~Z}e!jDe#ddZ~e!jDe#ddZdZe!jDe4jddejddZy)ProcessTestCasectjttjtjtj}	|j	|j
tj|j	|jtj|j	|jtj|j
j|jj|jj|jy#|j
j|jj|jj|jwxYw)Nstdinstdoutstderr)rPopenrPIPEassertIsInstancerBioBufferedIOBaserCrDcloser*r%ps  rtest_io_buffered_by_defaultz+ProcessTestCase.test_io_buffered_by_defaultvs_#-??:??$.OO
5	!!!''2+<+<=!!!((B,=,=>!!!((B,=,=>
GGMMO
HHNN
HHNN
FFH
GGMMO
HHNN
HHNN
FFHs	A>D&&A Fctjttjtjtjd}	|j	|j
tj|j	|jtj|j	|jtj|j
j|jj|jj|jy#|j
j|jj|jj|jwxYw)Nr)rBrCrDbufsize)rrErrFrGrBrH	RawIOBaserCrDrJr*rKs  rtest_io_unbuffered_worksz(ProcessTestCase.test_io_unbuffered_workss_#-??:??$.OOQ
@	!!!''2<<8!!!((BLL9!!!((BLL9
GGMMO
HHNN
HHNN
FFH
GGMMO
HHNN
HHNN
FFHs
A>D''A Fcttjtjddg}|j	|dyNrimport sys; sys.exit(47)/rcallsys
executableassertEqualr%rcs  r
test_call_seqzProcessTestCase.test_call_seqs0
__cnnd8:;R rc|jtjtjtj
ddgdy)Nrwhile True: pass皙?timeout)assertRaisesrTimeoutExpiredrWrXrYr$s rtest_call_timeoutz!ProcessTestCase.test_call_timeouts7
	
*33Z__>>41CD"%		'rcZtjt}|j|dyNr)r
check_callrrZr[s  rtest_check_call_zeroz$ProcessTestCase.test_check_call_zeros"

"
"?
3Qrc|jtj5}tjtj
ddgddd|j
jjdy#1swY0xYwrS)	rcrCalledProcessErrorrhrXrYrZ	exceptionrr%cs  rtest_check_call_nonzeroz'ProcessTestCase.test_check_call_nonzerosl


z<<
=	@!!3>>4#=#?
@	@	
//4	@	@'A66A?c|tjtjddg}|j	d||jtd5tjgdddd|jtd5tjgddddy#1swY@xYw#1swYyxYw)	Nr
print('BDFL')BDFLz2stdout argument not allowed, it will be overriddenrCz1check argument not allowed, it will be overriddenFcheck)rcheck_outputrXrYassertInassertRaisesRegex
ValueErrorr%outputs  rtest_check_outputz!ProcessTestCase.test_check_outputs((79

gv&

#
#JDF	5##Bt4	5
#
#JCE	5##Be4	5	5		5	5	5	5sB&B2&B/2B;c|jtj5}tjtj
ddgddd|j
jjdy#1swY0xYw)Nrzimport sys; sys.exit(5))	rcrrkrwrXrYrZrlrrms  rtest_check_output_nonzeroz)ProcessTestCase.test_check_output_nonzerosk


z<<
=	G##^^T+DE
G	G	
//3	G	Grpctjtjddgtj}|jd|y)Nr$import sys; sys.stderr.write('BDFL')rDrs)rrwrXrYSTDOUTrxr{s  rtest_check_output_stderrz(ProcessTestCase.test_check_output_stderrs:(('MN!((*	


gv&rctj}|j|j|j	d|jdt
jtjddg|}|jd|y)Npearrr6import sys; sys.stdout.write(sys.stdin.read().upper())rBPEAR)tempfile
TemporaryFile
addCleanuprJwriteseekrrwrXrYrx)r%tfr|s   rtest_check_output_stdin_argz+ProcessTestCase.test_check_output_stdin_argsl

#
#
%!


((IK	


gv&rcxtjtjddgd}|j	d|y)NrrrinputrrrwrXrYrxr{s  rtest_check_output_input_argz+ProcessTestCase.test_check_output_input_args7((IK	


gv&rcxtjtjddgd}|j	d|y)z<input=None has a legacy meaning of input='' on check_output.r3import sys; print('XX' if sys.stdin.read() else '')NrsXXrrwrXrYassertNotInr{s  rtest_check_output_input_nonez,ProcessTestCase.test_check_output_input_nones9((FH	
'rcztjtjddgdd}|j	d|y)NrrT)rtextXXrr{s  r!test_check_output_input_none_textz1ProcessTestCase.test_check_output_input_none_texts;((FH'	
v&rcztjtjddgdd}|j	d|y)NrrT)runiversal_newlinesrrr{s  r/test_check_output_input_none_universal_newlinesz?ProcessTestCase.test_check_output_input_none_universal_newliness;((FHt5	
v&rc|tjtjddgddd}|j	d|y)Nrzprint('foo')utf-8ignore)rencodingerrorsfoorr{s  r,test_check_output_input_none_encoding_errorsz<ProcessTestCase.test_check_output_input_none_encoding_errorss7((~6WX?	


eV$rc8|jt5}tjtj
ddgtj}|jdddd|jdjjdy#1swY3xYw)Nrprint('will not be run')rtz-Expected ValueError when stdout arg supplied.rCr)rcrzrrwrXrYrCfailrxrlr:r%rnr|s   rtest_check_output_stdout_argz,ProcessTestCase.test_check_output_stdout_args


z
*	Ga,,^^T+EF::'F
IIEF		G
	


h 0 0 34	G	GsABBctj}|j|j|j	d|jd|j
t5}tjtjddg|d}|jdddd|jdjjd|jd	|jjdy#1swY\xYw)
NrrrrharerBr7Expected ValueError when stdin and input args supplied.rBr)rrrrJrrrcrzrrwrXrYrrxrlr:r%rrnr|s    r&test_check_output_stdin_with_input_argz6ProcessTestCase.test_check_output_stdin_with_input_args

#
#
%!





z
*	Qa,,^^T+EFG-F
IIOP		Q
	


gq{{//23

gq{{//23
	Q	Qs';C==Dwalltimec*|jtj5}tjtj
ddgd}|j
dddd|jjjdy#1swY0xYw)NrMimport sys, time
sys.stdout.write('BDFL')
sys.stdout.flush()
time.sleep(3600)razExpected TimeoutExpired.rs)
rcrrdrwrXrYrrZrlr|rs   rtest_check_output_timeoutz)ProcessTestCase.test_check_output_timeouts

z88
9
	2Q,,^^T()F
II01
	2	
++W5
	2
	2s:B		Bctjj}d|d<tjt
jddg|}|j|dy)NbananaFRUITrz5import sys, os;sys.exit(os.getenv("FRUIT")=="banana")env)renvironcopyrrWrXrYrZ)r%newenvr\s   rtest_call_kwargsz ProcessTestCase.test_call_kwargs sT""w
__cnndGH"()	
Qrctj5}|jttj
dtj
jjj}dg|dzz}|jttj
g|ddd|jjdy#1swY*xYw)Nr)invalid_arg_namerr)rcaptured_stderrrc	TypeErrorrrE__init____code__co_argcountrZgetvalue)r%sargcount
too_many_argss    rtest_invalid_argsz!ProcessTestCase.test_invalid_args*s
$
$
&	K!i)9)9AN!''0099EEHC8a<0MDi)9)9JMJ		K
	
r*	K	KsBCCcztjtjddgtjtj}|j|jj|j|jj|j|j|jdy)Nrprint("banana")rCrD)rrErXrYrFrrCrJrDr*rZrBrKs  rtest_stdin_nonezProcessTestCase.test_stdin_none4sscnnd4EF *

I''	$'rcd}tjtjd|gtjtj}|j|jj|j|jj|j\}}|j|jd||j|jdy)Nzimport 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;rrrstest_stdout_none
rrErXrYrFrrCrJrDcommunicaterZrrstripr%coderLouterrs     rtest_stdout_nonez ProcessTestCase.test_stdout_none=s5
cnndD9$.OOJOO
M''==?Sq#.':;rcztjtjddgtjtj}|j|jj|j|jj|j|j|jdy)NrrrBrC)rrErXrYrFrrCrJrBr*rZrDrKs  rtest_stderr_nonez ProcessTestCase.test_stderr_noneTsscnnd4EF)z
H'

&	4(rc|dgz}tj|fi|}|j|jd|jyNrTrU)rrEr*rZr)r%pre_argsr;r:rLs     r_assert_pythonzProcessTestCase._assert_python]sD566T,V,	Q\\*rctjjtjjtj
d}|j
|dgtj
yNdoesnotexistrrY)rpathjoindirnamerXrYrr%rs  rtest_executablezProcessTestCase.test_executableesHww||BGGOOCNN$C$24\40S^^Lrctjjtjjtj
d}|j
|dgtjtj
yr)rrrrrXrYrfsencoders  rtest_bytes_executablez%ProcessTestCase.test_bytes_executablepsUww||BGGOOCNN$C$24\40'){{3>>'B		Drctjjtjjtj
d}|j
|dgttj
yr)rrrrrXrYrr
rs  rtest_pathlike_executablez(ProcessTestCase.test_pathlike_executablevsQww||BGGOOCNN$C$24\40'/'?		Arctjdg}|j||jt|j|t
dy)Nrrr)rXrYrrcNONEXISTING_ERRORSNONEXISTING_CMD)r%rs  r test_executable_takes_precedencez0ProcessTestCase.test_executable_takes_precedence|sINND)H%,--x%4Q%7		9rz"executable argument replaces shellcH|jgtjdyNT)rYshell)rrXrYr$s rtest_executable_replaces_shellz.ProcessTestCase.test_executable_replaces_shells	
B3>>Frcn|jgtjtjdyr)rrrrXrYr$s r$test_bytes_executable_replaces_shellz4ProcessTestCase.test_bytes_executable_replaces_shells)B2;;s~~+F"&		(rcZ|jgttjdyr)rr
rXrYr$s r'test_pathlike_executable_replaces_shellz7ProcessTestCase.test_pathlike_executable_replaces_shells%B8CNN+C"&		(rctj|5tjcdddS#1swYyxYwr")r
change_cwdrgetcwd)r%cwds  r_normalize_cwdzProcessTestCase._normalize_cwds0
!
!#
&	99;			s4=ctjjtj}tjj|Sr")rrrealpathrXrYsplit)r%python_paths  r_split_python_pathz"ProcessTestCase._split_python_paths-gg&&s~~6ww}}[))rctj|ddgfdtji|}|j|jj
|j
|jd|jtjj}|j||||jjjy)Nrzcimport os, sys; buf = sys.stdout.buffer; buf.write(os.getcwd().encode()); buf.flush(); sys.exit(47)rCrU)rrErFrrCrJr*rZrrrnormcasereaddecode)r%expected_cwd
python_argr;rLr	s      r_assert_cwdzProcessTestCase._assert_cwds
j$-.
(&0__

(!'
(	
'	Q\\*77##,/!!((--/"8"8":;	=rctj}|j|}|j|tj
|yNr)r
gettempdirrrrXrYr%temp_dirs  rtest_cwdzProcessTestCase.test_cwds9&&(&&x03>>x@rctj}|j|}|j|tj
t
j|yr)rrrrrXrYrrrs  rtest_cwd_with_bytesz#ProcessTestCase.test_cwd_with_bytessB&&(&&x03>>r{{87LMrctj}|j|}|j|tj
t
|yr)rrrrrXrYr
rs  rtest_cwd_with_pathlikez&ProcessTestCase.test_cwd_with_pathlikes>&&(&&x03>>x7IJrz"pending resolution of issue #15533c|j\}}tjjtj|}tj5}|jttj|g|jttj|g||j|}|j|||dddy#1swYyxYwr
rrrrcurdirrtemp_cwdrcFileNotFoundErrorrrErr)r%
python_dirpython_base
rel_python	wrong_dirs     rtest_cwd_with_relative_argz*ProcessTestCase.test_cwd_with_relative_args#'"9"9";
KWW\\"))[9




!	EY
/1A1A)l
,/1A1A)l	

;,,Z8JZD	E	E	Es
A4CCc|j\}}tjjtj|}d}tj5}|jttj|g||jttj|g|||j|}|j||||dddy#1swYyxYw)NsomethingyoudonthaverrYrr)r%rr r!doesntexistr"s      r!test_cwd_with_relative_executablez1ProcessTestCase.test_cwd_with_relative_executables#'"9"9";
KWW\\"))[9
,



!
	-Y
/1A1A*m


D/1A1A*m
"+

-,,Z8JZ!+

-
	-
	-
	-s
A8CC"c|j\}}tjj||}tjjtj|}tj5}|jttj|g||j|}|j|||dddy#1swYyxYwr)
rrrrrrrrcrrrErr)r%rr 
abs_pythonr!r"s      rtest_cwd_with_absolute_argz*ProcessTestCase.test_cwd_with_absolute_args#'"9"9";
KWW\\*k:
WW\\"))[9




!	CY
/1A1A)l	

;++I6IY
	B
	C	C	Cs
6AC

CzTest is not venv-compatiblec|j\}}|j|}|j|dtj|y)Nr%r&)rrrrXrY)r%rr s   rtest_executable_with_cwdz(ProcessTestCase.test_executable_with_cwdsI#'"9"9";
K((4
%;$'NN
		Drz#need an installed Python. See #7774cl|jtjdtjy)Nr%r)rrrrXrYr$s rtest_executable_without_cwdz+ProcessTestCase.test_executable_without_cwds)	
&<$'NN		4rc2tjtjddgtj}|j
j
d|j
j|j|j|jdy)Nr0import sys; sys.exit(sys.stdin.read() == "pear")rrr)rrErXrYrFrBrrJr*rZrrKs  rtest_stdin_pipezProcessTestCase.test_stdin_pipesfcnndKM(oo
/	


g	

	q)rctj}|j|j|j	}tj|dtj|ddtjtjddg|}|j|j|jdyNrrrr1rr)rrrrJfilenorrlseekrrErXrYr*rZrr%rdrLs    rtest_stdin_filedesz"ProcessTestCase.test_stdin_filedess

#
#
%!IIK
G
AqcnndKM 
"	
q)rcNtj}|j|j|j	d|jdt
jtjddg|}|j|j|jdyr4)
rrrrJrrrrErXrYr*rZrr%rrLs   rtest_stdin_fileobjz"ProcessTestCase.test_stdin_fileobj"sz

#
#
%!


cnndKM!
#	
q)rctjtjddgtj}|5|j|jjddddy#1swYyxYw)Nr&import sys; sys.stdout.write("orange")rtorangerrErXrYrFrZrCr
rKs  rtest_stdout_pipez ProcessTestCase.test_stdout_pipe.s^cnndBD *
1	9QXX]]_i8	9	9	9+A--A6cltj}|j|j|j	}tjtjddg|}|jtj|dd|jtj|ddy)Nrr>rtrr?rrrrJr5rrErXrYr*rr6rZr
r7s    rtest_stdout_filedesz#ProcessTestCase.test_stdout_filedes6s

#
#
%!IIKcnndBD !
#	

AqD)95rc4tj}|j|jt	j
tjddg|}|j|jd|j|jdy)Nrr>rtrr?rrrrJrrErXrYr*rrZr
r;s   rtest_stdout_fileobjz#ProcessTestCase.test_stdout_fileobjBsp

#
#
%!cnndBD "
$	


I.rctjtjddgtj}|5|j|jjddddy#1swYyxYw)Nr*import sys; sys.stderr.write("strawberry")r
strawberry)rrErXrYrFrZrDr
rKs  rtest_stderr_pipez ProcessTestCase.test_stderr_pipeMs^cnndFH *
1	=QXX]]_m<	=	=	=rBcltj}|j|j|j	}tjtjddg|}|jtj|dd|jtj|ddy)NrrKrrrDrLrEr7s    rtest_stderr_filedesz#ProcessTestCase.test_stderr_filedesUs

#
#
%!IIKcnndFH !
#	

AqD)=9rc4tj}|j|jt	j
tjddg|}|j|jd|j|jdy)NrrKrrrLrHr;s   rtest_stderr_fileobjz#ProcessTestCase.test_stderr_fileobjasp

#
#
%!cnndFH "
$	


M2rc4tjtjddgtjtj}|j\}}|j
|d|j
|d|j
|jdy)Nrzimport sys, subprocess;rc = subprocess.call([sys.executable, "-c",    "import sys;"    "sys.stderr.write('42')"],    stderr=subprocess.STDOUT);sys.exit(rc)rs42rrrrErXrYrFrrZrr%rLrCrDs    r,test_stderr_redirect_with_no_stdout_redirectz<ProcessTestCase.test_stderr_redirect_with_no_stdout_redirectls{
cnnd-.%/OO$.OO
5'%q)rctjtjddgtjtj
}|5|j
|jjddddy#1swYyxYw)NrRimport sys;sys.stdout.write("apple");sys.stdout.flush();sys.stderr.write("orange")rappleorange)	rrErXrYrFrrZrCr
rKs  rtest_stdout_stderr_pipez'ProcessTestCase.test_stdout_stderr_pipesjcnnd;<
%/OO$.$5$5

7	>QXX]]_n=	>	>	>s+A<<Bc6tj}|j|jt	j
tjddg||}|j|jd|j|jdy)NrrWrrrXrHr;s   rtest_stdout_stderr_filez'ProcessTestCase.test_stdout_stderr_filesv

#
#
%!cnnd;<
%'$&

(	


N3rcd}tjtjd|gtjtj}|j|jj|j|jj|j\}}|j|jd||j|jdy)Nzimport 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 == 18rrrstest with stdout=1rrs     rtest_stdout_filedes_of_stdoutz-ProcessTestCase.test_stdout_filedes_of_stdouts"

cnndD9$.OOJOO
M''==?Sq#.'<=rctjtjddgtj}|j|j
|jdy)Nrz'for i in range(10240):print("x" * 1024)rt)rrErXrYDEVNULLr*rZrCrKs  rtest_stdout_devnullz#ProcessTestCase.test_stdout_devnullsNcnnd23&0%7%7
9	
4(rctjtjddgtj}|j|j
|jdy)Nrz=import sys
for i in range(10240):sys.stderr.write("x" * 1024)r)rrErXrYr_r*rZrDrKs  rtest_stderr_devnullz#ProcessTestCase.test_stderr_devnullsNcnnd=>&0%7%7	
9
	
4(rctjtjddgtj}|j|j
|jdy)Nrzimport sys;sys.stdin.read(1)r)rrErXrYr_r*rZrBrKs  rtest_stdin_devnullz"ProcessTestCase.test_stdin_devnullsNcnnd23%/$6$6
8	
$'rF_GETPIPE_SZz%fcntl.F_GETPIPE_SZ required for test.cptj\}}	tj|tj}tj|tj||dz}tj}||krtjdtjtjddgtjtjtj|}	|j|j|j fD]D}|j#tj|j%tj|F|jj'd|jj	|jj	|j j	|j)|j+y#tj|tj|wxYw#|j)|j+wxYw)Nz+default pipesize too small to perform test.rQimport sys; sys.stdin.read(); sys.stdout.write("out"); sys.stderr.write("error!")rBrCrDpipesizer)rpipefcntlrerJrget_pagesizeunittestSkipTestrrErXrYrFrBrCrDrZr5rkillr*)r%test_pipe_rtest_pipe_wpipesize_defaultrjpagesize_defaultrLfifos        rtest_pipesizeszProcessTestCase.test_pipesizess$&779 [	"${{;8J8JKHH[!HH[!#q("//1&&##=?
?
^^T*
+//*//??X
7	!((AHH5
  KK
u/A/AB

GGMM'"
GGMMO
HHNN
HHNN
FFH
FFH7
HH[!HH[!2
FFH
FFHs$G$0CH$,H"H5ctjtjddgtjtjtjd}	tj\}}	tj|tj}|j|j|jfD]D}|jtj|jtj|F	tj|tj||jj|jj|jj|j|j!y#tj|tj|wxYw#|j|j!wxYw)Nrrhri)rrErXrYrFrrkrlrerBrCrDrZr5rJrpr*)r%rLfp_rfp_wdefault_pipesizerus      rtest_pipesize_defaultz%ProcessTestCase.test_pipesize_defaults@

^^T*
+//*//??R
1	JD$
#(;;tU5G5G#H WWahh9*D$$DKKM53E3EF(**

GGMMO
HHNN
HHNN
FFH
FFH
FFH
FFHs&G/BF>A8G,GG"G(c,tjj}d|d<tjt
jddgtj|5}|j\}}|j|ddddy#1swYyxYw)Norangerr2import sys,os;sys.stdout.write(os.getenv("FRUIT"))rCrr?)
rrrrrErXrYrFrrZr%rrLrCrDs     rtest_envzProcessTestCase.test_env
s""w


s~~t FG&0__"(	*	0./]]_NFFVY/
	0	0	0s&B

Brz#cannot test an empty env on WindowsPy_ENABLE_SHAREDrzEThe Python shared library cannot be loaded with an empty environment.T)addressz)AddressSanitizer adds to the environment.cd}tjtjddgtji5}|j\}}t
|j}|j|t|Dcgc]}||s|}}|j|gdddycc}w#1swYyxYw)z+Verify that env={} is as empty as possible.cXd|vxs%d|vxs|dk(xs|jdxs|dk(S)z:Determine if an environment variable is under our control.	VERSIONER__CF
LD_PRELOADSANDBOXLC_CTYPE)
startswith)ns ris_env_var_to_ignorez<ProcessTestCase.test_empty_env.<locals>.is_env_var_to_ignore!sF
 1$$!$%$)*i)@$O
%rrz)import os; print(list(os.environ.keys()))rN)rrErXrYrFrevalstriprGlistrZ)r%rrLrCrDchild_env_namesks       rtest_empty_envzProcessTestCase.test_empty_envs	%

s~~tJL%/__">	2AB]]_NFF"6<<>2O!!/48*9?Q&:1&= !?O?_b1	2	2?
	2	2sAB5B0B50B55B>cNtjdz}|jt5t	j
|ddgddd|jt5t	j
tjddgdddy#1swYNxYw#1swYyxYw)Nrrzpass#)rXrYrcrzrrE)r%cmds  rtest_invalid_cmdz ProcessTestCase.test_invalid_cmd4snnt#


z
*	2c401	2

z
*	@cnndI>?	@	@		2	2	@	@sB'BBB$ctjj}d|d<|jt5tjt|dddtjj}d|d<|jt5tjt|dddtjj}d|d<|jt5tjt|dddtjj}d|d<tjtjd	d
gt
j|5}|j\}}|j|ddddy#1swYKxYw#1swYxYw#1swYxYw#1swYyxYw)
NcabbagezFRUITVEGETABLErzorangeVEGETABLE=cabbagerlemonzFRUIT=ORANGEzorange=lemonrz3import sys, os;sys.stdout.write(os.getenv("FRUIT"))rsorange=lemon)
rrrrcrzrrErrXrYrFrrZrs     rtest_invalid_envz ProcessTestCase.test_invalid_env>st"%.!"


z
*	:_&9	:"5w


z
*	:_&9	:"!(~


z
*	:_&9	:"(w


s~~t FG&0__"(	*	6./]]_NFFV_5
	6	6%	:	:	:	:	:	:	6	6s/FF+1F7/&GF(+F47GGctjtjddgtj}|jd|j
|jdy)Nrz/import sys;sys.exit(sys.stdin.read() == "pear")rrrrSrKs  rtest_communicate_stdinz&ProcessTestCase.test_communicate_stdin\sQcnndEF$.??
4	


gq)rctjtjddgtj}|j\}}|j
|d|j
|dy)Nrz)import sys; sys.stdout.write("pineapple")rt	pineapplerrErXrYrFrrZrTs    rtest_communicate_stdoutz'ProcessTestCase.test_communicate_stdoutds\cnndIK$.OO
5==?.&rctjtjddgtj}|j\}}|j
|d|j
|dy)Nrz)import sys; sys.stderr.write("pineapple")rrrrTs    rtest_communicate_stderrz'ProcessTestCase.test_communicate_stderrls\cnndIK$.OO
5==?&.rctjtjddgtjtjtj}|j|jj|j|jj|j|jj|jd\}}|j|d|j|dy)NrzNimport sys,os;sys.stderr.write("pineapple");sys.stdout.write(sys.stdin.read())rAbananar)rrErXrYrFrrCrJrDrBrrZrTs    rtest_communicatez ProcessTestCase.test_communicatetscnndCD$.??$.OO$.OO

5	
''

&==3+.rctjtjddgdtjtjtj}|jtj|jdd|j\}}|j|d|j|jdy)	Nrz~import sys,os,time;sys.stderr.write("pineapple\n");time.sleep(1);sys.stderr.write("pear\n");sys.stdout.write(sys.stdin.read())T)rrBrCrDrg333333?raspineapple
pear
)
rrErXrYrFrcrdrrZencoderTs    rtest_communicate_timeoutz(ProcessTestCase.test_communicate_timeoutscnndCD15#-??$.OO$.OO	
5	
*33Q]]H"%		'==?**>?rc$tjtjddgtj}|jtj|jd|j\}}|jt|dy)Nrzimport 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));rtg?rai)
rrErXrYrFrcrdrrZlen)r%rLrC_s    r%test_communicate_timeout_large_outputz5ProcessTestCase.test_communicate_timeout_large_outputsscnndEF%/OO	
5	
*33Q]]CPmmoVm4rc>dD]}dD]}dD]}i}|rtj|d<|rtj|d<|rtj|d<|sHtjtfi|}|j	|j
%|j
|j
j|j%|j
|jj|j|j
|jjy)NFTrBrCrD)
rrFrErrrB
assertTrueclosedrCrD)r%
stdin_pipestdout_pipestderr_pipeoptionsrLs      rtest_communicate_pipe_fd_leakz-ProcessTestCase.test_communicate_pipe_fd_leaks'	9J,
9#09K G!+5??(",6OO)",6OO)" "((DGDAMMOww*7xx+8xx+8#9
9	9rctjtjddg}|j	\}}|j|d|j|dy)NrrT)rrErXrYrrZrTs    rtest_communicate_returnsz(ProcessTestCase.test_communicate_returnssRcnnd8:
;==?&&rctj\}}tj|tj|tjt
jddtjzgtjtjtj}|j|jj|j|jj|j|jjdtjz}|j|\}}|j||y)Nrzpimport sys,os;sys.stdout.write(sys.stdin.read(47));sys.stderr.write("x" * %d);sys.stdout.write(sys.stdin.read())rAa)rrkrJrrErXrYr
PIPE_MAX_SIZErFrrCrDrBrrZ)r%xyrLstring_to_writerCrDs       rtest_communicate_pipe_bufz)ProcessTestCase.test_communicate_pipe_bufswwy1

cnndC&33	45$.??$.OO$.OO
5	
''

&!6!66==91rc0tjtjddgtjtjtj}|j|jj|j|jj|j|jj|jjd|jd\}}|j|d|j|dy)Nrz0import sys,os;sys.stdout.write(sys.stdin.read())rArssplitsbananasplitr)
rrErXrYrFrrCrJrDrBrrrZrTs    rtest_writes_before_communicatez.ProcessTestCase.test_writes_before_communicatescnndCD$.??$.OO$.OO
5	
''

&	

i ==20%rc`tjddtzdzg}dD]~}tj|fidtj
dtj
|di}|5|jjd|jj|j|jjd|jjd	|jj|j|jj|j|jjd
|j|jjdd	|j|jjddddy#1swYxYw)
Nrimport 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");)rrrBrCTzline1
zline3
zline2
zline4
line5
line6
line7
line8)rXrY	SETBINARYrrErFrBrflushrZrCreadlinerJrr
)r%r:extra_kwargrLs    r test_universal_newlines_and_textz0ProcessTestCase.test_universal_newlines_and_textsVNNDy(
&
&'(:	FK  >':??*2JOO*5t*=>A
F

i(

  !2!2!4i@

i(

/  !2!2!4!*,  q!1!*,  !DF
F
F		F
F
Fs
D9F##F-	ctjtjddtzdzgtj
tj
d}|j
|jj|j
|jj|j\}}|j|dy)Nrrzbuf = 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)rDrCrz#line2
line4
line5
line6
line7
line8)rrErXrYrrFrrCrJrDrrZrTs    r#test_universal_newlines_communicatez3ProcessTestCase.test_universal_newlines_communicatescnnd.:88
9%/OO$.OO01!
3"	
''==?C	Erctjtjddtztjdzgtjd}|jd\}}|j|jdy)Nrra
                               s = sys.stdin.readline()
                               assert s == "line1\n", repr(s)
                               s = sys.stdin.read()
                               assert s == "line3\n", repr(s)
                              r)rBrline1
line3
r)rrErXrYrtextwrapdedentrFrrZrrTs    r)test_universal_newlines_communicate_stdinz9ProcessTestCase.test_universal_newlines_communicate_stdin,sscnnd.:X__N">##$$.??01
3==)9:q)rctjttjtjd}|j	|j|jdy)NT)rBrCrr)rrErrFrrZrrKs  r.test_universal_newlines_communicate_input_nonez>ProcessTestCase.test_universal_newlines_communicate_input_none:sF

_#-??$.OO04
6	


q)rc@tjtjddtztjdzgtjtjtjd}|j|jj|j|jj|jd\}}|j|jd|jd||j|j!d	y)
Nrra
                               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)rBrDrCrrrzline1
line2
line3
line4
line5
zeline2
eline6
eline7
)rrErXrYrrrrFrrCrJrDrrZrrrrTs    r7test_universal_newlines_communicate_stdin_stdout_stderrzGProcessTestCase.test_universal_newlines_communicate_stdin_stdout_stderrFscnnd.:X__N">##$$.??$.OO$.OO04!
6"	
''==)9:q)>G	
))*DEFrcdD]v}d|z}tjd|g}tj|tjtj|}|jd\}}|j
|dxy)N)zutf-16z	utf-32-bez@import sys; sys.stdout.buffer.write('1\r\n2\r3\n4'.encode('%s'))r)rBrCrrrz1
2
3
4)rXrYrrErFrrZ)r%rrr:popenrCrDs       r-test_universal_newlines_communicate_encodingsz=ProcessTestCase.test_universal_newlines_communicate_encodingsbs0
	3HLDNND$/D$$T+5??,6OO.68E#..R.8NFFV\2
	3rcdD]\}}d}tjd|g}tj|tjtjd|}|jd\}}|j
|dj|y)	N))rr)replaceu��)surrogateescapeu)backslashreplacez\x80\x80z2import sys; sys.stdout.buffer.write(b'[\x80\x80]')rr)rBrCrrrrz[{}])rXrYrrErFrrZformat)r%rexpectedrr:rrCrDs        rtest_communicate_errorsz'ProcessTestCase.test_communicate_errorsxs!
	>FH>DNND$/D$$T+5??,6OO.5,2	4E
#..R.8NFFVV]]8%<=%	>rc,tsd}nd}g}tj}	t|D]u}	tj
j
|tj}|jt	j|tjtjzw|j!d|ztdD]%}t	j"|j%'tdD]|}t'j(t*j,ddgt&j.t&j.t&j.}|j1d	d
}|j3|d	~	|D]}	t	j"|	t5j6|y#t$r*}|jtjk7rYd}~d}~wwxYw#|D]}	t	j"|	t5j6|wxYw)Niiz4failed to reach the file descriptor limit (tried %d)
rz-import sys;sys.stdout.write(sys.stdin.read())rAslimer)r(rmkdtemprangerrrrTESTFNappendopenO_WRONLYO_CREATOSErrorerrnoEMFILEskipTestrJpoprrErXrYrFrrZrrmtree)
r%max_handleshandlestmpdiritmpfileerLdatahs
          rtest_no_leakingzProcessTestCase.test_no_leakingsKK!!#	";'

0 ggll693C3CDGNN2777BKK

4J#KL

0

!#./02Y
('
(2Y
0$$cnnd'K&L,6??,6OO,6OO=}}W-a0  w/
0

MM&!1ww%,,.,

MM&!s6G A2F*$CG *	G3GG GG  3Hct|jtjgdd|jtjgdd|jtjgdd|jtjgdd|jtjgd	d
|jtjgdd|jtjgd
d|jtjddgdy)N)za b cr8rz"a b c" d e)ab"c\r8z	ab\"c \ d)rz \r8z
ab\"c " \\" d)za\\\bzde fgrza\\\b "de fg" h)za\"brnr8z
a\\\"b c d)za\\b cr8rz"a\\b c" d e)za\\b\ cr8rz
"a\\b\ c" d eabrzab "")rZrlist2cmdliner$s rtest_list2cmdlinez!ProcessTestCase.test_list2cmdlines001DE&	(001DE&	(001EF+	-001KL-	/001DE(	*001GH)	+001IJ+	-00$< 	"rctjtjddgtj}|j|jj|j|jtj|jjd|j|j|jdy)Nrzimport os; os.read(0, 1)rAr)rrErXrYrFrrBrJassertIsNonepollrrr5r*rZrKs  r	test_pollzProcessTestCase.test_pollscnnd8:#-??
4	


&!&&(#
!4(	1%rctjt}|j|j	d|j|j	dyrgrrErrZr*rKs  r	test_waitzProcessTestCase.test_waits>_-1%1%rctjtjddg}|j	tj
5}|j
dddd|jdtj|j|j
tjdy#1swY_xYw)Nrzimport time; time.sleep(0.3)-C6?raz0.0001r)
rrErXrYrcrdr*rxstrrlrZr
SHORT_TIMEOUT)r%rLrns   rtest_wait_timeoutz!ProcessTestCase.test_wait_timeoutscnn"$BD
E


z88
9	#Q
FF6F"	#

hAKK 01(=(=>B	#	#sB77Cc|jt5tjtddddy#1swYyxYw)Nr~)rcrrrErr$s rtest_invalid_bufsizez$ProcessTestCase.test_invalid_bufsizes7

y
)	8_h7	8	8	8s	:Actjtd}|j|j	dtjtd}|j|j	dy)Nr)rOrrKs  rtest_bufsize_is_nonez$ProcessTestCase.test_bufsize_is_nonesR_d31%_d;1%rctjtjddgtjtjtj
d|5}|jj|tj|jj|jj}tj5	|jjdddd|_ddd|j!j"d|j!|y#t$rYQwxYw#1swYVxYw#1swYSxYw)NrzDimport sys;sys.stdout.write(sys.stdin.readline());sys.stdout.flush()r)rBrCrDrOrr)rrErXrYrFr_rBrrrJr5rCrrSuppressCrashReportrrZr)r%linerrrL	read_lines      r_test_bufsize_equal_onez'ProcessTestCase._test_bufsize_equal_ones



s~~t645%/OO%/__%/%7%7&'1CE	IJ
GGMM$HHQWW^^%&))+I,,.
GGMMO

AG!	"	
q)H-	

		sCA7ED?D0*E0	D<9D?;D<<D??E	EEc0d}|j||dy)Nzline
Tr)rr%rs  r test_bufsize_equal_one_text_modez0ProcessTestCase.test_bufsize_equal_one_text_modes$$T4D$Ircdtjjz}|jtd5|j|dddddy#1swYyxYw)Nslinezline bufferingrFr)rlineseprassertWarnsRegexRuntimeWarningrrs  r"test_bufsize_equal_one_binary_modez2ProcessTestCase.test_bufsize_equal_one_binary_mode	sZ**,,

"
">3C
D	N((su(M	N	N	NsAAcpuctdD]X}|jt5tjt
tjtjdddZy#1swYexYw)NrDr)rrcrrrErrF)r%rs  rtest_leaking_fds_on_errorz)ProcessTestCase.test_leaking_fds_on_errors^t	9A""#56
9  (2(29
9
9	9
9
9s9A((A1	c	ddl}|jtjdtd}tjd|g}tj|tjd}|5|jd}ddd|jd	|j|jdy#ttf$r|j	dYwxYw#1swY^xYw)
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
        rT)rDrrr)msvcrtCrtSetReportModeAttributeErrorImportErrorrrrrrXrYrrErFrrZr)r%r"rrprocrDs      rtest_nonexisting_with_pipesz+ProcessTestCase.test_nonexisting_with_pipess	:##$#%&		 
&~~tT*'1379	+%%'*F	+$!,;,	:MM89	:4	+	+sB5*C5 CCC$czgfd}tj|}|j	|jt5tjtt
jt
jt
jddd|jd}D]}	tj|||y#1swY=xYw#t$r}|}Yd}~<d}~wwxYw#|jd}D]0}	tj|#t$r}|}Yd}~*d}~wwxYw||wxYw)NctdD]:}jtjt	j
d<y)NgMbP?)rextendrrktimesleep)rfdss ropen_fdsz<ProcessTestCase.test_double_close_on_error.<locals>.open_fdsIs42Y
"

2779%

5!
"r)targetrA)
	threadingThreadstartrcEnvironmentErrorrrErrFrrrJr)r%r/texcfdrr.s      @rtest_double_close_on_errorz*ProcessTestCase.test_double_close_on_errorFs"	"
H-			""#34
9  '1(2(29
9
FFHC
HHRL
	!
9
9C
FFHC
HHRLC

	sfC-AC	
C--C	CC-	C*C%%C*-D:DD:	D1	%D,	'D:,D1	1	D:c(tjtjddg|j	j
dgfd}t
jd|}|jtrd}nd}jtj|j	j
|d	
j|j	j
|d
|j|j	dd
|fd|fgy)z?Issue21291: Popen.wait() needs to be threadsafe for returncode.rzimport time; time.sleep(12)Ncjdjfjjjdjfjjdjfy)Nthread-start-poll-resultthread-after-kill-and-waitthread-after-second-wait)rrrpr*r)r&resultssrkill_proc_timer_threadzDProcessTestCase.test_threadsafe_wait.<locals>.kill_proc_timer_threadjsbNN6		DEIIKIIKNN8$//JKIIKNN6HIr皙?riraz*unexpected result in wait from main threadmsgz&unexpected result in second main wait.)r;Nr<r=)rrErXrYrZrr1Timerr3r(r*rr
r)r%r?r5expected_errorcoder&r>s    @@rtest_threadsafe_waitz$ProcessTestCase.test_threadsafe_waitcs
!>!@A$/	J
OOC!78		!""$
	
		'//	0*<I		K	
		*<E		G	

	
<79KL57IJL!	"rcdjd}tjtjd|g}|j|j
dt|y)N;)zimport subprocess, syszJretcode = subprocess.call([sys.executable, '-c', 'print("Hello World!")'])zassert retcode == 0rsHello World!)rrrwrXrYrrascii)r%rr|s   rtest_issue8780zProcessTestCase.test_issue8780sQxx#$
((#..$)EF))/:E&MJrctj\}}tj\}}tj\}}	tjdg||||jt
jj||jt
jj||jt
jj|y#t$rtj|tj|tj|tj|tj|tj|YwxYw)N*rA)rmkstemprrErrrJremover,rexists)r%ifhandleifnameofhandleofnameefhandleefnames       r test_handles_closed_on_exceptionz0ProcessTestCase.test_handles_closed_on_exceptions$++-&#++-&#++-&		se8H
	
/0/0/0	HHXIIfHHXIIfHHXIIf
	sC,,BE76E7ctjttjtjtj}|j	|j
j|j	|jj|j	|jj|jddzy)NrAx)
rrErrFrrCrJrDrBrrKs  rtest_communicate_epipez&ProcessTestCase.test_communicate_epipesw_#-??$.OO$.OO
5	
''

&	

dUl#rc
tjd}|jj}dddgdddfgddddf|dd	d
|dfg}tj
jjtjd5|D]@\}}}}tj||
}||_
|jt||B	dddy#1swYyxYw)Nz
my-tool.py)lsT{z#<Popen: returncode: 123 args: 'ls'>)daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTrzP<Popen: returncode: 0 args: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...>r[Fz&<Popen: returncode: None args: ['ls']>)r[z	--my-optsr]zP<Popen: returncode: None args: ['ls', '--my-opts', 'aaaaaaaaaaaaaaaaaaaaaaaa...>z<Popen: returncode: 7 args: z('my-tool.py')>r<r)
pathlibPath	__class__r1rnrpatchobjectrrErrZrepr)	r%path_cmdpathlib_clscasesrrrsxrLs	         r	test_reprzProcessTestCase.test_reprs<<-((11
E
aVUD"JK
+UD
_
a
ua#?}O!\]
]]
 
 
'
'
(8(8:J
K	.(-
.$UD"$$S6#  a"-
.	.	.	.s
>ACCctjttj}|j	|j
j|j|jddzy)NrrWrX)	rrErrFrrBrJr*rrKs  r!test_communicate_epipe_only_stdinz1ProcessTestCase.test_communicate_epipe_only_stdinsH_#-??
4

&		

dUl#rSIGUSR1zRequires signal.SIGUSR1rpzRequires os.killgetppidzRequires os.getppidc~d}tjtj|}|jtjtj|tjddg}dD]C}|t
ji}tj|fi|5}|jdddEy#1swYPxYw)Ncyr"r4)signumframes  rhandlerz7ProcessTestCase.test_communicate_eintr.<locals>.handlerrrz7import os, signal;os.kill(os.getppid(), signal.SIGUSR1)r)	signalrmrrXrYrrFrEr)r%rsold_handlerr:streamkwprocesss       rtest_communicate_eintrz&ProcessTestCase.test_communicate_eintrs	mmFNNG<

v~~{C89+	&F*//*B!!$-"-
&##%
&
&	&
&
&sB33B<	/proc/%d/fdzLinux specificcxdtjz}tj|}|jt5tttjtjtjdddtj|}|j||y#1swY1xYw)z;Test for the fork() failure fd leak reported in issue16327.r{rAN)
rgetpidlistdirrcr6r8rrrFrZ)r%fd_directoryfds_before_popenfds_after_exceptions    r!test_failed_child_execute_fd_leakz1ProcessTestCase.test_failed_child_execute_fd_leaks%ryy{2::l3


1
2	D##:??%??:??
D	D!jj6)+>?	D	Ds>B00B9z+behavior currently not supported on Windowsc|jt5}tjgdddd|j	j
jdy#1swY0xYw)N)/opt/nonexistent_binarywithsomer:r)rcrrrWrZrlfilenamerms  r%test_file_not_found_includes_filenamez5ProcessTestCase.test_file_not_found_includes_filenamesT


0
1	QQOOOP	Q--/HI	Q	QsAA&c|jt5}tjddgdddd|j	j
jdy#1swY0xYw)Nexit0z/some/nonexistent/directoryr)rcrrrErZrlrrms  r test_file_not_found_with_bad_cwdz0ProcessTestCase.test_file_not_found_with_bad_cwd
s\


0
1	OQfc]0MN	O--/LM	O	OsAA(c|jtjttj
|jtjttj
yr")rGrrEbytestypesGenericAliasCompletedProcessr	r$s rtest_class_getitemsz#ProcessTestCase.test_class_getitemssDj..u5u7I7IJj99#>@R@RSr
HAVE_VFORKz!vfork() not enabled by configure.subprocess._fork_execc|jtjtd|_|jt5tjtjddgddd|j|j|jjdtjjtdd5|jt5tjtjddgddd|j|j djddddy#1swYxYw#1swYIxYw#1swYyxYw)Nzjust testing argsrrrx
_USE_VFORKF)rrrRuntimeErrorside_effectrcrrXrYassert_called_once	call_argsr:rrcrdr,call_args_list)r%mock_fork_execs  rtest__use_vforkzProcessTestCase.test__use_vforks	

--.%12E%F"


|
,	;NNCNND&9:	;))+0055b9:
ZZ

z<
?	I""<0
?f=>
?^::2>CCBGH	I	I		;	;

?
?	I	Is0'E
E"''E3E"
EE	E""E+N)r1r2r3rMrQr]reriror}rrrrrrrrrrrrequires_resourcerrrrrrrrrrrrnskipIfr(rrrrrrrrrr#r(r+rXbase_prefixprefixr-	sysconfigis_python_buildr/r2r9r<rArFrIrMrOrQrUrYr[r]r`rbrd
skipUnlessrlhasattrrvr|rplatformget_config_varrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrr r'r8rErIrUrYrjrlrurrzrisdirr}rrrrrrcrr4rrr?r?ts|!' 
554'
''(''%54Wz*
6+
6 +(<.)+	MDA9X__Y DEGFG
X__Y DE(F(X__Y DE(F(
*=&AN
K
X__Y DE
EF
EX__Y DE-F-$CX__S__

224D4DX__S__

224X__.Y..0:<4<44**
*9
6	/=
:	3**
>
4>&))(XA75.#A@B!B!FXA75.#A@BB6	0X__S\\W,:<X__-Y--.@AQF23X___T2@B2B3<2,@6<*'/
/@&5"9,'2.& %FNE2*
*G83,>*%"N"$	&&C8&.,JNWu%
9&
9'-R:2"h	K1(	$.&$X324XV,+-XY/.0&0-4&&X}yryy{'BC)+@+@ X__Y MNJOJ
X__Y MNNON
TX__111,??8:TZZ'(
I):
Irr?ceZdZdZdZdZdZdZdZdZ	dZ
d	Zd
Ze
jddZd
ZdZdZdZej*eddZdZdZdZej6eddZdZy)RunFuncTestCasecTtjd|g}tj|fi|S)z4Run Python code in a subprocess using subprocess.runrrXrYrr)r%rr;argvs    r
run_pythonzRunFuncTestCase.run_python(s&d+~~d-f--rc|jd}|j|jd|jtj
5|j
dddy#1swYyxYwr)rrZrrcrrkcheck_returncoder%cps  rtest_returncodezRunFuncTestCase.test_returncode-sZ
__7
8+


z<<
=	"!	"	"	"s
A''A0c|jtj5}|jddddd|j	j
jdy#1swY0xYw)NrTTrurU)rcrrkrrZrlrrms  r
test_checkzRunFuncTestCase.test_check4s\


z<<
=	DOO6dOC	D//4	D	DsA##A,crtjtd}|j|jdy)NTrur)rrrrZrrs  rtest_check_zerozRunFuncTestCase.test_check_zero9s&
^^O4
8*rc|jtj5|jdddddy#1swYyxYw)Nr_rra)rcrrdrr$s rtest_timeoutzRunFuncTestCase.test_timeout>sB


z88
9	@OO.O?	@	@	@s	=Ac~|jdtj}|jd|jy)NrrrtrsrrrFrxrCrs  rtest_capture_stdoutz#RunFuncTestCase.test_capture_stdoutFs*
___Z___
E

gryy)rc~|jdtj}|jd|jy)Nrrrs)rrrFrxrDrs  rtest_capture_stderrz#RunFuncTestCase.test_capture_stderrKs1
__C$.OO5

gryy)rc"tj}|j|j|j	d|jd|j
d|tj}|jd|jy)Nrrrrr)rrrrJrrrrrFrxrC)r%rrs   rrz+RunFuncTestCase.test_check_output_stdin_argPsj

#
#
%!



__I2	


gryy)rc|jddtj}|jd|jy)Nrr)rrCrrrs  rrz+RunFuncTestCase.test_check_output_input_arg[s5
__Hjoo7	


gryy)rctj}|j|j|j	d|jd|j
td5}|jd|d}ddd|jdjjd|jd	|jjdy#1swY\xYw)
NrrrrArrrrBr)rrrrJrrrcrzrrxrlr:rs    rrz6RunFuncTestCase.test_check_output_stdin_with_input_argbs

#
#
%!





zKM	>PQ__%?+-W%>F	>	


gq{{//23

gq{{//23	>	>s)CC"rcH|jtj5}|jddtj}ddd|jjjd|j|jjdy#1swYVxYw)Nrr)rbrCrs)	rcrrdrrFrZrlr|rC)r%rnrs   rrz)RunFuncTestCase.test_check_output_timeoutos


z88
9	7Q(joo!7B	7	
++W5++W5	7	7s#BB!ctjj}d|d<|jd|}|j	|j
dy)NrrzCimport sys, os;sys.exit(33 if os.getenv("FRUIT")=="banana" else 31)r!)rrrrrZr)r%rrs   rtest_run_kwargszRunFuncTestCase.test_run_kwargs~sM""w
__M!')	
+rctrdnd}tj|}||j|dt	|}tj|t
j}|j|jd|jt5tj|t
jddddy#1swYyxYw)Nztree.comr[z required for this testrtrT)rCr)r(rrrr
rrr_rZrrcr)r%progrress    rtest_run_with_pathlike_pathz+RunFuncTestCase.test_run_with_pathlike_paths'zD||D!<MMTF"9:;~nnT**<*<=+


y
)	HNN4
(:(:$G	H	H	Hs'CCctjtj}|ddg}t	j
|}|j
|jdy)Nrsimport sys; sys.exit(57)9)rrrXrYrrrZrr%rr:rs    r&test_run_with_bytes_path_and_argumentsz6RunFuncTestCase.test_run_with_bytes_path_and_argumentssC{{3>>*d78nnT",rcttj}|ddg}tj|}|j|jdy)Nrzimport sys; sys.exit(57)r)r
rXrYrrrZrrs    r)test_run_with_pathlike_path_and_argumentsz9RunFuncTestCase.test_run_with_pathlike_path_and_argumentss?'d67nnT",rz#Maybe test trigger a leak on UbuntucXtjddg}tj|iy)Nrrrr)r%r:s  rtest_run_with_an_empty_envz*RunFuncTestCase.test_run_with_an_empty_envs$f-	t$rc|jdd}|jd|j|jd|jy)Nz>import sys;sys.stdout.write('BDFL'); sys.stderr.write('FLUFL')Tcapture_outputrssFLUFL)rrxrCrDrs  rtest_capture_outputz#RunFuncTestCase.test_capture_outputsE
__:-12	


gryy)

h		*rctj}|j|j|j	t
d5}|j
dd|}ddd|jdjjd|jd|jjdy#1swY\xYw)	NzAExpected ValueError when stdout and capture_output args supplied.rArT)rrCrCrr
rrrrJrcrzrrxrlr:rs    r#test_stdout_with_capture_output_argz3RunFuncTestCase.test_stdout_with_capture_output_arg

#
#
%!


z"$	F'(__%?59"%FF	F
	


h 0 0 34

&(8(8(;<
	F	FB77Cctj}|j|j|j	t
d5}|j
dd|}ddd|jdjjd|jd|jjdy#1swY\xYw)	NzAExpected ValueError when stderr and capture_output args supplied.rArT)rrDrDrrrrs    r#test_stderr_with_capture_output_argz3RunFuncTestCase.test_stderr_with_capture_output_argrrz)requires posix like 'sleep' shell commandcHtj}	tjdddd|j	d|j|z
ddd	
y#tj
$r2}tj}t
j}Yd}~\d}~wwxYw)zJOutput capturing after a timeout mustn't hang forever on open filehandles.zsleep 3Tr`)rrbrzTimeoutExpired not raised.Ng?z/TimeoutExpired was delayed! Bad traceback:
```
z```rA)	r,	monotonicrrrrd	traceback
format_exc
assertLess)r%before_secsr6
after_secsstackss     r.test_run_with_shell_timeout_and_capture_outputz>RunFuncTestCase.test_run_with_shell_timeout_and_capture_outputsnn&	4NN9D#*.
0
II23
[0#O!(#'		(((	,)J))+F	,sAB!/(BB!cxtjd}tjtj
dd|gd}|jj}|jt|d||j|djd|j|d	jd
y)Nz            from subprocess import *
            run("echo hello", shell=True, text=True)
            check_output("echo hello", shell=True, text=True)
            z-Xwarn_default_encodingrTrrgrs<string>:2: EncodingWarning: rs<string>:3: EncodingWarning: )rrrrrXrYrD
splitlinesrZrrr)r%rrliness    rtest_encoding_warningz%RunFuncTestCase.test_encoding_warnings 
^^S^^-FdS+/1		$$&UQ.a++,LMNa++,LMNrN)r1r2r3rrrrrrrrrrrrrrrrrrnrr(rrrrrrrr4rrrr's.
"5
+
@*
*
	**4Wz*6+6,H--X$IJ%K%+
=
= X__Y KL
(M
(OrrcdD]"}ts
	tj||cStjd#t$rYEwxYw)N)staffnogroupgrpnobody	nfsnobodyz?No identified group name to use for this test on this platform.)rgetgrnamKeyErrorrnro)
name_groups r_get_test_grp_namersWHc

Z(
c abb	

s=	A	A	zPOSIX specific testsceZdZfdZdZdZdZdZGddejZ
ejdd	Z
ejdd
Zej ej$j'ddd
ZdZej,eedxr	eedddZej,eedddZej eedddZej,eedddZej eedddZej,eedddZej eedd d!Zej exs
eed"d#d$Z d%Z!d&Z"d'Z#d(Z$d)Z%d*Z&Gd+d,ejZ'ej ej$j'd-d.d/Z(d0Z)ej e*jVd1k(d2d3Z,d4Z-d5Z.d6Z/d7Z0d8Z1d9Z2d:Z3ej e*jVjid;d<d=Z5d>Z6d?Z7d@Z8dAZ9dBZ:dCZ;dDZ<dEZ=dFZ>dGZ?dHZ@dIZAdJZBdKZCdLZDdMZEdNZFdOZGdPZHdQZIdRZJdSZKdTZLdUZMdVZNdWZOdXZPdYZQej e*jVjidZxr9ejd[jejd\jk(d]d^ZTeUjd_d`daZWdbZXdcZYddZZdeZ[dfZ\dgZ]dhZ^diZ_djZ`dkZaeUjdlZceUjdmZddnZedoZfdpZgdqZhej,eidruxr	eeidsdtduZjdvZkdwZldxZmdyZnxZoS)zPOSIXProcessTestCasec0t|d|_y)Nz/_this/pa.th/does/not/exist)superr&_nonexistent_dirr%rbs rr&zPOSIXProcessTestCase.setUps

 =rc	tj|j|jd|jzS#t$r
}|}Yd}~|Sd}~wwxYw)Nz,chdir to nonexistent directory %s succeeded.)rchdirrrr)r%rdesired_exceptions   r_get_chdir_exceptionz)POSIXProcessTestCase._get_chdir_exceptions`		-HHT**+
IID++,
-  	"!"! 	"sA	A
AAc|j}	tjtjddg|j
}|j
d|zy#t$r|}|j|j|j|j|j|j|j|j|jYd}~yd}~wwxYw)z;Test error in the child raised in the parent for a bad cwd.rrrExpected OSError: %sNrrrErXrYrrrrZrstrerrorrr%rrLrs    rtest_exception_cwdz'POSIXProcessTestCase.test_exception_cwds 557
	B  #..$!;%)%:%:<A
II,/@@A	E
.44agg>.77D.77DD	E2A	C"A2CCc|j}	tjtjddg|j
}|j
d|zy#t$r|}|j|j|j|j|j|j|j|j|jYd}~yd}~wwxYw)zBTest error in the child raised in the parent for a bad executable.rrrrNrrs    rtest_exception_bad_executablez2POSIXProcessTestCase.test_exception_bad_executables 557
	B  #..$!;,0,A,ACA
II,/@@A	E
.44agg>.77D.77DD	Erc|j}	tj|jddg}|j	d|zy#t
$r|}|j
|j|j|j
|j|j|j
|j|jYd}~yd}~wwxYw)z?Test error in the child raised in the parent for a bad args[0].rrrN)
rrrErrrrZrrrrs    rtest_exception_bad_args_0z.POSIXProcessTestCase.test_exception_bad_args_0*s 557		B  $"7"7r!BCA
II,/@@A	E
.44agg>.77D.77DD	Es"A			CA2C		CceZdZdZy)&POSIXProcessTestCase.PopenNoDestructorcyr"r4r$s r__del__z.POSIXProcessTestCase.PopenNoDestructor.__del__@rtrN)r1r2r3rr4rrPopenNoDestructorr
?s	rr
rcd}||_tjdt5|j	t
5|j
dgddddddy#1swYxYw#1swYyxYw)z>Test error passing done through errpipe_write in the good casec|d}djtjj}t	j
|d|zdzy)N
z{:x}sOSError::r)rrEISDIRrrr)r:
errpipe_writeerr_codes   rproper_errorzHPOSIXProcessTestCase.test_exception_errpipe_normal.<locals>.proper_errorFsA HM}}U\\299;HHH]K($:T$ABrsubprocess.os.waitpidrnon_existent_commandN)rrrcChildProcessErrorrcIsADirectoryErrorr
)r%	fork_execrs   rtest_exception_errpipe_normalz2POSIXProcessTestCase.test_exception_errpipe_normalCs|	!-	
ZZ/$57	A""#45
A&&(>'?@
A	A	A
A
A	A	As"A,A A, A)	%A,,A5cjdfd}||_tjdt5|j	t
j5}|jdgdddddd|jttjy#1swY@xYw#1swYDxYw)zZTest error passing done through errpipe_write where its not
        in the expected formatsޭc<|d}tj|y)Nrr)rr)r:r
error_datas  r	bad_errorzGPOSIXProcessTestCase.test_exception_errpipe_bad_data.<locals>.bad_errorYs HM
HH]J/rrrrN)rrrcrrcrSubprocessErrorr
rxrer	rl)r%rr rrs    @rtest_exception_errpipe_bad_dataz4POSIXProcessTestCase.test_exception_errpipe_bad_dataTs)
	!*	
ZZ/$57	A"":#=#=>
A!&&(>'?@
A	A
	


d:&AKK(89
A
A	A	As# B)BB)B&	"B))B2/proc/self/statuszneed /proc/self/statuscZtjddgd}|jD]}|jds|}n|j	dtjddgd}|jD]}|jds|}n|jd	y)
Ncatr#F)restore_signalssSigIgnz&SigIgn not found in /proc/self/status.Tz=restore_signals=True should've unblocked SIGPIPE and friends.rA)rrwrrrassertNotEqual)r%default_proc_statusrdefault_sig_ign_maskrestored_proc_statusrestored_sig_ign_masks      rtest_restore_signalsz)POSIXProcessTestCase.test_restore_signalsjs)55+, %'(224	DDy)'+$	D

MMBC)66+, $ &)335	Dy)(,%		
02G!3		4rc"	tjtjddgd}t	j
d}t
|}|j||y#t$r(}|jtjk7rYd}~yd}~wwxYw)Nrzimport os; print(os.getsid(0))T)start_new_sessionr)rrwrXrYrgetsidintr'PermissionErrorrEPERM)r%r|
parent_sid	child_sidrs     rtest_start_new_sessionz+POSIXProcessTestCase.test_start_new_sessions{
	7,,^^T+KL&*,F1JFI
I6
	ww%++%&	(A	B&B		Bsetpgidgetpgidz!no setpgid or getpgid on platformc"	tjtjddgd}t	j
d}t
|}|j||y#t$r(}|jtjk7rYd}~yd}~wwxYw)Nrzimport os; print(os.getpgid(0))r)
process_group)rrwrXrYrr8r0r'r1rr2)r%r|parent_pgid
child_pgidrs     rtest_process_group_0z)POSIXProcessTestCase.test_process_group_0s{
	9,,^^T+LM"#%F**Q-KVJZ8
	ww%++%&	r6setreuidzno setreuid on platformctj}|dk7rdnd|g}tjdk7rdnd}t'	t	j
||j
||D]}dD]}|j||5	tjtjdd	g||}t|tr t	j
|j}n|}t|}|j!||ddd|j-t.5tj0t2d
ddd|j-t45tj0t2tj6tj8d
dddt=|:|j-t.5tj0t2|dddyyy#t$rd}YwxYw#t"$rYt$$r8}	|	j&t&j(t&j*fvrYd}	~	8d}	~	wwxYw#1swYxYw#1swYxYw#1swYxYw#1swYyxYw)Ndarwinrunknownr)user	close_fdsrzimport os; print(os.getuid())rxrD)rrrD)rgeteuidrXrpwdgetpwnamrrsubTestrrwrY
isinstancer	pw_uidr0rZr1rrEACCESr2rcrzrhr
OverflowErrorrr)
r%uid
test_usersname_uidrDrEr|user_uid
child_userrs
          r	test_userzPOSIXProcessTestCase.test_users/jjl"e|e<
"||x78Y?
 X&!!(+
	?D*
?	\\ty\A??!+!8!8!$!@!B%)*3	"5&dC0'*||D'9'@'@H'+H%([
((X>%??
?	?.

z
*	<!!/;	<

}
-	M!!/&(iiRZZe
M	M;8/"":.
F%%oHE
F
F0;E
 
 +""775<<*EE!F"??(	<	<	M	M

F
Fsx&GH;)G-,AH;I:I4I!G*)G*-	H8	6H;8H8	-H3	-H;3H8	8H;;III!I*z setreuid() available on platformc|jt5tjtddddy#1swYyxYw)NrFrcrzrrhrr$s rtest_user_errorz$POSIXProcessTestCase.test_user_errors5


z
*	?!!/>	?	?	?	;Asetregidzno setregid() on platformctj}|dk7rdndg}t}t|j	|||gzD]}dD]}|j||5	t
jtjddg||}t|tr tj|j}n|}t|}|j||ddd|j#t$5t
j&t(dddd|j#t*5t
j&t(tj,tj.d	
dddt:|j#t$5t
j&t(|dddyy#t $rYwxYw#1swYxYw#1swYxYw#1swYrxYw#1swYyxYw)Nr@rAr)grouprErzimport os; print(os.getgid())rxr]rG)rrr])rgetegidrrrrKrrwrXrYrLr	rgr_gidr0rZr1rcrzrhrrOrr)	r%gid
group_listrr]rEr|	group_gidchild_groups	         r
test_groupzPOSIXProcessTestCase.test_groupsjjl"e|e7
')
?j)3%'	AE*
A	\\\CAA!+!8!8!$!@!B&+*3	"5&eS1(+U(;(B(BI(-I&)&k((i@!AA
A	A,

z
*	=!!/<	=

}
-	N!!/&(iiRZZu
N	N;"":.
I%%oZH
I
I'+AA&	=	=	N	N

I
IsU!G#)F8AG<G5:G G,8	G	GG	GGG G),G5z setregid() available on platformc|jt5tjtddddy#1swYyxYw)NrWr^rXr$s rtest_group_errorz%POSIXProcessTestCase.test_group_errors9


z
*	@!!/?	@	@	@rZ	setgroupszno setgroups() on platformctj}|dk7rdndg}t}d}t|j	|	tjtjddg|}tj}tj|}t?|Dcgc]3}t|trtj|jn|5}	}n|}	|r%|j!t#|t#|n%|j!t#|	t#|	|j+t,5tj.t0dgddd|j+t,5tj.t0tj2tj4d	g
dddt;|j+t,5tj.t0|gdddyycc}w#t$$r+}
|
j&t&j(k7rd}Yd}
~
d}
~
wwxYw#1swYxYw#1swYxYw#1swYyxYw)Nr@rAFrz;import os, sys, json; json.dump(os.getgroups(), sys.stdout)extra_groupsTrxrG)rrrk)rr_rrrrrwrXrY	getgroupsjsonloadsrLr	rr`rZsetrrr2rcrzrhrrr)r%rarbr
perm_errorr|
parent_groupschild_groupsgdesired_gidsexs           rtest_extra_groupsz&POSIXProcessTestCase.test_extra_groupssjjl"e|e7
')

?j)	G,,^^TRT!+-FLLNM::f-L)3 5$%;EQ:LQ 6 6RS S 5 5 *  \!2C
4FG  \!2C4EF

z
*	F!!/E	F

z
*	8!!/&(iiRZZ05w
8	8
;"":.
A%%o4><A
A
A' 5	xx5;;&J	*	F	F	8	8
A
AsB(H8G;<H76;II	H4	 H//H47IIIz!setgroups() available on platformc|jt5tjtgdddy#1swYyxYw)NrjrXr$s rtest_extra_groups_errorz,POSIXProcessTestCase.test_extra_groups_error=s9


z
*	D!!/C	D	D	DrZumaskzPOSIX umask() is not available.c	d}	tj}tjj	|d}tjtjdd|dgdtj|jdz}d}|j||t|d	t|
|tj|yy#|tj|wwxYw)Nbeansrzopen(z, 'w').close()+)ryiiz != rA)rrrrrrrhrXrYstatst_moderZoctrr)r%rnamer~
expected_modes     r
test_umaskzPOSIXProcessTestCase.test_umaskBs	&%%'F77<<0D
!!^^TU4(.+IJ
!
ggdm++e3G!M]G$'
$6#7tCL>!J

L!

f%"v!

f%"sB/CC&ctj5tjtj
ddg}|j
ddd|jjtjy#1swY5xYw)Nrzimport os; os.abort())rrrrErXrYr*rZrruSIGABRTrKs  rtest_run_abortz#POSIXProcessTestCase.test_run_abortXsh

(
(
*	  #..$"9";<A
FFH		
!,,7			s7BB	c,tjttjd}t|}|j
d|j|j
d||j
ttj|y)Nfake cmdruSIG)rrkr0rurr	rxlowerr%rerror_strings   r"test_CalledProcessError_str_signalz7POSIXProcessTestCase.test_CalledProcessError_str_signal`si++S-@,@*M3x	


h 2 2 45	


e\*

c&..)<8rcjtjdd}t|}|jd|y)NiKirzunknown signal 9876543.rrkr	rxrs   r*test_CalledProcessError_str_unknown_signalz?POSIXProcessTestCase.test_CalledProcessError_str_unknown_signalks,++HjA3x

/>rcjtjdd}t|}|jd|y)Nrgrznon-zero exit status 2.rrs   r$test_CalledProcessError_str_non_zeroz9POSIXProcessTestCase.test_CalledProcessError_str_non_zerops,++Az:3x

/>rctjtjddgtjd}|5|j|jjddddy#1swYyxYw)Nrrc.tjddS)Nrapple)rputenvr4rr<lambda>z3POSIXProcessTestCase.test_preexec.<locals>.<lambda>|s		'70Kr)rC
preexec_fnappler@rKs  rtest_preexecz!POSIXProcessTestCase.test_preexecusi
cnndEF%/OO(K	
M
	8QXX]]_h7	8	8	8s+A//A8c^d}	tjtjddg|}|j	dy#tj
$r*}|j
tjdYd}~yd}~wt$r)}|jd|jdYd}~yd}~wwxYw)	Nctd)Nz'What if two swallows carried a coconut?rzr4rrraise_itz=POSIXProcessTestCase.test_preexec_exception.<locals>.raise_itsFGGrrrrzEException raised by preexec_fn did not make it to the parent process.z)Expected a ValueError from the preexec_fncoconutr)rrErXrYrr!r
_fork_execrzrxr:)r%rrLrs    rtest_preexec_exceptionz+POSIXProcessTestCase.test_preexec_exceptions	H	0  #..$!;,46A
II/
0))	AOO))?
A
A	0MM)QVVAY//	0s!(?B, A77B,B''B,ceZdZdZdZdZy)+POSIXProcessTestCase._TestExecuteChildPopenz3Used to test behavior at the end of _execute_child.cX||_tjj|g|i|yr")	_testcaserrEr)r%testcaser:r;s    rrz4POSIXProcessTestCase._TestExecuteChildPopen.__init__s'%DN%%d<T<V<rc
	tjj|g|i|tdDcgc]&}t	j
dtj(}}	|D]k}|jj||jj|jj|jjfdm	|D]}t	j|ycc}w#|D]}t	j|wxYw#tdDcgc]&}t	j
dtj(ncc}w}}	|D]k}|jj||jj|jj|jjfdm	|D]}t	j|w#|D]}t	j|wxYwxYw)N	/dev/zeroz!At least one fd was closed early.rA)rrEr<rrrO_RDONLYrrrBr5rCrDrJ)r%r:r;rdevzero_fdsr7s      rr<z:POSIXProcessTestCase._TestExecuteChildPopen._execute_childs
%  //FtFvF).a2#$ "ww{BKK@22%)I22 "TZZ%6%6%8$++:L:L:N%)[[%7%7%9%;$G3II*%%2*%%).a2#$ "ww{BKK@222%)I22 "TZZ%6%6%8$++:L:L:N%)[[%7%7%9%;$G3II*%%k%%sB#D+C. A0C33DH"+E
HA0G$H$HHN)r1r2r3r=rr<r4rr_TestExecuteChildPopenrsA	=	%rrrz/dev/zero required.c	d}|jtj5|j|ttj
tj
tj
|dddy#1swYyxYw)z6Issue16140: Don't double close pipes on preexec error.c,tjd)Nz-force the _execute_child() errpipe_data path.)rr!r4rrrzWPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes.<locals>.raise_its,,CE
Er)rBrCrDrN)rcrr!rrrF)r%rs  r0test_preexec_errpipe_does_not_double_close_pipeszEPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipessf	E

z99
:	E''o(oojoo)8
(
E	E	E	EsAA22A;ctj}	tj|jtjt	j
tjddgd|jtjdtj|jtjt	j
tjddgd|jtjd|stjyy#|stjwwxYw)Nrrcyr"r4r4rrrzEPOSIXProcessTestCase.test_preexec_gc_module_failure.<locals>.<lambda>rrz#Popen enabled gc when it shouldn't.cyr"r4r4rrrzEPOSIXProcessTestCase.test_preexec_gc_module_failure.<locals>.<lambda>rrzPopen left gc disabled.)
gc	isenableddisabler,rrWrXrYenabler)r%enableds  rtest_preexec_gc_module_failurez3POSIXProcessTestCase.test_preexec_gc_module_failures,,.	JJLR\\^,OOS^^T26'3
5R\\^B
D
IIKOOBLLN+OOS^^T26'3
5OOBLLN,EF

7

sDD66ErBz!setrlimit() seems to fail on OS XcR	ddlm}m}m}}|\}}|d|f|j
|||	tjtjddgd|jdy#t$r}|j|Yd}~d}~wwxYw#t$rYywxYw)Nr)	getrlimit	setrlimitRLIMIT_NPROCrrcyr"r4r4rrrz@POSIXProcessTestCase.test_preexec_fork_failure.<locals>.<lambda>rrrz.RLIMIT_NPROC had no effect; probably superuser)resourcerrrr%rrrrWrXrYBlockingIOError)r%rrrrlimitsrhards        rtest_preexec_fork_failurez.POSIXProcessTestCase.test_preexec_fork_failures
	CC<(	D,D	*	<8	LOOS^^T26'3
5
MMJK	MM#			s(
A3)B3	B<BB	B&%B&ctj\}}t|dd5}|jdtj
z|jdtjzdddtj|dtj|}|jtj||j|jdy#1swYvxYwNwr)rz#!%s
z(exec '%s' -c 'import sys; sys.exit(47)'
irU)rrLrrr
unix_shellrXrYrchmodrrEr*rMrZr)r%r7fnamefobjrLs     rtest_args_stringz%POSIXProcessTestCase.test_args_strings$$&	E
"c"3
4	'JJx'"4"445JJB~~&
'	'	U#	
		%r*	'	'sAC  C)c|jttjtj
ddgd|jttjtj
ddgdy)NrrTrUstartupinfo
creationflagsrcrzrrWrXrYr$s rrz&POSIXProcessTestCase.test_invalid_argssb*joo>>457&(		*	
*joo>>457(*		,rc:tjj}d|d<tjdgdtj
|}|5|j
|jjjdddddy#1swYyxYwNrrzecho $FRUITrrrCrs 	
r
rrrrrErFrZrCr
rr%rrLs   rtest_shell_sequencez(POSIXProcessTestCase.test_shell_sequences~"!wm_A$.OO!'
)	LQXX]]_22<@(K	L	L	Ls:BBc8tjj}d|d<tjddtj
|}|5|j
|jjjdddddy#1swYyxYwrrrs   rtest_shell_stringz&POSIXProcessTestCase.test_shell_string	s|"!w]!$.OO!'
)	LQXX]]_22<@(K	L	L	Ls
:BBctj\}}t|dd5}|jdtj
z|jdtjzdddtj|dtj|}tj||j|dy#1swY\xYwr)rrLrrrrrXrYrrrrWrMrZ)r%r7rrr\s     rtest_call_stringz%POSIXProcessTestCase.test_call_string	s$$&	E
"c"3
4	'JJx'"4"445JJB~~&
'	'	
__U
#
		%R 	'	'sACCc	g}dD]Z}dD]S}tjj||}tjj|sC|j	|U\|s|jdd}tjj|r0tjj
|s|j	||D]v}tjd|dtj}|5|j|jjjt|ddddxy#1swYxYw)	N)z/binz	/usr/bin/z/usr/local/bin)bashkshz"bash or ksh required for this testz/bin/shzecho $0T)rYrrCrH)rrrisfilerrislinkrrErFrZrCr
rr)r%shellsrrshrLs      rtest_specific_shellz(POSIXProcessTestCase.test_specific_shell	s=	&F'
&WW\\&$/77>>"%MM"%
&	&
MM>?

77>>"bggnnR&8MM"	NB  r(29A
N  !6!6!8%G:LM
N
N	N
N
Ns
4AEE	ctjtjtj}	tjt
jddgdtjtjtj}tjtj||jjdt||||S#tjtj|wxYw)Nrzif 1:
                                 import sys, time
                                 sys.stdout.write('x\n')
                                 sys.stdout.flush()
                                 time.sleep(30)
                                 TrErBrCrDr)ruSIGINTdefault_int_handlerrrErXrYrFrCr
getattr)r%methodr:rvrLs     r
_kill_processz"POSIXProcessTestCase._kill_process0	s
mmFMM63M3MN	6  #..$9%"&,0'1(2(2	9A
MM&--5	


a6D!
MM&--5sAC&C?)netbsdopenbsdz"Due to known OS bug (issue #16762)cLtjtjddgdtjtjtj}|j
j
dtjdt||||jy)Nrzif 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             Trr)rrErXrYrFrCr
r,r-rr)r%rr:rLs    r_kill_dead_processz'POSIXProcessTestCase._kill_dead_processI	sw

cnnd5!"
(,#-??$.OO$.OO
5	


a

1
6D!	

rc|jdtj}|j\}}|j	d||j|j
dy)Nsend_signalsKeyboardInterruptr)rrurrrxr'r*r%rLrrDs    rtest_send_signalz%POSIXProcessTestCase.test_send_signal`	sL}fmm<MMO	6

*F3AFFHa(rc|jd}|j\}}|j|d|j|jtj
y)Nrpr)rrrZr*ruSIGKILLrs    r	test_killzPOSIXProcessTestCase.test_killf	sMv&MMO	6%FNN?3rc|jd}|j\}}|j|d|j|jtj
y)N	terminater)rrrZr*ruSIGTERMrs    rtest_terminatez#POSIXProcessTestCase.test_terminatel	sM{+MMO	6%FNN?3rcD|jdtjyNr)rrurr$s rtest_send_signal_deadz*POSIXProcessTestCase.test_send_signal_deadr	s
v}}=rc&|jdyNrprr$s rtest_kill_deadz#POSIXProcessTestCase.test_kill_deadv	s'rc&|jdyNrrr$s rtest_terminate_deadz(POSIXProcessTestCase.test_terminate_deadz	s,rcg}|D]@}tj|}tj|}|j|||fB|Sr")rget_inheritabledupr)r%save_fdsr.r7inheritablesaveds      r	_save_fdszPOSIXProcessTestCase._save_fds~	sM	1B,,R0KFF2JEJJE;/0	1
rct|D]3\}}}tj|||tj|5y)N)r)rdup2rJ)r%r.r7r	rs     r_restore_fdsz!POSIXProcessTestCase._restore_fds	s3&)	"B{GGE2;7HHUO	rcd}|j|}|D]\}}}|dk(s
|}n	|D]}tj|tjt
jddg|tjtjj\}}|j|d|j|d|j|y#|j|wxYw)NrrrWrArr?)r
rrJrrErXrYrFrrZr
)	r%r.rB	saved_fdsr7r	rrrs	         rcheck_close_std_fdsz(POSIXProcessTestCase.check_close_std_fds	sNN3'	&/	"B{Qw		)

!'';)<
#(oo(oo/0;{}
C
S(+S),i(Di(sBCC%c(|jdgyrgrr$s rtest_close_fd_0z$POSIXProcessTestCase.test_close_fd_0	  !%rc(|jdgyNrrr$s rtest_close_fd_1z$POSIXProcessTestCase.test_close_fd_1	rrc(|jdgy)Nrgrr$s rtest_close_fd_2z$POSIXProcessTestCase.test_close_fd_2	rrc*|jddgy)Nrrrr$s rtest_close_fds_0_1z'POSIXProcessTestCase.test_close_fds_0_1	  !Q(rc*|jddgy)Nrrgrr$s rtest_close_fds_0_2z'POSIXProcessTestCase.test_close_fds_0_2	rrc*|jddgy)Nrrgrr$s rtest_close_fds_1_2z'POSIXProcessTestCase.test_close_fds_1_2	rrc*|jgdy)N)rrrgrr$s rtest_close_fds_0_1_2z)POSIXProcessTestCase.test_close_fds_0_1_2	s	
  +rcxtjd}tjd}	tjdtjdtjt
jddgjtj|dtj|dtj|tj|y#tj|dtj|dtj|tj|wxYw)z=Issue #15798: Popen should work when stdio fds are available.rrrz*print('AssertionError:0:CLOEXEC failure.')N)	rrrJrrErXrYr*r)r%	new_stdin
new_stdouts   rtest_small_errpipe_write_fdz0POSIXProcessTestCase.test_small_errpipe_write_fd	sFF1I	VVAY
	!HHQKHHQK

NND@B
CCG46
GGIq!GGJ"HHYHHZ 
GGIq!GGJ"HHYHHZ s
AC!!AD9ctdDcgc]}tj}}	|Dcgc]\}}|	}}}|D]\}}tj|tj
|ddtj|ddd|jtd}	t|D]\}}tj||tjtjddg|d|d|d}|j|j||D]}tj|ddtj |dd	}	tj |dd	j#}
|j%|	d
|j%|
d|D]}tj&|ycc}wcc}}w#|j|wxYw#D]}tj&|wxYw)NrrSTDINrrZimport sys; got = sys.stdin.read();sys.stdout.write("got %s"%got); sys.stderr.write("err")rgrArD	got STDINerr)rrrLrunlinkrr6r
	enumeraterrrErXrYr*r
r
rrZrJ)r%rtempsr7rtemp_fdsrtemp_fdrLrrs           rtest_remapping_std_fdsz+POSIXProcessTestCase.test_remapping_std_fds	s-21X6!!#66(	,12yr52H2#
!	E		% 
!
HHXa[(+HHXa[!Q'uQx0I
-#,X#6)KBGGGR()
$$cnndN&O#1+#A;#A;(!!),
#Q"
#''(1+t,C''(1+t,224CS,/S&)

Q726!!),

s;G	G*GA/G*-A,GBG*G*G''G**HctdDcgc]}tj}}|Dcgc]\}}|	}}}	|D]\}}tj||jtd}		t
|D]\}}
tj|
|tj|dtj|ddtjtjddg|||}|j|D]}tj|ddtj|d}tj|dj!}
|j#|	|j%|d|j%|
d	|D]}tj&|ycc}wcc}}w#|j#|	wxYw#|D]}tj&|wxYw)
Nrr(rrr)rArDr*r+)rrrLrr,r
r-rrr6rrErXrYr*r
rr
rZrJ)r%stdin_no	stdout_no	stderr_norr.r7rr/rr0rLrrs              rcheck_swap_fdsz#POSIXProcessTestCase.check_swap_fds	s-21X6!!#66(-.92uB..'	"
!	E		% 
!uQx0I
-#,X#6)KBGGGR()8,1a($$cnndN&O#$$&"'BHHRA&'ggi.ggi.446!!),S,/S&)

Q7.B!!),

s/F4F99G:C(F?"5G?GGG3c|jddd|jddd|jddd|jddd|jddd|jdddy)Nrrrg)r6r$s r
test_swap_fdsz"POSIXProcessTestCase.test_swap_fds-
snAq!$Aq!$Aq!$Aq!$Aq!$Aq!$rcj|jtd}	|D]C}tj5}t	j
|j
|dddEttdt|z
j}t	j|gd}i}t||D]
\}}	||||	<tjd}
ttdt|z
j}tjtj d|
t#|gfi|}|j%|dt||D]\}}	t	j&|dtj(t	j*|d}
t-t/t0|
j3d}tjd|d	|d
|d|d|	d
}|j%|	g||	|j5|y#1swYxYw#|j5|wxYw)NrrAz
                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'))
            rrrDrHz"
                    When testing z to z4 redirection,
                    parent descriptor z5 got redirected
                    to descriptor(s) z instead of descriptor z.
                )r
rrrrrr5rorrJziprrrrWrXrYr	rZr6SEEK_SETr
rmapr0rr
)r%from_fdsto_fdsrfrom_fdffd_to_close	arg_namesr;to_fdr
skipped_fdr\
read_bytesread_fdsrBs                r#_check_swap_std_fds_with_one_closedz8POSIXProcessTestCase._check_swap_std_fds_with_one_closed5
s
NN58,	&	)#
1++-1GGAHHJ011
1uQx=3x=8==?KHH[!5IF"%h"7
3+2y'(
3??$DeAh-#f+5::<J#..$c*o!N+#)+BR#"%h"7	
9!R[[1WWWd3
C):):7)C DEoo+""*4x8''.i0&&.Z/FugN'
  %(C8	
9
i(I11H
i(s#H%HF%HH	HH2ctjtddD]8}tjtddD]}|j	||:y)Nrrg)	itertoolscombinationsrpermutationsrG)r%r=r>s   r!test_swap_std_fds_with_one_closedz6POSIXProcessTestCase.test_swap_std_fds_with_one_closeda
sV!..uQx;	KH#00q1=
K886J
K	Krcd}	tjt||jdy#t$rD}|jtj|jt|dYd}~yd}~wtj$rD}|jtj|jt|dYd}~yd}~wwxYw)Nctd)N
surrogate:rr4rrpreparezCPOSIXProcessTestCase.test_surrogates_error_message.<locals>.prepareg
s/00rrz1Expected ValueError or subprocess.SubprocessErrorrOz!Exception occurred in preexec_fn.)rrWrrrzrrrZr	r!assertIsNotNone)r%rPrs   rtest_surrogates_error_messagez2POSIXProcessTestCase.test_surrogates_error_messagef
s	1
	KOO"
$
IIIJ	;j334SX'9::))	L  !6!67SX'JKK	Ls 2	C:A::C:CCcdD]Y\}}|jdd}dt|z}tjj	}|||<d|d<|}tjtjd|g|}|jd	}|j|jdt||jdd}d
t|z}tjj	}|||<tjtjd|g|}|jd	}|j|jdt|\y)N))testuabc)utest42rHrz&import os; print(ascii(os.getenv(%s)))CLC_ALLrrs

z'import os; print(ascii(os.getenvb(%s))))
rrerrrrrwrXrYrrZrrH)r%keyvalue
encoded_valuescriptr
decoded_valuerCs        rtest_undecodable_envz)POSIXProcessTestCase.test_undecodable_envy
s9G	KJC!LL2CDM>S	IF**//#CCH CM!M,,v.F]]7+FV]]73U=5IJ**W&78C>cJF**//#C$CH,,v.F]]7+FV]]73U=5IJ5	Krc4tjtd}ttdd}tjjtd\}}tj|}t
j|g|z}|j|dd|dj|jdfz}t
j|d}|j|dtjj}||d<t
j|g|z|	}|j|dtjj}tj||d
<t
j|g|z|	}|j|dy)Nrrs'%s' %s rTr_PATHrsPATH)rrrrrrrrWrZrrrrenvironb)	r%abs_programr:rprogramexitcoderrenvbs	         rtest_bytes_programz'POSIXProcessTestCase.test_bytes_program
sGkk/!"45OAB'(

oa&89
g++g&??K=#561%K$)>)>w)GHH??3d31%jjooF??G9T>s;1%{{!D)W
??G9T>t<1%rc
tjdd}tjdd}tjtj
|gtjtjtjd}|j|jdtjtj
|gtjd}|j\}}ttt|jd	}t|jj|jj|j jg}|j#||zd
|d||zy)Nzinput_reader.pysubprocessdatasubdirfd_status.pyF)rBrCrDrErrCrE,zExpected no fds from z to be open in child, found )rfindfilerrErXrYrFrrror<r0rrBr5rCrDr,)	r%sleeper	fd_statusp1p2r|error
result_fdsunwanted_fdss	         rtest_pipe_cloexecz&POSIXProcessTestCase.test_pipe_cloexec
s%""#4=MN$$^<LM	


s~~w7$.OOJOO%/__G	
,


s~~y9%/__G(
S&,,t"456
BHHOO-ryy/?/?/AII,,.01	
l2 ,Z,-FH	Irc
tjdd}tjdd}d}|dzdz}tjtj
|gtjtjd	
tjtj
||g
jtjd	|j
j|jj
fd
}fd}|j||j|
jj|
jjtjjgggd\}}}	|j|d
|jjj!|
jjjjy)Nzqcat.pyrhrizqgrep.pyszxcvbn
F)rBrCrEcF	jy#t$rYywxYwr"rProcessLookupError)rqsrkill_p1zBPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p1
#
%

	  cF	jy#t$rYywxYwr"r{)rrsrkill_p2zBPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p2
r~rrzThe child hung)rrnrrErXrYrFrCrr*rBrrJselectrrZr
)r%qcatqgrepsubdatarr}r	readfilesignored1ignored2rqrrs          @@rtest_pipe_cloexec_real_toolsz1POSIXProcessTestCase.test_pipe_cloexec_real_tools
sa	2BC  4DE{U"


s~~t4$.OOJOO(-/

s~~ug>$&IIjoo(-/	
  	
	
	
  
t
(.

ryyk2r2(N%	8X	#34)40
		
		rc
tjdd}tj}|j	tj
|d|j	tj
|dt
|
tdD]e}tjtjtj}|j	tj
|
j|g
D]}tj|dtjtj |gtj"d	}|j%\}}t
t't(|j+d
}|j-|
z
dtjtj |gtj"d	}|j%\}}t
t't(|j+d
}|j/|
zd|j1d|d
t

fdtdD}	tjtj |gtj"d|	}|j%\}}t
t't(|j+d
}|j/||	z

zd|j1d|d
y)Nrkrhrirr	TFrlrmzSome fds were closedzSome fds were left openzSubprocess failedc3>K|]}jywr")r).0rr/s  r	<genexpr>z6POSIXProcessTestCase.test_close_fds.<locals>.<genexpr>s;Q(,,.;srrCrEpass_fdsz'Some fds not in pass_fds were left open)rrnrrkrrJrorrdevnullraddset_inheritablerrErXrYrFrr<r0rrZr,rx)r%rpr.rr7rLr|ignored
remaining_fdsfds_to_keepr/s          @rtest_close_fdsz#POSIXProcessTestCase.test_close_fds
s:$$^<LM	ggi#a&)#a&)s8q	AR[[1BOOBHHb)LL	
	)Br4(	)
cnni8$.OOu
F--/CV\\$%789
18/	1
cnni8$.OOt
E--/CV\\$%789
12	4

a(;<;%(;;cnni8$.OOt&1
3--/CV\\$%789
-+5AB	D

a(;<rfreebsdz/devz/dev/fdz.Requires fdescfs mounted on /dev/fd on FreeBSDc`tjdd}tjtj
dt
jd|zgtj}|j\}}|j}|jt|dd|z	ttt|d
j!j#d}ttt|dj!j#d}|j%||zd
	y)z;Confirm that issue21618 is fixed (may fail under valgrind).rkrhriraK
        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))
        rtrgz(expected exactly two lines of output:
%rrArrmrzSome fds were left open.N)rrnrrErXrYrrrFrrrZrror<r0rrr,)r%rprLr|
unused_stderroutput_lines
opened_fdsrs        r%test_close_fds_when_max_fd_is_loweredz:POSIXProcessTestCase.test_close_fds_when_max_fd_is_lowered!s
$$^<LM	
cnndHOO/	^_/	050`#-//a0
3d!"


((*\*AH6Q		SS,q/"7"7"9"?"?"EFG
C\!_%:%:%<%B%B4%HIJ
37		9rrrc	tjdd}t}tdD]}t	j
}|j
tj|d|j
tj|dt	j|ddt	j|dd|j||D]}tjtj|gtjd|f}|j\}}tt!t"|j%d	}	||hz
}
|j'||	d
|j)|	|
zd|j+t,5}|j)tj.t0d|f
ddd|j'dt3j4y#1swY2xYw)NrkrhrirrrTrrmzfd to be passed not passedzfd to be closed passedF)rErzoverriding close_fds)rrnrorrrkrrJrupdaterrErXrYrFrr<r0rrxr,assertWarnsrrWrr	warning)r%rpr/rr.r7rLr|rrto_be_closedcontexts            r
test_pass_fdsz"POSIXProcessTestCase.test_pass_fdsts$$^<LM	5q	!A'')COOBHHc!f-OOBHHc!f-s1vt,s1vt,OOC 
	!	HB  #..)!<(24+-&2A mmoOFGCd); <=M#rd?LMM"m-IJ]\95
7!!.1
;W  '"'2&":;
;
MM0#goo2FG%	H
;
;s-G))G2	c2tjdd}tj\}}|j	tj
||j	tj
|tj|dtj|d||f}tj|g}|ttt|z
}tj|tjd|}|j\}}t!tt"|j%d}	|j'|	t!|d|z|j'tj(|d|j'tj(|dy)	NrkrhriTFrrmz	output=%a)rrnrrkrrJrrXrYrr<r	rrErFrror0rrZr)
r%r[rnon_inheritablerr:rLr|rr.s
          rtest_pass_fds_inheritablez.POSIXProcessTestCase.test_pass_fds_inheritables5!!.9IJ')wwy$_+./2
;-
?E21'Sh'((T$.OOt&.
0--/#c6<<-./	
c(m[6-AB	
++K8$?++O<eDrcLtjdd}g}tdD]e}tjtj
tj}|jtj||j|gtj\}}|jtj||jtj||jd|tjtj|g|d|d|dd|5tj |d	}d
d
d
j#dDchc]
}t%|}	}|j'|	hdt)|zd
|y
#1swYUxYwcc}w)z7Regression test for https://bugs.python.org/issue32270.rkrhrirgrrT)rBrCrDrErrDNrm>rrrgzoutput=)rrnrrrrO_RDWRrrJrrkinsertrrErXrYr
rr0rZ	frozenset)
r%rprrr7stdout_rstdout_wr|numr.s
          rtest_pass_fds_redirectedz-POSIXProcessTestCase.test_pass_fds_redirectedsK$$^<LM	q	 ARYY/BOOBHHb)OOB	 
 WWY((+(+8$


s~~y9$,QK%-a[%-a[(,'/1	-WWXt,F
	-$*<<#56Cs3x66i)H*==
?ST	-	-7s*FF!Fctjtjd5}t	j
t||}|jdddy#1swYyxYw)Nr+)rCrBrHrrrrrErr*r%inoutrLs   r%test_stdout_stdin_are_single_inout_fdz:POSIXProcessTestCase.test_stdout_stdin_are_single_inout_fdK
WWRZZ
&	%  (-U<A
FFH			-AA$ctjtjd5}t	j
t||}|jdddy#1swYyxYw)Nrrrrs   r&test_stdout_stderr_are_single_inout_fdz;POSIXProcessTestCase.test_stdout_stderr_are_single_inout_fdsK
WWRZZ
&	%  (-e=A
FFH			rctjtjd5}t	j
t||}|jdddy#1swYyxYw)Nr)rDrBrrs   r%test_stderr_stdin_are_single_inout_fdz:POSIXProcessTestCase.test_stderr_stdin_are_single_inout_fdrrc>tjdd}tjtj
|gtjtj}|j\}}|jd|jd|jdzy)Nzsigchild_ignore.pyrhrirrz6sigchild_ignore.py exited non-zero with this error:
%sr)rrnrrErXrYrFrrZrr)r%sigchild_ignorerLrCrDs     rtest_wait_when_sigchild_ignoredz4POSIXProcessTestCase.test_wait_when_sigchild_ignoreds}!**+?2BDcnno>$.OOJOO
MALL+:w/+0	1rc	tjd}tjtj
ddgtjd}|j}|j|j	|j|jdd|j||j|gggdd|jy#|jwxYw)	Nrrz$import sys;sys.stdout.write("apple")r)rCrOrxsapplg)r
import_modulerrErXrYrFrCrrJrZr
rxrr*)r%rrLr@s    rtest_select_unbufferedz+POSIXProcessTestCase.test_select_unbuffereds,,X6cnnd:;%/OO%&	
(

HH 	QVVAY0MM!]V]]A3B<Q?@
FFHAFFHs
5A
CC"c	xtjtjddgtjtj}|j|jj|j|jjt|}|j}tjdtf5d}dddtr |jtj y|j#|tj Dcgc]
}t|c}y#1swYgxYwcc}w)Nrz import sys, time;time.sleep(0.2)rr)rrErXrYrFrrCrJrDidpidrcheck_warningsResourceWarningr(rr)rx)r%rLidentros     rtest_zombie_fast_process_delz1POSIXProcessTestCase.test_zombie_fast_process_dels

cnnd01%/OO$.OO	
5
	
''1ee

+
+R,A
B	A	j001
MM%1C1C!DA"Q%!DE		"EsD+D7
+D4c	tjtjddgtjtj}|j|jj|j|jjt|}|j}tjdtf5d}tjdddt!j"|t$j&t(r |j+tj,n7|j/|tj,Dcgc]
}t|c}t1j2d|j5t65tjt8tjtj5}	dddddd|j5t6t j:|dt(r |j+tj,y|j=|tj,Dcgc]
}t|c}y#1swYxYwcc}w#1swYxYw#1swYxYwcc}w)Nrzimport time;time.sleep(3)rrr@r)rrErXrYrFrrCrJrDrrrrrr
gc_collectrrprurr(rr)rxr,r-rcrrwaitpidr)r%rLrrrr&s      r!test_leak_fast_process_del_killedz6POSIXProcessTestCase.test_leak_fast_process_del_killeds
cnnd./%/OO$.OO	
5
	
''1ee

+
+R,A
B	!A 	!	V^^$j001
MM%1C1C!DA"Q%!DE	

3


w
'	!!/)3)3:
=A
		
'2::sA6j001UJ4F4F$GqRU$GH5	!	!"E

		%Hs<I	I(
9I9I-I9J
I%-I6	2I99Jctjdd}tjd|j	tj
t
jtj|gtjdfd}|j\}}ttt|jd}|j!|y)	NrkrhrirTc0tjdSr)rr)r7srrzCPOSIXProcessTestCase.test_close_fds_after_preexec.<locals>.<lambda>Is2r)rCrErrm)rrnrrrrJrrErXrYrFrror<r0rr)r%rprLr|rrr7s      @rtest_close_fds_after_preexecz1POSIXProcessTestCase.test_close_fds_after_preexec?s$$^<LM	VVAY"%cnni8$.OOt(>
@--/CV\\$%789
]+rc
ddl}tj}	d}tjddgddgfdgdddgfdgdgddgfdgdgddffD]q\}}}}|j	t
5}|j
||dd||d	d	d	d	d
ddd
ddddgdd	|dddd|jdtjs	|stjyy#1swYIxYw#|stjwwxYw)Nrcyr"r4r4rrrz5POSIXProcessTestCase.test_fork_exec.<locals>.<lambda>Zrrr\sexeenvsargTr4rxrrgrrxFz
takes exactly)_posixsubprocessrrrrcrrrr	rlr)	r%r
gc_enabledfuncr:exe_listrenv_listrs	         rtest_fork_execz#POSIXProcessTestCase.test_fork_execPs3	 \\^
 	 DIIKF8TF843TF84F8SF84F8T3/	2
F-hX&&y1%S$..hb#xBB1adAr1be%%   #cmm2DE-
F0

%%%$

s$AC)-(C/C)C&	"C))Dc$ddl}Gdd}tj}	tjddddd|d	|d
ffD]}|j	t
dj
|5}|jd
gd
gd|ddgddddd	d
dddddddddddddd|jdtj	|stjyy#1swYIxYw#|stjwwxYw)NrceZdZdZdZdZy)JPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadIntTc||_yr")rY)r%rYs  rrzSPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__init__~s	"
rcL|jrd|_|jSt)NF)firstrYrzr$s r__int__zRPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__int__s ::!&DJ::%  rN)r1r2r3rrrr4rrBadIntr|sE
#
!rr)rxrgrrxr)r	rx)*l)rrx)rr^r^rrrgzfds_to_keep={}rAsfalseTrrxrrxr)rrrrrcrzrrrxr	rlr)r%rrrrrns      r%test_fork_exec_sorted_fd_sanity_checkz:POSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_checkxs&	 	!	!\\^
	IIK!#F1I&
 
?&&",33K@'B
$EF$..!
XJk4&BB1adAdD"d$
$

mS-=>'
?*


$
$

s$AC67+C*"/C6*C3	/C66DcLtjt}|5tjj|d5}t|j_|j|jjddddddy#1swYxYw#1swYyxYw)NrB)rrErrrcrdBrokenPipeErrorrJrrassert_called_withr%r&mock_proc_stdins   r,test_communicate_BrokenPipeError_stdin_closezAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_closes0
	74::$$T73	70?O!!-!!446	7	7	7	7	7	7s#!BAB=BB	BB#ctjt}|5tjj|d5}t|j_|jd|jjd|jjddddddy#1swYxYw#1swYyxYw)NrBstuff)rrErrrcrdrrrrassert_called_once_withrJrs   r,test_communicate_BrokenPipeError_stdin_writezAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_writes0
	<4::$$T73	<0?O!!-X&!!99(C!!99;		<	<	<	<	<	<s#!B6AB*B6*B3	/B66B?c@tjtjdgtjtj}|5t
jj|d5}ttjd5}t|j_
|j|j_|j!d|jj#dddddddddy#1swYxYw#1swYxYw#1swYyxYw)N-hrrBwbr)rrErXrYrFrrcrdrrrrrrr5return_valuerr)r%r&rdev_nulls    r,test_communicate_BrokenPipeError_stdin_flushzAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_flushs 6&0oo'18	<4::$$T73	<RZZ&	<*20?O!!-2://2CO""/X&!!99;	<	<	<	<	<	<	<	<	<s=!D(DA C<#D+D<DDD	
DDctjtjdgtjtj}|5t
jj|d5}t|j_
|jd|jjddddddy#1swYxYw#1swYyxYw)NrrrBira)
rrErXrYrFrrcrdrrJrrrrs   r9test_communicate_BrokenPipeError_stdin_close_with_timeoutzNPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_close_with_timeouts 6&0oo'18	<4::$$T73	<0?O!!-S)!!99;		<	<	<	<	<	<s%!C(AB;*C;C	CCN
W_STOPCODEzneed _testcapi.W_STOPCODEcZt}tj|}tj|j
dt
jd}tjd|j
|f5|j}ddd|jdy#1swYxYw)zATest wait() behavior when waitpid returns WIFSTOPPED; issue29335.rrdrr)rN)rrrErwait_processr	_testcapirrrcr*rZ)r%r:r&statusrs     rtest_stoppedz!POSIXProcessTestCase.test_stoppeds
%	TXX2%%a(
ZZ/txx>P
Q	%J	%	
R(	%	%s5B!!B*ctjt}tj|j
d|j
|jtjd5}|jtjdddj|j|jy#1swY5xYw)Nrrzos.kill)rrErrrrrrrrcrrurassert_not_calledrQ)r%r&	mock_kills   rtest_send_signal_racez*POSIXProcessTestCase.test_send_signal_races0	TXX2	
$//*
ZZ	
"	-iV^^,	-
	##%	
T__-	-	-s+ B??Cc~tjtjddg}|js|j|jstjj|dd5d|_|jtjddd|jy#1swYxYw)Nrzexit(1)rcyr"r4r4rrrz=POSIXProcessTestCase.test_send_signal_race2.<locals>.<lambda>
rr)new)
rrErXrYrrrrcrdrrurrprKs  rtest_send_signal_race2z+POSIXProcessTestCase.test_send_signal_race2s
cnndI>?,,
FFH,,ZZ

q&l

;	*AL
MM&..)	*	
	*	*s3'B33B<ctjtjddgtj}		|jdy#tj$rYnwxYw.)Nrz+import os, time; os.close(1), time.sleep(2)rtr`ra)rrErXrYrFrrdr%r&s  r1test_communicate_repeated_call_after_stdout_closezFPOSIXProcessTestCase.test_communicate_repeated_call_after_stdout_close
se!N!P'18
   -,,

	sAA"!A"cdtd}td|\}}}|j|d|jd|y)Nzif 1:
        import atexit
        import subprocess

        def dummy():
            pass

        def exit_handler():
            subprocess.Popen(zm, preexec_fn=dummy)
            print("shouldn't be printed")

        atexit.register(exit_handler)
        rrs0preexec_fn not supported at interpreter shutdown)rr	rZrx)r%rrrrs     rtest_preexec_at_exitz)POSIXProcessTestCase.test_preexec_at_exit
sN../	'tT23c"

I3Or)pr1r2r3r&rrrrrrEr
rrcrr"rnrrrrNr,r5rrr=rUrYrergrvrxr(rrrrrrrrrrrXrrrrrrrrrrrrrrrrrr
r
rrrrrrr r"r&r1r6r8rGrLrRr]rfrvrrr}st_devrrrequires_mac_verrrrrrrrrrrrcpython_onlyrrrrrrrrrrr
r
__classcell__rbs@rrrs>!
B
BB*J,,TZZ'(A)A TZZ'(:):*X__(;<<-/4/4,7 XY/JGB	4J<>9>9 XZ02KL1FM1FfX__WR,.PQ?R?XZ02MN'IO'IRX__WR,.PQ@R@X[13OP.AQ.A`X__WR-/RSDTDX__Y:gb'&:":68&8&(8	9?
?
	80 %!1!1%2X__446KLEME*X__ "EGLGL(+	,LL!N(2X__S\\,,-BC9;;*)44>(-
)2&&&))),
!*+Z+`%()XK
K&K:&6I.'R-=`X__S\\,,Y7IRWWV_++wrwwy/A/H/HHEGI9GI9`Wb!$H%HBE<U4	1"F0)IV,"
%%N
''R7<
<
<X$.>$Y=46)6).,	PrrzWindows specific testsceZdZdZdZdZdZdZejdZ
dZdZd	Z
d
ZdZdZd
ZdZdZdZdZdZdZdZdZdZy)Win32ProcessTestCasecd}d}tj}||_||_tjt
|y)Nrrr)rSTARTUPINFOdwFlagswShowWindowrWr)r%STARTF_USESHOWWINDOWSW_MAXIMIZErs    rtest_startupinfoz%Win32ProcessTestCase.test_startupinfo&
s@ ! ,,.2"-	$/	1rcpd}d}tj||}tjt|y)Nrr)rrr)rrrWr)r%STARTF_USERSHOWWINDOWrrs    rtest_startupinfo_keywordsz.Win32ProcessTestCase.test_startupinfo_keywords5
s8!" ,,)#
	$/	1rchtj}tj|_tj|_t
dD]M}t}ttjd5}tj||tj|}|5|jddd|j|jdddd|j|jtj|j!|j"|j!|j$|j!|j&|j|j
tj|j|j(dgiPy#1swYxYw#1swYxYw)Nrgr)rCrDrrhandle_list)rrrrSW_HIDErrrrrrrErrrZrr	hStdInput
hStdOutput	hStdErrorlpAttributeList)r%rrrnullr&s      rtest_startupinfo_copyz*Win32ProcessTestCase.test_startupinfo_copyE
s] ,,.(==","4"4q	OA!Cbjj#&
5$!''/3/9/@/@4?A'$$&'  !4
5
[00'<<
>k334k445k334[44j6H6HI[88=":MN#	O''
5
5s$.*F(F)$F(F%!F((F1	cd}tjjdtjtj
dz|y)Nz'    a DOS box should flash briefly ...
z# -c "import time; time.sleep(0.25)"r)rXrDrrrWrY)r%CREATE_NEW_CONSOLEs  rtest_creationflagsz'Win32ProcessTestCase.test_creationflags`
s8

CD=>&8	:rcv|jttjtj
ddgdy)NrrTcyrr4r4rrrz8Win32ProcessTestCase.test_invalid_args.<locals>.<lambda>m
rrrrr$s rrz&Win32ProcessTestCase.test_invalid_argsh
s1*joo>>457%.		0rcGddt}|jt5tjt
|dddy#1swYyxYw)NceZdZdZy)4Win32ProcessTestCase.test_issue31471.<locals>.BadEnvN)r1r2r3keysr4rrBadEnvr/s
sDrr1r)dictrcrrrEr)r%r1s  rtest_issue31471z$Win32ProcessTestCase.test_issue31471o
sC	T	


y
)	<_&(;	<	<	<s!AAcxtjtjddgd}|j	|dy)NrrTT)rErUrVr[s  rrz#Win32ProcessTestCase.test_close_fdsx
s5
__cnnd8:(,.	
R rc	ddl}tj}|jtj|d|jtj|dg}|D]8}tj
|d|j
|j|:tjtjddj|dgtjd}|j\}}|j|j dt#|j%tjtjddj|dgtjtjd}|j\}}|j|j d|j'd	|g}tj(}	d
|i|	_tjtjddj|dgtjtj|	d}|j\}}|j|j d|j'd	|t-j.dt0f5tj(}	d
|ddi|	_tjtjddj|dgtjtj|	d}|j\}}|j|j ddddy#1swYyxYw)
NrrTrz2import msvcrt; print(msvcrt.open_osfhandle({}, 0))Frl)rCrDrEsOSErrorr)rCrDrrEz.*overriding close_fds)r"rrkrrJrr
get_osfhandlerrErXrYrrFrrZrr0rrxrr$rrr)
r%r"r.rr7rLrCrDrrs
          rtest_close_fds_with_stdioz.Win32ProcessTestCase.test_close_fds_with_stdio
sggi#a&)#a&)	5Br4(NN6//34	5
cnndRYYZabcZdeg$.OOu
Fq)FLLNcnndRYYZabcZdeg$.OOJOOW[
]q)

j&) ,,.'4k&B#cnndRYYZabcZdeg$.OOJOO)4
Fq)

j&)
+
+-E-;-=>		.$002K+8'!**EK'  #..$"V"]"]^efg^h"i"k(2
-8EKA]]_NFFQ\\1-		.		.		.s
B)MMcptj}i|_tjt|y)Nrrrr$rWrr%rs  rtest_empty_attribute_listz.Win32ProcessTestCase.test_empty_attribute_list
s) ,,.&(#$/	1rcttj}dgi|_tjt|y)Nrrr9r:s  rtest_empty_handle_listz+Win32ProcessTestCase.test_empty_handle_list
s. ,,.'4b&9#$/	1rctjj}d|d<tjdgdtj
|}|5|j
d|jjdddy#1swYyxYwNphysalisrrorrsphysalis	rrrrrErFrxrCr
rs   rrz(Win32ProcessTestCase.test_shell_sequence
sm"$weWA$.OO!'
)	8MM+qxx}}7	8	8	8s+BBctjj}d|d<tjddtj
|}|5|j
d|jjdddy#1swYyxYwr?rArs   rrz&Win32ProcessTestCase.test_shell_string
sk"$wU!$.OO!'
)	8MM+qxx}}7	8	8	8s
+BB
c,dD]}tjj}d|d<tjddtj
||}|5|j
d|jj|dddy#1swYxYw)N)ansioemr@rror)rrCrrrA)r%encrrLs    rtest_shell_encodingsz)Win32ProcessTestCase.test_shell_encodings
s"	@CZZ__&F(F7O  a(2%+*-/A
@

j!((--/3?
@
@	@
@
@s,B

B	cttjtjdz}|j	|dy)Nz -c "import sys; sys.exit(47)"rUrVr[s  rrz%Win32ProcessTestCase.test_call_string
s.
__S^^=>?R rctjtjddgtjtjtj}|5|j
j
dt||||j\}}|j|d|j}ddd|jdy#1swYxYw)Nrzif 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             time.sleep(30)
                             rArrr)rrErXrYrFrCr
rrrZr*r')r%rr:rLrrDrs       rrz"Win32ProcessTestCase._kill_process
scnnd5!"$.??$.OO$.OO
5	"
HHMM!GAv%

IAvVS)J	"	
J*	"	"s
A CCctjtjddgtjtjtj}|5|j
j
dtjdt||||j\}}|j|d|j}ddd|jdy#1swYxYw)Nrzif 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             sys.exit(42)
                             rArrr)
rrErXrYrFrCr
r,r-rrrZr*)r%rr:rLrrDr\s       rrz'Win32ProcessTestCase._kill_dead_process
scnnd5!"$.??$.OO$.OO
5
	
HHMM!JJqMGAv%

IAvVS)B
		
R 
	
	s
A5C''C0cD|jdtjyr)rrurr$s rrz%Win32ProcessTestCase.test_send_signals=&..9rc&|jdyrrr$s rrzWin32ProcessTestCase.test_kills6"rc&|jdyrrMr$s rrz#Win32ProcessTestCase.test_terminates;'rcD|jdtjyr)rrurr$s rrz*Win32ProcessTestCase.test_send_signal_deads
v~~>rc&|jdyrrr$s rrz#Win32ProcessTestCase.test_kill_deads'rc&|jdyrrr$s rrz(Win32ProcessTestCase.test_terminate_deads,rN)r1r2r3rrr&r*rrrr3rr7r;r=rrrGrrrrrrrrrr4rrrr#
s
11 O6:0
<<!0.d1188
@!+*!.:#(?(-rrceZdZGddejZejjejddZ	dZ
dZdZdZ
d	Zy
)	MiscTestsc&eZdZdZgZfdZxZS)MiscTests.RecordingPopenz<A Popen that saves a reference to each instance for testing.cZt||i||jj|yr")rrinstances_createdr)r%r:r;rbs   rrz!MiscTests.RecordingPopen.__init__'s)Gd-f-""))$/r)r1r2r3r=rWrrrs@rRecordingPopenrU#sJ	0	0rrX_communicatecHt|_	tjj	t
jd5}t|_tjj	t
d|j5|jt5|tjddgfdt
ji|dddddd|jddD]6}|j|tjdd	|j8g}|jD]-}|tjd
k(s|j|/|j!|j"d|j|j%t'|d|jddd|jj(j+}|j-|j/|j%g|jj(y#1swYZxYw#1swY_xYw#1swYxYw#|jj(j+}|j-|j/|j%g|jj(wxYw)
aFake a SIGINT happening during Popen._communicate() and ._wait().

        This avoids the need to actually try and get test environments to send
        and receive signals reliably across platforms.  The net effect of a ^C
        happening during a blocking subprocess execution which we want to clean
        up from is a KeyboardInterrupt coming out of communicate() or wait().
        _waitrErzLimport time
time.sleep(9)
import sys
sys.stderr.write('\n!runaway child!\n')rCNrraz.no open-ended wait() after the first allowed: g?rgrA)KeyboardInterruptrrrcrdrrErXrcrXrYr_rr'rWrassertLessEqual
call_countrZrrWrrpr*)r%popenermock__communicater;
mock__waitrWsigint_callsrys        r_test_keyboardinterrupt_no_killz)MiscTests._test_keyboardinterrupt_no_kill+sY):%	H"":#3#3W=
@*;
&ZZ&&z7'+':':<E**+<=E"M!NE(2'9'9E>DEEE'55ab9<D'' $))D"9L)889;<<
 "&552Dtyy66$++D12$$Z%:%:A)3)B)B%D  \!2A%/%>%>!@-
@4));;??AGLLNLLNR!4!4!F!FG/EEEE	
@
@4));;??AGLLNLLNR!4!4!F!FGs[.H5;H)6H+H7H?A:H):A"H)H5HHH&	!H))H2.H55A,J!cF|jtjdyNgT㥛 @ra)rcrrWr$s r#test_call_keyboardinterrupt_no_killz-MiscTests.test_call_keyboardinterrupt_no_killWs,,Z__e,LrcF|jtjdyre)rcrrr$s r"test_run_keyboardinterrupt_no_killz,MiscTests.test_run_keyboardinterrupt_no_killZs,,Z^^U,Krc,d}|j|y)NcRtj|i|5}t#1swYyxYwr")rrEr\)r:r;unused_processs   rpopen_via_context_managerz[MiscTests.test_context_manager_keyboardinterrupt_no_kill.<locals>.popen_via_context_manager^s-!!4262
(n''
(
(s&)rc)r%rls  r.test_context_manager_keyboardinterrupt_no_killz8MiscTests.test_context_manager_keyboardinterrupt_no_kill]s	(	
,,-FGrc|jtjdd|jtjddd}	t	j
}tjj|d}tjtrdnd|z\}}|j|d|t
j|yy#|t
j|wwxYw)Nz
echo xyzzyxyzzy)rrorztype zcat r)rZr	getoutputgetstatusoutputrrrrrr(r'rmdir)r%dirrrr|s     rtest_getoutputzMiscTests.test_getoutputcs--l;WE33LA%	'	""$C77<<U+D'77%6T9;NFF*
s
s
A)CC*cFhd}ttj}t}ddl}tjjD]@\}}|j
drt||jfr0|j|B|j|||z
y)z*Ensure that __all__ is populated properly.>rrIrlHandlerrNr)ror__all__r__dict__itemsrrL
ModuleTyperrZ)r%intentionally_excludedexportedpossible_exportsrrrYs       rtest__all__zMiscTests.test__all__vs!Rz))*5%..446	'KD%s#%%"2"2!45  &	'	
#36L#LMrN)r1r2r3rrErXrrcrdrcrfrhrmrtr~r4rrrSrS!s_0))0
ZZz''8)H9)HVMLH&NrrSPollSelectorz!Test needs selectors.PollSelectorceZdZdZdZy)ProcessTestCaseNoPollctj|_tjt_t
j
|yr")r_PopenSelector
orig_selector	selectorsSelectSelectorr?r&r$s rr&zProcessTestCaseNoPoll.setUps,'66$-$<$<
!d#rcX|jt_tj	|yr")rrrr?r/r$s rr/zProcessTestCaseNoPoll.tearDowns$($6$6
!  &rNr0r4rrrrs$
'rrzWindows-specific testscFeZdZfdZfdZdZdZdZdZdZ	xZ
S)CommandsWithSpacesct|tjdd\}}|j	|_t
j|dt
j|y)Nz.pyzte stsVimport sys;sys.stdout.write('%d %s' % (len(sys.argv), [a.lower () for a in sys.argv])))	rr&rrLrrrrrJ)r%r@rrbs   rr&zCommandsWithSpaces.setUpsP

##E735[[^

c	
	rc`tj|jt|yr")rrMrrr/rs rr/zCommandsWithSpaces.tearDowns
		$**
rctj|d<tj|i|}|5|j|jjj
dd|jzdddy#1swYyxYw)NrCmbcsz2 [%r, 'ab cd'])rrFrErZrCr
rr)r%r:r;rLs    rwith_spaceszCommandsWithSpaces.with_spacessp%??xd-f-
	hhmm%%f-$**,
			sAA;;Bc	n|jdtjd|jddddy)N"" "ab cdrr_rrXrYrr$s rtest_shell_string_with_spacesz0CommandsWithSpaces.test_shell_string_with_spacess-S^^TZZ-46=>		@rc`|jtj|jdgdy)Nrrr_rr$s rtest_shell_sequence_with_spacesz2CommandsWithSpaces.test_shell_sequence_with_spacess$#..$**g>aHrc	j|jdtjd|jdddy)Nrrrrr$s rtest_noshell_string_with_spacesz2CommandsWithSpaces.test_noshell_string_with_spacess$S^^TZZ$&	'rc\|jtj|jdgy)Nrrr$s r!test_noshell_sequence_with_spacesz4CommandsWithSpaces.test_noshell_sequence_with_spacess#..$**g>?r)r1r2r3r&r/rrrrrrrs@rrrs)@
I'
@rrc*eZdZdZdZdZdZdZy)ContextManagerTestsctjtjddgtjtj5}|j|jjd|j|jjdddd|jjj|j|jjy#1swYTxYw)NrzAimport sys;sys.stdout.write('stdout');sys.stderr.write('stderr');rsstdoutsstderr)rrErXrYrFrZrCr
rDrrr	s  r	test_pipezContextManagerTests.test_pipes


s~~t =>&0__%/__6	<
:>T[[--/;T[[--/;	<	
**+**+	<	<s
AC..C7ctjtjddg5}	ddd|j	j
dy#1swY&xYw)Nrzimport sys; sys.exit(100)d)rrErXrYrZrr	s  rrz#ContextManagerTests.test_returncodesQ


s~~t:<=	@D		
#.			sAActjtjddgtj5}|jd|j
|jddddy#1swYyxYw)Nrz2import sys;sys.exit(sys.stdin.read() == 'context')rscontextrrSr	s  rrz*ContextManagerTests.test_communicate_stdinsi


s~~tHI$.??4	18<Z(T__a0	1	1	1s.A..A7c|jt5tjttj
tj
5}	ddddddy#1swYxYw#1swYyxYw)Nr)rcrrrErrFr	s  rrz%ContextManagerTests.test_invalid_argssd


1
2	!!/)3)3:
=A
		

		s#9A.A"A."A+	'A..A7ctjttjtj
dz}|j
}|jjdtj
z|j|j|jt|jddd|j|jd|j|jj y)z9Broken pipe error should not prevent wait() (Issue 21619)rg)rBrOrWNr)rrErrFrr	__enter__rBrrrrcr__exit__rZrrr	s  rtest_broken_pipe_cleanupz,ContextManagerTests.test_broken_pipe_cleanups&0oo(/(=(=a(?A~~	

 5 556$//*'4==$dC!,

))*rN)r1r2r3rrrrrr4rrrrs,/1+rr__main__)HrnrrTrtest.supportrrrrtest.support.script_helperr	rrXrurHrIrrrr,rrrrrrr1rrrmr`test.support.os_helperr
rr%rIrrlPGOrohas_subprocess_supportrr(rrrNotADirectoryErrorr1rrYrrTestCaser 	Exceptionr6rEr8r?rrrrrrrSrrrrr1mainr4rr<module>rs(&"(7

		

	+;;
(

9
::%%
(

=
>>
\\W
$	
@II)');_M>>40( 8$$ &		>j..>pIlpIf-BOlBOJ	c23gP<gP4gPT1Y 89{-<{-:{-zaN!!aNHWY78:'O':'Y 89(@,(@:(@V3+,3+lzHMMOgvI

C
C
EsBHH#H1H?H H #H.-H.1H<;H<?I