
    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g)PopenExecuteChildRaiseso   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   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assertIsInstancerJ   ioBufferedIOBaserK   rL   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   )rJ   rK   rL   bufsize)r   rM   r   rN   rO   rJ   rP   	RawIOBaserK   rL   rR   r,   rS   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   TimeoutExpiredra   rb   rc   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)rl   z,Expected TimeoutExpired exception not raisedz
-1 secondsr   z	0 seconds)r   r   rb   rc   failro   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   rd   re   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]   )	rn   r   CalledProcessErrorr|   rb   rc   rd   	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rK   z1check argument not allowed, it will be overriddenFcheck)r   check_outputrb   rc   ru   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)   )	rn   r   r   r   rb   rc   rd   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')rL   r   )r   r   rb   rc   STDOUTru   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())rJ      PEAR)tempfileTemporaryFile
addCleanuprR   writeseekr   r   rb   rc   ru   )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   rb   rc   ru   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 )Nr   3import sys; print('XX' if sys.stdin.read() else '')r   s   XXr   r   rb   rc   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.rK   r   )rn   r   r   r   rb   rc   rK   rt   ru   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rJ   r   7Expected ValueError when stdin and input args supplied.rJ   r   )r   r   r   rR   r   r   rn   r   r   r   rb   rc   rt   ru   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)rk   rl   )rn   r   ro   r   rb   rc   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   ra   rb   rc   rd   )r&   newenvrf   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_stderrrn   	TypeErrorr   rM   __init____code__co_argcountrd   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")rK   rL   )r   rM   rb   rc   rN   r   rK   rR   rL   r,   rd   rJ   rS   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   rM   rb   rc   rN   r   rK   rR   rL   communicaterd   r   rstripr&   coderT   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   rJ   rK   )r   rM   rb   rc   rN   r   rK   rR   rJ   r,   rd   rL   rS   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   rM   r,   rd   r   )r&   pre_argsrB   rA   rT   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   rc   )r   pathjoindirnamerb   rc   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  rb   rc   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  rb   rc   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  )rb   rc   r  rn   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)rc   shell)r  rb   rc   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  rb   rc   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
   rb   rc   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  realpathrb   rc   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)rK   r_   )r   rM   rN   r   rK   rR   r,   rd   r   r   r  normcasereaddecode)r&   expected_cwd
python_argrB   rT   r6  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;  rb   rc   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   r@  r-  r;  rb   rc   r   r  rA  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   r@  r-  r;  rb   rc   r
   rA  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>  r3  r   r  r  curdirr   temp_cwdrn   FileNotFoundErrorr   rM   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  rc   r,  rL  )r&   rP  rQ  rR  doesntexistrS  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>  )r3  r   r  r  rM  r   rB  rn   rO  r   rM   r-  r;  )r&   rP  rQ  
abs_pythonrR  rS  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 )NrW  rX  )r3  r-  r;  rb   rc   )r&   rP  rQ  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 )NrW  r  )r;  r   r+  rb   rc   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   rM   rb   rc   rN   rJ   r   rR   r,   rd   r   rS   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   rg  r   r   )r   r   r   rR   filenor   r   lseekr   rM   rb   rc   r,   rd   r   r&   r   drT   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 rk  )r   r   r   rR   r   r   r   rM   rb   rc   r,   rd   r   r&   r   rT   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   rM   rb   rc   rN   rd   rK   r7  rS   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   rw  r   r      rx  r   r   r   rR   rl  r   rM   rb   rc   r,   r   rm  rd   r7  rn  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   rw  r   r   rx  r   r   r   rR   r   rM   rb   rc   r,   r   rd   r7  rs  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   rM   rb   rc   rN   rd   rL   r7  rS   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  rn  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  rs  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   rM   rb   rc   rN   r   rd   r   r&   rT   rK   rL   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   rM   rb   rc   rN   r   rd   rK   r7  rS   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  rs  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   rM   rb   rc   DEVNULLr,   rd   rK   rS   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   rM   rb   rc   r  r,   rd   rL   rS   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   rM   rb   rc   r  r,   rd   rJ   rS   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!")rJ   rK   rL   pipesizer   )r   pipefcntlr  rR   r   get_pagesizeunittestSkipTestr   rM   rb   rc   rN   rJ   rK   rL   rd   rl  r   killr,   )r&   test_pipe_rtest_pipe_wpipesize_defaultr  pagesize_defaultrT   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  rs   r  )r   rM   rb   rc   rN   r   r  r  r  rR   rd   rJ   rl  rK   rL   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"))rK   r   rx  )
r   r   r   r   rM   rb   rc   rN   r   rd   r&   r   rT   rK   rL   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   rM   rN   r   rd   strip)r&   r   rT   rK   _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)Nc                     SU ;   =(       d5    SU ;   =(       d)    U S:H  =(       d    U R                  S5      =(       d    U S:H  $ )N	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  )r   rM   rb   rc   rN   r   evalr  rO   listrd   )r&   r  rT   rK   rL   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  )rK   rL   r   zSTDOUT:asciireplacezSTDERR:r   s   fruit=orange)rb   rc   platformr   rM   rN   r   r   r   verboseprintr8  rd   r  )r&   r   cmdrT   rK   rL   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# )rb   rc   rn   r   r   rM   )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   rn   r   r   rM   r   rb   rc   rN   r   rd   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   rn   r   r   rM   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  rS   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   rM   rb   rc   rN   r   rd   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())rI      bananar  )r   rM   rb   rc   rN   r   rK   rR   rL   rJ   r   rd   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   rJ   rK   rL   r   g333333?rl   s   pineapple
pear
)
r   rM   rb   rc   rN   rn   ro   r   rd   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?rl   i   )
r   rM   rb   rc   rN   rn   ro   r   rd   len)r&   rT   rK   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FTrJ   rK   rL   )
r   rN   rM   r   r   rJ   
assertTrueclosedrK   rL   )r&   
stdin_pipestdout_pipestderr_pipeoptionsrT   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   rM   rb   rc   r   rd   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())rI      a)r   r  rR   r   rM   rb   rc   r   PIPE_MAX_SIZErN   r   rK   rL   rJ   r   rd   )r&   xyrT   string_to_writerK   rL   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())rI   r  s   splits   bananasplitr   )r   rM   rb   rc   rN   r   rK   rR   rL   rJ   r   r   rd   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   rJ   rK   Tzline1
zline3
zline2
   zline4
line5
line6
line7
line8)rb   rc   	SETBINARYr   rM   rN   rJ   r   flushrd   rK   readlinerR   r   r7  )r&   rA   extra_kwargrT   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   r1  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   )rL   rK   r   z#line2
line4
line5
line6
line7
line8)r   rM   rb   rc   r3  rN   r   rK   rR   rL   r   rd   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   r1  a  
                               s = sys.stdin.readline()
                               assert s == "line1\n", repr(s)
                               s = sys.stdin.read()
                               assert s == "line3\n", repr(s)
                              r   )rJ   r   line1
line3
r   )r   rM   rb   rc   r3  textwrapdedentrN   r   rd   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)rJ   rK   r   r   )r   rM   r   rN   r   rd   r   rS   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   r1  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)rJ   rL   rK   r   r=  r   zline1
line2
line3
line4
line5
zeline2
eline6
eline7
)r   rM   rb   rc   r3  r>  r?  rN   r   rK   rR   rL   r   rd   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   )rJ   rK   r   r   r   z1
2
3
4)rb   rc   r   rM   rN   r   rd   )r&   r   r   rA   popenrK   rL   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   )rJ   rK   r   r   r   r   z[{}])rb   rc   r   rM   rN   r   rd   format)r&   r   expectedr   rA   rI  rK   rL   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())rI   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reverserR   popr   rM   rb   rc   rN   r   rd   r   rmtree)r&   max_handlessofthardhandlestmpdiritmpfilerw   rT   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 cro  rw   z"a b c" d e)ab"c\ro  z	ab\"c \ d)rt  z \ro  zab\"c " \\" d)za\\\bzde fgrp  za\\\b "de fg" h)za\"br   ro  z
a\\\"b c d)za\\b cro  rw   z"a\\b c" d e)za\\b\ cro  rw   z"a\\b\ c" d eabr   zab "")rd   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   rM   rb   rc   rN   r   rJ   rR   assertIsNonepollr   r   rl  r,   rd   rS   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   rM   r   rd   r,   rS   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?rl   z0.0001r   )r   rM   rb   rc   rn   ro   r,   ru   rv   r   rd   r   SHORT_TIMEOUT)r&   rT   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  )rn   r   r   rM   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   )rX   r  rS   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   )rJ   rK   rL   rX   r   r   )r   rM   rb   rc   rN   r  rJ   r   r   rR   rl  rK   r5  r   SuppressCrashReportrZ  rd   r   )r&   linerP  r   rT   	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\  rn   r  r   rM   r  rN   )r&   rm  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)rL   r   r   r   )msvcrtCrtSetReportModeAttributeErrorImportErrorrd  r>  r?  r  rb   rc   r   rM   rN   r   rd   r   )r&   r  r   r  r  rL   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)rm  fdss    r   open_fds<ProcessTestCase.test_double_close_on_error.<locals>.open_fds  s/    2Y

2779%

5! r   )targetrI   )	threadingThreadstartrn   rZ  r   rM   r  rN   r  r   rR   )r&   r  texcfdrw   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 )Nr   zimport time; time.sleep(12)c                    > 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   irl   z*unexpected result in wait from main threadmsgz&unexpected result in second main wait.)r  Nr  r  )r   rM   rb   rc   rd   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   rb   rc   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*rI   )r   mkstempr   rM   rZ  r   rR   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 )NrI      x   )
r   rM   r   rN   r   rK   rR   rL   rJ   r   rS   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   rM   r   rd   repr)r&   casesr  r   r   sxrT   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   rM   r   rN   r   rJ   rR   r,   r   rS   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   rb   rc   r   rN   rM   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)Nr  rI   )
r   getpidlistdirrn   r;   r>   r   r   rN   rd   )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  )rn   rO  r   ra   rd   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?  )rn   rO  r   rM   rd   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#   )rO   r   rM   bytestypesGenericAliasCompletedProcessrv   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_valuers   r   )r   rM   r   r   r  r  r  WAIT_OBJECT_0r,   assert_called_once_with_handler   rd   )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   rU   rZ   rg   rp   rx   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-  r3  r;  rC  rF  rI  rT  rZ  r^  rb   base_prefixprefixra  	sysconfigis_python_buildrd  rh  rp  rt  rz  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.  r7  r:  r@  rC  rF  rJ  rQ  rq  rx  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   rF   rF   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   rF   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$ )Nr   rb   rc   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  )r8  rd   r   rn   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_   )rn   r   r   r8  rd   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   rd   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)Nrj   r  rl   )rn   r   ro   r8  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   r8  r   rN   ru   rK   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   )r8  r   rN   ru   rL   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   rR   r   r   r8  r   rN   ru   rK   )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   rK   r   rJ  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   rJ   r   )r   r   r   rR   r   r   rn   r   r8  ru   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   rk   )rm   rK   )rn   r   ro   r8  rN   )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   r8  rd   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)rK   r   )r*   r   r   rd  r
   r   r   r  rd   r   rn   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  rb   rc   r   r   rd   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)rb  )r
   rb   rc   r   r   rd   r   rc  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   r6  )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)r8  ru   rK   rL   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   )rn   r   r8  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)rn  rK   rK   r   rn  
r   r   r   rR   rn   r   r8  ru   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)rn  rL   rL   r   rn  ru  r   s       r   #test_stderr_with_capture_output_arg3RunFuncTestCase.test_stderr_with_capture_output_arg  rx  ry  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)
Nzsleep 3Trk   )r   rm   rn  zTimeoutExpired not raised.g      ?z/TimeoutExpired was delayed! Bad traceback:
```
z```r  )	r  	monotonicr   r   rt   ro   	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   Trm  r  r   s   <string>:2: EncodingWarning: r   s   <string>:3: EncodingWarning: )r>  r?  r   r   rb   rc   rL   
splitlinesrd   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   r8  r>  rA  rD  rG  rK  rN  r   r   r   r   rZ  r_  rd  rg  r  r.  r*   rj  ro  rr  rv  r{  r)  r  r  r9   r3   r   r   r4  r4  n  s    .
"5
+
@*
*
	**49,H-- $IJ% K%+6
=
=  __Y KL( M(Or   r4  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  rt   rZ  )r&   rw   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)Nr   r   r?  Expected OSError: %sr  r   rM   rb   rc   r  rt   rZ  rd   rb  strerrorr  r&   r  rT   rw   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)Nr   r   r  r  r  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)Nr   r   r  )
r  r   rM   r  rt   rZ  rd   rb  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)Nc                      U S   nSR                  [        R                  5      R                  5       n[        R
                  " USU-   S-   5        g)N   z{:x}s   OSError:   :r   )rO  rb  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_command)r  r   r  ChildProcessErrorrn   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)Ns    ޭ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  )r  r   r  r  rn   r   SubprocessErrorr  ru   r  rv   r   )r&   r  r  rw   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  rd  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   rb   rc   r   getsidintr  PermissionErrorrb  EPERM)r&   r   
parent_sid	child_sidrw   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   rb   rc   r   r  r  r  r  rb  r  )r&   r   parent_pgid
child_pgidrw   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())rs   r              )r,  r   r  )r   geteuidrb   r  pwdgetpwnamr^  r  subTestr   r   rc   
isinstancerv   pw_uidr  rd   r  rb  EACCESr  r|  rn   r   r|   r   OverflowErrorrM  r   )
r&   uid
test_usersname_uidr  r  r   user_uid
child_userrw   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  rn   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())rs   r  r  )r,  r   r  )r   getegidr  r  r^  r  r   r   rb   rc   r  rv   r  gr_gidr  rd   r  r|  r  rn   r   r|   r   r   rM  r   )
r&   gid
group_listr  r  r  r   	group_gidchild_grouprw   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   rb   rc   r   	getgroupsjsonloadsr  rv   r  r  rd   setr  r|  r  rd  rn   r   r|   r   )
r&   r  r  r  r   parent_groupschild_groupsgdesired_gidsrw   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)Nrs   r'  r  )r,  r   r(  )rn   r   r   r|   r   r   rM  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()+   )r5  i  i  z != r  )r   r[  r   r  r  r   r|   rb   rc   statst_moderd   octr   rg  )r&   rl  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   rM   rb   rc   r,   rd   r   r  SIGABRTrS   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  rA  rv   ru   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 )NiKirE  zunknown signal 9876543.r   r   rv   ru   rH  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  rE  znon-zero exit status 2.rM  rH  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   )rK   
preexec_fn   applery  rS   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   rY  zEException raised by preexec_fn did not make it to the parent process.z)Expected a ValueError from the preexec_fncoconutr   )r   rM   rb   rc   rt   r  r  
_fork_execr   ru   rA   )r&   r`  rT   rw   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g)+POSIXProcessTestCase._TestExecuteChildPopeni  c                 X    Xl         [        R                  R                  " U /UQ70 UD6  g r#   )	_testcaser   rM   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   rM   rC   r\  r   r_  O_RDONLYrj  r   rJ   rl  rK   rL   rR   )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)rj  N)r5   r6   r7   r8   r   rC   r9   r3   r   r   _TestExecuteChildPopenrh    s    	=	%r   rs  ro  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)Nc                  .    [         R                  " S5      e)Nz-force the _execute_child() errpipe_data path.)r   r  r3   r   r   r`  WPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes.<locals>.raise_it  s    ,,CE Er   )rJ   rK   rL   rY  )rn   r   r  rs  r   rN   )r&   r`  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   rW  EPOSIXProcessTestCase.test_preexec_gc_module_failure.<locals>.<lambda>	      tr   rb  z#Popen enabled gc when it shouldn't.c                      g r#   r3   r3   r   r   rW  r{  	  r|  r   zPopen left gc disabled.)
gc	isenableddisabler.   r   ra   rb   rc   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   )rW  rY  RLIMIT_NPROCr   r   c                      g r#   r3   r3   r   r   rW  @POSIXProcessTestCase.test_preexec_fork_failure.<locals>.<lambda>	  r|  r   rb  z.RLIMIT_NPROC had no effect; probably superuser)rV  rW  rY  r  r  rd  r   r   ra   rb   rc   BlockingIOError)r&   rW  rY  r  r   limitsr  rj  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wrM  )r   z#!%s
z(exec '%s' -c 'import sys; sys.exit(47)'
i  r_   )r   r  r_  r   r   
unix_shellrb   rc   r   chmodr   rM   r,   r  rd   r   )r&   r  fnamefobjrT   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rn   r   r   ra   rb   rc   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NrU  r   zecho $FRUITr   r   rK   r   s    	
rZ  
r   r   r   r   rM   rN   rd   rK   r7  r  r&   r   rT   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  rb   rc   r   r  r   ra   r  rd   )r&   r  r  r  rf   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)rc   r   rK   r  )r   r  r  isfiler^  rd  islinkr   rM   rN   rd   rK   r7  r  r  )r&   shellsr+  r<  shrT   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  rJ   rK   rL   r   )r  SIGINTdefault_int_handlerr   rM   rb   rc   rN   rK   r7  getattr)r&   methodrA   r  rT   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   rM   rb   rc   rN   rK   r7  r  r  r  r   )r&   r  rA   rT   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   ru   r  r,   r&   rT   r  rL   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   rd   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   rd   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   dup2rR   )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  rI   rZ  rx  )r  r   rR   r   rM   rb   rc   rN   r   rd   r  )	r&   r  rJ   	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)Nr   r   r   z*print('AssertionError:0:CLOEXEC failure.'))	r   r  rR   r   rM   rb   rc   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  rI   r~  	   got STDIN   err)r\  r   r  r   unlinkr   rm  r  	enumerater  r   rM   rb   rc   r,   r  r7  r  rd   rR   )r&   rm  tempsr  r  temp_fdsr  temp_fdrT   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  rI   r~  r  r  )r\  r   r  r   r  r  r  r  r   rm  r   rM   rb   rc   r,   r7  r  r  rd   rR   )r&   stdin_no	stdout_no	stderr_norm  r  r  r  r  r  r  rT   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
  rI   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  rl  r,  rf  rR   zipr>  r?  r   ra   rb   rc   rv   rd   rm  SEEK_SETr7  r  mapr  r8  r  )r&   from_fdsto_fdsr  from_fdffd_to_close	arg_namesrB   to_fdr   
skipped_fdrf   
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   rb  z1Expected ValueError or subprocess.SubprocessErrorr7  z!Exception occurred in preexec_fn.)r   ra   r   rt   r   r|  rd  rd   rv   r  assertIsNotNone)r&   r8  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  rM  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   rb   rc   r   rd   r8  r  )r&   keyvalueencoded_valuescriptr   decoded_valuerK   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  r1  r   ra   rd   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)rJ   rK   rL   r  r   rK   r     ,zExpected no fds from z to be open in child, found )r   findfiler   rM   rb   rc   rN   r   r   r,  r"  r  r1  rJ   rl  rK   rL   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.pyrT  rU  zqgrep.pys   zxcvbn      
F)rJ   rK   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#   rh  )r^  s   r   kill_p2BPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p2   rl  rm  rT  zThe child hung)r   rZ  r   rM   rb   rc   rN   rK   r   r,   rJ   r   rR   selectr  rd   r7  )r&   qcatqgrepsubdataro  rj  ro  	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 )NrW  rT  rU  r   r   	   TFrX  rY  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#   )rf  ).0r  r  s     r   	<genexpr>6POSIXProcessTestCase.test_close_fds.<locals>.<genexpr>W  s     ;(Q(,,..(s    rn  rK   r  pass_fdsz'Some fds not in pass_fds were left open)r   rZ  r   r  r   rR   r,  r\  r_  devnullrp  addset_inheritabler   rM   rb   rc   rN   r   r"  r  r1  rd   r.   ru   )r&   r\  r  r  r  rT   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 )NrW  rT  rU  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   rY  r   zSome fds were left open.)r   rZ  r   rM   rb   rc   r>  r?  rN   r   r  rd   r  r,  r"  r  r  r1  r.   )r&   r\  rT   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   rT  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)NrW  rT  rU  r   r   r   Tr  rY  zfd to be passed not passedzfd to be closed passedF)r  r  zoverriding close_fds)r   rZ  r,  r\  r   r  r   rR   r  updater   rM   rb   rc   rN   r   r"  r  r1  ru   r.   assertWarnsr  ra   r   rv   warning)r&   r\  r  r(  r  r  rT   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 )	NrW  rT  rU  TFr  rY  z	output=%a)r   rZ  r   r  r   rR   r  rb   rc   r  r"  rv   r   rM   rN   r   r,  r  r1  rd   r  )
r&   rE  r  non_inheritabler  rA   rT   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 )NrW  rT  rU  r  r   r   T)rJ   rK   rL   r  r  r~  rY  >   r   r   r  zoutput=)r   rZ  r\  r   r_  r  O_RDWRr   rR   r^  r  insertr   rM   rb   rc   r7  r1  r  rd   	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+)rK   rJ   rP   r_  r   r  r   rM   r   r,   r&   inoutrT   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  )rL   rJ   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.pyrT  rU  r   r   z6sigchild_ignore.py exited non-zero with this error:
%sr   )r   rZ  r   rM   rb   rc   rN   r   rd   r   r8  )r&   sigchild_ignorerT   rK   rL   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)	Nrq  r   z$import sys;sys.stdout.write("apple")r   )rK   rX   re  s   applg        )r   import_moduler   rM   rb   rc   rN   rK   r   rR   rd   r7  ru   rq  r,   )r&   rq  rT   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   rM   rb   rc   rN   r   rK   rR   rL   idpidr   check_warningsResourceWarningr*   r|  r+   ru   )r&   rT   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   rM   rb   rc   rN   r   rK   rR   rL   r  r  r   r  r  r   
gc_collectr   r  r  r  r*   r|  r+   ru   r  r  rn   rZ  r  waitpidr   )r&   rT   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 )	NrW  rT  rU  r   Tc                  2   > [         R                  " ST 5      $ r  )r   r  )r  s   r   rW  CPOSIXProcessTestCase.test_close_fds_after_preexec.<locals>.<lambda>  s    2r   )rK   r  rY  rY  )r   rZ  r   r  r   rR   r   rM   rb   rc   rN   r   r,  r"  r  r1  r   )r&   r\  rT   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   rW  5POSIXProcessTestCase.test_fork_exec.<locals>.<lambda>  s    4r   r  s   exe   envs   argTr3   rs   r   r  r
  re  Fztakes exactly)_posixsubprocessr~  r  r  rn   r   r  r   rv   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#   )rC  )r&   rC  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)firstrC  r   r%   s    r   __int__RPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__int__  s     ::!&DJ::%  r   )r  rC  N)r5   r6   r7   r8   r  r   r  r9   r3   r   r   BadIntr    s    E#!r   r  )rs   r  r
  re  r   )rv   re  )      *   l            )r   re  )r2  r  r  rn  r   r  zfds_to_keep={}r  s   falseTr  rs   r
  re  r  )r  r~  r  r  rn   r   rO  r  ru   rv   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)NrJ   )r   rM   r   r   r  r  BrokenPipeErrorrR   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)NrJ      stuff)r   rM   r   r   r  r  r  r   r  r   r$  rR   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   rJ   wbr  )r   rM   rb   rc   rN   r   r  r  r_  r   r  r  r4  r  rl  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   rJ   i  rl   )r   rM   rb   rc   rN   r   r  r  r  rR   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)Nr   rO  r
  r  r!  )r   r   rM   r   wait_processr  	_testcapir  r   r  r,   rd   )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   rM   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   rW  =POSIXProcessTestCase.test_send_signal_race2.<locals>.<lambda>B  s    dr   new)r   rM   rb   rc   r   r}  r   r  r  r  r  r  r  rS   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   rk   rl   )r   rM   rb   rc   rN   r   ro   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	   rd   r  ru   )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   rs   
_USE_VFORKF)r  r   r  RuntimeErrorr  rn   r   rb   rc   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)rL   rK   rs   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   rN   r  r   rL   rZ  rd  r  r	   r>  r?  assertRegexr   r   getgidgetuidassertNotRegex)r&   strace_binarystrace_filtertrue_binarystrace_commanddoes_strace_work_processrf   rL   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   rM   r  r   r  r  r  r  r)  r   r  r  r  r  r.  r/  r  r  r  r  r  r!  r$  r   r3  r*   r>  rB  rJ  rN  rQ  r[  re  rs  rw  r  rb   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-  r3  r;  rG  rQ  rb  rx  r  r9  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,  r0  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wShowWindowra   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
  )rE  rF  r  )r   rD  ra   r   )r&   STARTF_USERSHOWWINDOWrH  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  )rK   rL   r  r   handle_list)r   rD  rG  rE  SW_HIDErF  r\  r   r_  r   r  rM   r   r   rd   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  )rb   rL   r   r   ra   rc   )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   rW  8Win32ProcessTestCase.test_invalid_args.<locals>.<lambda>  s    Qr   rb  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   BadEnvrd    s    Dr   rf  r   )dictrn   r   r   rM   r   )r&   rf  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_   r`   re   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))FrX  )rK   rL   r  s   OSErrorrP  )rK   rL   r  r  z.*overriding close_fds)r  r   r  r   rR   r  r^  get_osfhandler   rM   rb   rc   rO  rN   r   rd   r   r  r  ru   rD  rU  r   r  r  )
r&   r  r  rk  r  rT   rK   rL   rP  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   rD  rU  ra   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 )NrP  r  rq  rr  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   rM   rN   ru   rK   r7  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ry  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oemrz  r   r,  r   )r   rK   r   r   r{  )r&   encr   rT   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_   r`   re   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)
                             rI   r   r   r   )r   rM   rb   rc   rN   rK   r7  r  r   rd   r,   r  )r&   r  rA   rT   r  rL   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)
                             rI   r   r   r  )r   rM   rb   rc   rN   rK   r7  r  r  r  r   rd   r,   )r&   r  rA   rT   r  rL   rf   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   rI  rM  rW  r\  r   r   r>  rh  r  rn  rs  rv  r  r  r  r  r  r  r  r  r  r  r  r  r9   r3   r   r   rB  rB    s    11 O6:0 < <!0.d1188
@!+*!.:#(?(-r   rB  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                   ,   ^  \ rS rSr/ rU 4S jrSrU =r$ )MiscTests.RecordingPopeni  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   r  r   r9   r?  r@  s   @r   RecordingPopenr    s    	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)N_waitrM   r   zLimport time
time.sleep(9)
import sys
sys.stderr.write('\n!runaway child!\n')rK   r   rl   z.no open-ended wait() after the first allowed: g      ?r  r  )KeyboardInterruptr  r   r  r  r   rM   r  rn   rb   rc   r  r   r  ra   r^  assertLessEqual
call_countrd   r  r  rf  r  r,   )r&   popenermock__communicaterB   
mock__waitra   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㥛 @rl   )r  r   ra   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   rM   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   )rd   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 )N>   r  r  r  Handlerw  r   r  )r,  r   __all__r  __dict__itemsr  r  
ModuleTyper  rd   )r&   intentionally_excludedexportedpossible_exportsr  r<  rC  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   rM   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SelectSelectorrF   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  rF   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  rG  r  r   r   rR   )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)NrK   mbcsz2 [%r, 'ab cd'])r   rN   rM   rd   rK   r7  r8  r  )r&   rA   rB   rT   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  rb   rc   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?  r@  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   rM   rb   rc   rN   rd   rK   r7  rL   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   rM   rb   rc   rd   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   )rn   r  r   rM   r  rN   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 )Nr  )rJ   rX   r  r   )r   rM   r   rN   r   r'  	__enter__rJ   r   r|  r   rn   rZ  __exit__rd   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   rb   r  rP   r0  r   rb  r   r  r  r  r  r,  rq  r   r  r~  r>  r*  test.support.os_helperr
   r  r  r  r  rV  r  PGOr  has_subprocess_supportr  r*   r3  r  rO  NotADirectoryErrorr  r  rc   r   r   TestCaser    	Exceptionr;   rM   r>   rF   r4  r  r)  r  r.  rB  r  r/  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)