python (3.12.0)

(root)/
lib/
python3.12/
test/
__pycache__/
test_subprocess.cpython-312.opt-2.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)r1r2r3r4rrr6r6hsrr6ceZdZ	dZy)PopenExecuteChildRaisesctd)NzForced Exception for Test)r6)r%argskwargss   r_execute_childz&PopenExecuteChildRaises._execute_childps !<==rN)r1r2r3r<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)rPopenrPIPEassertIsInstancerAioBufferedIOBaserBrCcloser*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)rArBrCbufsize)rrDrrErFrArG	RawIOBaserBrCrIr*rJs  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)assertRaisesrTimeoutExpiredrVrWrXr$s rtest_call_timeoutz!ProcessTestCase.test_call_timeouts7
	
*33Z__>>41CD"%		'rcZtjt}|j|dyNr)r
check_callrrYrZs  rtest_check_call_zeroz$ProcessTestCase.test_check_call_zeros"

"
"?
3Qrc|jtj5}tjtj
ddgddd|j
jjdy#1swY0xYwrR)	rbrCalledProcessErrorrgrWrXrY	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 overriddenrBz1check argument not allowed, it will be overriddenFcheck)rcheck_outputrWrXassertInassertRaisesRegex
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))	rbrrjrvrWrXrYrkrrls  rtest_check_output_nonzeroz)ProcessTestCase.test_check_output_nonzerosk


z<<
=	G##^^T+DE
G	G	
//3	G	Groctjtjddgtj}|jd|y)Nr$import sys; sys.stderr.write('BDFL')rCrr)rrvrWrXSTDOUTrwrzs  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())rAPEAR)tempfile
TemporaryFile
addCleanuprIwriteseekrrvrWrXrw)r%tfr{s   rtest_check_output_stdin_argz+ProcessTestCase.test_check_output_stdin_argsl

#
#
%!


((IK	


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


gv&rcz	tjtjddgd}|j	d|y)Nr3import sys; print('XX' if sys.stdin.read() else '')rsXXrrvrWrXassertNotInrzs  rtest_check_output_input_nonez,ProcessTestCase.test_check_output_input_nones<J((FH	
'rcztjtjddgdd}|j	d|y)NrrT)rtextXXrrzs  r!test_check_output_input_none_textz1ProcessTestCase.test_check_output_input_none_texts;((FH'	
v&rcztjtjddgdd}|j	d|y)NrrT)runiversal_newlinesrrrzs  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)rencodingerrorsfoorrzs  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')rsz-Expected ValueError when stdout arg supplied.rBr)rbryrrvrWrXrBfailrwrkr:r%rmr{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)
NrrrrharerAr7Expected ValueError when stdin and input args supplied.rAr)rrrrIrrrbryrrvrWrXrrwrkr:r%rrmr{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)r`zExpected TimeoutExpired.rr)
rbrrcrvrWrXrrYrkr{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)renvironcopyrrVrWrXrY)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_stderrrb	TypeErrorrrD__init____code__co_argcountrYgetvalue)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")rBrC)rrDrWrXrErrBrIrCr*rYrArJs  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
rrDrWrXrErrBrIrCcommunicaterYrrstripr%coderKouterrs     rtest_stdout_nonez ProcessTestCase.test_stdout_none=s5
cnndD9$.OOJOO
M''==?Sq#.':;rcztjtjddgtjtj}|j|jj|j|jj|j|j|jdy)NrrrArB)rrDrWrXrErrBrIrAr*rYrCrJs  rtest_stderr_nonez ProcessTestCase.test_stderr_noneTsscnnd4EF)z
H'

&	4(rc|dgz}tj|fi|}|j|jd|jyNrSrT)rrDr*rYr)r%pre_argsr;r:rKs     r_assert_pythonzProcessTestCase._assert_python]sD566T,V,	Q\\*rctjjtjjtj
d}|j
|dgtj
yNdoesnotexistrrX)rpathjoindirnamerWrXrr%rs  rtest_executablezProcessTestCase.test_executableesHww||BGGOOCNN$C$24\40S^^Lrctjjtjjtj
d}|j
|dgtjtj
yr)rrrrrWrXrfsencoders  rtest_bytes_executablez%ProcessTestCase.test_bytes_executablepsUww||BGGOOCNN$C$24\40'){{3>>'B		Drctjjtjjtj
d}|j
|dgttj
yr)rrrrrWrXrr
rs  rtest_pathlike_executablez(ProcessTestCase.test_pathlike_executablevsQww||BGGOOCNN$C$24\40'/'?		Arctjdg}|j||jt|j|t
dy)Nrrr)rWrXrrbNONEXISTING_ERRORSNONEXISTING_CMD)r%rs  r test_executable_takes_precedencez0ProcessTestCase.test_executable_takes_precedence|sINND)H%,--x%4Q%7		9rz"executable argument replaces shellcH|jgtjdyNT)rXshell)rrWrXr$s rtest_executable_replaces_shellz.ProcessTestCase.test_executable_replaces_shells	
B3>>Frcn|jgtjtjdyr)rrrrWrXr$s r$test_bytes_executable_replaces_shellz4ProcessTestCase.test_bytes_executable_replaces_shells)B2;;s~~+F"&		(rcZ|jgttjdyr)rr
rWrXr$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")rrrealpathrWrXsplit)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)rBrT)rrDrErrBrIr*rYrrrnormcasereaddecode)r%expected_cwd
python_argr;rKrs      r_assert_cwdzProcessTestCase._assert_cwds
j$-.
(&0__

(!'
(	
'	Q\\*77##,/!!((--/"8"8":;	=rctj}|j|}|j|tj
|yNr)r
gettempdirrr
rWrXr%temp_dirs  rtest_cwdzProcessTestCase.test_cwds9&&(&&x03>>x@rctj}|j|}|j|tj
t
j|yr)rrrr
rWrXrrrs  rtest_cwd_with_bytesz#ProcessTestCase.test_cwd_with_bytessB&&(&&x03>>r{{87LMrctj}|j|}|j|tj
t
|yr)rrrr
rWrXr
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_cwdrbFileNotFoundErrorrrDrr
)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)NsomethingyoudonthaverrXrr)r%rrr 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)
rrrrrrrrbrrrDrr
)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%)rrr
rWrX)r%rrs   rtest_executable_with_cwdz(ProcessTestCase.test_executable_with_cwdsI#'"9"9";
K((4
%;$'NN
		Drz#need an installed Python. See #7774cl|jtjdtjy)Nr$r)r
rrrWrXr$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)rrDrWrXrErArrIr*rYrrJs  rtest_stdin_pipezProcessTestCase.test_stdin_pipesfcnndKM(oo
/	


g	

	q)rctj}|j|j|j	}tj|dtj|ddtjtjddg|}|j|j|jdyNrrrr0rr)rrrrIfilenorrlseekrrDrWrXr*rYrr%rdrKs    rtest_stdin_filedesz"ProcessTestCase.test_stdin_filedess

#
#
%!IIK
G
AqcnndKM 
"	
q)rcNtj}|j|j|j	d|jdt
jtjddg|}|j|j|jdyr3)
rrrrIrrrrDrWrXr*rYrr%rrKs   rtest_stdin_fileobjz"ProcessTestCase.test_stdin_fileobj"sz

#
#
%!


cnndKM!
#	
q)rctjtjddgtj}|5|j|jjddddy#1swYyxYw)Nr&import sys; sys.stdout.write("orange")rsorangerrDrWrXrErYrBr	rJs  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=rsrr>rrrrIr4rrDrWrXr*rr5rYr	r6s    rtest_stdout_filedesz#ProcessTestCase.test_stdout_filedes6s

#
#
%!IIKcnndBD !
#	

AqD)95rc4tj}|j|jt	j
tjddg|}|j|jd|j|jdy)Nrr=rsrr>rrrrIrrDrWrXr*rrYr	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)rrDrWrXrErYrCr	rJs  rtest_stderr_pipez ProcessTestCase.test_stderr_pipeMs^cnndFH *
1	=QXX]]_m<	=	=	=rAcltj}|j|j|j	}tjtjddg|}|jtj|dd|jtj|ddy)NrrJrrrCrKrDr6s    rtest_stderr_filedesz#ProcessTestCase.test_stderr_filedesUs

#
#
%!IIKcnndFH !
#	

AqD)=9rc4tj}|j|jt	j
tjddg|}|j|jd|j|jdy)NrrJrrrKrGr: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)rs42rrrrDrWrXrErrYrr%rKrBrCs    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)	rrDrWrXrErrYrBr	rJs  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)NrrVrrrWrGr: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)rs)rrDrWrXDEVNULLr*rYrBrJs  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)rrDrWrXr^r*rYrCrJs  rtest_stderr_devnullz#ProcessTestCase.test_stderr_devnullsNcnnd=>&0%7%7	
9
	
4(rctjtjddgtj}|j|j
|jdy)Nrzimport sys;sys.stdin.read(1)r)rrDrWrXr^r*rYrArJs  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!")rArBrCpipesizer)rpipefcntlrdrIrget_pagesizeunittestSkipTestrrDrWrXrErArBrCrYr4rkillr*)r%test_pipe_rtest_pipe_wpipesize_defaultripagesize_defaultrKfifos        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)Nrrgrh)rrDrWrXrErrjrkrdrArBrCrYr4rIror*)r%rKfp_rfp_wdefault_pipesizerts      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"))rBrr>)
rrrrrDrWrXrErrYr%rrKrBrCs     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.c	d}tjtjddgtji5}|j\}}t
|j}|j|t|Dcgc]}||s|}}|j|gdddycc}w#1swYyxYw)NcZ	d|vxs%d|vxs|dk(xs|jdxs|dk(S)N	VERSIONER__CF
LD_PRELOADSANDBOXLC_CTYPE)
startswith)ns ris_env_var_to_ignorez<ProcessTestCase.test_empty_env.<locals>.is_env_var_to_ignore!sIL 1$$!$%$)*i)@$O
%rrz)import os; print(list(os.environ.keys()))r)rrDrWrXrErevalstriprFlistrY)r%rrKrBrCchild_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	2sAB6B1B61B66B?cNtjdz}|jt5t	j
|ddgddd|jt5t	j
tjddgdddy#1swYNxYw#1swYyxYw)Nrrzpass#)rWrXrbryrrD)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)
rrrrbryrrDrrWrXrErrYrs     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")rrrrRrJs  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")rs	pineapplerrDrWrXrErrYrSs    rtest_communicate_stdoutz'ProcessTestCase.test_communicate_stdoutds\cnndIK$.OO
5==?.&rctjtjddgtj}|j\}}|j
|d|j
|dy)Nrz)import sys; sys.stderr.write("pineapple")rrrrSs    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())r@bananar)rrDrWrXrErrBrIrCrArrYrSs    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)rrArBrCrg333333?r`spineapple
pear
)
rrDrWrXrErbrcrrYencoderSs    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));rsg?r`i)
rrDrWrXrErbrcrrYlen)r%rKrB_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)NFTrArBrC)
rrErDrrrA
assertTrueclosedrBrC)r%
stdin_pipestdout_pipestderr_pipeoptionsrKs      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)NrrS)rrDrWrXrrYrSs    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())r@a)rrjrIrrDrWrXr
PIPE_MAX_SIZErErrBrCrArrY)r%xyrKstring_to_writerBrCs       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())r@rssplitsbananasplitr)
rrDrWrXrErrBrIrCrArrrYrSs    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");)rrrArBTzline1
zline3
zline2
zline4
line5
line6
line7
line8)rWrX	SETBINARYrrDrErArflushrYrBreadlinerIrr	)r%r:extra_kwargrKs    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)rCrBrz#line2
line4
line5
line6
line7
line8)rrDrWrXrrErrBrIrCrrYrSs    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)rArline1
line3
r)rrDrWrXrtextwrapdedentrErrYrrSs    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)rArBrr)rrDrrErrYrrJs  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)rArCrBrrrzline1
line2
line3
line4
line5
zeline2
eline6
eline7
)rrDrWrXrrrrErrBrIrCrrYrrrrSs    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)rArBrrrz1
2
3
4)rWrXrrDrErrY)r%rrr:popenrBrCs       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)rArBrrrrz[{}])rWrXrrDrErrYformat)r%rexpectedrr:rrBrCs        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())r@slimer)r(rmkdtemprangerrrrTESTFNappendopenO_WRONLYO_CREATOSErrorerrnoEMFILEskipTestrIpoprrDrWrXrErrYrrmtree)
r%max_handleshandlestmpdiritmpfileerKdatahs
          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 cr7rz"a b c" d e)ab"c\r7z	ab\"c \ d)rz \r7z
ab\"c " \\" d)za\\\bzde fgrza\\\b "de fg" h)za\"brmr7z
a\\\"b c d)za\\b cr7rz"a\\b c" d e)za\\b\ cr7rz
"a\\b\ c" d eabrzab "")rYr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)rrDrWrXrErrArIassertIsNonepollrrr4r*rYrJs  r	test_pollzProcessTestCase.test_pollscnnd8:#-??
4	


&!&&(#
!4(	1%rctjt}|j|j	d|j|j	dyrfrrDrrYr*rJs  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?r`z0.0001r)
rrDrWrXrbrcr*rwstrrkrYr
SHORT_TIMEOUT)r%rKrms   rtest_wait_timeoutz!ProcessTestCase.test_wait_timeoutscnn"$BD
E


z88
9	#Q
FF6F"	#

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

y
)	8_h7	8	8	8s	:Actjtd}|j|j	dtjtd}|j|j	dy)Nr)rNrrJs  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)rArBrCrNrr)rrDrWrXrEr^rArrrIr4rBrrSuppressCrashReportrrYr)r%linerrrK	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)NrCr)rrbrrrDrrE)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)rCrrr)msvcrtCrtSetReportModeAttributeErrorImportErrorrrrrrWrXrrDrErrYr)r%r!rrprocrCs      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?)rextendrrjtimesleep)rfdss ropen_fdsz<ProcessTestCase.test_double_close_on_error.<locals>.open_fdsIs42Y
"

2779%

5!
"r)targetr@)
	threadingThreadstartrbEnvironmentErrorrrDrrErrrIr)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	dd|fd
|fgy)Nrzimport time; time.sleep(12)cjdjfjjjdjfjjdjfy)Nthread-start-poll-resultthread-after-kill-and-waitthread-after-second-wait)rrror*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皙?rir`z*unexpected result in wait from main threadmsgz&unexpected result in second main wait.)r:Nr;r<)rrDrWrXrYrr0Timerr2r(r*rr	r)r%r>r4expected_errorcoder%r=s    @@rtest_threadsafe_waitz$ProcessTestCase.test_threadsafe_waitcsM!>!@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!)rrrvrWrXrrascii)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*r@)rmkstemprrDrrrIremover,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)Nr@x)
rrDrrErrBrIrCrArrJs  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...>rZFz&<Popen: returncode: None args: ['ls']>)rZz	--my-optsr\zP<Popen: returncode: None args: ['ls', '--my-opts', 'aaaaaaaaaaaaaaaaaaaaaaaa...>z<Popen: returncode: 7 args: z('my-tool.py')>r<r)
pathlibPath	__class__r1rmrpatchobjectrrDrrYrepr)	r%path_cmdpathlib_clscasesrrrsxrKs	         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)NrrVrW)	rrDrrErrArIr*rrJs  r!test_communicate_epipe_only_stdinz1ProcessTestCase.test_communicate_epipe_only_stdinsH_#-??
4

&		

dUl#rSIGUSR1zRequires signal.SIGUSR1rozRequires 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)	signalrlrrWrXrrErDr)r%rrold_handlerr:streamkwprocesss       rtest_communicate_eintrz&ProcessTestCase.test_communicate_eintrs	mmFNNG<

v~~{C89+	&F*//*B!!$-"-
&##%
&
&	&
&
&sB33B<	/proc/%d/fdzLinux specificcz	dtjz}tj|}|jt5tttjtjtjdddtj|}|j||y#1swY1xYw)Nrzr@)
rgetpidlistdirrbr6r8rrrErY)r%fd_directoryfds_before_popenfds_after_exceptions    r!test_failed_child_execute_fd_leakz1ProcessTestCase.test_failed_child_execute_fd_leaks	J$ryy{2::l3


1
2	D##:??%??:??
D	D!jj6)+>?	D	Ds>B11B:z+behavior currently not supported on Windowsc|jt5}tjgdddd|j	j
jdy#1swY0xYw)N)/opt/nonexistent_binarywithsomer:r)rbrrrVrYrkfilenamerls  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)rbrrrDrYrkrrls  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")rFrrDbytestypesGenericAliasCompletedProcessrr$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 argsrrrw
_USE_VFORKF)rrrRuntimeErrorside_effectrbrrWrXassert_called_once	call_argsr:rrbrcr,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)r1r2r3rLrPr\rdrhrnr|rrrrrrrrrrrrequires_resourcerrrrrrrrrrrrmskipIfr(rrrrrr
rrrr"r'r*rWbase_prefixprefixr,	sysconfigis_python_buildr.r1r8r;r@rErHrLrNrPrTrXrZr\r_rarc
skipUnlessrkhasattrrur{rplatformget_config_varrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrr&r7rDrHrTrXrirkrtrryrisdirr|rrrrrrbrr4rrr>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)RunFuncTestCasecV	tjd|g}tj|fi|S)NrrWrXrr)r%rr;argvs    r
run_pythonzRunFuncTestCase.run_python(s)Bd+~~d-f--rc|jd}|j|jd|jtj
5|j
dddy#1swYyxYwr)rrYrrbrrjcheck_returncoder%cps  rtest_returncodezRunFuncTestCase.test_returncode-sZ
__7
8+


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


z<<
=	DOO6dOC	D//4	D	DsA##A,crtjtd}|j|jdy)NTrtr)rrrrYrrs  rtest_check_zerozRunFuncTestCase.test_check_zero9s&
^^O4
8*rc|jtj5|jdddddy#1swYyxYw)Nr^rr`)rbrrcrr$s rtest_timeoutzRunFuncTestCase.test_timeout>sB


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

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

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

#
#
%!



__I2	


gryy)rc|jddtj}|jd|jy)Nrr)rrBrrrs  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)
Nrrrr@rrrrAr)rrrrIrrrbryrrwrkr: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)rarBrr)	rbrrcrrErYrkr{rB)r%rmrs   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!)rrrrrYr)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.comrZz required for this testrsrT)rBr)r(rrrr
rrr^rYrrbr)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)rrrWrXrrrYrr%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
rWrXrrrYrrs    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_outputrrsFLUFL)rrwrBrCrs  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.r@rT)rrBrBrr
rrrrIrbryrrwrkr: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.r@rT)rrCrCrrrrs    r#test_stderr_with_capture_output_argz3RunFuncTestCase.test_stderr_with_capture_output_argrrz)requires posix like 'sleep' shell commandcJ	tj}	tjdddd|j	d|j|z
ddd	y#tj
$r2}tj}t
j}Yd}~\d}~wwxYw)
Nzsleep 3Tr_)rrarzTimeoutExpired not raised.g?z/TimeoutExpired was delayed! Bad traceback:
```
z```r@)	r+	monotonicrrrrc	traceback
format_exc
assertLess)r%before_secsr5
after_secsstackss     r.test_run_with_shell_timeout_and_capture_outputz>RunFuncTestCase.test_run_with_shell_timeout_and_capture_outputsXnn&	4NN9D#*.
0
II23
[0#O!(#'		(((	,)J))+F	,sAB"0(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_encodingrTrrfrs<string>:2: EncodingWarning: rs<string>:3: EncodingWarning: )rrrrrWrXrC
splitlinesrYrrr)r%rrliness    rtest_encoding_warningz%RunFuncTestCase.test_encoding_warnings 
^^S^^-FdS+/1		$$&UQ.a++,LMNa++,LMNrN)r1r2r3rrrrrrrrrrrrrrrrrrmrr(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.)rgetgrnamKeyErrorrmrn)
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%ras 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)NrrrExpected OSError: %srrrDrWrXrrrrYrstrerrorrr%rrKrs    rtest_exception_cwdz'POSIXProcessTestCase.test_exception_cwdsI 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)Nrrrrrrs    rtest_exception_bad_executablez2POSIXProcessTestCase.test_exception_bad_executablesP 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)Nrrr)
rrrDrrrrYrrrrs    rtest_exception_bad_args_0z.POSIXProcessTestCase.test_exception_bad_args_0*sM 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__@rsrN)r1r2r3rr4rrPopenNoDestructorr	?s	rrrc	d}||_tjdt5|j	t
5|j
dgddddddy#1swYxYw#1swYyxYw)Nc|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_command)rrrbChildProcessErrorrbIsADirectoryErrorr)r%	fork_execrs   rtest_exception_errpipe_normalz2POSIXProcessTestCase.test_exception_errpipe_normalCsL	!-	
ZZ/$57	A""#45
A&&(>'?@
A	A	A
A
A	A	As"A-A!A-!A*	&A--A6cl	dfd}||_tjdt5|j	t
j5}|jdgdddddd|jttjy#1swY@xYw#1swYDxYw)Nsޭc<|d}tj|y)Nrr)rr)r:r
error_datas  r	bad_errorzGPOSIXProcessTestCase.test_exception_errpipe_bad_data.<locals>.bad_errorYs HM
HH]J/rrrr)rrrbrrbrSubprocessErrorrrwrdrrk)r%rrrrs    @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**B3/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.r@)rrvrrrassertNotEqual)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)rrvrWrXrgetsidintr&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)rrvrWrXrr7r/r&r0rr1)r%r{parent_pgid
child_pgidrs     rtest_process_group_0z)POSIXProcessTestCase.test_process_group_0s{
	9,,^^T+LM"#%F**Q-KVJZ8
	ww%++%&	r5setreuidzno 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())rwrC)rrrC)rgeteuidrWrpwdgetpwnamrrsubTestrrvrX
isinstancerpw_uidr/rYr0rrEACCESr1rbryrgr
OverflowErrorrr)
r%uid
test_usersname_uidrCrDr{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)NrErbryrrgrr$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?r@r)grouprDrzimport os; print(os.getgid())rwr\rF)rrr\)rgetegidrrrrJrrvrWrXrKrrgr_gidr/rYr0rbryrgrrNrr)	r%gid
group_listrr\rDr{	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)NrVr]rWr$s rtest_group_errorz%POSIXProcessTestCase.test_group_errors9


z
*	@!!/?	@	@	@rY	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?r@Frz;import os, sys, json; json.dump(os.getgroups(), sys.stdout)extra_groupsTrwrF)rrrj)rr^rrrrrvrWrX	getgroupsjsonloadsrKrrr_rYsetrrr1rbryrgrrr)r%r`rar
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)NrirWr$s rtest_extra_groups_errorz,POSIXProcessTestCase.test_extra_groups_error=s9


z
*	D!!/C	D	D	DrYumaskzPOSIX 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()+)rxiiz != r@)rrrrrrrgrWrXstatst_moderYoctrr)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())rrrrDrWrXr*rYrrtSIGABRTrJs  rtest_run_abortz#POSIXProcessTestCase.test_run_abortXsh

(
(
*	  #..$"9";<A
FFH		
!,,7			s7BB	c,tjttjd}t|}|j
d|j|j
d||j
ttj|y)Nfake cmdrtSIG)rrjr/rtrrrwlowerr%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.rrjrrwrs   r*test_CalledProcessError_str_unknown_signalz?POSIXProcessTestCase.test_CalledProcessError_str_unknown_signalks,++HjA3x

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

/>rctjtjddgtjd}|5|j|jjddddy#1swYyxYw)Nrr~c.tjddS)Nrapple)rputenvr4rr<lambda>z3POSIXProcessTestCase.test_preexec.<locals>.<lambda>|s		'70Kr)rB
preexec_fnappler?rJs  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?ryr4rrraise_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)rrDrWrXrr r
_fork_execryrwr:)r%rrKrs    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,ceZdZ	dZdZy)+POSIXProcessTestCase._TestExecuteChildPopencX||_tjj|g|i|yr")	_testcaserrDr)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.r@)rrDr<rrrO_RDONLYrrrAr4rBrCrI)r%r:r;rdevzero_fdsr6s      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)r1r2r3rr<r4rr_TestExecuteChildPopenrsA	=	%rrrz/dev/zero required.c		d}|jtj5|j|ttj
tj
tj
|dddy#1swYyxYw)Nc,tjd)Nz-force the _execute_child() errpipe_data path.)rr r4rrrzWPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes.<locals>.raise_its,,CE
Er)rArBrCr)rbrr rrrE)r%rs  r0test_preexec_errpipe_does_not_double_close_pipeszEPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipessiD	E

z99
:	E''o(oojoo)8
(
E	E	E	EsAA33A<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,rrVrWrXenabler)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DD66ErAz!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$rrrrVrWrXBlockingIOError)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)'
irT)rrKrrr
unix_shellrWrXrchmodrrDr*rLrYr)r%r6fnamefobjrKs     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)NrrSrTstartupinfo
creationflagsrbryrrVrWrXr$s rrz&POSIXProcessTestCase.test_invalid_argssb*joo>>457&(		*	
*joo>>457(*		,rc:tjj}d|d<tjdgdtj
|}|5|j
|jjjdddddy#1swYyxYwNrrzecho $FRUITrrrBrs 	
r
rrrrrDrErYrBr	rr%rrKs   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)rrKrrrrrWrXrrrrVrLrY)r%r6rrr[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)rXrrBrG)rrrisfilerrislinkrrDrErYrBr	rr)r%shellsrrshrKs      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)
                                 TrDrArBrCr)rtSIGINTdefault_int_handlerrrDrWrXrErBr	getattr)r%methodr:rurKs     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)rrDrWrXrErBr	r+r,rr)r%rr:rKs    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)rrtrrrwr&r*r%rKrrCs    rtest_send_signalz%POSIXProcessTestCase.test_send_signal`	sL}fmm<MMO	6

*F3AFFHa(rc|jd}|j\}}|j|d|j|jtj
y)Nror)rrrYr*rtSIGKILLrs    r	test_killzPOSIXProcessTestCase.test_killf	sMv&MMO	6%FNN?3rc|jd}|j\}}|j|d|j|jtj
y)N	terminater)rrrYr*rtSIGTERMrs    rtest_terminatez#POSIXProcessTestCase.test_terminatel	sM{+MMO	6%FNN?3rcD|jdtjyNr)rrtrr$s rtest_send_signal_deadz*POSIXProcessTestCase.test_send_signal_deadr	s
v}}=rc&|jdyNrorr$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-r6inheritablesaveds      r	_save_fdszPOSIXProcessTestCase._save_fds~	sM	1B,,R0KFF2JEJJE;/0	1
rct|D]3\}}}tj|||tj|5y)N)r)rdup2rI)r%r-r6rrs     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)NrrrVr@rr>)r	rrIrrDrWrXrErrYr)	r%r-rA	saved_fdsr6rrrrs	         rcheck_close_std_fdsz(POSIXProcessTestCase.check_close_std_fds	sNN3'	&/	"B{Qw		)

!'';)<
#(oo(oo/0;{}
C
S(+S),i(Di(sBCC%c(|jdgyrfrr$s rtest_close_fd_0z$POSIXProcessTestCase.test_close_fd_0	  !%rc(|jdgyNrrr$s rtest_close_fd_1z$POSIXProcessTestCase.test_close_fd_1	rrc(|jdgy)Nrfrr$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)Nrrfrr$s rtest_close_fds_0_2z'POSIXProcessTestCase.test_close_fds_0_2	rrc*|jddgy)Nrrfrr$s rtest_close_fds_1_2z'POSIXProcessTestCase.test_close_fds_1_2	rrc*|jgdy)N)rrrfrr$s rtest_close_fds_0_1_2z)POSIXProcessTestCase.test_close_fds_0_1_2	s	
  +rcz	tjd}tjd}	tjdtjdtjt
jddgjtj|dtj|dtj|tj|y#tj|dtj|dtj|tj|wxYw)Nrrrz*print('AssertionError:0:CLOEXEC failure.'))	rrrIrrDrWrXr*r)r%	new_stdin
new_stdouts   rtest_small_errpipe_write_fdz0POSIXProcessTestCase.test_small_errpipe_write_fd	sKFF1I	VVAY
	!HHQKHHQK

NND@B
CCG46
GGIq!GGJ"HHYHHZ 
GGIq!GGJ"HHYHHZ s
AC""AD:ctdDcgc]}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")rfr@rC	got STDINerr)rrrKrunlinkrr5r		enumeraterrrDrWrXr*rr	rrYrI)r%rtempsr6rtemp_fdsrtemp_fdrKrrs           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(r@rCr)r*)rrrKrr+r	r,rrr5rrDrWrXr*r	rrrYrI)r%stdin_no	stdout_no	stderr_norr-r6rr.rr/rKrrs              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)Nrrrf)r5r$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)Nrr@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'))
            rrrCrGz"
                    When testing z to z4 redirection,
                    parent descriptor z5 got redirected
                    to descriptor(s) z instead of descriptor z.
                )r	rrrrrr4rnrrIziprrrrVrWrXrrYr5SEEK_SETr	rmapr/r
r)r%from_fdsto_fdsrfrom_fdffd_to_close	arg_namesr;to_fdr
skipped_fdr[
read_bytesread_fdsrAs                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)Nrrf)	itertoolscombinationsrpermutationsrF)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.SubprocessErrorrNz!Exception occurred in preexec_fn.)rrVrrryrrrYrr assertIsNotNone)r%rOrs   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)utest42rGrz&import os; print(ascii(os.getenv(%s)))CLC_ALLrrs

z'import os; print(ascii(os.getenvb(%s))))
rrdrrrrrvrWrXrrYr
rG)r%keyvalue
encoded_valuescriptr
decoded_valuerBs        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)rrrrrrrrVrYrrrrenvironb)	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)rArBrCrDrrBrD,zExpected no fds from z to be open in child, found )rfindfilerrDrWrXrErrrnr;r/rrAr4rBrCr,)	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.pyrgrhzqgrep.pyszxcvbn
F)rArBrDcF	jy#t$rYywxYwr"rProcessLookupError)rpsrkill_p1zBPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p1
#
%

	  cF	jy#t$rYywxYwr"rz)rqsrkill_p2zBPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p2
r}r~rzThe child hung)rrmrrDrWrXrErBrr*rArrIselectrrYr	)r%qcatqgrepsubdatarr|r	readfilesignored1ignored2rprqs          @@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)Nrjrgrhrr	TFrkrlzSome fds were closedzSome fds were left openzSubprocess failedc3>K|]}jywr")r).0rr.s  r	<genexpr>z6POSIXProcessTestCase.test_close_fds.<locals>.<genexpr>s;Q(,,.;srrBrDpass_fdsz'Some fds not in pass_fds were left open)rrmrrjrrIrnrrdevnullraddset_inheritablerrDrWrXrErr;r/rrYr,rw)r%ror-rr6rKr{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 FreeBSDcb	tjdd}tjtj
dt
jd|zgtj}|j\}}|j}|jt|dd|z	ttt|d
j!j#d}ttt|dj!j#d}|j%||zd
	y)NrjrgrhraK
        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))
        rsrfz(expected exactly two lines of output:
%rr@rrlrzSome fds were left open.)rrmrrDrWrXrrrErrrYrrnr;r/rrr,)r%rorKr{
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	J$$^<LM	
cnndHOO/	^_/	050`#-//a0
3d!"


((*\*AH6Q		SS,q/"7"7"9"?"?"EFG
C\!_%:%:%<%B%B4%HIJ
37		9rrr~c	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)Nrjrgrhr~rrTrrlzfd to be passed not passedzfd to be closed passedF)rDrzoverriding close_fds)rrmrnrrrjrrIrupdaterrDrWrXrErr;r/rrwr,assertWarnsrrVrrwarning)r%ror.rr-r6rKr{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)	NrjrgrhTFrrlz	output=%a)rrmrrjrrIrrWrXrr;rrrDrErrnr/rrYr)
r%rZrnon_inheritablerr:rKr{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<eDrcN	tjdd}g}tdD]e}tjtj
tj}|jtj||j|gtj\}}|jtj||jtj||jd|tjtj|g|d|d|dd|5tj |d	}dddj#d
Dchc]
}t%|}	}|j'|	hdt)|zd|y#1swYUxYwcc}w)
NrjrgrhrfrrT)rArBrCrDrrCrl>rrrfzoutput=)rrmrrrrO_RDWRrrIrrjinsertrrDrWrXr	rr/rY	frozenset)
r%rorrr6stdout_rstdout_wr{numr-s
          rtest_pass_fds_redirectedz-POSIXProcessTestCase.test_pass_fds_redirectedsNE$$^<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+)rBrArGrrrrrDrr*r%inoutrKs   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)rCrArrs   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.pyrgrhrrz6sigchild_ignore.py exited non-zero with this error:
%sr)rrmrrDrWrXrErrYrr
)r%sigchild_ignorerKrBrCs     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)rBrNrwsapplg)r
import_modulerrDrWrXrErBrrIrYr	rwrr*)r%rrKr?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)rrDrWrXrErrBrIrCidpidrcheck_warningsResourceWarningr(rr)rw)r%rKidentros     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)rrDrWrXrErrBrIrCrrrrrr
gc_collectrrortrr(rr)rwr+r,rbrrwaitpidr)r%rKrrrr%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)	NrjrgrhrTc0tjdSr)rr)r6srrzCPOSIXProcessTestCase.test_close_fds_after_preexec.<locals>.<lambda>Is2r)rBrDrrl)rrmrrrrIrrDrWrXrErrnr;r/rr)r%rorKr{rrr6s      @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[sexeenvsargTr4rwrrfrrwFz
takes exactly)_posixsubprocessrrrrbrrrrrkr)	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")rX)r%rXs  rrzSPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__init__~s	"
rcL|jrd|_|jSt)NF)firstrXryr$s r__int__zRPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__int__s ::!&DJ::%  rN)r1r2r3rrrr4rrBadIntr|sE
#
!rr)rwrfrrwr~)rrw)*l)r~rw)rr]r]rrrfzfds_to_keep={}r@sfalseTrrwrrwr)rrrrrbryrrrwrrkr)r%rrrrrms      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)NrA)rrDrrrbrcBrokenPipeErrorrIrrassert_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)NrAstuff)rrDrrrbrcrrrrassert_called_once_withrIrs   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-hrrAwbr)rrDrWrXrErrbrcrrrrrrr4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)NrrrAir`)
rrDrWrXrErrbrcrrIrrrrs   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_STOPCODEc\	t}tj|}tj|j
dt
jd}tjd|j
|f5|j}ddd|jdy#1swYxYw)Nrrcrr)r)rrrDrwait_processr	_testcapirrrbr*rY)r%r:r%statusrs     rtest_stoppedz!POSIXProcessTestCase.test_stoppeds	P%	TXX2%%a(
ZZ/txx>P
Q	%J	%	
R(	%	%s6B""B+ctjt}tj|j
d|j
|jtjd5}|jtjdddj|j|jy#1swY5xYw)Nrrzos.kill)rrDrrrrrrrrbrrtrassert_not_calledrP)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)
rrDrWrXrrrrbrcrrtrrorJs  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)rsr_r`)rrDrWrXrErrcr%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	rYrw)r%rrrrs     rtest_preexec_at_exitz)POSIXProcessTestCase.test_preexec_at_exit
sN../	'tT23c"

I3Or)pr1r2r3r&rrrrrrDrrrbrr!rmrrrrMr+r4rrr<rTrXrdrfrurwr(rrrrrrrrrrrWrrrrrrrrrrrrrrrrrr	rrrrrrrrr!r%r0r5r7rFrKrQr\rerurrr|st_devrrrequires_mac_verrrrrrrrrrrrcpython_onlyrrrrrrrrrrr	r
__classcell__ras@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)rSTARTUPINFOdwFlagswShowWindowrVr)r%STARTF_USESHOWWINDOWSW_MAXIMIZErs    rtest_startupinfoz%Win32ProcessTestCase.test_startupinfo&
s@ ! ,,.2"-	$/	1rcpd}d}tj||}tjt|y)Nrr)rrr)rrrVr)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)Nrfr)rBrCrrhandle_list)rrrrSW_HIDErrrrrrrDrrrYrr	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)rWrCrrrVrX)r%CREATE_NEW_CONSOLEs  rtest_creationflagsz'Win32ProcessTestCase.test_creationflags`
s8

CD=>&8	:rcv|jttjtj
ddgdy)NrrScyrr4r4rrrz8Win32ProcessTestCase.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
sDrr0r)dictrbrrrDr)r%r0s  rtest_issue31471z$Win32ProcessTestCase.test_issue31471o
sC	T	


y
)	<_&(;	<	<	<s!AAcxtjtjddgd}|j	|dy)NrrST)rDrTrUrZs  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))Frk)rBrCrDsOSErrorr)rBrCrrDz.*overriding close_fds)r!rrjrrIrr
get_osfhandlerrDrWrXrrErrYrr/rrwrr#rrr)
r%r!r-rr6rKrBrCrrs
          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#rVrr%rs  rtest_empty_attribute_listz.Win32ProcessTestCase.test_empty_attribute_list
s) ,,.&(#$/	1rcttj}dgi|_tjt|y)Nrrr8r9s  rtest_empty_handle_listz+Win32ProcessTestCase.test_empty_handle_list
s. ,,.'4b&9#$/	1rctjj}d|d<tjdgdtj
|}|5|j
d|jjdddy#1swYyxYwNphysalisrrnrrsphysalis	rrrrrDrErwrBr	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>r@rs   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?rrnr)rrBrrr@)r%encrrKs    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)"rTrUrZs  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)
                             r@rrr)rrDrWrXrErBr	rrrYr*r&)r%rr:rKrrCrs       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)
                             r@rrr)
rrDrWrXrErBr	r+r,rrrYr*)r%rr:rKrrCr[s       rrz'Win32ProcessTestCase._kill_dead_process
scnnd5!"$.??$.OO$.OO
5
	
HHMM!JJqMGAv%

IAvVS)B
		
R 
	
	s
A5C''C0cD|jdtjyr)rrtrr$s rrz%Win32ProcessTestCase.test_send_signals=&..9rc&|jdyrrr$s rrzWin32ProcessTestCase.test_kills6"rc&|jdyrrLr$s rrz#Win32ProcessTestCase.test_terminates;'rcD|jdtjyr)rrtrr$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)rrrr2rr6r:r<rrrFrrrrrrrrrr4rrrr#
s
11 O6:0
<<!0.d1188
@!+*!.:#(?(-rrceZdZGddejZejjejddZ	dZ
dZdZdZ
d	Zy
)	MiscTestsc$eZdZ	gZfdZxZS)MiscTests.RecordingPopencZt||i||jj|yr")rrinstances_createdr)r%r:r;ras   rrz!MiscTests.RecordingPopen.__init__'s)Gd-f-""))$/r)r1r2r3rVrrrs@rRecordingPopenrT#sJ	0	0rrW_communicatecJ	t|_	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|jddd|jj(j+}|j-|j/|j%g|jj(y#1swYZxYw#1swY_xYw#1swYxYw#|jj(j+}|j-|j/|j%g|jj(wxYw)N_waitrDrzLimport time
time.sleep(9)
import sys
sys.stderr.write('\n!runaway child!\n')rBrr`z.no open-ended wait() after the first allowed: g?rfr@)KeyboardInterruptrrrbrcrrDrWrbrWrXr^rr&rVrassertLessEqual
call_countrYrrVrror*)r%popenermock__communicater;
mock__waitrVsigint_callsrxs        r_test_keyboardinterrupt_no_killz)MiscTests._test_keyboardinterrupt_no_kill+s^	):%	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[.H6;H*7H
+H8HA:H*;A"H*H6HHH'	"H**H3/H66A,J"cF|jtjdyNgT㥛 @r`)rbrrVr$s r#test_call_keyboardinterrupt_no_killz-MiscTests.test_call_keyboardinterrupt_no_killWs,,Z__e,LrcF|jtjdyrd)rbrrr$s r"test_run_keyboardinterrupt_no_killz,MiscTests.test_run_keyboardinterrupt_no_killZs,,Z^^U,Krc,d}|j|y)NcRtj|i|5}t#1swYyxYwr")rrDr[)r:r;unused_processs   rpopen_via_context_managerz[MiscTests.test_context_manager_keyboardinterrupt_no_kill.<locals>.popen_via_context_manager^s-!!4262
(n''
(
(s&)rb)r%rks  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)rrnrztype zcat r)rYr	getoutputgetstatusoutputrrrrrr(r&rmdir)r%dirrrr{s     rtest_getoutputzMiscTests.test_getoutputcs--l;WE33LA%	'	""$C77<<U+D'77%6T9;NFF*
s
s
A)CC*cH	hd}ttj}t}ddl}tjjD]@\}}|j
drt||jfr0|j|B|j|||z
y)N>rrHrkHandlerrr)rnr__all__r__dict__itemsrrK
ModuleTyperrY)r%intentionally_excludedexportedpossible_exportsrrrXs       rtest__all__zMiscTests.test__all__vs8!Rz))*5%..446	'KD%s#%%"2"2!45  &	'	
#36L#LMrN)r1r2r3rrDrWrrbrcrbrergrlrsr}r4rrrRrR!s_0))0
ZZz''8)H9)HVMLH&NrrR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&rrKrrrrrI)r%r?rras   rr&zCommandsWithSpaces.setUpsP

##E735[[^

c	
	rc`tj|jt|yr")rrLrrr/rs rr/zCommandsWithSpaces.tearDowns
		$**
rctj|d<tj|i|}|5|j|jjj
dd|jzdddy#1swYyxYw)NrBmbcsz2 [%r, 'ab cd'])rrErDrYrBr	r
r)r%r:r;rKs    rwith_spaceszCommandsWithSpaces.with_spacessp%??xd-f-
	hhmm%%f-$**,
			sAA;;Bc	n|jdtjd|jddddy)N"" "ab cdrr^rrWrXrr$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)rrDrWrXrErYrBr	rCrrrs  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)rrDrWrXrYrrs  rrz#ContextManagerTests.test_returncodesQ


s~~t:<=	@D		
#.			sAActjtjddgtj5}|jd|j
|jddddy#1swYyxYw)Nrz2import sys;sys.exit(sys.stdin.read() == 'context')rscontextrrRrs  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)rbrrrDrrErs  rrz%ContextManagerTests.test_invalid_argssd


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

		s#9A.A"A."A+	'A..A7c	tjttjtj
dz}|j
}|jjdtj
z|j|j|jt|jddd|j|jd|j|jj y)Nrf)rArNrVr)rrDrrErr	__enter__rArrrrbr__exit__rYrrrs  rtest_broken_pipe_cleanupz,ContextManagerTests.test_broken_pipe_cleanupsG&0oo(/(=(=a(?A~~	

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

))*rN)r1r2r3rrrrrr4rrrrs,/1+rr__main__)HrmrrSrtest.supportrrrrtest.support.script_helperr	rrWrtrGrHrrrr+rrrrrrr0rrrlr_test.support.os_helperr
rr$rHrrkPGOrnhas_subprocess_supportrr(rrrNotADirectoryErrorr0rrXrrTestCaser 	Exceptionr6rDr8r>rrrrrrrRrrrrr1mainr4rr<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