
    0hh                       S SK r S SK Jr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SK	J
r
  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS S	KJr   S SK r  S SK"r" S SK#r# S SK$r$ S SK%r%\RL                  (       a  \ RN                  " S
5      e\RP                  (       d  \ RN                  " S5      e\RR                  S:H  r*\*(       a  Sr+OSr+Sr,\-\.\/4r0\Rb                  SS4q2S r3 " S S\ Rh                  5      r5 " S S\65      r7 " S S\Rp                  5      r9 " S S\55      r: " S S\55      r;S r<\ Rz                  " \*S5       " S S \55      5       r>\ R~                  " \*S!5       " S" S#\55      5       r@ " S$ S%\ Rh                  5      rA\ R~                  " \B" \S&5      S'5       " S( S)\:5      5       rC\ R~                  " \*S*5       " S+ S,\55      5       rD " S- S.\55      rE\FS/:X  a  \ R                  " 5         gg! \! a    Sr  GNf = f! \! a    Sr" GNf = f! \! a    Sr# GNf = f! \! a    Sr$ GNf = f!   Sr% GN= f)0    N)mock)support)check_sanitizer)import_helper)	os_helper)warnings_helper)assert_python_ok)FakePathztest is not helpful for PGOztest module requires subprocesswin32z@import msvcrt; msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY); )nonexisting_i_hope-cpassc                      [         R                  " S5      n U c  g [        R                  " U [        R                  5      (       a*  [
        R                  " U /5      R                  S:X  a  U 4qg g g )Ntruer   )	shutilwhichosaccessX_OK
subprocessrun
returncodeZERO_RETURN_CMD)
shell_trues    =/opt/python-3.13.8/usr/lib/python3.13/test/test_subprocess.pysetUpModuler   N   sX    f%J
		*bgg&&
|$//14%- 	5 	'    c                        \ rS rSrS rS rSrg)BaseTestCaseX   c                 .    [         R                  " 5         g N)r   reap_childrenselfs    r   setUpBaseTestCase.setUpY   s     	r   c                    [         (       d\  [        R                   H  nUR                  5         M     [        R                  " 5         U R                  [        R                  S5        U R                  5         [        R                  " 5         g )Nzsubprocess._active not empty)		mswindowsr   _activewait_cleanupassertFalse
doCleanupsr   r$   )r&   insts     r   tearDownBaseTestCase.tearDown^   s^    y"**		 +!""$B 	r    N__name__
__module____qualname____firstlineno__r'   r1   __static_attributes__r3   r   r   r    r    X   s     

 r   r    c                       \ rS rSrSrg)PopenTestExceptionk   r3   N)r5   r6   r7   r8   r9   r3   r   r   r;   r;   k   s    r   r;   c                       \ rS rSrSrS rSrg)PopenExecuteChildRaiseso   z]Popen subclass for testing cleanup of subprocess.PIPE filehandles when
_execute_child fails.
c                     [        S5      e)NzForced Exception for Test)r;   )r&   argskwargss      r   _execute_child&PopenExecuteChildRaises._execute_childs   s     !<==r   r3   N)r5   r6   r7   r8   __doc__rC   r9   r3   r   r   r>   r>   o   s    >r   r>   c                      \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r \!RD                  " \#S5      S  5       r$\!RD                  " \#S5      S! 5       r%\!RD                  " \#S5      S" 5       r&S# r'S$ r(S% r)S& r*S' r+S( r,\!RD                  " \#S)5      S* 5       r-\!RD                  " \#S)5      S+ 5       r.S, r/\!RD                  " \0Rb                  \0Rd                  :g  S-5      S. 5       r3\!RD                  " \0Rb                  \0Rd                  :g  S-5      \!RD                  " \4Rj                  " 5       S/5      S0 5       5       r6S1 r7S2 r8S3 r9S4 r:S5 r;S6 r<S7 r=S8 r>S9 r?S: r@S; rAS< rBS= rCS> rDS? rES@ rF\!R                  " \H=(       a	    \I" \HSA5      SB5      SC 5       rJ\!R                  " \H=(       a	    \I" \HSA5      SB5      SD 5       rKSE rL\!R                  " \0R                  SF:H  SG5      SH 5       rN\!RD                  " \0R                  SF:H  SI5      \!RD                  " \4R                  " SJ5      SK:H  SL5      \!RD                  " \P" SMSN9SO5      SP 5       5       5       rQ\!RD                  " \4R                  " SJ5      SK:H  SQ5      \!RD                  " \P" SMSN9SO5      SR 5       5       rRSS rSST rT\!R                  " \0R                  SF:H  SG5      SU 5       rUSV rVSW rWSX rXSY rYSZ rZS[ r[S\ r\S] r]S^ r^S_ r_S` r`Sa raSb rbSc rcSd rdSe reSf rfSg rgSh rhSi riSj rjSk rkSl rlSm rmSn rnSo roSp rp\qR                  " Sq5      Sr 5       rsSs rtSt ruSu rvSv rwSw rxSx rySy rzSz r{\!R                  " \I" \|S{5      S|5      \!R                  " \I" \}S}5      S~5      \!R                  " \I" \}S5      S5      S 5       5       5       r~\!R                  " \}R                  GR                  S\}GR                  " 5       -  5      S5      S 5       r\!RD                  " \#S5      S 5       r\!RD                  " \#S5      S 5       rS r\!R                  " \I" \S5      S5      S 5       rSrg)ProcessTestCasew   c                    [         R                  " [        [         R                  [         R                  [         R                  S9n U R	                  UR
                  [        R                  5        U R	                  UR                  [        R                  5        U R	                  UR                  [        R                  5        UR
                  R                  5         UR                  R                  5         UR                  R                  5         UR                  5         g ! UR
                  R                  5         UR                  R                  5         UR                  R                  5         UR                  5         f = f)Nstdinstdoutstderr)r   Popenr   PIPEassertIsInstancerK   ioBufferedIOBaserL   rM   closer,   r&   ps     r   test_io_buffered_by_default+ProcessTestCase.test_io_buffered_by_defaulty   s    _#-??:??$.OO5	!!!''2+<+<=!!!((B,=,=>!!!((B,=,=>GGMMOHHNNHHNNFFH GGMMOHHNNHHNNFFHs   A>D$ $A Fc                    [         R                  " [        [         R                  [         R                  [         R                  SS9n U R	                  UR
                  [        R                  5        U R	                  UR                  [        R                  5        U R	                  UR                  [        R                  5        UR
                  R                  5         UR                  R                  5         UR                  R                  5         UR                  5         g ! UR
                  R                  5         UR                  R                  5         UR                  R                  5         UR                  5         f = f)Nr   )rK   rL   rM   bufsize)r   rN   r   rO   rP   rK   rQ   	RawIOBaserL   rM   rS   r,   rT   s     r   test_io_unbuffered_works(ProcessTestCase.test_io_unbuffered_works   s    _#-??:??$.OOQ@	!!!''2<<8!!!((BLL9!!!((BLL9GGMMOHHNNHHNNFFH GGMMOHHNNHHNNFFHs   A>D% %A Fc                 v    [         R                  " [        R                  SS/5      nU R	                  US5        g Nr   import sys; sys.exit(47)/   r   callsys
executableassertEqualr&   rcs     r   test_call_seqProcessTestCase.test_call_seq   s0    __cnnd8: ;R r   c                     U R                  [        R                  [        R                  [        R
                  SS/SS9  g )Nr   while True: pass皙?timeout)assertRaisesr   TimeoutExpiredrb   rc   rd   r%   s    r   test_call_timeout!ProcessTestCase.test_call_timeout   s7    
 	*33Z__>>41CD"% 	 	'r   c                     [         R                  " [        R                  SS/SS9  U R	                  S5         [         R                  " [        R                  SS/SS9  U R	                  S5        g ! [         R
                   a%  nU R                  S[        U5      5         S nANmS nAff = f! [         R
                   a%  nU R                  S[        U5      5         S nAg S nAff = f)	Nr   zimport time;time.sleep(9)rm   z,Expected TimeoutExpired exception not raisedz
-1 secondsr   z	0 seconds)r   r   rc   rd   failrp   assertInstr)r&   es     r   test_timeout_exception&ProcessTestCase.test_timeout_exception   s    	FNNCNND2MNZ\] IIDE	FNNCNND2MNZ[\ IIDE (( 	0MM,A//	0 (( 	/MM+s1v..	/s.   &A2 &B. 2B+B&&B+.C'C""C'c                 \    [         R                  " [        5      nU R                  US5        g Nr   )r   
check_callr   re   rf   s     r   test_check_call_zero$ProcessTestCase.test_check_call_zero   s"    ""?3Qr   c                    U R                  [        R                  5       n[        R                  " [        R
                  SS/5        S S S 5        U R                  WR                  R                  S5        g ! , (       d  f       N5= fr^   )	ro   r   CalledProcessErrorr}   rc   rd   re   	exceptionr   r&   cs     r   test_check_call_nonzero'ProcessTestCase.test_check_call_nonzero   sa    z<<=!!3>>4#=#? @ > 	//4 >=   (A77
Bc                    [         R                  " [        R                  SS/5      nU R	                  SU5        U R                  [        S5         [         R                  " / S S9  S S S 5        U R                  [        S5         [         R                  " / SS9  S S S 5        g ! , (       d  f       NC= f! , (       d  f       g = f)	Nr   print('BDFL')   BDFLz2stdout argument not allowed, it will be overriddenrL   z1check argument not allowed, it will be overriddenFcheck)r   check_outputrc   rd   rv   assertRaisesRegex
ValueErrorr&   outputs     r   test_check_output!ProcessTestCase.test_check_output   s    ((79gv&##JDF##Bt4F ##JCE##Be4E E	F FE Es   B#B4#
B14
Cc                    U R                  [        R                  5       n[        R                  " [        R
                  SS/5        S S S 5        U R                  WR                  R                  S5        g ! , (       d  f       N5= f)Nr   zimport sys; sys.exit(5)   )	ro   r   r   r   rc   rd   re   r   r   r   s     r   test_check_output_nonzero)ProcessTestCase.test_check_output_nonzero   s`    z<<=##^^T+DEG > 	//3 >=r   c                     [         R                  " [        R                  SS/[         R                  S9nU R                  SU5        g )Nr   $import sys; sys.stderr.write('BDFL')rM   r   )r   r   rc   rd   STDOUTrv   r   s     r   test_check_output_stderr(ProcessTestCase.test_check_output_stderr   s:    (('MN!((* 	gv&r   c                    [         R                  " 5       nU R                  UR                  5        UR	                  S5        UR                  S5        [        R                  " [        R                  SS/US9nU R                  SU5        g )N   pearr   r   6import sys; sys.stdout.write(sys.stdin.read().upper())rK      PEAR)tempfileTemporaryFile
addCleanuprS   writeseekr   r   rc   rd   rv   )r&   tfr   s      r   test_check_output_stdin_arg+ProcessTestCase.test_check_output_stdin_arg   sl    ##%!


((IK 	gv&r   c                 t    [         R                  " [        R                  SS/SS9nU R	                  SU5        g )Nr   r   r   inputr   r   r   rc   rd   rv   r   s     r   test_check_output_input_arg+ProcessTestCase.test_check_output_input_arg   s7    ((IK 	gv&r   c                 t    [         R                  " [        R                  SS/SS9nU R	                  SU5        g)z<input=None has a legacy meaning of input='' on check_output.r   3import sys; print('XX' if sys.stdin.read() else '')Nr   s   XXr   r   rc   rd   assertNotInr   s     r   test_check_output_input_none,ProcessTestCase.test_check_output_input_none   s9    ((FH 	'r   c                 v    [         R                  " [        R                  SS/S SS9nU R	                  SU5        g )Nr   r   T)r   textXXr   r   s     r   !test_check_output_input_none_text1ProcessTestCase.test_check_output_input_none_text   s;    ((FH' 	v&r   c                 v    [         R                  " [        R                  SS/S SS9nU R	                  SU5        g )Nr   r   T)r   universal_newlinesr   r   r   s     r   /test_check_output_input_none_universal_newlines?ProcessTestCase.test_check_output_input_none_universal_newlines   s;    ((FHt5 	v&r   c                 x    [         R                  " [        R                  SS/S SSS9nU R	                  SU5        g )Nr   zprint('foo')utf-8ignore)r   encodingerrorsfoor   r   s     r   ,test_check_output_input_none_encoding_errors<ProcessTestCase.test_check_output_input_none_encoding_errors  s7    ((~6WX? 	eV$r   c                 >   U R                  [        5       n[        R                  " [        R
                  SS/[        R                  S9nU R                  S5        S S S 5        U R                  SWR                  R                  S   5        g ! , (       d  f       N8= f)Nr   print('will not be run')r   z-Expected ValueError when stdout arg supplied.rL   r   )ro   r   r   r   rc   rd   rL   ru   rv   r   rA   r&   r   r   s      r   test_check_output_stdout_arg,ProcessTestCase.test_check_output_stdout_arg
  st    z*a,,^^T+EF::'F IIEF	 +
 	h 0 0 34 +*s   AB
Bc                    [         R                  " 5       nU R                  UR                  5        UR	                  S5        UR                  S5        U R                  [        5       n[        R                  " [        R                  SS/USS9nU R                  S5        S S S 5        U R                  SWR                  R                  S   5        U R                  S	UR                  R                  S   5        g ! , (       d  f       Na= f)
Nr   r   r   r      harerK   r   7Expected ValueError when stdin and input args supplied.rK   r   )r   r   r   rS   r   r   ro   r   r   r   rc   rd   ru   rv   r   rA   r&   r   r   r   s       r   &test_check_output_stdin_with_input_arg6ProcessTestCase.test_check_output_stdin_with_input_arg  s    ##%!


z*a,,^^T+EFG-F IIOP	 +
 	gq{{//23gq{{//23 +*s   (9C<<
D
c                     U R                  [        R                  5       n[        R                  " [        R
                  SS/SS9nS S S 5        g ! , (       d  f       g = f)Nr   import time; time.sleep(3600)rl   rm   )ro   r   rp   r   rc   rd   r   s      r   test_check_output_timeout)ProcessTestCase.test_check_output_timeout!  sH    z889Q,,^^T46!F :99s   'A
Ac                     [         R                  R                  5       nSUS'   [        R                  " [
        R                  SS/US9nU R                  US5        g )NbananaFRUITr   z5import sys, os;sys.exit(os.getenv("FRUIT")=="banana")env   )r   environcopyr   rb   rc   rd   re   )r&   newenvrg   s      r   test_call_kwargs ProcessTestCase.test_call_kwargs)  sT    ""w__cnndGH "() 	Qr   c                    [         R                  " 5        nU R                  [        [        R
                  SS9  [        R
                  R                  R                  R                  nS/US-   -  nU R                  " [        [        R
                  /UQ76   S S S 5        U R                  WR                  5       S5        g ! , (       d  f       N/= f)Nr   )invalid_arg_namer   r   )r   captured_stderrro   	TypeErrorr   rN   __init____code__co_argcountre   getvalue)r&   sargcounttoo_many_argss       r   test_invalid_args!ProcessTestCase.test_invalid_args3  s     $$&!i)9)9AN!''0099EEHC8a<0Mi)9)9JMJ	 '
 	r* '&s   BC  
Cc                 v   [         R                  " [        R                  SS/[         R                  [         R                  S9nU R                  UR                  R                  5        U R                  UR                  R                  5        UR                  5         U R                  UR                  S 5        g )Nr   print("banana")rL   rM   )r   rN   rc   rd   rO   r   rL   rS   rM   r,   re   rK   rT   s     r   test_stdin_noneProcessTestCase.test_stdin_none=  ss    cnnd4EF *
I''	$'r   c                    Sn[         R                  " [        R                  SU/[         R                  [         R                  S9nU R                  UR                  R                  5        U R                  UR                  R                  5        UR                  5       u  p4U R                  UR                  SU5        U R                  UR                  5       S5        g )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;r   r   r   s   test_stdout_noner   rN   rc   rd   rO   r   rL   rS   rM   communicatere   r   rstripr&   coderU   outerrs        r   test_stdout_none ProcessTestCase.test_stdout_noneF  s    5 cnndD9$.OOJOOM''==?q#.':;r   c                 v   [         R                  " [        R                  SS/[         R                  [         R                  S9nU R                  UR                  R                  5        U R                  UR                  R                  5        UR                  5         U R                  UR                  S 5        g )Nr   r   rK   rL   )r   rN   rc   rd   rO   r   rL   rS   rK   r,   re   rM   rT   s     r   test_stderr_none ProcessTestCase.test_stderr_none]  ss    cnnd4EF)zH'&	4(r   c                     US/-   n[         R                  " U40 UD6nUR                  5         U R                  SUR                  5        g Nr_   r`   )r   rN   r,   re   r   )r&   pre_argsrB   rA   rU   s        r   _assert_pythonProcessTestCase._assert_pythonf  sD     566T,V,	Q\\*r   c                     [         R                  R                  [         R                  R                  [        R
                  5      S5      nU R                  US/[        R
                  S9  g Ndoesnotexistr   rd   )r   pathjoindirnamerc   rd   r  r&   r  s     r   test_executableProcessTestCase.test_executablen  sH     ww||BGGOOCNN$C$24\40S^^Lr   c                    [         R                  R                  [         R                  R                  [        R
                  5      S5      nU R                  US/[         R                  " [        R
                  5      S9  g r
  )r   r  r  r  rc   rd   r  fsencoder  s     r   test_bytes_executable%ProcessTestCase.test_bytes_executabley  sU    ww||BGGOOCNN$C$24\40'){{3>>'B 	 	Dr   c                     [         R                  R                  [         R                  R                  [        R
                  5      S5      nU R                  US/[        [        R
                  5      S9  g r
  )r   r  r  r  rc   rd   r  r
   r  s     r   test_pathlike_executable(ProcessTestCase.test_pathlike_executable  sQ    ww||BGGOOCNN$C$24\40'/'? 	 	Ar   c                     [         R                  S/nU R                  U5        U R                  [        U R                  U[
        S   S9  g )Nr   r   r  )rc   rd   r  ro   NONEXISTING_ERRORSNONEXISTING_CMD)r&   r  s     r    test_executable_takes_precedence0ProcessTestCase.test_executable_takes_precedence  sI     NND)H%,--x%4Q%7 	 	9r   z"executable argument replaces shellc                 B    U R                  / [        R                  SS9  g NT)rd   shell)r  rc   rd   r%   s    r   test_executable_replaces_shell.ProcessTestCase.test_executable_replaces_shell  s     	B3>>Fr   c                 j    U R                  / [        R                  " [        R                  5      SS9  g r   )r  r   r  rc   rd   r%   s    r   $test_bytes_executable_replaces_shell4ProcessTestCase.test_bytes_executable_replaces_shell  s)    B2;;s~~+F"& 	 	(r   c                 T    U R                  / [        [        R                  5      SS9  g r   )r  r
   rc   rd   r%   s    r   'test_pathlike_executable_replaces_shell7ProcessTestCase.test_pathlike_executable_replaces_shell  s%    B8CNN+C"& 	 	(r   c                     [         R                  " U5         [        R                  " 5       sS S S 5        $ ! , (       d  f       g = fr#   )r   
change_cwdr   getcwd)r&   cwds     r   _normalize_cwdProcessTestCase._normalize_cwd  s'     !!#&99; '&&s	   6
Ac                     [         R                  R                  [        R                  5      n[         R                  R                  U5      $ r#   )r   r  realpathrc   rd   split)r&   python_paths     r   _split_python_path"ProcessTestCase._split_python_path  s-    gg&&s~~6ww}}[))r   c                    [         R                  " USS/4S[         R                  0UD6nU R                  UR                  R
                  5        UR                  5         U R                  SUR                  5        [        R                  R                  nU R                  U" U5      U" UR                  R                  5       R                  5       5      5        g )Nr   zcimport os, sys; buf = sys.stdout.buffer; buf.write(os.getcwd().encode()); buf.flush(); sys.exit(47)rL   r`   )r   rN   rO   r   rL   rS   r,   re   r   r   r  normcasereaddecode)r&   expected_cwd
python_argrB   rU   r7  s         r   _assert_cwdProcessTestCase._assert_cwd  s     j$-. ( &0__( !'( 	'	Q\\*77##,/!!((--/"8"8":;	=r   c                     [         R                  " 5       nU R                  U5      nU R                  U[        R
                  US9  g Nr-  )r   
gettempdirr.  r<  rc   rd   r&   temp_dirs     r   test_cwdProcessTestCase.test_cwd  s9    &&(&&x03>>x@r   c                     [         R                  " 5       nU R                  U5      nU R                  U[        R
                  [        R                  " U5      S9  g r?  )r   rA  r.  r<  rc   rd   r   r  rB  s     r   test_cwd_with_bytes#ProcessTestCase.test_cwd_with_bytes  sB    &&(&&x03>>r{{87LMr   c                     [         R                  " 5       nU R                  U5      nU R                  U[        R
                  [        U5      S9  g r?  )r   rA  r.  r<  rc   rd   r
   rB  s     r   test_cwd_with_pathlike&ProcessTestCase.test_cwd_with_pathlike  s>    &&(&&x03>>x7IJr   z"pending resolution of issue #15533c                    U R                  5       u  p[        R                  R                  [        R                  U5      n[
        R                  " 5        nU R                  [        [        R                  U/5        U R                  [        [        R                  U/US9  U R                  U5      nU R                  XUS9  S S S 5        g ! , (       d  f       g = fr?  r4  r   r  r  curdirr   temp_cwdro   FileNotFoundErrorr   rN   r.  r<  )r&   
python_dirpython_base
rel_python	wrong_dirs        r   test_cwd_with_relative_arg*ProcessTestCase.test_cwd_with_relative_arg  s     #'"9"9";
WW\\"))[9
!Y /1A1A)l,/1A1A)l	  ;,,Z8JZD "!!s   A-C
Cc           	         U R                  5       u  p[        R                  R                  [        R                  U5      nSn[
        R                  " 5        nU R                  [        [        R                  U/US9  U R                  [        [        R                  U/UUS9  U R                  U5      nU R                  XUUS9  S S S 5        g ! , (       d  f       g = f)Nsomethingyoudonthaver  rd   r-  rM  )r&   rQ  rR  rS  doesntexistrT  s         r   !test_cwd_with_relative_executable1ProcessTestCase.test_cwd_with_relative_executable  s     #'"9"9";
WW\\"))[9
,!Y /1A1A*m
  D/1A1A*m
"+  - ,,Z8JZ!+  - "!!s   A.C
Cc                    U R                  5       u  p[        R                  R                  X5      n[        R                  R                  [        R                  U5      n[
        R                  " 5        nU R                  [        [        R                  U/US9  U R                  U5      nU R                  XSUS9  S S S 5        g ! , (       d  f       g = fr?  )r4  r   r  r  rN  r   rC  ro   rP  r   rN   r.  r<  )r&   rQ  rR  
abs_pythonrS  rT  s         r   test_cwd_with_absolute_arg*ProcessTestCase.test_cwd_with_absolute_arg  s     #'"9"9";
WW\\*:
WW\\"))[9
!Y /1A1A)l	  ;++I6IY	B "!!s   5AC
CzTest is not venv-compatiblec                     U R                  5       u  pU R                  U5      nU R                  US[        R                  US9  g )NrX  rY  )r4  r.  r<  rc   rd   )r&   rQ  rR  s      r   test_executable_with_cwd(ProcessTestCase.test_executable_with_cwd  sG     #'"9"9";
((4
%;$'NN
 	 	Dr   z#need an installed Python. See #7774c                 h    U R                  [        R                  " 5       S[        R                  S9  g )NrX  r  )r<  r   r,  rc   rd   r%   s    r   test_executable_without_cwd+ProcessTestCase.test_executable_without_cwd
  s)     	&<$'NN 	 	4r   c                 .   [         R                  " [        R                  SS/[         R                  S9nUR
                  R                  S5        UR
                  R                  5         UR                  5         U R                  UR                  S5        g )Nr   0import sys; sys.exit(sys.stdin.read() == "pear")r   r   r   )r   rN   rc   rd   rO   rK   r   rS   r,   re   r   rT   s     r   test_stdin_pipeProcessTestCase.test_stdin_pipe  sf    cnndKM(oo/ 	
g		q)r   c                    [         R                  " 5       nU R                  UR                  5        UR	                  5       n[
        R                  " US5        [
        R                  " USS5        [        R                  " [        R                  SS/US9nUR                  5         U R                  UR                  S5        g Nr   r   r   rh  r   r   )r   r   r   rS   filenor   r   lseekr   rN   rc   rd   r,   re   r   r&   r   drU   s       r   test_stdin_filedes"ProcessTestCase.test_stdin_filedes  s    ##%!IIK
G
AqcnndKM " 	
q)r   c                 L   [         R                  " 5       nU R                  UR                  5        UR	                  S5        UR                  S5        [        R                  " [        R                  SS/US9nUR                  5         U R                  UR                  S5        g rl  )r   r   r   rS   r   r   r   rN   rc   rd   r,   re   r   r&   r   rU   s      r   test_stdin_fileobj"ProcessTestCase.test_stdin_fileobj+  sz    ##%!


cnndKM!# 	
q)r   c                     [         R                  " [        R                  SS/[         R                  S9nU   U R                  UR                  R                  5       S5        S S S 5        g ! , (       d  f       g = f)Nr   &import sys; sys.stdout.write("orange")r      oranger   rN   rc   rd   rO   re   rL   r8  rT   s     r   test_stdout_pipe ProcessTestCase.test_stdout_pipe7  sS    cnndBD *1 QXX]]_i8 QQ   +A++
A9c                 n   [         R                  " 5       nU R                  UR                  5        UR	                  5       n[
        R                  " [        R                  SS/US9nUR                  5         [        R                  " USS5        U R                  [        R                  " US5      S5        g )Nr   rx  r   r      ry  r   r   r   rS   rm  r   rN   rc   rd   r,   r   rn  re   r8  ro  s       r   test_stdout_filedes#ProcessTestCase.test_stdout_filedes?  s    ##%!IIKcnndBD !# 	

AqD)95r   c                 2   [         R                  " 5       nU R                  UR                  5        [        R
                  " [        R                  SS/US9nUR                  5         UR                  S5        U R                  UR                  5       S5        g )Nr   rx  r   r   ry  r   r   r   rS   r   rN   rc   rd   r,   r   re   r8  rt  s      r   test_stdout_fileobj#ProcessTestCase.test_stdout_fileobjK  sp    ##%!cnndBD "$ 	


I.r   c                     [         R                  " [        R                  SS/[         R                  S9nU   U R                  UR                  R                  5       S5        S S S 5        g ! , (       d  f       g = f)Nr   *import sys; sys.stderr.write("strawberry")r   
   strawberry)r   rN   rc   rd   rO   re   rM   r8  rT   s     r   test_stderr_pipe ProcessTestCase.test_stderr_pipeV  sS    cnndFH *1 QXX]]_m< QQr}  c                 n   [         R                  " 5       nU R                  UR                  5        UR	                  5       n[
        R                  " [        R                  SS/US9nUR                  5         [        R                  " USS5        U R                  [        R                  " US5      S5        g )Nr   r  r   r   r  r  r  ro  s       r   test_stderr_filedes#ProcessTestCase.test_stderr_filedes^  s    ##%!IIKcnndFH !# 	

AqD)=9r   c                 2   [         R                  " 5       nU R                  UR                  5        [        R
                  " [        R                  SS/US9nUR                  5         UR                  S5        U R                  UR                  5       S5        g )Nr   r  r   r   r  r  rt  s      r   test_stderr_fileobj#ProcessTestCase.test_stderr_fileobjj  sp    ##%!cnndFH "$ 	


M2r   c                 .   [         R                  " [        R                  SS/[         R                  [         R                  S9nUR                  5       u  p#U R                  US5        U R                  US5        U R                  UR                  S5        g )Nr   zimport sys, subprocess;rc = subprocess.call([sys.executable, "-c",    "import sys;"    "sys.stderr.write('42')"],    stderr=subprocess.STDOUT);sys.exit(rc)r   s   42r   r   r   rN   rc   rd   rO   r   re   r   r&   rU   rL   rM   s       r   ,test_stderr_redirect_with_no_stdout_redirect<ProcessTestCase.test_stderr_redirect_with_no_stdout_redirectu  sy     cnnd-. %/OO$.OO5 '%q)r   c                    [         R                  " [        R                  SS/[         R                  [         R
                  S9nU   U R                  UR                  R                  5       S5        S S S 5        g ! , (       d  f       g = f)Nr   Rimport sys;sys.stdout.write("apple");sys.stdout.flush();sys.stderr.write("orange")r      appleorange)	r   rN   rc   rd   rO   r   re   rL   r8  rT   s     r   test_stdout_stderr_pipe'ProcessTestCase.test_stdout_stderr_pipe  s_    cnnd;<
 %/OO$.$5$57 QXX]]_n= QQs   +A::
Bc                 4   [         R                  " 5       nU R                  UR                  5        [        R
                  " [        R                  SS/UUS9nUR                  5         UR                  S5        U R                  UR                  5       S5        g )Nr   r  r   r   r  r  rt  s      r   test_stdout_stderr_file'ProcessTestCase.test_stdout_stderr_file  sv    ##%!cnnd;<
 %'$&( 	


N3r   c                    Sn[         R                  " [        R                  SU/[         R                  [         R                  S9nU R                  UR                  R                  5        U R                  UR                  R                  5        UR                  5       u  p4U R                  UR                  SU5        U R                  UR                  5       S5        g )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 == 18r   r   r   s   test with stdout=1r   r   s        r   test_stdout_filedes_of_stdout-ProcessTestCase.test_stdout_filedes_of_stdout  s    "
 cnndD9$.OOJOOM''==?q#.'<=r   c                     [         R                  " [        R                  SS/[         R                  S9nUR                  5         U R                  UR                  S 5        g )Nr   z'for i in range(10240):print("x" * 1024)r   )r   rN   rc   rd   DEVNULLr,   re   rL   rT   s     r   test_stdout_devnull#ProcessTestCase.test_stdout_devnull  sN    cnnd23 &0%7%79 	
4(r   c                     [         R                  " [        R                  SS/[         R                  S9nUR                  5         U R                  UR                  S 5        g )Nr   z=import sys
for i in range(10240):sys.stderr.write("x" * 1024)r   )r   rN   rc   rd   r  r,   re   rM   rT   s     r   test_stderr_devnull#ProcessTestCase.test_stderr_devnull  sN    cnnd=> &0%7%7	9
 	
4(r   c                     [         R                  " [        R                  SS/[         R                  S9nUR                  5         U R                  UR                  S 5        g )Nr   zimport sys;sys.stdin.read(1)r   )r   rN   rc   rd   r  r,   re   rK   rT   s     r   test_stdin_devnull"ProcessTestCase.test_stdin_devnull  sN    cnnd23 %/$6$68 	
$'r   F_GETPIPE_SZz%fcntl.F_GETPIPE_SZ required for test.c                    [         R                  " 5       u  p [        R                  " U[        R                  5      n[         R                  " U5        [         R                  " U5        US-  n[
        R                  " 5       nXE:  a  [        R                  " S5      e[        R                  " [        R                  SS/[        R                  [        R                  [        R                  US9n UR                  UR                  UR                   4 HF  nU R#                  [        R                  " UR%                  5       [        R                  5      U5        MH     UR                  R'                  S5        UR                  R	                  5         UR                  R	                  5         UR                   R	                  5         UR)                  5         UR+                  5         g ! [         R                  " U5        [         R                  " U5        f = f! UR)                  5         UR+                  5         f = f)N   z+default pipesize too small to perform test.r   Qimport sys; sys.stdin.read(); sys.stdout.write("out"); sys.stderr.write("error!")rK   rL   rM   pipesizer   )r   pipefcntlr  rS   r   get_pagesizeunittestSkipTestr   rN   rc   rd   rO   rK   rL   rM   re   rm  r   killr,   )r&   test_pipe_rtest_pipe_wpipesize_defaultr  pagesize_defaultrU   fifos           r   test_pipesizesProcessTestCase.test_pipesizes  s    $&779 	"${{;8J8JKHH[!HH[!#q("//1&##=? ?^^T*+ //*//??X7	!((AHH5  KKu/A/AB 6 GGMM'"GGMMOHHNNHHNNFFHFFH7 HH[!HH[!2 FFHFFHs   %G* 3CH *.H"H=c                 |   [         R                  " [        R                  SS/[         R                  [         R                  [         R                  SS9nU    [
        R                  " 5       u  p# [        R                  " U[        R                  5      n[        R                  " U[        R                  5      n[
        R                  " U5        [
        R                  " U5        U R                  [        R                  " UR                  R                  5       [        R                  5      U5        U R                  [        R                  " UR                  R                  5       [        R                  5      U5        U R                  [        R                  " UR                  R                  5       [        R                  5      U5        UR                  5          S S S 5        g ! [
        R                  " U5        [
        R                  " U5        f = f! UR                  5         f = f! , (       d  f       g = f)Nr   r  rt   r  )r   rN   rc   rd   rO   r   r  r  r  rS   re   rK   rm  rL   rM   r  )r&   procfp_rfp_wdefault_read_pipesizedefault_write_pipesizes         r   test_pipesize_default%ProcessTestCase.test_pipesize_default  sy    ^^T*+ //*//??R1 WWY
#,1KKe>P>P,Q)-2[[u?Q?Q-R*HHTNHHTN  KK

 1 1 3U5G5GH)+   KK 2 2 4e6H6HI*,   KK 2 2 4e6H6HI*, 		- T HHTNHHTN 		- Ts>   H-H0A
G':DHH-'.HHH**H--
H;c                 0   [         R                  R                  5       nSUS'   [        R                  " [
        R                  SS/[        R                  US9 nUR                  5       u  p4U R                  US5        S S S 5        g ! , (       d  f       g = f)Noranger   r   2import sys,os;sys.stdout.write(os.getenv("FRUIT"))rL   r   ry  )
r   r   r   r   rN   rc   rd   rO   r   re   r&   r   rU   rL   rM   s        r   test_envProcessTestCase.test_env  s{    ""ws~~t FG &0__"(	* ./]]_NFVY/* * *s   %B
Br   zWindows only issuec                 L   [         R                  R                  5       nSUS'   SUS'   SUS'   SUS'   [        R                  " / S	Q[        R
                  US
9 nUR                  5       u  p4U R                  UR                  5       S5        S S S 5        g ! , (       d  f       g = f)NcherryfRUitlemonfruitr  r   r   frUitCMDz/cSETr  r  s   frUit=banana)	r   r   r   r   rN   rO   r   re   strip)r&   r   rU   rL   _s        r   test_win32_duplicate_envs)ProcessTestCase.test_win32_duplicate_envs#  s    ""w!w"w"w;%/__"(*-.IFV\\^_=	* * *s   3B
B#z#cannot test an empty env on WindowsPy_ENABLE_SHAREDr   zEThe Python shared library cannot be loaded with an empty environment.T)addressz)AddressSanitizer adds to the environment.c                    S n[         R                  " [        R                  SS/[         R                  0 S9 nUR                  5       u  p4[        UR                  5       5      nU R                  U[        5        U Vs/ s H  nU" U5      (       a  M  UPM     nnU R                  U/ 5        SSS5        gs  snf ! , (       d  f       g= f)z+Verify that env={} is as empty as possible.c                     SU ;   =(       d5    SU ;   =(       d)    U S:H  =(       d    U R                  S5      =(       d    U S:H  $ )z:Determine if an environment variable is under our control.	VERSIONER__CF
LD_PRELOADSANDBOXLC_CTYPE)
startswith)ns    r   is_env_var_to_ignore<ProcessTestCase.test_empty_env.<locals>.is_env_var_to_ignore<  sF    
  1$ $! $%$)*i)@$O%r   r   z)import os; print(list(os.environ.keys()))r  N)r   rN   rc   rd   rO   r   evalr  rP   listre   )r&   r  rU   rL   rM   child_env_namesks          r   test_empty_envProcessTestCase.test_empty_env2  s    	% s~~tJL%/__">AB]]_NF"6<<>2O!!/48*9 ?/Q&:1&=  !/O ?_b1> >?> >s$   AB<?B7B7B<7B<<
C
zLThe Python shared library cannot be loaded without some system environments.c                 T   SS0n[         R                  SS/n[         R                  S:X  a  / SQn[        R                  " U[        R
                  [        R
                  US9 nUR                  5       u  pEUR                  (       aM  [        R                  (       a8  [        SUR                  S	S
5      5        [        SUR                  S	S
5      5        U R                  UR                  S5        U R                  UR                  5       S5        S S S 5        g ! , (       d  f       g = f)Nr  r  r   z;import sys,os;sys.stdout.write("fruit="+os.getenv("fruit"))r   r  )rL   rM   r   zSTDOUT:asciireplacezSTDERR:r   s   fruit=orange)rc   rd   platformr   rN   rO   r   r   r   verboseprintr9  re   r  )r&   r   cmdrU   rL   rM   s         r   test_one_environment_variable-ProcessTestCase.test_one_environment_variableO  s     8$~~t OP <<7"/Cc*//*//W]^bc]]_NF||iw	!BCiw	!BCQ\\1-V\\^_= _^^s   #B-D
D'c                 f   [         R                  S-   nU R                  [        5         [        R
                  " USS/5        S S S 5        U R                  [        5         [        R
                  " [         R                  SS/5        S S S 5        g ! , (       d  f       NT= f! , (       d  f       g = f)N r   r   zpass# )rc   rd   ro   r   r   rN   )r&   r  s     r   test_invalid_cmd ProcessTestCase.test_invalid_cmdc  s{    nnt#z*c401 + z*cnndI>? +*	 +* +*s   B (B"
B"
B0c                    [         R                  R                  5       nSUS'   U R                  [        5         [
        R                  " [        US9  S S S 5        [         R                  R                  5       nSUS'   U R                  [        5         [
        R                  " [        US9  S S S 5        [         R                  R                  5       nSUS'   U R                  [        5         [
        R                  " [        US9  S S S 5        [         R                  R                  5       nSUS'   [
        R                  " [        R                  S	S
/[
        R                  US9 nUR                  5       u  p4U R                  US5        S S S 5        g ! , (       d  f       GNI= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       g = f)NcabbagezFRUIT VEGETABLEr   zorange VEGETABLE=cabbager   r  zFRUIT=ORANGEzorange=lemonr   z3import sys, os;sys.stdout.write(os.getenv("FRUIT"))r  s   orange=lemon)r   r   r   ro   r   r   rN   r   rc   rd   rO   r   re   r  s        r   test_invalid_env ProcessTestCase.test_invalid_envm  sX   "%.!"z*_&9 + "5wz*_&9 + "!(~z*_&9 + "(ws~~t FG &0__"(	* ./]]_NFV_5* *% +* +* +** *s/   FF'-F9'%G

F$'
F69
G

Gc                    [         R                  R                  5       nSUS'   U R                  [        5         [
        R                  " [        US9  S S S 5        [         R                  R                  5       nSUS'   U R                  [        5         [
        R                  " [        US9  S S S 5        g ! , (       d  f       Ni= f! , (       d  f       g = f)Nr  zFRUIT=VEGETABLEr   z==FRUIT)r   r   r   ro   r   r   rN   r   )r&   r   s     r   test_win32_invalid_env&ProcessTestCase.test_win32_invalid_env  s     "$- !z*_&9 + "%yz*_&9 +* +*
 +*s   B6C6
C
Cc                     [         R                  " [        R                  SS/[         R                  S9nUR                  S5        U R                  UR                  S5        g )Nr   z/import sys;sys.exit(sys.stdin.read() == "pear")r   r   r   r  rT   s     r   test_communicate_stdin&ProcessTestCase.test_communicate_stdin  sQ    cnndEF $.??4 	
gq)r   c                     [         R                  " [        R                  SS/[         R                  S9nUR                  5       u  p#U R                  US5        U R                  US 5        g )Nr   z)import sys; sys.stdout.write("pineapple")r   	   pineappler   rN   rc   rd   rO   r   re   r  s       r   test_communicate_stdout'ProcessTestCase.test_communicate_stdout  sZ    cnndIK$.OO5 ==?.&r   c                     [         R                  " [        R                  SS/[         R                  S9nUR                  5       u  p#U R                  US 5        U R                  US5        g )Nr   z)import sys; sys.stderr.write("pineapple")r   r  r  r  s       r   test_communicate_stderr'ProcessTestCase.test_communicate_stderr  sZ    cnndIK$.OO5 ==?&.r   c                    [         R                  " [        R                  SS/[         R                  [         R                  [         R                  S9nU R                  UR                  R                  5        U R                  UR                  R                  5        U R                  UR                  R                  5        UR                  S5      u  p#U R                  US5        U R                  US5        g )Nr   zNimport sys,os;sys.stderr.write("pineapple");sys.stdout.write(sys.stdin.read())rJ      bananar  )r   rN   rc   rd   rO   r   rL   rS   rM   rK   r   re   r  s       r   test_communicate ProcessTestCase.test_communicate  s    cnndCD $.??$.OO$.OO5 	''&==3+.r   c                    [         R                  " [        R                  SS/S[         R                  [         R                  [         R                  S9nU R                  [         R                  UR                  SSS9  UR                  5       u  p#U R                  US5        U R                  UR                  5       S5        g )	Nr   z~import sys,os,time;sys.stderr.write("pineapple\n");time.sleep(1);sys.stderr.write("pear\n");sys.stdout.write(sys.stdin.read())T)r   rK   rL   rM   r   g333333?rm   s   pineapple
pear
)
r   rN   rc   rd   rO   ro   rp   r   re   encoder  s       r   test_communicate_timeout(ProcessTestCase.test_communicate_timeout  s    cnndCD 15#-??$.OO$.OO	5 	*33Q]]H"% 	 	' ==?**>?r   c                    [         R                  " [        R                  SS/[         R                  S9nU R                  [         R                  UR                  SS9  UR                  5       u  p#U R                  [        U5      S5        g )Nr   zimport 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));r   g?rm   i   )
r   rN   rc   rd   rO   ro   rp   r   re   len)r&   rU   rL   r  s       r   %test_communicate_timeout_large_output5ProcessTestCase.test_communicate_timeout_large_output  sq    cnndEF %/OO	5 	*33Q]]CPmmoVm4r   c                 ~   S GH6  nS GH+  nS GH   n0 nU(       a  [         R                  US'   U(       a  [         R                  US'   U(       a  [         R                  US'   U(       d  M]  [         R                  " [        40 UD6nUR	                  5         UR
                  b%  U R                  UR
                  R                  5        UR                  b%  U R                  UR                  R                  5        UR                  c  M  U R                  UR                  R                  5        GM#     GM.     GM9     g )NFTrK   rL   rM   )
r   rO   rN   r   r   rK   
assertTrueclosedrL   rM   )r&   
stdin_pipestdout_pipestderr_pipeoptionsrU   s         r   test_communicate_pipe_fd_leak-ProcessTestCase.test_communicate_pipe_fd_leak  s    'J,#0K G!+5??(",6OO)",6OO)" "((DGDAMMOww*7xx+8xx+8# $1  - (r   c                     [         R                  " [        R                  SS/5      nUR	                  5       u  p#U R                  US 5        U R                  US 5        g )Nr   r_   )r   rN   rc   rd   r   re   r  s       r   test_communicate_returns(ProcessTestCase.test_communicate_returns  sP    cnnd8: ;==?&&r   c                    [         R                  " 5       u  p[         R                  " U5        [         R                  " U5        [        R                  " [
        R                  SS[        R                  -  /[        R                  [        R                  [        R                  S9nU R                  UR                  R                  5        U R                  UR                  R                  5        U R                  UR                  R                  5        S[        R                  -  nUR                  U5      u  pVU R                  XT5        g )Nr   zpimport sys,os;sys.stdout.write(sys.stdin.read(47));sys.stderr.write("x" * %d);sys.stdout.write(sys.stdin.read())rJ      a)r   r  rS   r   rN   rc   rd   r   PIPE_MAX_SIZErO   r   rL   rM   rK   r   re   )r&   xyrU   string_to_writerL   rM   s          r   test_communicate_pipe_buf)ProcessTestCase.test_communicate_pipe_buf  s     wwy

cnndC &33	45 $.??$.OO$.OO5 	''&!6!66==91r   c                 *   [         R                  " [        R                  SS/[         R                  [         R                  [         R                  S9nU R                  UR                  R                  5        U R                  UR                  R                  5        U R                  UR                  R                  5        UR                  R                  S5        UR                  S5      u  p#U R                  US5        U R                  US5        g )Nr   z0import sys,os;sys.stdout.write(sys.stdin.read())rJ   r  s   splits   bananasplitr   )r   rN   rc   rd   rO   r   rL   rS   rM   rK   r   r   re   r  s       r   test_writes_before_communicate.ProcessTestCase.test_writes_before_communicate  s    cnndCD $.??$.OO$.OO5 	''&	i ==20%r   c                 r   [         R                  SS[        -   S-   /nS GH  n[        R                  " U40 S[        R
                  S[        R
                  US0D6nU   UR                  R                  S5        UR                  R                  5         U R                  UR                  R                  5       S5        UR                  R                  S	5        UR                  R                  5         U R                  UR                  R                  5        U R                  UR                  R                  5       S
5        U R                  UR                  R                  S5      S	5        U R                  UR                  R                  5       S5        S S S 5        GM     g ! , (       d  f       GM  = f)Nr   import sys,os;a@  buf = sys.stdout.buffer;buf.write(sys.stdin.readline().encode());buf.flush();buf.write(b"line2\n");buf.flush();buf.write(sys.stdin.read().encode());buf.flush();buf.write(b"line4\n");buf.flush();buf.write(b"line5\r\n");buf.flush();buf.write(b"line6\r");buf.flush();buf.write(b"\nline7");buf.flush();buf.write(b"\nline8");)r   r   rK   rL   Tzline1
zline3
zline2
   zline4
line5
line6
line7
line8)rc   rd   	SETBINARYr   rN   rO   rK   r   flushre   rL   readlinerS   r   r8  )r&   rA   extra_kwargrU   s       r    test_universal_newlines_and_text0ProcessTestCase.test_universal_newlines_and_text(  s?   NNDy(&&'( :K   >':??*2JOO*5t*= >A i(  !2!2!4i@i(/  !2!2!4!*,  q!1!*,  !DF 	 : s   D9F&&
F6	c                 |   [         R                  " [        R                  SS[        -   S-   /[         R
                  [         R
                  SS9nU R                  UR                  R                  5        U R                  UR                  R                  5        UR                  5       u  p#U R                  US5        g )Nr   r2  zbuf = 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   )rM   rL   r   z#line2
line4
line5
line6
line7
line8)r   rN   rc   rd   r4  rO   r   rL   rS   rM   r   re   r  s       r   #test_universal_newlines_communicate3ProcessTestCase.test_universal_newlines_communicateO  s    cnnd.:889 %/OO$.OO01!3" 	''==?C	Er   c                    [         R                  " [        R                  SS[        -   [
        R                  " S5      -   /[         R                  SS9nUR                  S5      u  p#U R                  UR                  S5        g )Nr   r2  a  
                               s = sys.stdin.readline()
                               assert s == "line1\n", repr(s)
                               s = sys.stdin.read()
                               assert s == "line3\n", repr(s)
                              r   )rK   r   line1
line3
r   )r   rN   rc   rd   r4  textwrapdedentrO   r   re   r   r  s       r   )test_universal_newlines_communicate_stdin9ProcessTestCase.test_universal_newlines_communicate_stdinh  sq    cnnd.:X__ N" ># #$ $.??013 ==)9:q)r   c                     [         R                  " [        [         R                  [         R                  SS9nUR	                  5         U R                  UR                  S5        g )NT)rK   rL   r   r   )r   rN   r   rO   r   re   r   rT   s     r   .test_universal_newlines_communicate_input_none>ProcessTestCase.test_universal_newlines_communicate_input_nonev  sF    
 _#-??$.OO046 	
q)r   c                 <   [         R                  " [        R                  SS[        -   [
        R                  " S5      -   /[         R                  [         R                  [         R                  SS9nU R                  UR                  R                  5        U R                  UR                  R                  5        UR                  S5      u  p#U R                  UR                  S5        U R                  SU5        U R                  UR!                  S	5      5        g )
Nr   r2  a  
                               s = sys.stdin.buffer.readline()
                               sys.stdout.buffer.write(s)
                               sys.stdout.buffer.write(b"line2\r")
                               sys.stderr.buffer.write(b"eline2\n")
                               s = sys.stdin.buffer.read()
                               sys.stdout.buffer.write(s)
                               sys.stdout.buffer.write(b"line4\n")
                               sys.stdout.buffer.write(b"line5\r\n")
                               sys.stderr.buffer.write(b"eline6\r")
                               sys.stderr.buffer.write(b"eline7\r\nz")
                              T)rK   rM   rL   r   r>  r   zline1
line2
line3
line4
line5
zeline2
eline6
eline7
)r   rN   rc   rd   r4  r?  r@  rO   r   rL   rS   rM   r   re   r   r  r  r  s       r   7test_universal_newlines_communicate_stdin_stdout_stderrGProcessTestCase.test_universal_newlines_communicate_stdin_stdout_stderr  s    cnnd.:X__ N" ># #$ $.??$.OO$.OO04!6" 	''==)9:q)>G 	))*DEFr   c                     S Hq  nSU-  n[         R                  SU/n[        R                  " U[        R                  [        R                  US9nUR                  SS9u  pVU R                  US5        Ms     g )N)zutf-16z	utf-32-bez@import sys; sys.stdout.buffer.write('1\r\n2\r3\n4'.encode('%s'))r   )rK   rL   r   r   r   z1
2
3
4)rc   rd   r   rN   rO   r   re   )r&   r   r   rA   popenrL   rM   s          r   -test_universal_newlines_communicate_encodings=ProcessTestCase.test_universal_newlines_communicate_encodings  s|     0HLD NND$/D $$T+5??,6OO.68E #..R.8NFV\2 0r   c           	         S H  u  pSn[         R                  SU/n[        R                  " U[        R                  [        R                  SUS9nUR                  SS9u  pgU R                  USR                  U5      5        M     g )	N))r   r   )r  u   ��)surrogateescapeu   )backslashreplacez\x80\x80z2import sys; sys.stdout.buffer.write(b'[\x80\x80]')r   r   )rK   rL   r   r   r   r   z[{}])rc   rd   r   rN   rO   r   re   format)r&   r   expectedr   rA   rJ  rL   rM   s           r   test_communicate_errors'ProcessTestCase.test_communicate_errors  s    !
F>DNND$/D $$T+5??,6OO.5,2	4E
 #..R.8NFVV]]8%<=%!
r   c                    [         (       d  SnOSn[        (       a   [        R                  " [        R                  5      u  p#US:  aW  [        R                  " [        R                  SU45        U R                  [        R                  [        R                  X#45        / n[        R                  " 5       n [        U5       Hw  n [        R                  R                  U[        R                  5      nUR!                  [        R"                  " U[        R$                  [        R&                  -  5      5        My     U R-                  SU-  5        UR/                  5         [        S5       H'  n[        R0                  " UR3                  5       5        M)     [        S5       H{  n[4        R6                  " [8        R:                  SS/[4        R<                  [4        R<                  [4        R<                  S	9n	U	R?                  S
5      S   n
U RA                  U
S
5        M}     U H  n[        R0                  " U5        M     [B        RD                  " U5        g ! [        [        4 a     GNf = f! [         a,  nUR(                  [(        R*                  :w  a  e  S nA  GMN  S nAff = f! U H  n[        R0                  " U5        M     [B        RD                  " U5        f = f)Ni  i  r  z4failed to reach the file descriptor limit (tried %d)
      r   z-import sys;sys.stdout.write(sys.stdin.read())rJ   s   limer   )#r*   resource	getrlimitRLIMIT_NOFILE	setrlimitr   OSErrorr   r   mkdtempranger   r  r  r   TESTFNappendopenO_WRONLYO_CREATerrnoEMFILEskipTestreverserS   popr   rN   rc   rd   rO   r   re   r   rmtree)r&   max_handlessofthardhandlestmpdiritmpfilerx   rU   datahs               r   test_no_leakingProcessTestCase.test_no_leaking  s    yKK8%//0F0FG
$;&&x'='=d|LOOH$6$68N8N%)L2 !!#	";' ggll693C3CDGNN2777BKK

4J#KL (  !#./ 0 OO2Y'  2Y$$cnnd'K&L ,6??,6OO,6OO= }}W-a0  w/   MM&!G Z(   ww%,,.0  MM&!sJ   BI 8J( A3I/:C(J( I,+I,/
J%9J J(  J%%J( (7Kc                    U R                  [        R                  " / SQ5      S5        U R                  [        R                  " / SQ5      S5        U R                  [        R                  " / SQ5      S5        U R                  [        R                  " / SQ5      S5        U R                  [        R                  " / S	Q5      S
5        U R                  [        R                  " / SQ5      S5        U R                  [        R                  " / SQ5      S5        U R                  [        R                  " SS/5      S5        g )N)za b crp  rx   z"a b c" d e)ab"c\rp  z	ab\"c \ d)ru  z \rp  zab\"c " \\" d)za\\\bzde fgrq  za\\\b "de fg" h)za\"br   rp  z
a\\\"b c d)za\\b crp  rx   z"a\\b c" d e)za\\b\ crp  rx   z"a\\b\ c" d eabr   zab "")re   r   list2cmdliner%   s    r   test_list2cmdline!ProcessTestCase.test_list2cmdline  s    001DE&	(001DE&	(001EF+	-001KL-	/001DE(	*001GH)	+001IJ+	-00$< 	"r   c                    [         R                  " [        R                  SS/[         R                  S9nU R                  UR                  R                  5        U R                  UR                  5       5        [        R                  " UR                  R                  5       S5        UR                  5         U R                  UR                  5       S5        g )Nr   zimport os; os.read(0, 1)r      Ar   )r   rN   rc   rd   rO   r   rK   rS   assertIsNonepollr   r   rm  r,   re   rT   s     r   	test_pollProcessTestCase.test_poll  s    cnnd8:#-??4 	&!&&(#
!4(	1%r   c                     [         R                  " [        5      nU R                  UR	                  5       S5        U R                  UR	                  5       S5        g r|   r   rN   r   re   r,   rT   s     r   	test_waitProcessTestCase.test_wait  s>    _-1%1%r   c                    [         R                  " [        R                  SS/5      nU R	                  [         R
                  5       nUR                  SS9  S S S 5        U R                  S[        WR                  5      5        U R                  UR                  [        R                  S9S5        g ! , (       d  f       Na= f)Nr   zimport time; time.sleep(0.3)-C6?rm   z0.0001r   )r   rN   rc   rd   ro   rp   r,   rv   rw   r   re   r   SHORT_TIMEOUT)r&   rU   r   s      r   test_wait_timeout!ProcessTestCase.test_wait_timeout  s    cnn"$BD Ez889QFF6F" :hAKK 01(=(=>B :9s   B22
C c                     U R                  [        5         [        R                  " [        S5        S S S 5        g ! , (       d  f       g = f)Nr  )ro   r   r   rN   r   r%   s    r   test_invalid_bufsize$ProcessTestCase.test_invalid_bufsize'  s.     y)_h7 *))s	   ;
A	c                     [         R                  " [        S 5      nU R                  UR	                  5       S5        [         R                  " [        S S9nU R                  UR	                  5       S5        g )Nr   )rY   r  rT   s     r   test_bufsize_is_none$ProcessTestCase.test_bufsize_is_none-  sR    _d31%_d;1%r   c           	         [         R                  " [        R                  SS/[         R                  [         R                  [         R
                  SUS9 nUR                  R                  U5        [        R                  " UR                  R                  5       5        UR                  R                  5       n[        R                  " 5           UR                  R                  5         S S S 5        S Ul        S S S 5        U R!                  WR"                  S5        U R!                  WU5        g ! [         a     NRf = f! , (       d  f       N\= f! , (       d  f       N^= f)Nr   zDimport sys;sys.stdout.write(sys.stdin.readline());sys.stdout.flush()r   )rK   rL   rM   rY   r   r   )r   rN   rc   rd   rO   r  rK   r   r   rS   rm  rL   r6  r   SuppressCrashReportr[  re   r   )r&   linerQ  r   rU   	read_lines         r   _test_bufsize_equal_one'ProcessTestCase._test_bufsize_equal_one5  s   s~~t 64 5 %/OO%/__%/%7%7&'1CE IJGGMM$HHQWW^^%&))+I,,.GGMMO /
 AG!E" 	q)H-	   /.E EsC   A9EE D0*E0
D=:E <D==E  
E	
E
Ec                 (    SnU R                  XSS9  g )Nzline
Tr   )r  r&   r  s     r    test_bufsize_equal_one_text_mode0ProcessTestCase.test_bufsize_equal_one_text_modeK  s     $$TD$Ir   c                     S[         R                  R                  5       -   nU R                  [        S5         U R                  USSS9  S S S 5        g ! , (       d  f       g = f)Ns   linezline bufferingr   Fr  )r   linesepr  assertWarnsRegexRuntimeWarningr  r  s     r   "test_bufsize_equal_one_binary_mode2ProcessTestCase.test_bufsize_equal_one_binary_modeQ  sN     **,,"">3CD((su(M EDDs   A
A!cpuc                     [        S5       HW  nU R                  [        5         [        R                  " [
        [        R                  [        R                  S9  S S S 5        MY     g ! , (       d  f       Mk  = f)Nr  r   )r]  ro   r  r   rN   r  rO   )r&   rn  s     r   test_leaking_fds_on_error)ProcessTestCase.test_leaking_fds_on_errorX  sN     tA""#56  (2(29 76 66s   7A((
A7	c                     SS K nUR                    [
        R                  " S[        < S35      n[        R                  SU/n[        R                  " U[        R                  SS9nU   UR                  5       S   nS S S 5        U R                  WS	5        U R                  UR                  S5        g ! [        [        4 a    U R	                  S5         Nf = f! , (       d  f       Nd= f)
Nr   zneed msvcrt.CrtSetReportModezL
            import msvcrt
            import subprocess

            cmd = a  

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

            try:
                subprocess.Popen(cmd,
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE)
            except OSError:
                pass
        r   T)rM   r   r   r   )msvcrtCrtSetReportModeAttributeErrorImportErrorre  r?  r@  r  rc   rd   r   rN   rO   r   re   r   )r&   r  r   r  r  rM   s         r   test_nonexisting_with_pipes+ProcessTestCase.test_nonexisting_with_pipese  s    	:##  $ #% &		  & ~~tT*'1379 %%'*F $!,; , 	:MM89	:4 Ts   B5 *C5!CC
C*c                   ^ / mU4S jn[         R                  " US9nUR                  5          U R                  [        5         [
        R                  " [        [
        R                  [
        R                  [
        R                  S9  S S S 5        UR                  5         S nT H  n [        R                  " U5        M     Ub  Ueg ! , (       d  f       NF= f! [         a  nUn S nAMG  S nAff = f! UR                  5         S nT H4  n [        R                  " U5        M  ! [         a  nUn S nAM.  S nAff = f   Ub  Uef = f)Nc                     > [        S5       H=  n TR                  [        R                  " 5       5        [        R
                  " S5        M?     g )N   gMbP?)r]  extendr   r  timesleep)rn  fdss    r   open_fds<ProcessTestCase.test_double_close_on_error.<locals>.open_fds  s/    2Y

2779%

5! r   )targetrJ   )	threadingThreadstartro   r[  r   rN   r  rO   r  r   rS   )r&   r  texcfdrx   r  s         @r   test_double_close_on_error*ProcessTestCase.test_double_close_on_error  s   	" H-			""7+  '1(2(29 , FFHCHHRL  	 ! ,+  C FFHCHHRL C  	 sf   C5 AC

C5 *C

CC5 
C2%C--C25ED&$E&
D=	0D8	2E8D=	=Ec                 &  ^^ [         R                  " [        R                  SS/5      mU R	                  TR
                  S5        / mUU4S jn[        R                  " SU5      nUR                  5         [        (       a  SnOSnTR                  [        R                  S9  U R	                  TR
                  US	S
9  TR                  5         U R	                  TR
                  USS
9  UR                  5         U R	                  SSU4SU4/T5        g)z?Issue21291: Popen.wait() needs to be threadsafe for returncode.r   zimport time; time.sleep(12)Nc                    > TR                  ST R                  5       45        T R                  5         T R                  5         TR                  ST R                  45        T R                  5         TR                  ST R                  45        g )Nthread-start-poll-resultthread-after-kill-and-waitthread-after-second-wait)r_  r~  r  r,   r   )r  resultss   r   kill_proc_timer_threadDProcessTestCase.test_threadsafe_wait.<locals>.kill_proc_timer_thread  sb    NN6		DEIIKIIKNN8$//JKIIKNN6HIr   皙?r   irm   z*unexpected result in wait from main threadmsgz&unexpected result in second main wait.)r  Nr  r  )r   rN   rc   rd   re   r   r  Timerr  r*   r,   r   r  r  )r&   r  r  expected_errorcoder  r  s       @@r   test_threadsafe_wait$ProcessTestCase.test_threadsafe_wait  s   !>!@ A$/	J OOC!78		9!" "$
 			'//	0*<I 	 	K 			*<E 	 	G 	

 	<79KL57IJL !	"r   c                     SR                  S5      n[        R                  " [        R                  SU/5      nU R                  UR                  S5      [        U5      5        g )N;)zimport subprocess, syszJretcode = subprocess.call([sys.executable, '-c', 'print("Hello World!")'])zassert retcode == 0r   s   Hello World!)r  r   r   rc   rd   r  r  r  )r&   r   r   s      r   test_issue8780ProcessTestCase.test_issue8780  sQ     xx # $
 ((#..$)EF))/:E&MJr   c                    [         R                  " 5       u  p[         R                  " 5       u  p4[         R                  " 5       u  pV [        R                  " S/XUS9  U R                  [
        R                  R                  U5      5        U R                  [
        R                  R                  U5      5        U R                  [
        R                  R                  U5      5        g ! [         a    [
        R                  " U5        [
        R                  " U5        [
        R                  " U5        [
        R                  " U5        [
        R                  " U5        [
        R                  " U5         GNf = f)N*rJ   )r   mkstempr   rN   r[  r   rS   remover.   r  exists)r&   ifhandleifnameofhandleofnameefhandleefnames          r    test_handles_closed_on_exception0ProcessTestCase.test_handles_closed_on_exception  s     $++-#++-#++-		se8 	/0/0/0  	HHXIIfHHXIIfHHXIIf	s   C) )BE;:E;c                    [         R                  " [        [         R                  [         R                  [         R                  S9nU R	                  UR
                  R                  5        U R	                  UR                  R                  5        U R	                  UR                  R                  5        UR                  SS-  5        g )NrJ      x   )
r   rN   r   rO   r   rL   rS   rM   rK   r   rT   s     r   test_communicate_epipe&ProcessTestCase.test_communicate_epipe  sw    _#-??$.OO$.OO5 	''&	dUl#r   c                 ~   SSS/SS S4/ SQSS S4[         R                  " S5      SS	S
4/n[        R                  R                  R                  [        R                  S5         U H;  u  p#pE[        R                  " X#S9nXFl        U R                  [        U5      U5        M=     S S S 5        g ! , (       d  f       g = f)N)lsT{   z#<Popen: returncode: 123 args: 'ls'>)daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTr   zP<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
my-tool.py   z4<Popen: returncode: 7 args: <FakePath 'my-tool.py'>>rC   r!  )r   r
   r  r   patchobjectr   rN   r   re   repr)r&   casesr  r!  r   sxrU   s          r   	test_reprProcessTestCase.test_repr	  s    DaVUD"JK+UD_a-uaCE	
 ]]  ''
(8(8:JK(-$D$$S6#  a"- ). LKKs   #AB..
B<c                     [         R                  " [        [         R                  S9nU R	                  UR
                  R                  5        UR                  5         UR                  SS-  5        g )Nr   r  r  )	r   rN   r   rO   r   rK   rS   r,   r   rT   s     r   !test_communicate_epipe_only_stdin1ProcessTestCase.test_communicate_epipe_only_stdin  sH    _#-??4&		dUl#r   SIGUSR1zRequires signal.SIGUSR1r  zRequires os.killgetppidzRequires os.getppidc                    S n[         R                   " [         R                  U5      nU R                  [         R                   [         R                  U5        [        R                  SS/nS HE  nU[
        R                  0n[
        R                  " U40 UD6 nUR                  5         S S S 5        MG     g ! , (       d  f       MY  = f)Nc                     g r#   r3   )signumframes     r   handler7ProcessTestCase.test_communicate_eintr.<locals>.handler*      r   r   z7import os, signal;os.kill(os.getppid(), signal.SIGUSR1)r   )	signalr  r   rc   rd   r   rO   rN   r   )r&   r  old_handlerrA   streamkwprocesss          r   test_communicate_eintr&ProcessTestCase.test_communicate_eintr"  s    	mmFNNG<v~~{C89 +F*//*B!!$-"-##% .- +--s   B77
C	/proc/%d/fdzLinux specificc                    S[         R                  " 5       -  n[         R                  " U5      nU R                  [        5         [        [        [        R                  [        R                  [        R                  S9  SSS5        [         R                  " U5      nU R                  X#5        g! , (       d  f       N6= f)z;Test for the fork() failure fd leak reported in issue16327.r  rJ   N)
r   getpidlistdirro   r;   r>   r   r   rO   re   )r&   fd_directoryfds_before_popenfds_after_exceptions       r   !test_failed_child_execute_fd_leak1ProcessTestCase.test_failed_child_execute_fd_leak;  s     %ryy{2::l312##:??%??:??D 3 !jj6)? 32s   ;B//
B=z+behavior currently not supported on Windowsc                     U R                  [        5       n[        R                  " / SQ5        S S S 5        U R	                  WR
                  R                  S5        g ! , (       d  f       N5= f)N)/opt/nonexistent_binarywithsomerA   r  )ro   rP  r   rb   re   r   filenamer   s     r   %test_file_not_found_includes_filename5ProcessTestCase.test_file_not_found_includes_filenameM  sI    01QOOOP 2--/HI 21s   A
A,c                     U R                  [        5       n[        R                  " SS/SS9  S S S 5        U R	                  WR
                  R                  S5        g ! , (       d  f       N5= f)Nexit0z/some/nonexistent/directoryr@  )ro   rP  r   rN   re   r   r  r   s     r    test_file_not_found_with_bad_cwd0ProcessTestCase.test_file_not_found_with_bad_cwdS  sQ    01Qfc]0MN 2--/LM 21s   A
A+c                     U R                  [        R                  [           [        R
                  5        U R                  [        R                  [           [        R
                  5        g r#   )rP   r   rN   bytestypesGenericAliasCompletedProcessrw   r%   s    r   test_class_getitems#ProcessTestCase.test_class_getitemsY  sD    j..u5u7I7IJj99#>@R@RSr   _winapizneed subprocess._winapic                    [         R                  " [        5      nU   [        R                  R                  [         R                  S[         R                  R                  S9nU nUR                  S5        UR                  UR                  S5        S Ul        S S S 5        U R                  UR                  5       S5        S S S 5        g ! , (       d  f       N7= f! , (       d  f       g = f)NWaitForSingleObjectreturn_valuert   r   )r   rN   r   r   r  r  r  WAIT_OBJECT_0r,   assert_called_once_with_handler   re   )r&   r  r  	mock_waits       r   test_wait_negative_timeout*ProcessTestCase.test_wait_negative_timeout]  s     0JJ%%""%'//== & ?E )		"11$,,B"& 
 TYY[!, T
  Ts$   AC%5C(C
C	C
C*r3   N)r5   r6   r7   r8   rV   r[   rh   rq   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  skipIfr*   r"  r%  r(  r.  r4  r<  rD  rG  rJ  rU  r[  r_  rc   base_prefixprefixrb  	sysconfigis_python_buildre  ri  rq  ru  r{  r  r  r  r  r  r  r  r  r  r  r  r  
skipUnlessr  hasattrr  r  r  r  r  get_config_varr   r  r  r  r  r   r  r  r  r  r  r  r!  r$  r,  r/  r8  r;  rA  rD  rG  rK  rR  rr  ry  r  r  r  r  r  r  r  r  r   requires_resourcer  r  r  r  r  r  r  r  r  r  r   r  r  isdirr  r
  r  r  r  r   r(  r9   r3   r   r   rG   rG   w   s   !'F 
554'
''(''%54! +(<.)+	MDA9 __Y DEG FG
 __Y DE( F( __Y DE( F(
*=&AN
K
 __Y DEE FE __Y DE- F-$C __S__

224D4D __S__

224__Y..0:<4<44**
*9
6	/=
:	3**
>4>&))( A75.#A@B!B!F A75.#A@BB@	0 02FG
> H
> __S\\W,:<__Y--.@AQF23 ___T2@B2B3<2, __Y--.@AQF9: ___T2@B>B:
>@6< 02FG
: H
:*'//@&5"9,'2.& %FNE2*
*G83,>*1"f"$	&&C8&.,JN u%
9 &
9'-R:2"h	K1(	$."$ 324V,+-Y/.0&0-4&& }ryy{'BC)+@+@  __Y MNJ OJ
 __Y MNN ON
T Y724-4-r   rG   c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS r\R(                  " \S5      S 5       rS rS rS rS r\R6                  " \S5      S 5       rS rSrg)RunFuncTestCasein  c                 V    [         R                  SU/n[        R                  " U40 UD6$ )z4Run Python code in a subprocess using subprocess.runr   rc   rd   r   r   )r&   r   rB   argvs       r   
run_pythonRunFuncTestCase.run_pythono  s&    d+~~d-f--r   c                     U R                  S5      nU R                  UR                  S5        U R                  [        R
                  5         UR                  5         S S S 5        g ! , (       d  f       g = fr  )r9  re   r   ro   r   r   check_returncoder&   cps     r   test_returncodeRunFuncTestCase.test_returncodet  sQ    __78+z<<=! >==s   A''
A5c                     U R                  [        R                  5       nU R                  SSS9  S S S 5        U R	                  WR
                  R                  S5        g ! , (       d  f       N5= f)Nr_   Tr   r`   )ro   r   r   r9  re   r   r   r   s     r   
test_checkRunFuncTestCase.test_check{  sQ    z<<=OO6dOC >//4 >=s   A  
A.c                 n    [         R                  " [        SS9nU R                  UR                  S5        g )NTr   r   )r   r   r   re   r   r=  s     r   test_check_zeroRunFuncTestCase.test_check_zero  s&    ^^O48*r   c                     U R                  [        R                  5         U R                  SSS9  S S S 5        g ! , (       d  f       g = f)Nrk   r  rm   )ro   r   rp   r9  r%   s    r   test_timeoutRunFuncTestCase.test_timeout  s5    
 z889OO.O? :99s	   :
Ac                 x    U R                  S[        R                  S9nU R                  SUR                  5        g )Nr   r   r   r9  r   rO   rv   rL   r=  s     r   test_capture_stdout#RunFuncTestCase.test_capture_stdout  s*    ___Z___Egryy)r   c                 x    U R                  S[        R                  S9nU R                  SUR                  5        g )Nr   r   r   )r9  r   rO   rv   rM   r=  s     r   test_capture_stderr#RunFuncTestCase.test_capture_stderr  s1    __C$.OO  5gryy)r   c                    [         R                  " 5       nU R                  UR                  5        UR	                  S5        UR                  S5        U R                  SU[        R                  S9nU R                  SUR                  5        g )Nr   r   r   r  r   )r   r   r   rS   r   r   r9  r   rO   rv   rL   )r&   r   r>  s      r   r   +RunFuncTestCase.test_check_output_stdin_arg  sj    ##%!


__I  2 	gryy)r   c                 z    U R                  SS[        R                  S9nU R                  SUR                  5        g )Nr   r   )r   rL   r   rK  r=  s     r   r   +RunFuncTestCase.test_check_output_input_arg  s5    __Hjoo  7 	gryy)r   c                    [         R                  " 5       nU R                  UR                  5        UR	                  S5        UR                  S5        U R                  [        SS9 nU R                  SUSS9nS S S 5        U R                  SWR                  R                  S   5        U R                  S	UR                  R                  S   5        g ! , (       d  f       Na= f)
Nr   r   r   r  r   r   r   rK   r   )r   r   r   rS   r   r   ro   r   r9  rv   r   rA   r   s       r   r   6RunFuncTestCase.test_check_output_stdin_with_input_arg  s    ##%!


zK  MPQ__%?+-W % >FM 	gq{{//23gq{{//23M Ms   'C
C"c                     U R                  [        R                  5       nU R                  SS[        R                  S9nS S S 5        g ! , (       d  f       g = f)Nr   rl   )rn   rL   )ro   r   rp   r9  rO   )r&   r   r>  s      r   r   )RunFuncTestCase.test_check_output_timeout  sC    z889Q3
 ! 9B :99s    A		
Ac                     [         R                  R                  5       nSUS'   U R                  SUS9nU R	                  UR
                  S5        g )Nr   r   zCimport sys, os;sys.exit(33 if os.getenv("FRUIT")=="banana" else 31)r   !   )r   r   r   r9  re   r   )r&   r   r>  s      r   test_run_kwargsRunFuncTestCase.test_run_kwargs  sM    ""w__ M!'  ) 	+r   c                    [         (       a  SOSn[        R                  " U5      nUc  U R                  U S35        [	        U5      n[
        R                  " U[
        R                  S9nU R                  UR                  S5        U R                  [        5         [
        R                  " U[
        R                  SS9  S S S 5        g ! , (       d  f       g = f)Nztree.comr  z required for this testr   r   T)rL   r!  )r*   r   r   re  r
   r   r   r  re   r   ro   r   )r&   progr  ress       r   test_run_with_pathlike_path+RunFuncTestCase.test_run_with_pathlike_path  s     'YzD||D!<MMTF"9:;~nnT**<*<=+y)NN4
(:(:$G *))s   %C


Cc                     [         R                  " [        R                  5      nUSS/n[        R
                  " U5      nU R                  UR                  S5        g )Nr   s   import sys; sys.exit(57)9   )r   r  rc   rd   r   r   re   r   r&   r  rA   r_  s       r   &test_run_with_bytes_path_and_arguments6RunFuncTestCase.test_run_with_bytes_path_and_arguments  sC    {{3>>*d78nnT",r   c                     [        [        R                  5      nUSS/n[        R                  " U5      nU R                  UR                  S5        g )Nr   zimport sys; sys.exit(57)rc  )r
   rc   rd   r   r   re   r   rd  s       r   )test_run_with_pathlike_path_and_arguments9RunFuncTestCase.test_run_with_pathlike_path_and_arguments  s?    'd67nnT",r   z#Maybe test trigger a leak on Ubuntuc                 T    [         R                  SS/n[        R                  " U0 S9  g )Nr   r   r   r7  )r&   rA   s     r   test_run_with_an_empty_env*RunFuncTestCase.test_run_with_an_empty_env  s$     f- 	t$r   c                     U R                  SSS9nU R                  SUR                  5        U R                  SUR                  5        g )Nz>import sys;sys.stdout.write('BDFL'); sys.stderr.write('FLUFL')Tcapture_outputr   s   FLUFL)r9  rv   rL   rM   r=  s     r   test_capture_output#RunFuncTestCase.test_capture_output  sE    __ : -1  2 	gryy)h		*r   c                     U R                  [        SS9   U R                  S[        R                  S9  S S S 5        g ! , (       d  f       g = f)Nz"STDOUT can only be used for stderrr  r   r   )ro   r   r9  r   r   r%   s    r   test_stdout_stdout"RunFuncTestCase.test_stdout_stdout  sG    z9  <OO6#-#4#4  6< < <s	   =
Ac                    [         R                  " 5       nU R                  UR                  5        U R	                  [
        SS9 nU R                  SSUS9nS S S 5        U R                  SWR                  R                  S   5        U R                  SUR                  R                  S   5        g ! , (       d  f       Na= f)	NzAExpected ValueError when stdout and capture_output args supplied.r  r   T)ro  rL   rL   r   ro  
r   r   r   rS   ro   r   r9  rv   r   rA   r   s       r   #test_stdout_with_capture_output_arg3RunFuncTestCase.test_stdout_with_capture_output_arg      ##%!z"  $'(__%?59" % FF$
 	h 0 0 34&(8(8(;<$ $   B22
C c                    [         R                  " 5       nU R                  UR                  5        U R	                  [
        SS9 nU R                  SSUS9nS S S 5        U R                  SWR                  R                  S   5        U R                  SUR                  R                  S   5        g ! , (       d  f       Na= f)	NzAExpected ValueError when stderr and capture_output args supplied.r  r   T)ro  rM   rM   r   ro  rv  r   s       r   #test_stderr_with_capture_output_arg3RunFuncTestCase.test_stderr_with_capture_output_arg  ry  rz  z)requires posix like 'sleep' shell commandc                 F   [         R                  " 5       n [        R                  " SSSSS9  U R	                  S5        U R                  WU-
  SSW S	3S
9  g! [        R
                   a4  n[         R                  " 5       n[        R                  " 5       n SnAN\SnAff = f)zJOutput capturing after a timeout mustn't hang forever on open filehandles.zsleep 3Trl   )r!  rn   ro  zTimeoutExpired not raised.Ng      ?z/TimeoutExpired was delayed! Bad traceback:
```
z```r  )	r  	monotonicr   r   ru   rp   	traceback
format_exc
assertLess)r&   before_secsr  
after_secsstackss        r   .test_run_with_shell_timeout_and_capture_output>RunFuncTestCase.test_run_with_shell_timeout_and_capture_output  s     nn&	4NN9D#*.0 II23
[0#O!(#' 	 	( (( 	,)J))+F	,s   A B ,*BB c                 v   [         R                  " S5      n[        R                  " [        R
                  SSU/SS9nUR                  R                  5       nU R                  [        U5      SU5        U R                  US   R                  S5      5        U R                  US	   R                  S
5      5        g )Nz            from subprocess import *
            run("echo hello", shell=True, text=True)
            check_output("echo hello", shell=True, text=True)
            z-Xwarn_default_encodingr   Trn  r  r   s   <string>:2: EncodingWarning: r   s   <string>:3: EncodingWarning: )r?  r@  r   r   rc   rd   rM   
splitlinesre   r  r  r  )r&   r   r>  liness       r   test_encoding_warning%RunFuncTestCase.test_encoding_warning#  s       
 ^^S^^-FdS+/1		$$&UQ.a++,LMNa++,LMNr   r3   N)r5   r6   r7   r8   r9  r?  rB  rE  rH  rL  rO  r   r   r   r   r[  r`  re  rh  r  r/  r*   rk  rp  rs  rw  r|  r*  r  r  r9   r3   r   r   r5  r5  n  s    .
"5
+
@*
*
	**49,H-- $IJ% K%+6
=
=  __Y KL( M(Or   r5  c                      S H)  n [         (       d  M   [         R                  " U 5        U s  $    [        R                  " S5      e! [         a     MP  f = f)N)staffnogroupgrpnobody	nfsnobodyz?No identified group name to use for this test on this platform.)r  getgrnamKeyErrorr  r  )
name_groups    r   _get_test_grp_namer  1  sS    H
3Z(  I  abb	  s   A
AAzPOSIX specific testsc                   b	  ^  \ rS rSrU 4S jrS rS rS rS r " S S\	R                  5      r\R                  " S	5      S
 5       r\R                  " S	5      S 5       r\R"                  " \R&                  R)                  S5      (       + S5      S 5       rS r\R.                  " \" \S5      =(       a	    \" \S5      S5      S 5       r\R.                  " \" \S5      S5      S 5       r\R"                  " \" \S5      S5      S 5       r\R.                  " \" \S5      S5      S 5       r\R"                  " \" \S5      S5      S 5       r\R.                  " \" \S5      S5      S  5       r\R.                  " \" \S5      S5      S! 5       rS" r S# r!\R"                  " \"=(       d    \" \S$5      (       + S%5      S& 5       r#S' r$S( r%S) r&S* r'S+ r(S, r) " S- S.\	R                  5      r*\R"                  " \R&                  R)                  S/5      (       + S05      S1 5       r+S2 r,\R"                  " \-R\                  S3:H  S45      S5 5       r/S6 r0S7 r1S8 r2S9 r3S: r4S; r5S< r6\R"                  " \-R\                  Ro                  S=5      S>5      S? 5       r8S@ r9SA r:SB r;SC r<SD r=SE r>SF r?SG r@SH rASI rBSJ rCSK rDSL rESM rFSN rGSO rHSP rISQ rJSR rKSS rLST rMSU rNSV rOSW rPSX rQSY rRSZ rSS[ rT\R"                  " \-R\                  Ro                  S\5      =(       a9    \R                  " S]5      R                  \R                  " S^5      R                  :H  S_5      S` 5       rW\XR                  " SaSb5      Sc 5       rZSd r[Se r\Sf r]Sg r^Sh r_Si r`Sj raSk rbSl rcSm rd\XR                  Sn 5       rf\XR                  So 5       rgSp rhSq riSr rjSs rk\R.                  " \lStL=(       a	    \" \lSu5      Sv5      Sw 5       rmSx rnSy roSz rpS{ rq\R"                  " \rR                  " S|5      (       + S}5      \R                  " S	5      \R                  " S~SS9S 5       5       5       rt\R"                  " \rR                  " S|5      (       + S}5      \R"                  " \-R\                  S:g  S5      \R                  " S~SS9S 5       5       5       ruSrvU =rw$ )POSIXProcessTestCasei=  c                 0   > [         TU ]  5         SU l        g )Nz/_this/pa.th/does/not/exist)superr'   _nonexistent_dirr&   	__class__s    r   r'   POSIXProcessTestCase.setUp@  s     =r   c                      [         R                  " U R                  5        U R                  SU R                  -  5        W$ ! [         a  nUn S nAU$ S nAff = f)Nz,chdir to nonexistent directory %s succeeded.)r   chdirr  ru   r[  )r&   rx   desired_exceptions      r   _get_chdir_exception)POSIXProcessTestCase._get_chdir_exceptionD  s`    		-HHT**+ IID++, -    	" !" ! 	"s    A 
AAAc                    U R                  5       n [        R                  " [        R                  SS/U R
                  S9nU R                  SU-  5        g! [         a|  nU R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5         SnAgSnAff = f)z;Test error in the child raised in the parent for a bad cwd.r   r   r@  Expected OSError: %sNr  r   rN   rc   rd   r  ru   r[  re   rc  strerrorr  r&   r  rU   rx   s       r   test_exception_cwd'POSIXProcessTestCase.test_exception_cwdQ  s     557
	B  #..$!;%)%:%:<A II,/@@A  	E .44agg>.77D.77DD	E   0A 
C!A2CCc                    U R                  5       n [        R                  " [        R                  SS/U R
                  S9nU R                  SU-  5        g! [         a|  nU R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5         SnAgSnAff = f)zBTest error in the child raised in the parent for a bad executable.r   r   r  r  Nr  r  s       r   test_exception_bad_executable2POSIXProcessTestCase.test_exception_bad_executable`  s     557
	B  #..$!;,0,A,ACA II,/@@A  	E .44agg>.77D.77DD	Er  c                    U R                  5       n [        R                  " U R                  SS/5      nU R	                  SU-  5        g! [
         a|  nU R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5         SnAgSnAff = f)z?Test error in the child raised in the parent for a bad args[0].r   r   r  N)
r  r   rN   r  ru   r[  re   rc  r  r  r  s       r   test_exception_bad_args_0.POSIXProcessTestCase.test_exception_bad_args_0o  s     557		B  $"7"7r!BCA II,/@@A  	E .44agg>.77D.77DD	Es   #A
 

CA2CCc                       \ rS rSrS rSrg)&POSIXProcessTestCase.PopenNoDestructori  c                     g r#   r3   r%   s    r   __del__.POSIXProcessTestCase.PopenNoDestructor.__del__  r  r   r3   N)r5   r6   r7   r8   r  r9   r3   r   r   PopenNoDestructorr    s    	r   r  zsubprocess._fork_execc                     S nX!l         [        R                  " S[        S9   U R	                  [
        5         U R                  S/5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)z>Test error passing done through errpipe_write in the good casec                      U S   nSR                  [        R                  5      R                  5       n[        R
                  " USU-   S-   5        g)N   z{:x}s   OSError:   :r   )rP  rc  EISDIRr  r   r   )rA   errpipe_writeerr_codes      r   proper_errorHPOSIXProcessTestCase.test_exception_errpipe_normal.<locals>.proper_error  sA     HM}}U\\299;HHH]K($:T$ABr   subprocess.os.waitpidside_effectnon_existent_commandN)r  r   r  ChildProcessErrorro   IsADirectoryErrorr  )r&   	fork_execr  s      r   test_exception_errpipe_normal2POSIXProcessTestCase.test_exception_errpipe_normal  sc    	 !-ZZ/$57""#45&&(>'?@ 67 7557 7s"   A.AA.
A+	'A..
A<c                 z  ^ SmU4S jnX!l         [        R                  " S[        S9   U R	                  [
        R                  5       nU R                  S/5        SSS5        SSS5        U R                  [        T5      [        WR                  5      5        g! , (       d  f       NE= f! , (       d  f       NN= f)zRTest error passing done through errpipe_write where its not
in the expected formats    ޭc                  >   > U S   n[         R                  " UT5        g)Nr  r   )r   r   )rA   r  
error_datas     r   	bad_errorGPOSIXProcessTestCase.test_exception_errpipe_bad_data.<locals>.bad_error  s     HM HH]J/r   r  r  r  N)r  r   r  r  ro   r   SubprocessErrorr  rv   r  rw   r   )r&   r  r  rx   r  s       @r   test_exception_errpipe_bad_data4POSIXProcessTestCase.test_exception_errpipe_bad_data  s     )
	 !*ZZ/$57"":#=#=>!&&(>'?@ ?7
 	d:&AKK(89 ?>7 7s#    B,	BB,
B)	%B,,
B:/proc/self/statuszneed /proc/self/statusc                 h   [         R                  " SS/SS9nUR                  5        H  nUR                  S5      (       d  M  Un  O   U R	                  S5        [         R                  " SS/SS9nUR                  5        H  nUR                  S5      (       d  M  Un  O   U R                  WWSS	9  g )
Ncatr  F)restore_signalss   SigIgnz&SigIgn not found in /proc/self/status.Tz=restore_signals=True should've unblocked SIGPIPE and friends.r  )r   r   r  r  re  assertNotEqual)r&   default_proc_statusr  default_sig_ign_maskrestored_proc_statusrestored_sig_ign_masks         r   test_restore_signals)POSIXProcessTestCase.test_restore_signals  s     )55+, %' (224Dy))'+$ 5
 MMBC)66+, $ & )335Dy))(,% 6 	02G!3 	 	4r   c                 "    [         R                  " [        R                  SS/SS9n[        R
                  " S5      n[        U5      nU R                  X#5        g ! [         a)  nUR                  [        R                  :w  a  e  S nAg S nAff = f)Nr   zimport os; print(os.getsid(0))T)start_new_sessionr   )r   r   rc   rd   r   getsidintr  PermissionErrorrc  EPERM)r&   r   
parent_sid	child_sidrx   s        r   test_start_new_session+POSIXProcessTestCase.test_start_new_session  sy    
	7,,^^T+KL&*,F 1JFI
6  	ww%++% &	   &A 
B%B		Bsetpgidgetpgidz!no setpgid or getpgid on platformc                 "    [         R                  " [        R                  SS/SS9n[        R
                  " S5      n[        U5      nU R                  X#5        g ! [         a)  nUR                  [        R                  :w  a  e  S nAg S nAff = f)Nr   zimport os; print(os.getpgid(0))r   )process_group)r   r   rc   rd   r   r  r  r  r  rc  r  )r&   r   parent_pgid
child_pgidrx   s        r   test_process_group_0)POSIXProcessTestCase.test_process_group_0  sy    
	9,,^^T+LM"#%F **Q-KVJ8  	ww%++% &	r  setreuidzno setreuid on platformc           	      v   [         R                  " 5       nUS:w  a  SOSU/n[        R                  S:w  a  SOSn[        b(   [        R
                  " U5        UR                  U5        U H  nS H  nU R                  XES9    [        R                  " [        R                  SS	/UUS9n[        U[        5      (       a!  [        R
                  " U5      R                  nOUn[        U5      nU R!                  X5        S S S 5        M     M     U R-                  [.        5         [        R0                  " [2        S
S9  S S S 5        U R-                  [4        5         [        R0                  " [2        [         R6                  [         R8                  SS9  S S S 5        [        c<  Ub8  U R-                  [.        5         [        R0                  " [2        US9  S S S 5        g g g ! [         a    S n GNf = f! ["         at  n	U	R$                  [$        R&                  :X  a0  U R!                  U	R(                  [        R                  5         S n	A	GNKU R+                  U	R(                  5         S n	A	GNlS n	A	ff = f! , (       d  f       GM  = f! , (       d  f       GNO= f! , (       d  f       GN= f! , (       d  f       g = f)N    darwinr  unknownr  )user	close_fdsr   zimport os; print(os.getuid())rt   r              )r-  r   r  )r   geteuidrc   r  pwdgetpwnamr_  r  subTestr   r   rd   
isinstancerw   pw_uidr  re   r  rc  EACCESr  r}  ro   r   r}   r   OverflowErrorrN  r   )
r&   uid
test_usersname_uidr  r  r   user_uid
child_userrx   s
             r   	test_userPOSIXProcessTestCase.test_user  s    jjl"e|e<
"||x78Y? X&!!(+
 D*	\\t\A?!+!8!8!$!@!B%)*3	"5 &dC00'*||D'9'@'@H'+H%([
((>% BA + . z*!!/; + }-!!/&(iiRZZeM . ;8/"":.%%oHE /. 0;E     + :77ell2 ,,QZZHH --ajj99	: BA( +* .-
 /.sz   'G I3'G2+AI3$J8J:J*G/.G/2
I0	<AI+	I3
I+	%I3+I0	0I33
J
J
J'*
J8z setreuid() available on platformc                     U R                  [        5         [        R                  " [        SS9  S S S 5        g ! , (       d  f       g = f)N  r  ro   r   r   r}   r   r%   s    r   test_user_error$POSIXProcessTestCase.test_user_error  s,    z*!!/> +**	   9
Asetregidzno setregid() on platformc           	      b   [         R                  " 5       nUS:w  a  SOS/n[        5       n[        b  UR	                  U5        X!/-    H  nS H  nU R                  XES9    [        R                  " [        R                  SS/UUS9n[        U[        5      (       a!  [        R                  " U5      R                  nOUn[        U5      nU R                  X5        S S S 5        M     M     U R'                  [(        5         [        R*                  " [,        SS9  S S S 5        U R'                  [.        5         [        R*                  " [,        [         R0                  [         R2                  S	S
9  S S S 5        [        c8  U R'                  [(        5         [        R*                  " [,        US9  S S S 5        g g ! [          a&  n	U R#                  U	R$                  5         S n	A	GNS n	A	ff = f! , (       d  f       GM  = f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr  r  r  )groupr  r   zimport os; print(os.getgid())rt   r  r  )r-  r   r  )r   getegidr  r  r_  r  r   r   rc   rd   r  rw   r  gr_gidr  re   r  r}  r  ro   r   r}   r   r  rN  r   )
r&   gid
group_listr  r  r  r   	group_gidchild_grouprx   s
             r   
test_groupPOSIXProcessTestCase.test_group"  s   jjl"e|e7
')
?j)%'E*	\\\CA!+!8!8!$!@!B&+*3	"5 &eS11(+U(;(B(BI(-I&)&k((@! DC + (, z*!!/< + }-!!/&(iiRZZuN . ;"":.%%oZH /. ' + 6))!**556 DC& +* .-
 /.s[   G+!'F8AG+G>88HH 8
G(	G#	G+#G(	(G++
G;>
H
H 
H.z setregid() available on platformc                     U R                  [        5         [        R                  " [        SS9  S S S 5        g ! , (       d  f       g = f)Nr
  r  r  r%   s    r   test_group_error%POSIXProcessTestCase.test_group_errorL  s,    z*!!/? +**r  	setgroupszno setgroups() on platformc                 b    [         R                  " 5       nUS:w  a  SOS/nU R                  XS9  g )Nr  r  r  r  )r   r  _test_extra_groups_impl)r&   r  r  s      r   test_extra_groups&POSIXProcessTestCase.test_extra_groupsQ  s.    jjl"e|e7
$$$Dr   c                 J    U R                  [        R                  " 5       / S9  g )Nr   )r!  r   r  r%   s    r   test_extra_groups_empty_list1POSIXProcessTestCase.test_extra_groups_empty_listW  s    $$"$Er   c                   [        5       n[        b  UR                  U5         [        R                  " [
        R                  SS/US9n[        R                  " 5       n[        R                  " U5      n[        bH  U Vs/ s H:  n[        U[        5      (       a   [        R                  " U5      R                  OUPM<     nnOUnU R                  [!        U5      [!        U5      5        [        c9  U R+                  [,        5         [        R.                  " [0        U/S9  S S S 5        g g s  snf ! ["         a6  n	U R%                  U	R&                  5        U R)                  S5         S n	A	NS n	A	ff = f! , (       d  f       g = f)Nr   z;import os, sys, json; json.dump(os.getgroups(), sys.stdout)extra_groupsz-setgroup() EPERM; this test may require root.)r  r  r_  r   r   rc   rd   r   	getgroupsjsonloadsr  rw   r  r  re   setr  r}  r  re  ro   r   r}   r   )
r&   r  r  r  r   parent_groupschild_groupsgdesired_gidsrx   s
             r   r!  ,POSIXProcessTestCase._test_extra_groups_impl[  sF   ')
?j)	C,,^^TRT!+-F LLNM::f-L)3 5)3A ;EQ:L:LQ 6 6RS S)3   5  *S.L0AB;"":.%%o4><A /.  5  	Kajj)MMIJJ	K  /.s*   &D0  AD+E30
E0:,E++E03
Fc                 d   U R                  [        5         [        R                  " [        S/S9  S S S 5        U R                  [        5         [        R                  " [        [
        R                  [
        R                  S/S9  S S S 5        g ! , (       d  f       Ne= f! , (       d  f       g = f)Nrt   r(  r  )r-  r   r)  )ro   r   r   r}   r   r   rN  r   r%   s    r   &test_extra_groups_invalid_gid_t_values;POSIXProcessTestCase.test_extra_groups_invalid_gid_t_values{  ss    z*!!/E + z*!!/&(iiRZZ05w8 +* +* +*s   B9B!
B!
B/umaskzPOSIX umask() is not available.c           	         S n [         R                  " 5       n[        R                  R	                  US5      n[
        R                  " [        R                  SSU< S3/SS9  [        R                  " U5      R                  S-  nSnU R                  XC[        U5       S	[        U5       3S
9  Ub  [        R                  " U5        g g ! Ub  [        R                  " U5        f f = f)Nbeansr   zopen(z, 'w').close()+   )r6  i  i  z != r  )r   r\  r   r  r  r   r}   rc   rd   statst_modere   octr   rh  )r&   rm  namer;  expected_modes        r   
test_umaskPOSIXProcessTestCase.test_umask  s     	&%%'F77<<0D !!^^TU4(.+IJ!
 ggdm++e3G!M]$'$6#7tCL>!J  L !f% "v!f% "s   B,C C'c                 &   [         R                  " 5          [        R                  " [        R
                  SS/5      nUR                  5         S S S 5        U R                  WR                  * [        R                  5        g ! , (       d  f       N:= f)Nr   zimport os; os.abort())r   r  r   rN   rc   rd   r,   re   r   r  SIGABRTrT   s     r   test_run_abort#POSIXProcessTestCase.test_run_abort  sa    ((*  #..$"9"; <AFFH + 	!,,7	 +*s   8B
Bc                 .   [         R                  " [        [        R                  5      * S5      n[        U5      nU R                  SUR                  5       5        U R                  SU5        U R                  [        [        R                  5      U5        g )Nfake cmdr  SIG)r   r   r  r  rB  rw   rv   lowerr&   r   error_strings      r   "test_CalledProcessError_str_signal7POSIXProcessTestCase.test_CalledProcessError_str_signal  si    ++S-@,@*M3x 	h 2 2 45 	e\*c&..)<8r   c                 l    [         R                  " SS5      n[        U5      nU R                  SU5        g )NiKirF  zunknown signal 9876543.r   r   rw   rv   rI  s      r   *test_CalledProcessError_str_unknown_signal?POSIXProcessTestCase.test_CalledProcessError_str_unknown_signal  s,    ++HjA3x/>r   c                 l    [         R                  " SS5      n[        U5      nU R                  SU5        g )Nr  rF  znon-zero exit status 2.rN  rI  s      r   $test_CalledProcessError_str_non_zero9POSIXProcessTestCase.test_CalledProcessError_str_non_zero  s,    ++Az:3x/>r   c                     [         R                  " [        R                  SS/[         R                  S S9nU   U R                  UR                  R                  5       S5        S S S 5        g ! , (       d  f       g = f)Nr   r  c                  0    [         R                  " SS5      $ )Nr   apple)r   putenvr3   r   r   <lambda>3POSIXProcessTestCase.test_preexec.<locals>.<lambda>  s    		'70Kr   )rL   
preexec_fn   applerz  rT   s     r   test_preexec!POSIXProcessTestCase.test_preexec  s^     cnndEF %/OO(K	M
 QXX]]_h7 QQs   +A--
A;c                 ^   S n [         R                  " [        R                  SS/US9nU R	                  S5        g ! [         R
                   a*  nU R                  [         R                  S5         S nAg S nAf[         a)  nU R                  SUR                  S   5         S nAg S nAff = f)	Nc                      [        S5      e)Nz'What if two swallows carried a coconut?r   r3   r   r   raise_it=POSIXProcessTestCase.test_preexec_exception.<locals>.raise_it  s    FGGr   r   r   rZ  zEException raised by preexec_fn did not make it to the parent process.z)Expected a ValueError from the preexec_fncoconutr   )r   rN   rc   rd   ru   r  r  
_fork_execr   rv   rA   )r&   ra  rU   rx   s       r   test_preexec_exception+POSIXProcessTestCase.test_preexec_exception  s    	H	0  #..$!;,46A II / 0 )) 	AOO))?A A  	0MM)QVVAY//	0s!   &= B, A66B,B''B,c                   $    \ rS rSrSrS rS rSrg)+POSIXProcessTestCase._TestExecuteChildPopeni  z3Used to test behavior at the end of _execute_child.c                 X    Xl         [        R                  R                  " U /UQ70 UD6  g r#   )	_testcaser   rN   r   )r&   testcaserA   rB   s       r   r   4POSIXProcessTestCase._TestExecuteChildPopen.__init__  s%    %N%%d<T<V<r   c           
      .    [         R                  R                  " U /UQ70 UD6  [        S5       Vs/ s H(  n[        R
                  " S[        R                  5      PM*     nn U Hh  nU R                  R                  XPR                  R                  5       U R                  R                  5       U R                  R                  5       4SS9  Mj     U H  n[        R                  " U5        M     g s  snf ! U H  n[        R                  " U5        M     f = f! [        S5       Vs/ s H(  n[        R
                  " S[        R                  5      PM*     Os  snf nn U Hh  nU R                  R                  XPR                  R                  5       U R                  R                  5       U R                  R                  5       4SS9  Mj     U H  n[        R                  " U5        M     f ! U H  n[        R                  " U5        M     f = f= f)N   	/dev/zeroz!At least one fd was closed early.r  )r   rN   rC   r]  r   r`  O_RDONLYrk  r   rK   rm  rL   rM   rS   )r&   rA   rB   r  devzero_fdsr  s         r   rC   :POSIXProcessTestCase._TestExecuteChildPopen._execute_child  s   %  //FtFvF ).a2(01  "ww{BKK@(0  2%)22 "ZZ%6%6%8$++:L:L:N%)[[%7%7%9%;$G 3 I * * *2 * * ).a2(01  "ww{BKK@(02 2%)22 "ZZ%6%6%8$++:L:L:N%)[[%7%7%9%;$G 3 I * * *k *sB   $D /C3%A.C8 8!DH*/EH"A.G0 H0!HH)rk  N)r5   r6   r7   r8   rE   r   rC   r9   r3   r   r   _TestExecuteChildPopenri    s    A	=	%r   rt  rp  z/dev/zero required.c           
          S nU R                  [        R                  5         U R                  U [        [        R
                  [        R
                  [        R
                  US9  SSS5        g! , (       d  f       g= f)z6Issue16140: Don't double close pipes on preexec error.c                  .    [         R                  " S5      e)Nz-force the _execute_child() errpipe_data path.)r   r  r3   r   r   ra  WPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes.<locals>.raise_it  s    ,,CE Er   )rK   rL   rM   rZ  N)ro   r   r  rt  r   rO   )r&   ra  s     r   0test_preexec_errpipe_does_not_double_close_pipesEPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes  sY    	E z99:''o(oojoo)8 ( E ;::s   AA//
A=c                    [         R                  " 5       n [         R                  " 5         U R                  [         R                  " 5       5        [        R
                  " [        R                  SS/S S9  U R                  [         R                  " 5       S5        [         R                  " 5         U R                  [         R                  " 5       5        [        R
                  " [        R                  SS/S S9  U R                  [         R                  " 5       S5        U(       d  [         R                  " 5         g g ! U(       d  [         R                  " 5         f f = f)Nr   r   c                      g r#   r3   r3   r   r   rX  EPOSIXProcessTestCase.test_preexec_gc_module_failure.<locals>.<lambda>	      tr   rc  z#Popen enabled gc when it shouldn't.c                      g r#   r3   r3   r   r   rX  r|  	  r}  r   zPopen left gc disabled.)
gc	isenableddisabler.   r   rb   rc   rd   enabler  )r&   enableds     r   test_preexec_gc_module_failure3POSIXProcessTestCase.test_preexec_gc_module_failure  s     ,,.	JJLR\\^,OOS^^T26'35R\\^BD IIKOOBLLN+OOS^^T26'35OOBLLN,EF

 7

 s   D
D? ?Er  z!setrlimit() seems to fail on OS Xc                 N    SSK JnJnJn  W" W5      nUu  pgW" USU45        U R                  X#U5         [        R                  " [        R                  SS/S S9  U R                  S5        g ! [         a  nU R                  U5         S nANS nAff = f! [         a     g f = f)Nr   )rX  rZ  RLIMIT_NPROCr   r   c                      g r#   r3   r3   r   r   rX  @POSIXProcessTestCase.test_preexec_fork_failure.<locals>.<lambda>	  r}  r   rc  z.RLIMIT_NPROC had no effect; probably superuser)rW  rX  rZ  r  r  re  r   r   rb   rc   rd   BlockingIOError)r&   rX  rZ  r  r   limitsr  rk  s           r   test_preexec_fork_failure.POSIXProcessTestCase.test_preexec_fork_failure	  s    
	CC <(	,D	*	8	LOOS^^T26'35 MMJK  	MM#	  		s(   
A/ 'B /
B9BB
B$#B$c                    [         R                  " 5       u  p[        USSS9 nUR                  S[        R
                  -  5        UR                  S[        R                  -  5        S S S 5        [        R                  " US5        [        R                  " U5      nUR                  5         [        R                  " U5        U R                  UR                  S5        g ! , (       d  f       N~= fNwrN  )r   z#!%s
z(exec '%s' -c 'import sys; sys.exit(47)'
i  r`   )r   r  r`  r   r   
unix_shellrc   rd   r   chmodr   rN   r,   r  re   r   )r&   r  fnamefobjrU   s        r   test_args_string%POSIXProcessTestCase.test_args_string$	  s    $$&	"c"34JJx'"4"445JJB~~& ' 5 	U#	
		%r* 54s   AC  
C.c                     U R                  [        [        R                  [        R
                  SS/SS9  U R                  [        [        R                  [        R
                  SS/SS9  g )Nr   r_   r`   startupinfocreationflagsro   r   r   rb   rc   rd   r%   s    r   r   &POSIXProcessTestCase.test_invalid_args2	  sb    *joo>>457&( 	 	* 	*joo>>457(* 	 	,r   c                 @   [         R                  R                  5       nSUS'   [        R                  " S/S[        R
                  US9nU   U R                  UR                  R                  5       R                  S5      S5        S S S 5        g ! , (       d  f       g = fNrV  r   zecho $FRUITr   r!  rL   r   s    	
r[  
r   r   r   r   rN   rO   re   rL   r8  r  r&   r   rU   s      r   test_shell_sequence(POSIXProcessTestCase.test_shell_sequence=	  so    "!wm_A$.OO!') QXX]]_22<@(K QQs   :B
Bc                 >   [         R                  R                  5       nSUS'   [        R                  " SS[        R
                  US9nU   U R                  UR                  R                  5       R                  S5      S5        S S S 5        g ! , (       d  f       g = fr  r  r  s      r   test_shell_string&POSIXProcessTestCase.test_shell_stringG	  sm    "!w]!$.OO!') QXX]]_22<@(K QQs   :B
Bc                    [         R                  " 5       u  p[        USSS9 nUR                  S[        R
                  -  5        UR                  S[        R                  -  5        S S S 5        [        R                  " US5        [        R                  " U5      n[        R                  " U5        U R                  US5        g ! , (       d  f       Nd= fr  )r   r  r`  r   r   r  rc   rd   r   r  r   rb   r  re   )r&   r  r  r  rg   s        r   test_call_string%POSIXProcessTestCase.test_call_stringQ	  s    $$&	"c"34JJx'"4"445JJB~~& ' 5 	__U#
		%R  54s   AC
Cc           	         / nS Hb  nS HY  n[         R                  R                  X#5      n[         R                  R                  U5      (       d  MH  UR	                  U5        M[     Md     U(       d  U R                  S5        Sn[         R                  R                  U5      (       a5  [         R                  R                  U5      (       d  UR	                  U5        U Hu  n[        R                  " SUS[        R                  S9nU   U R                  UR                  R                  5       R                  5       [        US5      5        S S S 5        Mw     g ! , (       d  f       M  = f)	N)z/binz	/usr/bin/z/usr/local/bin)bashkshz"bash or ksh required for this testz/bin/shzecho $0T)rd   r!  rL   r  )r   r  r  isfiler_  re  islinkr   rN   rO   re   rL   r8  r  r  )r&   shellsr,  r=  shrU   s         r   test_specific_shell(POSIXProcessTestCase.test_specific_shell^	  s    =F'WW\\&/77>>"%%MM"% ( >
 MM>?77>>"bggnnR&8&8MM"B  r(29A  !6!6!8%G:LM   s   
AE
E)	c                    [         R                   " [         R                  [         R                  5      n [        R                  " [
        R                  SS/S[        R                  [        R                  [        R                  S9n[         R                   " [         R                  U5        UR                  R                  S5        [        XA5      " U6   U$ ! [         R                   " [         R                  U5        f = f)Nr   zif 1:
                                 import sys, time
                                 sys.stdout.write('x\n')
                                 sys.stdout.flush()
                                 time.sleep(30)
                                 Tr  rK   rL   rM   r   )r  SIGINTdefault_int_handlerr   rN   rc   rd   rO   rL   r8  getattr)r&   methodrA   r  rU   s        r   _kill_process"POSIXProcessTestCase._kill_processr	  s    
 mmFMM63M3MN	6  #..$ 9% "& ,0'1(2(2	9A MM&--5 	
aD! MM&--5s   AC 'C?)netbsdopenbsdz"Due to known OS bug (issue #16762)c                 H   [         R                  " [        R                  SS/S[         R                  [         R                  [         R                  S9nUR
                  R                  S5        [        R                  " S5        [        X15      " U6   UR                  5         g )Nr   zif 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             Tr  r   )r   rN   rc   rd   rO   rL   r8  r  r  r  r   )r&   r  rA   rU   s       r   _kill_dead_process'POSIXProcessTestCase._kill_dead_process	  ss    
 cnnd 5! "
 (,#-??$.OO$.OO5 	
a

1D!	r   c                     U R                  S[        R                  5      nUR                  5       u  p#U R	                  SU5        U R                  UR                  5       S5        g )Nsend_signals   KeyboardInterruptr   )r  r  r  r   rv   r  r,   r&   rU   r  rM   s       r   test_send_signal%POSIXProcessTestCase.test_send_signal	  sJ    }fmm<MMO	*F3AFFHa(r   c                     U R                  S5      nUR                  5       u  p#U R                  US5        U R                  UR                  5       [        R
                  * 5        g )Nr  r   )r  r   re   r,   r  SIGKILLr  s       r   	test_killPOSIXProcessTestCase.test_kill	  sK    v&MMO	%FNN?3r   c                     U R                  S5      nUR                  5       u  p#U R                  US5        U R                  UR                  5       [        R
                  * 5        g )N	terminater   )r  r   re   r,   r  SIGTERMr  s       r   test_terminate#POSIXProcessTestCase.test_terminate	  sK    {+MMO	%FNN?3r   c                 D    U R                  S[        R                  5        g Nr  )r  r  r  r%   s    r   test_send_signal_dead*POSIXProcessTestCase.test_send_signal_dead	  s    v}}=r   c                 &    U R                  S5        g Nr  r  r%   s    r   test_kill_dead#POSIXProcessTestCase.test_kill_dead	  s    'r   c                 &    U R                  S5        g Nr  r  r%   s    r   test_terminate_dead(POSIXProcessTestCase.test_terminate_dead	  s    ,r   c                     / nU HB  n[         R                  " U5      n[         R                  " U5      nUR                  X5U45        MD     U$ r#   )r   get_inheritabledupr_  )r&   save_fdsr  r  inheritablesaveds         r   	_save_fdsPOSIXProcessTestCase._save_fds	  sF    B,,R0KFF2JEJJ;/0  
r   c                 r    U H1  u  p#n[         R                  " X2US9  [         R                  " U5        M3     g )N)r  )r   dup2rS   )r&   r  r  r  r  s        r   _restore_fds!POSIXProcessTestCase._restore_fds	  s*    &)"B{GGE;7HHUO '*r   c                    SnU R                  U5      nU H  u  pEnUS:X  d  M  Un  O    U H  n[        R                  " U5        M     [        R                  " [
        R                  SS/U[        R                  [        R                  S9R                  5       u  pxU R                  US5        U R                  US5        U R                  U5        g ! U R                  U5        f = f)Nr   r   r  rJ   r[  ry  )r  r   rS   r   rN   rc   rd   rO   r   re   r  )	r&   r  rK   	saved_fdsr  r  r  r   r   s	            r   check_close_std_fds(POSIXProcessTestCase.check_close_std_fds	  s     NN3'	&/"B{Qw '0	) !'';)<
 #(oo(oo/ 0;{} C S(+S),i(Di(s   BC C'c                 (    U R                  S/5        g r|   r  r%   s    r   test_close_fd_0$POSIXProcessTestCase.test_close_fd_0	        !%r   c                 (    U R                  S/5        g Nr   r  r%   s    r   test_close_fd_1$POSIXProcessTestCase.test_close_fd_1	  r  r   c                 (    U R                  S/5        g )Nr  r  r%   s    r   test_close_fd_2$POSIXProcessTestCase.test_close_fd_2	  r  r   c                 *    U R                  SS/5        g )Nr   r   r  r%   s    r   test_close_fds_0_1'POSIXProcessTestCase.test_close_fds_0_1	        !Q(r   c                 *    U R                  SS/5        g )Nr   r  r  r%   s    r   test_close_fds_0_2'POSIXProcessTestCase.test_close_fds_0_2	  r  r   c                 *    U R                  SS/5        g )Nr   r  r  r%   s    r   test_close_fds_1_2'POSIXProcessTestCase.test_close_fds_1_2	  r  r   c                 *    U R                  / SQ5        g )N)r   r   r  r  r%   s    r   test_close_fds_0_1_2)POSIXProcessTestCase.test_close_fds_0_1_2	  s     	  +r   c                    [         R                  " S5      n[         R                  " S5      n [         R                  " S5        [         R                  " S5        [        R                  " [
        R                  SS/5      R                  5         [         R                  " US5        [         R                  " US5        [         R                  " U5        [         R                  " U5        g! [         R                  " US5        [         R                  " US5        [         R                  " U5        [         R                  " U5        f = f)z=Issue #15798: Popen should work when stdio fds are available.r   r   r   z*print('AssertionError:0:CLOEXEC failure.')N)	r   r  rS   r   rN   rc   rd   r,   r  )r&   	new_stdin
new_stdouts      r   test_small_errpipe_write_fd0POSIXProcessTestCase.test_small_errpipe_write_fd	  s    FF1I	VVAY
	!HHQKHHQK
 NND@B CCG46 GGIq!GGJ"HHYHHZ  GGIq!GGJ"HHYHHZ s   A!C* *AEc                 >   [        S5       Vs/ s H  n[        R                  " 5       PM     nn U VVs/ s H  u  p4UPM	     nnnU H  u  p4[        R                  " U5        M     [        R
                  " US   S5        [        R                  " US   SS5        U R                  [        S5      5      n [        U5       H  u  p7[        R                  " Xs5        M     [        R                  " [        R                  SS/US   US   US   S9nUR                  5         U R                  U5        U H  n[        R                  " USS5        M     [        R                   " US   S	5      n	[        R                   " US   S	5      R#                  5       n
U R%                  U	S
5        U R%                  U
S5        U H  n[        R&                  " U5        M     g s  snf s  snnf ! U R                  U5        f = f! W H  n[        R&                  " U5        M     f = f)N   r      STDINr   r   Zimport sys; got = sys.stdin.read();sys.stdout.write("got %s"%got); sys.stderr.write("err")r  rJ   r  	   got STDIN   err)r]  r   r  r   unlinkr   rn  r  	enumerater  r   rN   rc   rd   r,   r  r8  r  re   rS   )r&   rn  tempsr  r  temp_fdsr  temp_fdrU   r   r   s              r   test_remapping_std_fds+POSIXProcessTestCase.test_remapping_std_fds
  s   -21X6X!!#X6(	,12EyrEH2 #			%  # HHXa[(+HHXa[!Q' uQx0I-#,X#6KBGGG( $7
 $$cnndN&O #1+#A;#A;( !!),Q"  ''(1+t,C''(1+t,224CS,/S&)  Q 726 !!),  s<   GG; GA3G; 7A+G% "BG; G; %G88G; ;!Hc                    [        S5       Vs/ s H  n[        R                  " 5       PM     nnU VVs/ s H  u  pgUPM	     nnn U H  u  pg[        R                  " U5        M     U R                  [        S5      5      n	 [        U5       H  u  pj[        R                  " X5        M     [        R                  " US5        [        R                  " USS5        [        R                  " [        R                  SS/UUUS9nUR                  5         U H  n[        R                  " USS5        M     [        R                  " US5      n[        R                  " US5      R!                  5       nU R#                  U	5        U R%                  US5        U R%                  US	5        U H  n[        R&                  " U5        M     g s  snf s  snnf ! U R#                  U	5        f = f! U H  n[        R&                  " U5        M     f = f)
Nr  r  r   r   r  rJ   r  r  r  )r]  r   r  r   r  r  r  r  r   rn  r   rN   rc   rd   r,   r8  r  r  re   rS   )r&   stdin_no	stdout_no	stderr_norn  r  r  r  r  r  r  rU   r   r   s                 r   check_swap_fds#POSIXProcessTestCase.check_swap_fds?
  s   -21X6X!!#X6(-.92B.'	"			%  # uQx0I-#,X#6KBGGG( $7 8,1a( $$cnndN&O #$$& "BHHRA& # ggi.ggi.446!!),S,/S&)  Q 7.B !!),  s/   GG
;G& C.G 05G& G##G& &!Hc                     U R                  SSS5        U R                  SSS5        U R                  SSS5        U R                  SSS5        U R                  SSS5        U R                  SSS5        g )Nr   r   r  )r  r%   s    r   test_swap_fds"POSIXProcessTestCase.test_swap_fdso
  sn    Aq!$Aq!$Aq!$Aq!$Aq!$Aq!$r   c                    U R                  [        S5      5      n U HF  n[        R                  " 5        n[        R
                  " UR                  5       U5        S S S 5        MH     [        [        S5      5      [        U5      -
  R                  5       n[        R                  " U5        / SQn0 n[        X5       H  u  pIXHXy   '   M     [        R                  " S5      n
[        [        S5      5      [        U5      -
  R                  5       n[        R                  " [        R                   SU
[#        U5      /40 UD6nU R%                  US5        [        X5       H  u  pI[        R&                  " US[        R(                  5        [        R*                  " US5      n[-        [/        [0        UR3                  S5      5      5      n[        R                  " SU S	U S
U SU SU	 S35      nU R%                  U	/X5        M     U R5                  U5        g ! , (       d  f       GM
  = f! U R5                  U5        f = f)Nr  rJ   z
                import os, sys
                skipped_fd = int(sys.argv[1])
                for fd in range(3):
                    if fd != skipped_fd:
                        os.write(fd, str(fd).encode('ascii'))
            r   r   r  r  z"
                    When testing z to z4 redirection,
                    parent descriptor z5 got redirected
                    to descriptor(s) z instead of descriptor z.
                )r  r]  r   r   r   r  rm  r-  rg  rS   zipr?  r@  r   rb   rc   rd   rw   re   rn  SEEK_SETr8  r  mapr  r9  r  )r&   from_fdsto_fdsr  from_fdffd_to_close	arg_namesrB   to_fdr   
skipped_fdrg   
read_bytesread_fdsr  s                   r   #_check_swap_std_fds_with_one_closed8POSIXProcessTestCase._check_swap_std_fds_with_one_closedw
  s   NN58,	&	)#++-GGAHHJ0 .- $ uQx=3x=8==?KHH[!5IF"%h"7+2y'( #8 ?? $ D eAh-#f+5::<J#..$c*o!N +#)+BR#"%h"7!R[[1WWWd3
C):):7)C DEoo +""*4x 8''.i 0&&.Z/Fug N' 
   %(8 #8 i(I .-H i(s#   H+ &HF*H+ 
H(	"	H+ +H>c                     [         R                  " [        S5      S5       H;  n[         R                  " [        S5      S5       H  nU R	                  X5        M     M=     g )Nr  r  )	itertoolscombinationsr]  permutationsr.  )r&   r$  r%  s      r   !test_swap_std_fds_with_one_closed6POSIXProcessTestCase.test_swap_std_fds_with_one_closed
  sF    !..uQx;H#00q1=88J > <r   c                    S n [         R                  " [        US9  U R                  S5        g ! [         aD  nU R                  [         R                  5        U R                  [        U5      S5         S nAg S nAf[         R                   aD  nU R                  [         R                  5        U R                  [        U5      S5         S nAg S nAff = f)Nc                      [        S5      e)N   surrogate:r`  r3   r   r   prepareCPOSIXProcessTestCase.test_surrogates_error_message.<locals>.prepare
  s    /00r   rc  z1Expected ValueError or subprocess.SubprocessErrorr8  z!Exception occurred in preexec_fn.)r   rb   r   ru   r   r}  re  re   rw   r  assertIsNotNone)r&   r9  r   s      r   test_surrogates_error_message2POSIXProcessTestCase.test_surrogates_error_message
  s    	1	KOO"$ IIIJ  	;j334SX'9::)) 	L  !6!67SX'JKK	Ls    0 
C:A99C:CCc                    S GHS  u  pUR                  SS5      nS[        U5      -  n[        R                  R	                  5       nX%U'   SUS'   Un[
        R                  " [        R                  SU/US9nUR                  S	5      nU R                  UR                  S5      [        U5      5        UR                  SS5      nS
[        U5      -  n[        R                  R	                  5       nX5U'   [
        R                  " [        R                  SU/US9nUR                  S	5      nU R                  UR                  S5      [        U5      5        GMV     g )N))testu   abc)u   test42r  rN  z&import os; print(ascii(os.getenv(%s)))CLC_ALLr   r   s   
z'import os; print(ascii(os.getenvb(%s))))r  r  r   r   r   r   r   rc   rd   r   re   r9  r  )r&   keyvalueencoded_valuescriptr   decoded_valuerL   s           r   test_undecodable_env)POSIXProcessTestCase.test_undecodable_env
  s-   GJC!LL2CDM >S	IF**//#CH  CM!M,,v.F ]]7+FV]]73U=5IJ **W&78C>cJF**//#C$H,,v.F ]]7+FV]]73U=5IJ5 Hr   c                 ,   [         R                  " [        S   5      n[        [        SS  5      n[         R                  R                  [        S   5      u  p4[         R                  " U5      n[        R                  " U/U-   5      nU R                  US5        SUSR                  U5      R                  S5      4-  n[        R                  " USS9nU R                  US5        [         R                  R                  5       nX7S'   [        R                  " U/U-   US	9nU R                  US5        [         R                  R                  5       n[         R                  " U5      US
'   [        R                  " U/U-   US	9nU R                  US5        g )Nr   r   s   '%s' %s r   Tr  PATHr   s   PATH)r   r  r   r  r  r2  r   rb   re   r  r  r   r   environb)	r&   abs_programrA   r  programexitcoder  r   envbs	            r   test_bytes_program'POSIXProcessTestCase.test_bytes_program
  sC   kk/!"45OAB'(oa&89++g& ??K=#561% K$)>)>w)GHH??3d31% jjooF??G9T>s;1% {{!D)W??G9T>t<1%r   c                    [         R                  " SSS9n[         R                  " SSS9n[        R                  " [        R
                  U/[        R                  [        R                  [        R                  SS9nU R                  UR                  S5        [        R                  " [        R
                  U/[        R                  SS9nUR                  5       u  pV[        [        [        UR                  S	5      5      5      n[        UR                  R                  5       UR                  R                  5       UR                   R                  5       /5      nU R#                  Xx-  S
U< SXx-  < 35        g )Nzinput_reader.pysubprocessdatasubdirfd_status.pyF)rK   rL   rM   r  r   rL   r     ,zExpected no fds from z to be open in child, found )r   findfiler   rN   rc   rd   rO   r   r   r-  r#  r  r2  rK   rm  rL   rM   r.   )	r&   sleeper	fd_statusp1p2r   error
result_fdsunwanted_fdss	            r   test_pipe_cloexec&POSIXProcessTestCase.test_pipe_cloexec
  s   ""#4=MN$$^<LM	s~~w7$.OOJOO%/__G 	,s~~y9%/__G (S&,,t"456
BHHOO-ryy/?/?/AII,,.0 1 	2  ,Z-FH	Ir   c                   ^
^ [         R                  " SSS9n[         R                  " SSS9nSnUS-  S-   n[        R                  " [        R
                  U/[        R                  [        R                  SS	9m
[        R                  " [        R
                  X#/T
R                  [        R                  SS	9mU R                  T
R                  5        U R                  TR                  5        U
4S
 jnU4S jnU R                  U5        U R                  U5        T
R                  R                  U5        T
R                  R                  5         [        R                  " TR                  // / S5      u  pxn	U R                  US5        U R                  TR                  R!                  5       U5        T
R                  R                  5         TR                  R                  5         g )Nzqcat.pyrU  rV  zqgrep.pys   zxcvbn      
F)rK   rL   r  c                  H   >  T R                  5         g ! [         a     g f = fr#   r  ProcessLookupError)r^  s   r   kill_p1BPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p1  #    %     
!!c                  H   >  T R                  5         g ! [         a     g f = fr#   ri  )r_  s   r   kill_p2BPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p2   rm  rn  rU  zThe child hung)r   r[  r   rN   rc   rd   rO   rL   r   r,   rK   r   rS   selectr  re   r8  )r&   qcatqgrepsubdatarp  rk  rp  	readfilesignored1ignored2r^  r_  s             @@r   test_pipe_cloexec_real_tools1POSIXProcessTestCase.test_pipe_cloexec_real_tools
  s]   	2BC  4DE{U"s~~t4$.OOJOO(-/ s~~u>$&IIjoo(-/ 	  	
	
 	  
t
(.ryyk2r2(N%	X	#34)40
		
		r   c                   ^
 [         R                  " SSS9n[        R                  " 5       nU R	                  [        R
                  US   5        U R	                  [        R
                  US   5        [        U5      m
[        S5       Hg  n[        R                  " [        R                  [        R                  5      nU R	                  [        R
                  U5        T
R                  U5        Mi     T
 H  n[        R                  " US5        M     [        R                  " [        R                   U/[        R"                  SS	9nUR%                  5       u  pg[        ['        [(        UR+                  S
5      5      5      nU R-                  UT
-  T
S5        [        R                  " [        R                   U/[        R"                  SS	9nUR%                  5       u  pg[        ['        [(        UR+                  S
5      5      5      nU R/                  UT
-  S5        U R1                  SUS5        [        U
4S j[        S5       5       5      n	[        R                  " [        R                   U/[        R"                  SU	S9nUR%                  5       u  pg[        ['        [(        UR+                  S
5      5      5      nU R/                  X-
  T
-  S5        U R1                  SUS5        g )NrX  rU  rV  r   r   	   TFrY  rZ  zSome fds were closedzSome fds were left openzSubprocess failedc              3   D   >#    U  H  nTR                  5       v   M     g 7fr#   )rg  ).0r  r  s     r   	<genexpr>6POSIXProcessTestCase.test_close_fds.<locals>.<genexpr>W  s     ;(Q(,,..(s    ro  rL   r  pass_fdsz'Some fds not in pass_fds were left open)r   r[  r   r  r   rS   r-  r]  r`  devnullrq  addset_inheritabler   rN   rc   rd   rO   r   r#  r  r2  re   r.   rv   )r&   r]  r  r  r  rU   r   ignoredremaining_fdsfds_to_keepr  s             @r   test_close_fds#POSIXProcessTestCase.test_close_fds3  s(   $$^<LM	ggi#a&)#a&)s8qAR[[1BOOBHHb)LL 
 Br4(  cnni8$.OOuF--/CV\\$%78918/	1 cnni8$.OOtE--/CV\\$%78912	4a(;< ;%(;;cnni8$.OOt&13 --/CV\\$%789-5AB	Da(;<r   freebsdz/devz/dev/fdz.Requires fdescfs mounted on /dev/fd on FreeBSDc                 J   [         R                  " SSS9n[        R                  " [        R
                  S[        R                  " SU-  5      /[        R                  S9nUR                  5       u  p4UR                  5       nU R                  [        U5      SSU-  S	9  [        [        [        US
   R!                  5       R#                  S5      5      5      n[        [        [        US   R!                  5       R#                  S5      5      5      nU R%                  Xv-  SS	9  g)z;Confirm that issue21618 is fixed (may fail under valgrind).rX  rU  rV  r   aK  
        import os, resource, subprocess, sys, textwrap
        open_fds = set()
        # Add a bunch more fds to pass down.
        for _ in range(40):
            fd = os.open(os.devnull, os.O_RDONLY)
            open_fds.add(fd)

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

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

        max_fd_open = max(open_fds)

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

        rlim_cur, rlim_max = resource.getrlimit(resource.RLIMIT_NOFILE)
        try:
            # 29 is lower than the highest fds we are leaving open.
            resource.setrlimit(resource.RLIMIT_NOFILE, (29, rlim_max))
            # Launch a new Python interpreter with our low fd rlim_cur that
            # inherits open fds above that limit.  It then uses subprocess
            # with close_fds=True to get a report of open fds in the child.
            # An explicit list of fds to check is passed to fd_status.py as
            # letting fd_status rely on its default logic would miss the
            # fds above rlim_cur as it normally only checks up to that limit.
            subprocess.Popen(
                [sys.executable, '-c',
                 textwrap.dedent("""
                     import subprocess, sys
                     subprocess.Popen([sys.executable, %r] +
                                      [str(x) for x in range({max_fd})],
                                      close_fds=True).wait()
                     """.format(max_fd=max_fd_open+1))],
                close_fds=False).wait()
        finally:
            resource.setrlimit(resource.RLIMIT_NOFILE, (rlim_cur, rlim_max))
        r   r  z(expected exactly two lines of output:
%rr  r   rZ  r   zSome fds were left open.N)r   r[  r   rN   rc   rd   r?  r@  rO   r   r  re   r  r-  r#  r  r  r2  r.   )r&   r]  rU   r   unused_stderroutput_lines
opened_fdsr  s           r   %test_close_fds_when_max_fd_is_lowered:POSIXProcessTestCase.test_close_fds_when_max_fd_is_loweredc  s   
 $$^<LM	 cnndHOO/	^ _/	05 0` #-//a03d !"((*\*AH6Q 	 	SS,q/"7"7"9"?"?"EFG
C\!_%:%:%<%B%B4%HIJ37 	 	9r   rU  r   c           
         [         R                  " SSS9n[        5       n[        S5       H  n[        R
                  " 5       nU R                  [        R                  US   5        U R                  [        R                  US   5        [        R                  " US   S5        [        R                  " US   S5        UR                  U5        M     U GH  n[        R                  " [        R                  U/[        R                  SU4S9nUR                  5       u  px[        [!        ["        UR%                  S	5      5      5      n	X%1-
  n
U R'                  XYS
5        U R)                  X-  S5        U R+                  [,        5       nU R)                  [        R.                  " [0        SU4S95        S S S 5        U R'                  S[3        WR4                  5      5        GM     g ! , (       d  f       N9= f)NrX  rU  rV  r   r   r   Tr  rZ  zfd to be passed not passedzfd to be closed passedF)r  r  zoverriding close_fds)r   r[  r-  r]  r   r  r   rS   r  updater   rN   rc   rd   rO   r   r#  r  r2  rv   r.   assertWarnsr  rb   r   rw   warning)r&   r]  r  r)  r  r  rU   r   r  r  to_be_closedcontexts               r   test_pass_fds"POSIXProcessTestCase.test_pass_fds  s~   $$^<LM	5qA'')COOBHHc!f-OOBHHc!f-s1vt,s1vt,OOC   B  #..)!<(24+-&2A  mmoOFCd); <=M#d?LMM"-IJ]957 !!.1W  '"'2&": ; 2 MM0#goo2FG%  21s   +G&&
G4	c                 .   [         R                  " SSS9n[        R                  " 5       u  p#U R	                  [        R
                  U5        U R	                  [        R
                  U5        [        R                  " US5        [        R                  " US5        X#4n[        R                  U/nU[        [        [        U5      5      -  n[        R                  " U[        R                  SUS9nUR                  5       u  px[!        [        ["        UR%                  S5      5      5      n	U R'                  U	[!        U5      SU-  5        U R'                  [        R(                  " U5      S5        U R'                  [        R(                  " U5      S5        g )	NrX  rU  rV  TFr  rZ  z	output=%a)r   r[  r   r  r   rS   r  rc   rd   r  r#  rw   r   rN   rO   r   r-  r  r2  re   r  )
r&   rF  r  non_inheritabler  rA   rU   r   r  r  s
             r   test_pass_fds_inheritable.POSIXProcessTestCase.test_pass_fds_inheritable  s/   !!.9IJ')wwy$+./2
;-
?E21'Sh'((T$.OOt&.0 --/#c6<<-./ 	c(m[6-AB 	++K8$?++O<eDr   c           	      ^   [         R                  " SSS9n/ n[        S5       Hg  n[        R                  " [        R
                  [        R                  5      nU R                  [        R                  U5        UR                  U5        Mi     [        R                  " 5       u  pVU R                  [        R                  U5        U R                  [        R                  U5        UR                  SU5        [        R                  " [        R                  U/US   US   US   SUS9   [        R                   " US	5      nS
S
S
5        WR#                  S5       Vs1 s H  n[%        U5      iM     n	nU R'                  U	1 Sk[)        U5      -  SU< 35        g
! , (       d  f       N^= fs  snf )z7Regression test for https://bugs.python.org/issue32270.rX  rU  rV  r  r   r   T)rK   rL   rM   r  r  r  NrZ  >   r   r   r  zoutput=)r   r[  r]  r   r`  r  O_RDWRr   rS   r_  r  insertr   rN   rc   rd   r8  r2  r  re   	frozenset)
r&   r]  r  r  r  stdout_rstdout_wr   numr  s
             r   test_pass_fds_redirected-POSIXProcessTestCase.test_pass_fds_redirected  sB   $$^<LM	qARYY/BOOBHHb)OOB 
  WWY(+(+8$s~~y9$,QK%-a[%-a[(,'/1 WWXt,F1 $*<<#56#5Cs3x#56i)H*==
?ST1 1 7s   )FF*
F'c                     [         R                  " [        R                  S5       n[        R
                  " [        XS9nUR                  5         S S S 5        g ! , (       d  f       g = f)Nr+)rL   rK   rQ   r`  r   r  r   rN   r   r,   r&   inoutrU   s      r   %test_stdout_stdin_are_single_inout_fd:POSIXProcessTestCase.test_stdout_stdin_are_single_inout_fd  @    WWRZZ&%  (-<AFFH '&&   *A
A'c                     [         R                  " [        R                  S5       n[        R
                  " [        XS9nUR                  5         S S S 5        g ! , (       d  f       g = f)Nr  r   r  r  s      r   &test_stdout_stderr_are_single_inout_fd;POSIXProcessTestCase.test_stdout_stderr_are_single_inout_fd  s@    WWRZZ&%  (-=AFFH '&&r  c                     [         R                  " [        R                  S5       n[        R
                  " [        XS9nUR                  5         S S S 5        g ! , (       d  f       g = f)Nr  )rM   rK   r  r  s      r   %test_stderr_stdin_are_single_inout_fd:POSIXProcessTestCase.test_stderr_stdin_are_single_inout_fd  r  r  c                 4   [         R                  " SSS9n[        R                  " [        R
                  U/[        R                  [        R                  S9nUR                  5       u  p4U R                  SUR                  SUR                  S5      -  5        g )Nzsigchild_ignore.pyrU  rV  r   r   z6sigchild_ignore.py exited non-zero with this error:
%sr   )r   r[  r   rN   rc   rd   rO   r   re   r   r9  )r&   sigchild_ignorerU   rL   rM   s        r   test_wait_when_sigchild_ignored4POSIXProcessTestCase.test_wait_when_sigchild_ignored"  s{    !**+?2BDcnno>$.OOJOOMALL +:w/+0 	1r   c           	         [         R                  " S5      n[        R                  " [        R
                  SS/[        R                  SS9nUR                  nU R                  UR                  5         U R                  UR                  S5      S5        U R                  X1R                  " U// / S5      S   5        UR                  5         g ! UR                  5         f = f)	Nrr  r   z$import sys;sys.stdout.write("apple")r   )rL   rY   rf  s   applg        )r   import_moduler   rN   rc   rd   rO   rL   r   rS   re   r8  rv   rr  r,   )r&   rr  rU   r'  s       r   test_select_unbuffered+POSIXProcessTestCase.test_select_unbuffered-  s     ,,X6cnnd:; %/OO%&	(
 HH 	QVVAY0MM!]]A3B<Q?@FFHAFFHs   4A	C C c           	         [         R                  " [        R                  SS/[         R                  [         R                  S9nU R                  UR                  R                  5        U R                  UR                  R                  5        [        U5      nUR                  n[        R                  " S[        45         S nS S S 5        [        (       a   U R                  [         R                   5        g U R#                  U[         R                    Vs/ s H  n[        U5      PM     sn5        g ! , (       d  f       Nt= fs  snf )Nr   z import sys, time;time.sleep(0.2)r   r   )r   rN   rc   rd   rO   r   rL   rS   rM   idpidr   check_warningsResourceWarningr*   r}  r+   rv   )r&   rU   identr  os        r   test_zombie_fast_process_del1POSIXProcessTestCase.test_zombie_fast_process_del>  s    
 cnnd01 %/OO$.OO	5
 	''1ee++R,ABA C 9j001 MM%1C1C!D1CA"Q%1C!DE CB "Es   D2E
2
E c           	      R   [         R                  " [        R                  SS/[         R                  [         R                  S9nU R                  UR                  R                  5        U R                  UR                  R                  5        [        U5      nUR                  n[        R                  " S[        45         S n[        R                  " 5         S S S 5        [         R"                  " U[$        R&                  5        [(        (       a   U R+                  [         R,                  5        O:U R/                  U[         R,                   Vs/ s H  n[        U5      PM     sn5        [0        R2                  " S5        U R5                  [6        5         [         R                  " [8        [         R                  [         R                  S9 n S S S 5        S S S 5        U R5                  [6        [         R:                  US5        [(        (       a   U R+                  [         R,                  5        g U R=                  U[         R,                   Vs/ s H  n[        U5      PM     sn5        g ! , (       d  f       GN= fs  snf ! , (       d  f       N= f! , (       d  f       N= fs  snf )Nr   zimport time;time.sleep(3)r   r   r  r   )r   rN   rc   rd   rO   r   rL   rS   rM   r  r  r   r  r  r   
gc_collectr   r  r  r  r*   r}  r+   rv   r  r  ro   r[  r  waitpidr   )r&   rU   r  r  r  r  s         r   !test_leak_fast_process_del_killed6POSIXProcessTestCase.test_leak_fast_process_del_killedV  s    cnnd./ %/OO$.OO	5
 	''1ee++R,ABA  C 	V^^$9j001 MM%1C1C!D1CA"Q%1C!DE 	

3w'!!/)3)3:=A: ( 	'2::sA69j001UJ4F4F$G4FqRU4F$GH5 CB "E: : (' %Hs<   I+I=
7JJJJ$
+
I:
J	J
J!c                   ^ [         R                  " SSS9n[        R                  " S5      mU R	                  [        R
                  T5        [        R                  " [        R                  U/[        R                  SU4S jS9nUR                  5       u  p4[        [        [        UR                  S5      5      5      nU R!                  TU5        g )	NrX  rU  rV  r   Tc                  2   > [         R                  " ST 5      $ r  )r   r  )r  s   r   rX  CPOSIXProcessTestCase.test_close_fds_after_preexec.<locals>.<lambda>  s    2r   )rL   r  rZ  rZ  )r   r[  r   r  r   rS   r   rN   rc   rd   rO   r   r-  r#  r  r2  r   )r&   r]  rU   r   r  r  r  s         @r   test_close_fds_after_preexec1POSIXProcessTestCase.test_close_fds_after_preexec  s    $$^<LM	 VVAY"%cnni8$.OOt(>@ --/CV\\$%789]+r   c                 *   SS K n[        R                  " 5       n S n[        R                  " 5         SS/S S/4S/SS S/4S/S/SS/4S/S/S S44 Hn  u  pEpgU R	                  [
        5       nUR                  XESSXgS	S	S	S	S
SSSSSSS/ SS	US5        S S S 5        U R                  S[        WR                  5      5        Mp     U(       d  [        R                  " 5         g g ! , (       d  f       NU= f! U(       d  [        R                  " 5         f f = f)Nr   c                      g r#   r3   r3   r   r   rX  5POSIXProcessTestCase.test_fork_exec.<locals>.<lambda>  s    4r   r  s   exe   envs   argTr3   rt   r   r  r  rf  Fztakes exactly)_posixsubprocessr  r  r  ro   r   r  r   rw   r   r  )	r&   r  
gc_enabledfuncrA   exe_listr-  env_listr   s	            r   test_fork_exec#POSIXProcessTestCase.test_fork_exec  s    	 \\^
 	  DIIK F8TF843TF84F8SF84F8T3/	2- &&y1S$..b#BB1adAr1be% 2    #cmm2DE-20 

 % 21$ 

 s$   AC3 -&C"1C3 "
C0	,C3 3Dc                 F   SS K n " S S5      n[        R                  " 5       n [        R                  " 5         SSSSSU" S	5      U" S
5      44 H~  nU R	                  [
        SR                  U5      S9 nUR                  S/S/SUS S/SSSSS	S
SSSSSS S S SS S5        S S S 5        U R                  S[        WR                  5      5        M     U(       d  [        R                  " 5         g g ! , (       d  f       NU= f! U(       d  [        R                  " 5         f f = f)Nr   c                   $    \ rS rSrSrS rS rSrg)JPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInti  Tc                     Xl         g r#   )rD  )r&   rD  s     r   r   SPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__init__  s    "
r   c                 V    U R                   (       a  SU l         U R                  $ [        e)NF)firstrD  r   r%   s    r   __int__RPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__int__  s     ::!&DJ::%  r   )r  rD  N)r5   r6   r7   r8   r  r   r  r9   r3   r   r   BadIntr    s    E#!r   r  )rt   r  r  rf  r   )rw   rf  )      *   l            )r   rf  )r3  r  r  ro  r   r  zfds_to_keep={}r  s   falseTr  rt   r  rf  r  )r  r  r  r  ro   r   rP  r  rv   rw   r   r  )r&   r  r  r  r  r   s         r   %test_fork_exec_sorted_fd_sanity_check:POSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check  s    	 	! 	! \\^
	IIK !#F1I&  &&",33K@ ' BEF$..!
XJk4&BB1adAdD"d$B mS-=>' * 

 B B 

 s$   AD 6+C0!1D 0
C>	:D D c                 b   [         R                  " [        5      nU   [        R                  R                  US5       n[        UR                  l        UR                  5         UR                  R                  5         S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NrK   )r   rN   r   r   r  r  BrokenPipeErrorrS   r  r   assert_called_withr&   r  mock_proc_stdins      r   ,test_communicate_BrokenPipeError_stdin_closeAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_close  sm     04::$$T730?O!!-!!446 4TT33TTs#   !B A B>B 
B	B  
B.c                    [         R                  " [        5      nU   [        R                  R                  US5       n[        UR                  l        UR                  S5        UR                  R                  S5        UR                  R                  5         S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NrK      stuff)r   rN   r   r   r  r  r  r   r  r   r%  rS   r  s      r   ,test_communicate_BrokenPipeError_stdin_writeAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_write  s     04::$$T730?O!!-X&!!99(C!!99;	 4TT33TTs#   !B<AB+B<+
B9	5B<<
C
c                 Z   [         R                  " [        R                  S/[         R                  [         R                  S9nU   [
        R                  R                  US5       n[        [        R                  S5       n[        UR                  l        UR                  5       UR                  l        UR!                  S5        UR                  R#                  5         S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)N-hr  rK   wbr  )r   rN   rc   rd   rO   r   r  r  r`  r   r  r  r5  r  rm  r#  r   r%  )r&   r  r  dev_nulls       r   ,test_communicate_BrokenPipeError_stdin_flushAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_flush  s      6&0oo'18 4::$$T73RZZ&(0?O!!-2://2CO""/X&!!99; ' 4TT&& 43TTs=   !D&DA C:!D)D:
DD
D	D
D*c                    [         R                  " [        R                  S/[         R                  [         R                  S9nU   [
        R                  R                  US5       n[        UR                  l
        UR                  SS9  UR                  R                  5         S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr  r  rK   i  rm   )r   rN   rc   rd   rO   r   r  r  r  rS   r  r   r%  r  s      r   9test_communicate_BrokenPipeError_stdin_close_with_timeoutNPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_close_with_timeout  s      6&0oo'18 4::$$T730?O!!-S)!!99;	 4TT33TTs$   !C&?B6%C6
C	 C
CN
W_STOPCODEzneed _testcapi.W_STOPCODEc                 `   [         n[        R                  " U5      n[        R                  " UR
                  SS9  [        R                  " S5      n[        R                  " SUR
                  U4S9   UR                  5       nSSS5        U R                  WS5        g! , (       d  f       N!= f)zATest wait() behavior when waitpid returns WIFSTOPPED; issue29335.r   rP  r  r  r"  N)r   r   rN   r   wait_processr  	_testcapir  r   r  r,   re   )r&   rA   r  statusr   s        r   test_stopped!POSIXProcessTestCase.test_stopped  s    
 % 	TXX2%%a(ZZ/txx>PQJ R 	R( RQs   3B
B-c                    [         R                  " [        5      n[        R                  " UR
                  SS9  U R                  UR                  5        [        R                  " S5       nUR                  [        R                  5        S S S 5        WR                  5         U R                  UR                  5        g ! , (       d  f       N:= f)Nr   r  zos.kill)r   rN   r   r   r  r  r}  r   r   r  r  r  r  assert_not_calledr;  )r&   r  	mock_kills      r   test_send_signal_race*POSIXProcessTestCase.test_send_signal_race#  s     0 	TXX2 	$//*ZZ	"iV^^, #
 	##% 	T__- #"s   + B??
Cc                    [         R                  " [        R                  SS/5      nUR                  (       d#  UR                  5         UR                  (       d  M#  [        R                  R                  USS S9   S Ul        UR                  [        R                  5        S S S 5        UR                  5         g ! , (       d  f       N= f)Nr   zexit(1)r~  c                      g r#   r3   r3   r   r   rX  =POSIXProcessTestCase.test_send_signal_race2.<locals>.<lambda>B  s    dr   new)r   rN   rc   rd   r   r~  r   r  r  r  r  r  r  rT   s     r   test_send_signal_race2+POSIXProcessTestCase.test_send_signal_race29  s     cnndI>? ,,FFH ,,, ZZq&l;ALMM&..) < 	
 <;s   <'B<<
C
c                     [         R                  " [        R                  SS/[         R                  S9n  UR                  SS9  g ! [         R                   a     Of = fM-  )Nr   z+import os, time; os.close(1), time.sleep(2)r   rl   rm   )r   rN   rc   rd   rO   r   rp   r&   r  s     r   1test_communicate_repeated_call_after_stdout_closeFPOSIXProcessTestCase.test_communicate_repeated_call_after_stdout_closeG  se    !N!P'18    -,, 	 s   A AAc                     S[          S3n[        SU5      u  p#nU R                  UR                  5       S5        U R	                  SU5        g )Nzif 1:
        import atexit
        import subprocess

        def dummy():
            pass

        class AtFinalization:
            def __del__(self):
                print("OK")
                subprocess.Popen(zu, preexec_fn=dummy)
                print("shouldn't be printed")
        at_finalization = AtFinalization()
        r   s   OKs0   preexec_fn not supported at interpreter shutdown)r   r	   re   r  rv   )r&   r   r  r   r   s        r   test_preexec_at_exit)POSIXProcessTestCase.test_preexec_at_exitR  sR    
" #2!2 3	 'tT2e,I3Or   
HAVE_VFORKz!vfork() not enabled by configure.zsubprocess._USE_POSIX_SPAWNFr  c                    U R                  [        R                  5        [        S5      Ul        U R                  [        5         [        R                  " [        R                  SS/5        S S S 5        UR                  5         U R                  UR                  R                  S   5        [        R                  R                  [        SS5         U R                  [        5         [        R                  " [        R                  SS/5        S S S 5        U R                  UR                   S   R                  S   5        S S S 5        g ! , (       d  f       N= f! , (       d  f       NS= f! , (       d  f       g = f)Nzjust testing argsr   r   rt   
_USE_VFORKF)r  r   r  RuntimeErrorr  ro   r   rc   rd   assert_called_once	call_argsrA   r   r  r  r.   call_args_list)r&   mock_fork_execs     r   test__use_vfork$POSIXProcessTestCase.test__use_vforke  s   
 	
--.%12E%F"|,NNCNND&9: -))+ 	0055b9:ZZz<?""<0f=> 1^::2>CCBGH @? -, 10 @?s0   (EE.((E3E.
E
E+	'E..
E<linuxzLinux only, requires strace.c                 Z   SnSnSnX/n [         R                  " XC/-   [         R                  [         R                  S9nUR                  nUR
                  nU(       d  SU;  a  U R                  S5        U R                  S	S
9   [        S[        R                  " SU< S35      US9nU R                  UR                  S5        S S S 5        SSSSS[        R                  " 5        3S4SSS[        R                   " 5        3S4S4 Hg  u  ppU R                  U	S
9   [        S[        R                  " SU
 SU< SU SU S3	5      US9nU R#                  UR                  S5        S S S 5        Mi     g ! [         a    SnSn GN.f = f! , (       d  f       N= f! , (       d  f       M  = f)Nz/usr/bin/stracez6--trace=clone,clone2,clone3,fork,vfork,exit,exit_groupz	/bin/true)rM   rL   rt   r   s   +++ exited with 0 +++z,strace not found or not working as expected.default_is_vfork)r=  r   zQ                    import subprocess
                    subprocess.check_call([z]))__run_using_commands	   (?i)vfork)z
!use_vforkzsubprocess._USE_VFORK = Falser   F)preexecr   zpreexec_fn=lambda: NoneFsetgidzgroup=Tsetuidzuser=)r  r   zextra_groups=[]Tz:                    import subprocess
                    zj
                    try:
                        subprocess.check_call(
                                [z
], **dict(zN))
                    except PermissionError:
                        if not z#:
                            raise)r   r   rO   r  r   rM   r[  re  r  r	   r?  r@  assertRegexr   r   getgidgetuidassertNotRegex)r&   strace_binarystrace_filtertrue_binarystrace_commanddoes_strace_work_processrg   rM   vfork_resultsub_namepreamblesp_kwargexpect_permission_errornon_vfork_results                 r   test_vfork_used_when_expected2POSIXProcessTestCase.test_vfork_used_when_expectedx  s    *P!'7
	'1~~"]2%??%--($
 *44B-44F *&8MMHI\\1\2+OO ),,7?"%@ A )7L \--}= 3  KA2		}5t<2ryy{m4d;:F
AH 8,#3OO )J " #.
8* E  78 9"%% & )7$  ##$4$8$8-H -,F
+  	BF	 32, -,s,   AE5 AF
A
F5FF

F
F*	)r  )xr5   r6   r7   r8   r'   r  r  r  r  r   rN   r  r   r  r  r  r  r*  r   r  r  r  r  r/  r0  r  r  r  r  r  r"  r%  r!  r4  r*   r?  rC  rK  rO  rR  r\  rf  rt  rx  r  rc   r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r.  r4  r<  rH  rR  rc  ry  r  r:  st_devr  r   requires_mac_verr  r  r  r  r  r  r  r  r  r  r  cpython_onlyr  r  r  r  r  r  r  r  r  r  r  r  r-  r1  r#  r;  r9   __classcell__r  s   @r   r  r  =  s   >!BBB*J,,  
ZZ'(A )A  
ZZ'(: ):* __(;<<-/4/4,7  Y/JGB	4J<>9>9  Z02KL1F M1Ff __WR,.PQ? R? Z02MN'I O'IR __WR,.PQ@ R@ [13OPE QE
 [13OPF QFA@8 __Y:gb'&:":68&8&(8	9?
?
	80 %!1!1 %2 __446KLE ME* __ "EGLGL(+	,LL!N(2 __S\\,,-BC9;;*)44>(-
)2&&&))),
!*+Z+`%()XK
K&K:&6I.'R-=` __S\\,,Y7 IWWV_++rwwy/A/H/HHEGI9GI9` b!$H %HBE<U4	1"F0)IV," % %N ' 'R7<<
< $. >$Y=46)6).,	P& __11,??8:	ZZ'(	ZZ-59I : ):I __11,??8:__S\\W,.LM	ZZ-59?I : N:?Ir   r  zWindows specific testsc                       \ rS rSrS rS rS rS rS r\	R                  S 5       rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)Win32ProcessTestCasei  c                     SnSn[         R                  " 5       nXl        X#l        [         R                  " [
        US9  g )Nr   r  r  )r   STARTUPINFOdwFlagswShowWindowrb   r   )r&   STARTF_USESHOWWINDOWSW_MAXIMIZEr  s       r   test_startupinfo%Win32ProcessTestCase.test_startupinfo  s<      ! ,,.2"- 	$/	1r   c                 h    SnSn[         R                  " UUS9n[         R                  " [        US9  g )Nr   r  )rF  rG  r  )r   rE  rb   r   )r&   STARTF_USERSHOWWINDOWrI  r  s       r   test_startupinfo_keywords.Win32ProcessTestCase.test_startupinfo_keywords  s8     !" ,,)#
 	$/	1r   c           	      ~   [         R                  " 5       n[         R                  Ul        [         R                  Ul        [        S5       GHL  n[        n[        [        R                  S5       n[         R                  " UU[         R                  US9nU   UR                  5         S S S 5        U R                  UR                  S5        S S S 5        U R                  UR                  [         R                  5        U R!                  UR"                  5        U R!                  UR$                  5        U R!                  UR&                  5        U R                  UR
                  [         R                  5        U R                  UR(                  S/ 05        GMO     g ! , (       d  f       N= f! , (       d  f       N= f)Nr  r  )rL   rM   r  r   handle_list)r   rE  rH  rF  SW_HIDErG  r]  r   r`  r   r  rN   r   r   re   r   r}  	hStdInput
hStdOutput	hStdErrorlpAttributeList)r&   r  r  r  nullr  s         r   test_startupinfo_copy*Win32ProcessTestCase.test_startupinfo_copy  sG    ,,.(==","4"4 qA!Cbjj#&$!''/3/9/@/@4?A $$&   !4 ' [00'<<>k334k445k334[44j6H6HI[88=":MN#  T '&s$   /(F.F($F.
F+'F..
F<	c                     Sn[         R                  R                  S5        [        R                  " [         R
                  S-   US9  g )N   z'    a DOS box should flash briefly ...
z# -c "import time; time.sleep(0.25)"r  )rc   rM   r   r   rb   rd   )r&   CREATE_NEW_CONSOLEs     r   test_creationflags'Win32ProcessTestCase.test_creationflags  s8    

CD=>&8	:r   c                 p    U R                  [        [        R                  [        R
                  SS/S S9  g )Nr   r_   c                      gr  r3   r3   r   r   rX  8Win32ProcessTestCase.test_invalid_args.<locals>.<lambda>  s    Qr   rc  r  r%   s    r   r   &Win32ProcessTestCase.test_invalid_args  s1    *joo>>457%. 	 	0r   c                      " S S[         5      nU R                  [        5         [        R                  " [
        U" 5       S9  S S S 5        g ! , (       d  f       g = f)Nc                       \ rS rSrSrSrg)4Win32ProcessTestCase.test_issue31471.<locals>.BadEnvi  Nr3   )r5   r6   r7   r8   keysr9   r3   r   r   BadEnvre    s    Dr   rg  r   )dictro   r   r   rN   r   )r&   rg  s     r   test_issue31471$Win32ProcessTestCase.test_issue31471
  s:    	T 	y)_&(; *))s   A
Ac                 t    [         R                  " [        R                  SS/SS9nU R	                  US5        g )Nr   r_   T)r  r`   ra   rf   s     r   r  #Win32ProcessTestCase.test_close_fds  s5    __cnnd8:(,. 	R r   c           	         SS K n[        R                  " 5       nU R                  [        R                  US   5        U R                  [        R                  US   5        / nU H:  n[        R
                  " US5        UR                  UR                  U5      5        M<     [        R                  " [        R                  SSR                  US   5      /[        R                  SS9nUR                  5       u  pgU R                  UR                   S5        [#        UR%                  5       5        [        R                  " [        R                  SSR                  US   5      /[        R                  [        R                  SS9nUR                  5       u  pgU R                  UR                   S5        U R'                  S	U5        / n[        R(                  " 5       n	S
U0U	l        [        R                  " [        R                  SSR                  US   5      /[        R                  [        R                  U	SS9nUR                  5       u  pgU R                  UR                   S5        U R'                  S	U5        [,        R.                  " S[0        45         [        R(                  " 5       n	S
US S  0U	l        [        R                  " [        R                  SSR                  US   5      /[        R                  [        R                  U	SS9nUR                  5       u  pgU R                  UR                   S5        S S S 5        g ! , (       d  f       g = f)Nr   r   Tr   z2import msvcrt; print(msvcrt.open_osfhandle({}, 0))FrY  )rL   rM   r  s   OSErrorrQ  )rL   rM   r  r  z.*overriding close_fds)r  r   r  r   rS   r  r_  get_osfhandler   rN   rc   rd   rP  rO   r   re   r   r  r  rv   rE  rV  r   r  r  )
r&   r  r  rl  r  rU   rL   rM   rQ  r  s
             r   test_close_fds_with_stdio.Win32ProcessTestCase.test_close_fds_with_stdio  s   ggi#a&)#a&)Br4(NN6//34  cnndRYYZabcZdeg$.OOuF q)FLLNcnndRYYZabcZdeg$.OOJOOW[] q)j&)  ,,.'4k&B#cnndRYYZabcZdeg$.OOJOO)4F q)j&) ++-E-;-= >$002K+8'!**EK'  #..$"V"]"]^efg^h"i"k(2
-8EKA ]]_NFQ\\1-> > >s   B'M		
Mc                 n    [         R                  " 5       n0 Ul        [         R                  " [        US9  g )Nr  r   rE  rV  rb   r   r&   r  s     r   test_empty_attribute_list.Win32ProcessTestCase.test_empty_attribute_listL  s)     ,,.&(#$/	1r   c                 r    [         R                  " 5       nS/ 0Ul        [         R                  " [        US9  g )NrQ  r  rr  rs  s     r   test_empty_handle_list+Win32ProcessTestCase.test_empty_handle_listR  s.     ,,.'4b&9#$/	1r   c                 "   [         R                  R                  5       nSUS'   [        R                  " S/S[        R
                  US9nU   U R                  SUR                  R                  5       5        S S S 5        g ! , (       d  f       g = fNphysalisr   r-  r   r  s   physalis	r   r   r   r   rN   rO   rv   rL   r8  r  s      r   r  (Win32ProcessTestCase.test_shell_sequenceX  sb    "$weWA$.OO!') MM+qxx}}7 QQs   +B  
Bc                     [         R                  R                  5       nSUS'   [        R                  " SS[        R
                  US9nU   U R                  SUR                  R                  5       5        S S S 5        g ! , (       d  f       g = frz  r|  r  s      r   r  &Win32ProcessTestCase.test_shell_stringb  s`    "$wU!$.OO!') MM+qxx}}7 QQs   +A??
Bc           	      8   S H  n[         R                  R                  5       nSUS'   [        R                  " SS[        R
                  UUS9nU   U R                  SUR                  R                  5       U5        S S S 5        M     g ! , (       d  f       M  = f)N)ansioemr{  r   r-  r   )r!  rL   r   r   r|  )r&   encr   rU   s       r   test_shell_encodings)Win32ProcessTestCase.test_shell_encodingsl  st    "CZZ__&F(F7O  a(2%+*-/A j!((--/3?  # s   ,B


B	c                 v    [         R                  " [        R                  S-   5      nU R	                  US5        g )Nz -c "import sys; sys.exit(47)"r`   ra   rf   s     r   r  %Win32ProcessTestCase.test_call_stringx  s.    __S^^=> ?R r   c                    [         R                  " [        R                  SS/[         R                  [         R                  [         R                  S9nU   UR
                  R                  S5        [        X15      " U6   UR                  5       u  pEU R                  US5        UR                  5       nS S S 5        U R                  WS5        g ! , (       d  f       N!= f)Nr   zif 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             time.sleep(30)
                             rJ   r   r   r   )r   rN   rc   rd   rO   rL   r8  r  r   re   r,   r  )r&   r  rA   rU   r  rM   r   s          r   r  "Win32ProcessTestCase._kill_process~  s    cnnd 5! " $.??$.OO$.OO5  HHMM!A%IAVS)J  	J* Qs   AC
Cc                    [         R                  " [        R                  SS/[         R                  [         R                  [         R                  S9nU   UR
                  R                  S5        [        R                  " S5        [        X15      " U6   UR                  5       u  pEU R                  US5        UR                  5       nS S S 5        U R                  WS5        g ! , (       d  f       N!= f)Nr   zif 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             sys.exit(42)
                             rJ   r   r   r  )r   rN   rc   rd   rO   rL   r8  r  r  r  r   re   r,   )r&   r  rA   rU   r  rM   rg   s          r   r  'Win32ProcessTestCase._kill_dead_process  s    cnnd 5! " $.??$.OO$.OO5  HHMM!JJqMA%IAVS)B  	R  Qs   A4C$$
C2c                 D    U R                  S[        R                  5        g r  )r  r  r  r%   s    r   r  %Win32ProcessTestCase.test_send_signal  s    =&..9r   c                 &    U R                  S5        g r  r  r%   s    r   r  Win32ProcessTestCase.test_kill  s    6"r   c                 &    U R                  S5        g r  r  r%   s    r   r  #Win32ProcessTestCase.test_terminate  s    ;'r   c                 D    U R                  S[        R                  5        g r  )r  r  r  r%   s    r   r  *Win32ProcessTestCase.test_send_signal_dead  s    v~~>r   c                 &    U R                  S5        g r  r  r%   s    r   r  #Win32ProcessTestCase.test_kill_dead  s    'r   c                 &    U R                  S5        g r  r  r%   s    r   r  (Win32ProcessTestCase.test_terminate_dead  s    ,r   r3   N)r5   r6   r7   r8   rJ  rN  rX  r]  r   r   r?  ri  r  ro  rt  rw  r  r  r  r  r  r  r  r  r  r  r  r  r9   r3   r   r   rC  rC    s    11 O6:0 < <!0.d1188
@!+*!.:#(?(-r   rC  c                       \ rS rSr " S S\R
                  5      r\R                  R                  \R
                  S5      S 5       r
S rS rS rS	 rS
 rSrg)	MiscTestsi  c                   0   ^  \ rS rSrSr/ rU 4S jrSrU =r$ )MiscTests.RecordingPopeni  z<A Popen that saves a reference to each instance for testing.c                 \   > [         TU ]  " U0 UD6  U R                  R                  U 5        g r#   )r  r   instances_createdr_  )r&   rA   rB   r  s      r   r   !MiscTests.RecordingPopen.__init__  s)    Gd-f-""))$/r   r3   )	r5   r6   r7   r8   rE   r  r   r9   r@  rA  s   @r   RecordingPopenr    s    J	0 	0r   r  _communicatec           	      ^   [         Ul         [        R                  R	                  [
        R                  S5       n[         Ul        [        R                  R	                  [
        SU R                  5         U R                  [         5         U" [        R                  SS/4S[
        R                  0UD6  SSS5        SSS5        UR                  SS  H5  nU R                  U[        R                  " SS9S	UR                   35        M7     / nUR                   H.  nU[        R                  " S
S9:X  d  M  UR                  U5        M0     U R!                  UR"                  SUR                  S9  U R%                  ['        U5      SUR                  S9  SSS5        U R                  R(                  R+                  5       nUR-                  5         UR/                  5         U R%                  / U R                  R(                  5        g! , (       d  f       GN[= f! , (       d  f       GNe= f! , (       d  f       N= f! U R                  R(                  R+                  5       nUR-                  5         UR/                  5         U R%                  / U R                  R(                  5        f = f)a_  Fake 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().
_waitrN   r   zLimport time
time.sleep(9)
import sys
sys.stderr.write('\n!runaway child!\n')rL   Nr   rm   z.no open-ended wait() after the first allowed: g      ?r  r  )KeyboardInterruptr  r   r  r  r   rN   r  ro   rc   rd   r  r!  r  rb   r_  assertLessEqual
call_countre   r  r  rg  r  r,   )r&   popenermock__communicaterB   
mock__waitrb   sigint_callsr   s           r   _test_keyboardinterrupt_no_kill)MiscTests._test_keyboardinterrupt_no_kill  s0    ):%	H"":#3#3W= *;
&ZZ&&z7'+':':<**+<="M!N E (2'9'9E >DE >< '55ab9D'' $))D"9L)889;< :
  "&55Dtyy66$++D1 6 $$Z%:%:A)3)B)B % D  \!2A%/%>%> ! @- >4 ));;??AGLLNLLNR!4!4!F!FG/ >=< <	 >=4 ));;??AGLLNLLNR!4!4!F!FGs[   .I  ;H/6H+H7H?A7H/:AH/I  
HH
H,	'H//
H=9I   A,J,c                 @    U R                  [        R                  SS9  g NgT㥛 @rm   )r  r   rb   r%   s    r   #test_call_keyboardinterrupt_no_kill-MiscTests.test_call_keyboardinterrupt_no_kill  s    ,,Z__e,Lr   c                 @    U R                  [        R                  SS9  g r  )r  r   r   r%   s    r   "test_run_keyboardinterrupt_no_kill,MiscTests.test_run_keyboardinterrupt_no_kill  s    ,,Z^^U,Kr   c                 ,    S nU R                  U5        g )Nc                  ^    [         R                  " U 0 UD6 n[        e! , (       d  f       g = fr#   )r   rN   r  )rA   rB   unused_processs      r   popen_via_context_manager[MiscTests.test_context_manager_keyboardinterrupt_no_kill.<locals>.popen_via_context_manager  s&    !!4262n'' 32s   
,)r  )r&   r  s     r   .test_context_manager_keyboardinterrupt_no_kill8MiscTests.test_context_manager_keyboardinterrupt_no_kill  s    	( 	,,-FGr   c                    U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        S n [        R
                  " 5       n[        R                  R                  US5      n[        R                  " [        (       a  SOSU-   5      u  p4U R                  US5        Ub  [        R                  " U5        g g ! Ub  [        R                  " U5        f f = f)Nz
echo xyzzyxyzzy)r   r  r   ztype zcat r   )re   r   	getoutputgetstatusoutputr   r\  r   r  r  r*   r  rmdir)r&   dirr=  r  r   s        r   test_getoutputMiscTests.test_getoutput  s    --l;WE33LA%	' 	""$C77<<U+D'77%I6T9;NF* s s   A/C C6c                 \   1 Skn[        [        R                  5      n[        5       nSSKn[        R                  R                  5        HK  u  pVUR                  S5      (       a  M  [        XdR                  45      (       a  M:  UR                  U5        MM     U R                  X#U-
  5        g)z*Ensure that __all__ is populated properly.>   r  r  r  Handlerx  r   Nr  )r-  r   __all__r  __dict__itemsr  r  
ModuleTyper  re   )r&   intentionally_excludedexportedpossible_exportsr  r=  rD  s          r   test__all__MiscTests.test__all__  s    !Rz))*5%..446KDs##%"2"2!455  & 7 	6L#LMr   r3   N)r5   r6   r7   r8   r   rN   r  r   r  r  r  r  r  r  r  r  r9   r3   r   r   r  r    s_    0)) 0 
ZZz''8)H 9)HVMLH&Nr   r  PollSelectorz!Test needs selectors.PollSelectorc                        \ rS rSrS rS rSrg)ProcessTestCaseNoPolli   c                     [         R                  U l        [        R                  [         l        [
        R                  U 5        g r#   )r   _PopenSelectororig_selector	selectorsSelectSelectorrG   r'   r%   s    r   r'   ProcessTestCaseNoPoll.setUp#  s,    '66$-$<$<
!d#r   c                 X    U R                   [        l        [        R	                  U 5        g r#   )r  r   r  rG   r1   r%   s    r   r1   ProcessTestCaseNoPoll.tearDown(  s    $($6$6
!  &r   )r  Nr4   r3   r   r   r  r     s    $
'r   r  zWindows-specific testsc                   R   ^  \ rS rSrU 4S jrU 4S jrS rS rS rS r	S r
S	rU =r$ )
CommandsWithSpacesi-  c                    > [         TU ]  5         [        R                  " SS5      u  pUR	                  5       U l        [        R                  " US5        [        R                  " U5        g )Nz.pyzte stsV   import sys;sys.stdout.write('%d %s' % (len(sys.argv), [a.lower () for a in sys.argv])))	r  r'   r   r  rH  r  r   r   rS   )r&   r'  r  r  s      r   r'   CommandsWithSpaces.setUp0  sN    ##E73[[^

 c 	
 	r   c                 b   > [         R                  " U R                  5        [        TU ]  5         g r#   )r   r  r  r  r1   r  s    r   r1   CommandsWithSpaces.tearDown9  s    
		$**r   c                    [         R                  US'   [         R                  " U0 UD6nU   U R                  UR                  R                  5       R                  S5      SU R                  -  5        S S S 5        g ! , (       d  f       g = f)NrL   mbcsz2 [%r, 'ab cd'])r   rO   rN   re   rL   r8  r9  r  )r&   rA   rB   rU   s       r   with_spacesCommandsWithSpaces.with_spaces=  se    %??xd-f-hhmm%%f-$**, QQs   AA<<
B
c           	      n    U R                  S[        R                  < SU R                  < SS< S3SS9  g )N"" "ab cdr   r  r  rc   rd   r  r%   s    r   test_shell_string_with_spaces0CommandsWithSpaces.test_shell_string_with_spacesF  s-    S^^TZZ-46=> 	 	@r   c                 Z    U R                  [        R                  U R                  S/SS9  g )Nr  r   r  r  r%   s    r   test_shell_sequence_with_spaces2CommandsWithSpaces.test_shell_sequence_with_spacesK  s$    #..$**g>aHr   c           	      p    U R                  S[        R                  < SU R                  < SS< S35        g )Nr  r  r  r  r%   s    r   test_noshell_string_with_spaces2CommandsWithSpaces.test_noshell_string_with_spacesO  s$    S^^TZZ$& 	'r   c                 \    U R                  [        R                  U R                  S/5        g )Nr  r  r%   s    r   !test_noshell_sequence_with_spaces4CommandsWithSpaces.test_noshell_sequence_with_spacesT  s    #..$**g>?r   )r  )r5   r6   r7   r8   r'   r1   r  r  r  r  r  r9   r@  rA  s   @r   r  r  -  s/    @
I'
@ @r   r  c                   2    \ rS rSrS rS rS rS rS rSr	g)	ContextManagerTestsiY  c                    [         R                  " [        R                  SS/[         R                  [         R                  S9 nU R                  UR                  R                  5       S5        U R                  UR                  R                  5       S5        S S S 5        U R                  WR                  R                  5        U R                  UR                  R                  5        g ! , (       d  f       NY= f)Nr   zAimport sys;sys.stdout.write('stdout');sys.stderr.write('stderr');r   s   stdouts   stderr)r   rN   rc   rd   rO   re   rL   r8  rM   r  r  r  s     r   	test_pipeContextManagerTests.test_pipe[  s    s~~t => &0__%/__6
 :>T[[--/;T[[--/;6 	**+**+6 6s   AC,,
C:c                     [         R                  " [        R                  SS/5       n S S S 5        U R	                  WR
                  S5        g ! , (       d  f       N+= f)Nr   zimport sys; sys.exit(100)d   )r   rN   rc   rd   re   r   r  s     r   r?  #ContextManagerTests.test_returncodeh  sL    s~~t:< =@D= 	#.	= =s   A
Ac                     [         R                  " [        R                  SS/[         R                  S9 nUR                  S5        U R                  UR                  S5        S S S 5        g ! , (       d  f       g = f)Nr   z2import sys;sys.exit(sys.stdin.read() == 'context')r   s   contextr   r  r  s     r   r  *ContextManagerTests.test_communicate_stdino  sd    s~~tHI $.??4 8<Z(T__a04 4 4s   .A,,
A:c                    U R                  [        5         [        R                  " [        [        R
                  [        R
                  S9 n S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   )ro   r  r   rN   r  rO   r  s     r   r   %ContextManagerTests.test_invalid_argsw  sV    12!!/)3)3:=A: 32: : 32s#   7A1A A1 
A.	*A11
A?c                    [         R                  " [        [         R                  [        R
                  S-  S9nUR                  5       nUR                  R                  S[        R
                  -  5        U R                  UR                  5        U R                  [        UR                  SSS5        U R                  UR                  S5        U R                  UR                  R                   5        g)z9Broken pipe error should not prevent wait() (Issue 21619)r  )rK   rY   r  Nr   )r   rN   r   rO   r   r(  	__enter__rK   r   r}  r   ro   r[  __exit__re   r  r  r  s     r   test_broken_pipe_cleanup,ContextManagerTests.test_broken_pipe_cleanup~  s    &0oo(/(=(=a(?A ~~ 	

 5 556$//*'4==$dC!,

))*r   r3   N)
r5   r6   r7   r8   r  r?  r  r   r  r9   r3   r   r   r  r  Y  s    ,/1+r   r  __main__)Hr  r   r?  r   test.supportr   r   r   r   test.support.script_helperr	   r   rc   r  rQ   r1  r   rc  r   r  r  r  r  r-  rr  r   r  r  r?  r+  test.support.os_helperr
   r  r  r  r  rW  r  PGOr  has_subprocess_supportr  r*   r4  r  rP  NotADirectoryErrorr  r  rd   r   r   TestCaser    	Exceptionr;   rN   r>   rG   r5  r  r*  r  r/  rC  r  r0  r  r  r  r5   mainr3   r   r   <module>r     s      ( & " ( 7  
  	  	           	   + ;;


9
::%%


=
>>\\W$	 @I I)');_M >>40( 8$$  &	 	>j.. >t-l t-n/@Ol @OF	c 
23}I< }I 4}I@4 
Y 89{-< {- :{-zaN!! aNH 
WY78:'O ':' 
Y 89(@, (@ :(@V3+, 3+l zMMO _{  I
  
C  
C  H
EsT   H& H5 I I I" &H21H25I IIIII"I)