
    z%iI|                       d dl Z d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd d	lm Z  	 d dl!Z!	 d dl#Z#	 d dl$Z$	 d dl%Z%ejL                  r e jN                  d
      ejP                  s e jN                  d      ejR                  dk(  Z*e*rdZ+ndZ+dZ,e-e.e/fZ0ejb                  ddfa2d Z3 G d de jh                        Z5 G d de6      Z7 G d dejp                        Z9 G d de5      Z: G d de5      Z;d Z< e jz                  e*d       G d d e5             Z> e j~                  e*d!       G d" d#e5             Z@ G d$ d%e jh                        ZA e j~                   eBed&      d'       G d( d)e:             ZC e j~                  e*d*       G d+ d,e5             ZD G d- d.e5      ZEeFd/k(  r e j                          yy# e"$ r dZ!Y w xY w# e"$ r dZ#Y w xY w# e"$ r dZ$Y w xY w#  dZ%Y xY w)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                      t        j                  d      } | y t        j                  | t        j                        r(t        j                  | g      j                  dk(  r| fay y y )Ntruer   )	shutilwhichosaccessX_OK
subprocessrun
returncodeZERO_RETURN_CMD)
shell_trues    H/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_subprocess.pysetUpModuler   K   sU    f%J
		*bgg&
|$//14%- 	5 	'    c                       e Zd Zd Zd Zy)BaseTestCasec                 ,    t        j                          y N)r   reap_childrenselfs    r   setUpzBaseTestCase.setUpV   s     	r   c                 
   t         sYt        j                  D ]  }|j                           t        j                          | j                  t        j                  d       | j                          t        j                          y )Nzsubprocess._active not empty)		mswindowsr   _activewait_cleanupassertFalse
doCleanupsr   r#   )r%   insts     r   tearDownzBaseTestCase.tearDown[   sa    "** 		!""$B 	r   N__name__
__module____qualname__r&   r/    r   r   r    r    U   s     

 r   r    c                       e Zd Zy)PopenTestExceptionN)r1   r2   r3   r4   r   r   r6   r6   h   s    r   r6   c                       e Zd Z	 d Zy)PopenExecuteChildRaisesc                     t        d      )NzForced Exception for Test)r6   )r%   argskwargss      r   _execute_childz&PopenExecuteChildRaises._execute_childp   s     !<==r   N)r1   r2   r3   r<   r4   r   r   r8   r8   l   s    >r   r8   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Z ej*                  d      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z  e!jD                  e#d      d        Z$ e!jD                  e#d      d         Z% e!jD                  e#d      d!        Z&d" Z'd# Z(d$ Z)d% Z*d& Z+d' Z, e!jD                  e#d(      d)        Z- e!jD                  e#d(      d*        Z.d+ Z/ e!jD                  e0jb                  e0jd                  k7  d,      d-        Z3 e!jD                  e0jb                  e0jd                  k7  d,       e!jD                   e4jj                         d.      d/               Z6d0 Z7d1 Z8d2 Z9d3 Z:d4 Z;d5 Z<d6 Z=d7 Z>d8 Z?d9 Z@d: ZAd; ZBd< ZCd= ZDd> ZEd? ZF e!j                  eHxr	  eIeHd@      dA      dB        ZJ e!j                  eHxr	  eIeHd@      dA      dC        ZKdD ZL e!jD                  e0j                  dEk(  dF       e!jD                   e4j                  dG      dHk(  dI       e!jD                   eOdJK      dL      dM                      ZPdN ZQdO ZRdP ZSdQ ZTdR ZUdS ZVdT ZWdU ZXdV ZYdW ZZdX Z[dY Z\dZ Z]d[ Z^d\ Z_d] Z`d^ Zad_ Zbd` Zcda Zddb Zedc Zfdd Zgde Zhdf Zidg Zjdh Zkdi Zldj Zm ej*                  dk      dl        Zndm Zodn Zpdo Zqdp Zrdq Zsdr Ztds Zudt Zv e!j                   eIewdu      dv       e!j                   eIexdw      dx       e!j                   eIexdy      dz      d{                      Zy e!j                  exj                  j                  d| exj                         z        d}      d~        Z} e!jD                  e#d      d        Z~ e!jD                  e#d      d        Zd Z e!jD                   e4j                  d       d       ej                  d      d               Zy)ProcessTestCasec                    t        j                  t        t         j                  t         j                  t         j                        }	 | j	                  |j
                  t        j                         | j	                  |j                  t        j                         | j	                  |j                  t        j                         |j
                  j                          |j                  j                          |j                  j                          |j                          y # |j
                  j                          |j                  j                          |j                  j                          |j                          w xY w)Nstdinstdoutstderr)r   Popenr   PIPEassertIsInstancerA   ioBufferedIOBaserB   rC   closer*   r%   ps     r   test_io_buffered_by_defaultz+ProcessTestCase.test_io_buffered_by_defaultv   s    _#-??:??$.OO5	!!!''2+<+<=!!!((B,=,=>!!!((B,=,=>GGMMOHHNNHHNNFFH GGMMOHHNNHHNNFFHs   	A>D& &A Fc                    t        j                  t        t         j                  t         j                  t         j                  d      }	 | j	                  |j
                  t        j                         | j	                  |j                  t        j                         | j	                  |j                  t        j                         |j
                  j                          |j                  j                          |j                  j                          |j                          y # |j
                  j                          |j                  j                          |j                  j                          |j                          w xY w)Nr   )rA   rB   rC   bufsize)r   rD   r   rE   rF   rA   rG   	RawIOBaserB   rC   rI   r*   rJ   s     r   test_io_unbuffered_worksz(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                 t    t        j                  t        j                  ddg      }| j	                  |d       y Nr   import sys; sys.exit(47)/   r   callsys
executableassertEqualr%   rcs     r   test_call_seqzProcessTestCase.test_call_seq   s0    __cnnd8: ;R r   c                     | j                  t        j                  t        j                  t        j
                  ddgd       y )Nr   while True: pass皙?timeout)assertRaisesr   TimeoutExpiredrV   rW   rX   r$   s    r   test_call_timeoutz!ProcessTestCase.test_call_timeout   s7    
 	*33Z__>>41CD"% 	 	'r   c                 Z    t        j                  t              }| j                  |d       y Nr   )r   
check_callr   rY   rZ   s     r   test_check_call_zeroz$ProcessTestCase.test_check_call_zero   s"    ""?3Qr   c                    | j                  t        j                        5 }t        j                  t        j
                  ddg       d d d        | j                  j                  j                  d       y # 1 sw Y   0xY wrR   )	rb   r   CalledProcessErrorrg   rW   rX   rY   	exceptionr   r%   cs     r   test_check_call_nonzeroz'ProcessTestCase.test_check_call_nonzero   sl    z<<= 	@!!3>>4#=#? @	@ 	//4	@ 	@   'A66A?c                 |   t        j                  t        j                  ddg      }| j	                  d|       | j                  t        d      5  t        j                  g d        d d d        | j                  t        d      5  t        j                  g d       d d d        y # 1 sw Y   @xY w# 1 sw Y   y xY w)	Nr   print('BDFL')   BDFLz2stdout argument not allowed, it will be overriddenrB   z1check argument not allowed, it will be overriddenFcheck)r   check_outputrW   rX   assertInassertRaisesRegex
ValueErrorr%   outputs     r   test_check_outputz!ProcessTestCase.test_check_output   s    ((79gv&##JDF 	5##Bt4	5 ##JCE 	5##Be4	5 	5		5 	5	5 	5s   B&B2&B/2B;c                    | j                  t        j                        5 }t        j                  t        j
                  ddg       d d d        | j                  j                  j                  d       y # 1 sw Y   0xY w)Nr   zimport sys; sys.exit(5)   )	rb   r   rj   rv   rW   rX   rY   rk   r   rl   s     r   test_check_output_nonzeroz)ProcessTestCase.test_check_output_nonzero   sk    z<<= 	G##^^T+DEG	G 	//3	G 	Gro   c                     t        j                  t        j                  ddgt         j                        }| j                  d|       y )Nr   $import sys; sys.stderr.write('BDFL')rC   rr   )r   rv   rW   rX   STDOUTrw   rz   s     r   test_check_output_stderrz(ProcessTestCase.test_check_output_stderr   s:    (('MN!((* 	gv&r   c                    t        j                         }| j                  |j                         |j	                  d       |j                  d       t        j                  t        j                  ddg|      }| j                  d|       y )N   pearr   r   6import sys; sys.stdout.write(sys.stdin.read().upper())rA      PEAR)tempfileTemporaryFile
addCleanuprI   writeseekr   rv   rW   rX   rw   )r%   tfr{   s      r   test_check_output_stdin_argz+ProcessTestCase.test_check_output_stdin_arg   sl    ##%!


((IK 	gv&r   c                 x    t        j                  t        j                  ddgd      }| j	                  d|       y )Nr   r   r   inputr   r   rv   rW   rX   rw   rz   s     r   test_check_output_input_argz+ProcessTestCase.test_check_output_input_arg   s7    ((IK 	gv&r   c                 z    	 t        j                  t        j                  ddgd       }| j	                  d|       y )Nr   3import sys; print('XX' if sys.stdin.read() else '')r   s   XXr   rv   rW   rX   assertNotInrz   s     r   test_check_output_input_nonez,ProcessTestCase.test_check_output_input_none   s<    J((FH 	'r   c                 z    t        j                  t        j                  ddgd d      }| j	                  d|       y )Nr   r   T)r   textXXr   rz   s     r   !test_check_output_input_none_textz1ProcessTestCase.test_check_output_input_none_text   s;    ((FH' 	v&r   c                 z    t        j                  t        j                  ddgd d      }| j	                  d|       y )Nr   r   T)r   universal_newlinesr   r   rz   s     r   /test_check_output_input_none_universal_newlinesz?ProcessTestCase.test_check_output_input_none_universal_newlines   s;    ((FHt5 	v&r   c                 |    t        j                  t        j                  ddgd dd      }| j	                  d|       y )Nr   zprint('foo')utf-8ignore)r   encodingerrorsfoor   rz   s     r   ,test_check_output_input_none_encoding_errorsz<ProcessTestCase.test_check_output_input_none_encoding_errors   s7    ((~6WX? 	eV$r   c                 8   | j                  t              5 }t        j                  t        j
                  ddgt        j                        }| j                  d       d d d        | j                  dj                  j                  d          y # 1 sw Y   3xY w)Nr   print('will not be run')rs   z-Expected ValueError when stdout arg supplied.rB   r   )rb   ry   r   rv   rW   rX   rB   failrw   rk   r:   r%   rm   r{   s      r   test_check_output_stdout_argz,ProcessTestCase.test_check_output_stdout_arg   s    z* 	Ga,,^^T+EF::'F IIEF		G
 	h 0 0 34	G 	Gs   ABBc                    t        j                         }| j                  |j                         |j	                  d       |j                  d       | j                  t              5 }t        j                  t        j                  ddg|d      }| j                  d       d d d        | j                  dj                  j                  d          | j                  d	|j                  j                  d          y # 1 sw Y   \xY w)
Nr   r   r   r      harerA   r   7Expected ValueError when stdin and input args supplied.rA   r   )r   r   r   rI   r   r   rb   ry   r   rv   rW   rX   r   rw   rk   r:   r%   r   rm   r{   s       r   &test_check_output_stdin_with_input_argz6ProcessTestCase.test_check_output_stdin_with_input_arg  s    ##%!


z* 	Qa,,^^T+EFG-F IIOP		Q
 	gq{{//23gq{{//23	Q 	Qs   ';C==Dwalltimec                 *   | j                  t        j                        5 }t        j                  t        j
                  ddgd      }| j                  d       d d d        | j                  j                  j                  d       y # 1 sw Y   0xY w)Nr   Mimport sys, time
sys.stdout.write('BDFL')
sys.stdout.flush()
time.sleep(3600)   r`   zExpected TimeoutExpired.rr   )
rb   r   rc   rv   rW   rX   r   rY   rk   r{   r   s      r   test_check_output_timeoutz)ProcessTestCase.test_check_output_timeout  s     z889 
	2Q,,^^T() F II01
	2 	++W5
	2 
	2s   :B		Bc                     t         j                  j                         }d|d<   t        j                  t
        j                  ddg|      }| j                  |d       y )NbananaFRUITr   z5import sys, os;sys.exit(os.getenv("FRUIT")=="banana")env   )r   environcopyr   rV   rW   rX   rY   )r%   newenvr[   s      r   test_call_kwargsz ProcessTestCase.test_call_kwargs   sT    ""w__cnndGH "() 	Qr   c                    t        j                         5 }| j                  t        t        j
                  d       t        j
                  j                  j                  j                  }dg|dz   z  } | j                  t        t        j
                  g|  d d d        | j                  j                         d       y # 1 sw Y   *xY w)Nr   )invalid_arg_namer   r   )r   captured_stderrrb   	TypeErrorr   rD   __init____code__co_argcountrY   getvalue)r%   sargcounttoo_many_argss       r   test_invalid_argsz!ProcessTestCase.test_invalid_args*  s     $$& 	K!i)9)9AN!''0099EEHC8a<0MDi)9)9JMJ		K
 	r*	K 	Ks   BCCc                 z   t        j                  t        j                  ddgt         j                  t         j                        }| j                  |j                  j                         | j                  |j                  j                         |j                          | j                  |j                  d        y )Nr   print("banana")rB   rC   )r   rD   rW   rX   rE   r   rB   rI   rC   r*   rY   rA   rJ   s     r   test_stdin_nonezProcessTestCase.test_stdin_none4  ss    cnnd4EF *
I''	$'r   c                    d}t        j                  t        j                  d|gt         j                  t         j                        }| j                  |j                  j                         | j                  |j                  j                         |j                         \  }}| j                  |j                  d|       | j                  |j                         d       y )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   rD   rW   rX   rE   r   rB   rI   rC   communicaterY   r   rstripr%   coderK   outerrs        r   test_stdout_nonez ProcessTestCase.test_stdout_none=  s    5 cnndD9$.OOJOOM''==?Sq#.':;r   c                 z   t        j                  t        j                  ddgt         j                  t         j                        }| j                  |j                  j                         | j                  |j                  j                         |j                          | j                  |j                  d        y )Nr   r   rA   rB   )r   rD   rW   rX   rE   r   rB   rI   rA   r*   rY   rC   rJ   s     r   test_stderr_nonez ProcessTestCase.test_stderr_noneT  ss    cnnd4EF)zH'&	4(r   c                     |dgz   }t        j                  |fi |}|j                          | j                  d|j                         y NrS   rT   )r   rD   r*   rY   r   )r%   pre_argsr;   r:   rK   s        r   _assert_pythonzProcessTestCase._assert_python]  sD     566T,V,	Q\\*r   c                     t         j                  j                  t         j                  j                  t        j
                        d      }| j                  |dgt        j
                         y Ndoesnotexistr   rX   )r   pathjoindirnamerW   rX   r   r%   r   s     r   test_executablezProcessTestCase.test_executablee  sH     ww||BGGOOCNN$C$24\40S^^Lr   c                    t         j                  j                  t         j                  j                  t        j
                        d      }| j                  |dgt        j                  t        j
                               y r   )r   r   r   r   rW   rX   r   fsencoder   s     r   test_bytes_executablez%ProcessTestCase.test_bytes_executablep  sU    ww||BGGOOCNN$C$24\40'){{3>>'B 	 	Dr   c                     t         j                  j                  t         j                  j                  t        j
                        d      }| j                  |dgt        t        j
                               y r   )r   r   r   r   rW   rX   r   r
   r   s     r   test_pathlike_executablez(ProcessTestCase.test_pathlike_executablev  sQ    ww||BGGOOCNN$C$24\40'/'? 	 	Ar   c                     t         j                  dg}| j                  |       | j                  t        | j                  |t
        d          y )Nr   r   r   )rW   rX   r   rb   NONEXISTING_ERRORSNONEXISTING_CMD)r%   r   s     r    test_executable_takes_precedencez0ProcessTestCase.test_executable_takes_precedence|  sI     NND)H%,--x%4Q%7 	 	9r   z"executable argument replaces shellc                 H    | j                  g t        j                  d       y NT)rX   shell)r   rW   rX   r$   s    r   test_executable_replaces_shellz.ProcessTestCase.test_executable_replaces_shell  s     	B3>>Fr   c                 n    | j                  g t        j                  t        j                        d       y r   )r   r   r   rW   rX   r$   s    r   $test_bytes_executable_replaces_shellz4ProcessTestCase.test_bytes_executable_replaces_shell  s)    B2;;s~~+F"& 	 	(r   c                 Z    | j                  g t        t        j                        d       y r   )r   r
   rW   rX   r$   s    r   'test_pathlike_executable_replaces_shellz7ProcessTestCase.test_pathlike_executable_replaces_shell  s%    B8CNN+C"& 	 	(r   c                     t        j                  |      5  t        j                         cd d d        S # 1 sw Y   y xY wr"   )r   
change_cwdr   getcwd)r%   cwds     r   _normalize_cwdzProcessTestCase._normalize_cwd  s0     !!#& 	99;	 	 	s   4=c                     t         j                  j                  t        j                        }t         j                  j                  |      S r"   )r   r   realpathrW   rX   split)r%   python_paths     r   _split_python_pathz"ProcessTestCase._split_python_path  s-    gg&&s~~6ww}}[))r   c                    t        j                  |ddgfdt         j                  i|}| j                  |j                  j
                         |j                          | j                  d|j                         t        j                  j                  }| j                   ||       ||j                  j                         j                                      y )Nr   zcimport os, sys; buf = sys.stdout.buffer; buf.write(os.getcwd().encode()); buf.flush(); sys.exit(47)rB   rT   )r   rD   rE   r   rB   rI   r*   rY   r   r   r   normcasereaddecode)r%   expected_cwd
python_argr;   rK   r  s         r   _assert_cwdzProcessTestCase._assert_cwd  s     j$-. ( &0__( !'( 	'	Q\\*77##,/!!((--/"8"8":;	=r   c                     t        j                         }| j                  |      }| j                  |t        j
                  |       y Nr   )r   
gettempdirr  r  rW   rX   r%   temp_dirs     r   test_cwdzProcessTestCase.test_cwd  s9    &&(&&x03>>x@r   c                     t        j                         }| j                  |      }| j                  |t        j
                  t        j                  |             y r  )r   r  r  r  rW   rX   r   r   r  s     r   test_cwd_with_bytesz#ProcessTestCase.test_cwd_with_bytes  sB    &&(&&x03>>r{{87LMr   c                     t        j                         }| j                  |      }| j                  |t        j
                  t        |             y r  )r   r  r  r  rW   rX   r
   r  s     r   test_cwd_with_pathlikez&ProcessTestCase.test_cwd_with_pathlike  s>    &&(&&x03>>x7IJr   z"pending resolution of issue #15533c                    | j                         \  }}t        j                  j                  t        j                  |      }t        j                         5 }| j                  t        t        j                  |g       | j                  t        t        j                  |g|       | j                  |      }| j                  |||       d d d        y # 1 sw Y   y xY wr  r  r   r   r   curdirr   temp_cwdrb   FileNotFoundErrorr   rD   r  r  )r%   
python_dirpython_base
rel_python	wrong_dirs        r   test_cwd_with_relative_argz*ProcessTestCase.test_cwd_with_relative_arg  s     #'"9"9";
KWW\\"))[9
! 	EY /1A1A)l,/1A1A)l	  ;,,Z8JZD	E 	E 	Es   A4CCc                    | j                         \  }}t        j                  j                  t        j                  |      }d}t        j                         5 }| j                  t        t        j                  |g|       | j                  t        t        j                  |g||       | j                  |      }| j                  ||||       d d d        y # 1 sw Y   y xY w)Nsomethingyoudonthaver   rX   r   r  )r%   r  r  r   doesntexistr!  s         r   !test_cwd_with_relative_executablez1ProcessTestCase.test_cwd_with_relative_executable  s     #'"9"9";
KWW\\"))[9
,! 
	-Y /1A1A*m
  D/1A1A*m
"+  - ,,Z8JZ!+  -
	- 
	- 
	-s   A8CC"c                    | j                         \  }}t        j                  j                  ||      }t        j                  j                  t        j                  |      }t        j                         5 }| j                  t        t        j                  |g|       | j                  |      }| j                  |||       d d d        y # 1 sw Y   y xY wr  )r  r   r   r   r  r   r  rb   r  r   rD   r  r  )r%   r  r  
abs_pythonr   r!  s         r   test_cwd_with_absolute_argz*ProcessTestCase.test_cwd_with_absolute_arg  s     #'"9"9";
KWW\\*k:
WW\\"))[9
! 	CY /1A1A)l	  ;++I6IY
	B	C 	C 	Cs   6ACCzTest is not venv-compatiblec                     | j                         \  }}| j                  |      }| j                  |dt        j                  |       y )Nr$  r%  )r  r  r  rW   rX   )r%   r  r  s      r   test_executable_with_cwdz(ProcessTestCase.test_executable_with_cwd  sI     #'"9"9";
K((4
%;$'NN
 	 	Dr   z#need an installed Python. See #7774c                 l    | j                  t        j                         dt        j                         y )Nr$  r   )r  r   r   rW   rX   r$   s    r   test_executable_without_cwdz+ProcessTestCase.test_executable_without_cwd  s)     	&<$'NN 	 	4r   c                 2   t        j                  t        j                  ddgt         j                        }|j
                  j                  d       |j
                  j                          |j                          | j                  |j                  d       y )Nr   0import sys; sys.exit(sys.stdin.read() == "pear")r   r   r   )r   rD   rW   rX   rE   rA   r   rI   r*   rY   r   rJ   s     r   test_stdin_pipezProcessTestCase.test_stdin_pipe  sf    cnndKM(oo/ 	
g		q)r   c                    t        j                         }| j                  |j                         |j	                         }t        j                  |d       t        j                  |dd       t        j                  t        j                  ddg|      }|j                          | j                  |j                  d       y Nr   r   r   r0  r   r   )r   r   r   rI   filenor   r   lseekr   rD   rW   rX   r*   rY   r   r%   r   drK   s       r   test_stdin_filedesz"ProcessTestCase.test_stdin_filedes  s    ##%!IIK
G
AqcnndKM " 	
q)r   c                 N   t        j                         }| j                  |j                         |j	                  d       |j                  d       t        j                  t        j                  ddg|      }|j                          | j                  |j                  d       y r3  )r   r   r   rI   r   r   r   rD   rW   rX   r*   rY   r   r%   r   rK   s      r   test_stdin_fileobjz"ProcessTestCase.test_stdin_fileobj"  sz    ##%!


cnndKM!# 	
q)r   c                     t        j                  t        j                  ddgt         j                        }|5  | j                  |j                  j                         d       d d d        y # 1 sw Y   y xY w)Nr   &import sys; sys.stdout.write("orange")rs      oranger   rD   rW   rX   rE   rY   rB   r	  rJ   s     r   test_stdout_pipez ProcessTestCase.test_stdout_pipe.  s^    cnndBD *1  	9QXX]]_i8	9 	9 	9   +A--A6c                 l   t        j                         }| j                  |j                         |j	                         }t        j                  t        j                  ddg|      }|j                          t        j                  |dd       | j                  t        j                  |d      d       y )Nr   r=  rs   r      r>  r   r   r   rI   r4  r   rD   rW   rX   r*   r   r5  rY   r	  r6  s       r   test_stdout_filedesz#ProcessTestCase.test_stdout_filedes6  s    ##%!IIKcnndBD !# 	

AqD)95r   c                 4   t        j                         }| j                  |j                         t	        j
                  t        j                  ddg|      }|j                          |j                  d       | j                  |j                         d       y )Nr   r=  rs   r   r>  r   r   r   rI   r   rD   rW   rX   r*   r   rY   r	  r:  s      r   test_stdout_fileobjz#ProcessTestCase.test_stdout_fileobjB  sp    ##%!cnndBD "$ 	


I.r   c                     t        j                  t        j                  ddgt         j                        }|5  | j                  |j                  j                         d       d d d        y # 1 sw Y   y xY w)Nr   *import sys; sys.stderr.write("strawberry")r   
   strawberry)r   rD   rW   rX   rE   rY   rC   r	  rJ   s     r   test_stderr_pipez ProcessTestCase.test_stderr_pipeM  s^    cnndFH *1  	=QXX]]_m<	= 	= 	=rA  c                 l   t        j                         }| j                  |j                         |j	                         }t        j                  t        j                  ddg|      }|j                          t        j                  |dd       | j                  t        j                  |d      d       y )Nr   rJ  r   r   rC  rK  rD  r6  s       r   test_stderr_filedesz#ProcessTestCase.test_stderr_filedesU  s    ##%!IIKcnndFH !# 	

AqD)=9r   c                 4   t        j                         }| j                  |j                         t	        j
                  t        j                  ddg|      }|j                          |j                  d       | j                  |j                         d       y )Nr   rJ  r   r   rK  rG  r:  s      r   test_stderr_fileobjz#ProcessTestCase.test_stderr_fileobja  sp    ##%!cnndFH "$ 	


M2r   c                 4   t        j                  t        j                  ddgt         j                  t         j                        }|j                         \  }}| j                  |d       | j                  |d       | j                  |j                  d       y )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   rD   rW   rX   rE   r   rY   r   r%   rK   rB   rC   s       r   ,test_stderr_redirect_with_no_stdout_redirectz<ProcessTestCase.test_stderr_redirect_with_no_stdout_redirectl  s{     cnnd-. %/OO$.OO5 '%q)r   c                    t        j                  t        j                  ddgt         j                  t         j
                        }|5  | j                  |j                  j                         d       d d d        y # 1 sw Y   y xY w)Nr   Rimport sys;sys.stdout.write("apple");sys.stdout.flush();sys.stderr.write("orange")r      appleorange)	r   rD   rW   rX   rE   r   rY   rB   r	  rJ   s     r   test_stdout_stderr_pipez'ProcessTestCase.test_stdout_stderr_pipe  sj    cnnd;<
 %/OO$.$5$57  	>QXX]]_n=	> 	> 	>s   +A<<Bc                 6   t        j                         }| j                  |j                         t	        j
                  t        j                  ddg||      }|j                          |j                  d       | j                  |j                         d       y )Nr   rV  r   r   rW  rG  r:  s      r   test_stdout_stderr_filez'ProcessTestCase.test_stdout_stderr_file  sv    ##%!cnnd;<
 %'$&( 	


N3r   c                    d}t        j                  t        j                  d|gt         j                  t         j                        }| j                  |j                  j                         | j                  |j                  j                         |j                         \  }}| j                  |j                  d|       | j                  |j                         d       y )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_stdoutz-ProcessTestCase.test_stdout_filedes_of_stdout  s    "
 cnndD9$.OOJOOM''==?Sq#.'<=r   c                     t        j                  t        j                  ddgt         j                        }|j                          | j                  |j                  d        y )Nr   z'for i in range(10240):print("x" * 1024)rs   )r   rD   rW   rX   DEVNULLr*   rY   rB   rJ   s     r   test_stdout_devnullz#ProcessTestCase.test_stdout_devnull  sN    cnnd23 &0%7%79 	
4(r   c                     t        j                  t        j                  ddgt         j                        }|j                          | j                  |j                  d        y )Nr   z=import sys
for i in range(10240):sys.stderr.write("x" * 1024)r   )r   rD   rW   rX   r^  r*   rY   rC   rJ   s     r   test_stderr_devnullz#ProcessTestCase.test_stderr_devnull  sN    cnnd=> &0%7%7	9
 	
4(r   c                     t        j                  t        j                  ddgt         j                        }|j                          | j                  |j                  d        y )Nr   zimport sys;sys.stdin.read(1)r   )r   rD   rW   rX   r^  r*   rY   rA   rJ   s     r   test_stdin_devnullz"ProcessTestCase.test_stdin_devnull  sN    cnnd23 %/$6$68 	
$'r   F_GETPIPE_SZz%fcntl.F_GETPIPE_SZ required for test.c                 p   t        j                         \  }}	 t        j                  |t        j                        }t        j                  |       t        j                  |       |dz  }t        j                         }||k  rt        j                  d      t        j                  t        j                  ddgt        j                  t        j                  t        j                  |      }	 |j                  |j                  |j                   fD ]D  }| j#                  t        j                  |j%                         t        j                        |       F |j                  j'                  d       |j                  j	                          |j                  j	                          |j                   j	                          |j)                          |j+                          y # t        j                  |       t        j                  |       w xY w# |j)                          |j+                          w xY w)N   z+default pipesize too small to perform test.r   Qimport sys; sys.stdin.read(); sys.stdout.write("out"); sys.stderr.write("error!")rA   rB   rC   pipesizer   )r   pipefcntlrd  rI   r   get_pagesizeunittestSkipTestr   rD   rW   rX   rE   rA   rB   rC   rY   r4  r   killr*   )r%   test_pipe_rtest_pipe_wpipesize_defaultri  pagesize_defaultrK   fifos           r   test_pipesizeszProcessTestCase.test_pipesizes  s    $&779 [	"${{;8J8JKHH[!HH[!#q("//1&&##=? ?^^T*+ //*//??X7	!((AHH5   KKu/A/AB GGMM'"GGMMOHHNNHHNNFFHFFH7 HH[!HH[!2 FFHFFHs   $G$ 0CH $,H"H5c                    t        j                  t        j                  ddgt         j                  t         j                  t         j                  d      }	 t        j                         \  }}	 t        j                  |t        j                        }|j                  |j                  |j                  fD ]D  }| j                  t        j                  |j                         t        j                        |       F 	 t        j                  |       t        j                  |       |j                  j                          |j                  j                          |j                  j                          |j                          |j!                          y # t        j                  |       t        j                  |       w xY w# |j                          |j!                          w xY w)Nr   rg  rh  )r   rD   rW   rX   rE   r   rj  rk  rd  rA   rB   rC   rY   r4  rI   ro  r*   )r%   rK   fp_rfp_wdefault_pipesizert  s         r   test_pipesize_defaultz%ProcessTestCase.test_pipesize_default  s@    ^^T*+ //*//??R1	JD$#(;;tU5G5G#H WWahh9 *D$$DKKM53E3EF(**
  GGMMOHHNNHHNNFFHFFH  FFHFFHs&   G /BF >A8G ,GG "G(c                 ,   t         j                  j                         }d|d<   t        j                  t
        j                  ddgt        j                  |      5 }|j                         \  }}| j                  |d       d d d        y # 1 sw Y   y xY w)Noranger   r   2import sys,os;sys.stdout.write(os.getenv("FRUIT"))rB   r   r>  )
r   r   r   r   rD   rW   rX   rE   r   rY   r%   r   rK   rB   rC   s        r   test_envzProcessTestCase.test_env
  s    ""ws~~t FG &0__"(	* 	0 ./]]_NFFVY/	0 	0 	0s   &B

Br   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                    	 d }t        j                  t        j                  ddgt         j                  i       5 }|j                         \  }}t        |j                               }| j                  |t               |D cg c]  } ||      s| }}| j                  |g        d d d        y c c}w # 1 sw Y   y xY w)Nc                 Z    	 d| v xs% d| v xs | dk(  xs | j                  d      xs | dk(  S )N	VERSIONER__CF
LD_PRELOADSANDBOXLC_CTYPE)
startswith)ns    r   is_env_var_to_ignorez<ProcessTestCase.test_empty_env.<locals>.is_env_var_to_ignore!  sI    L  1$ $! $%$)*i)@$O%r   r   z)import os; print(list(os.environ.keys()))r  )r   rD   rW   rX   rE   r   evalstriprF   listrY   )r%   r  rK   rB   rC   child_env_namesks          r   test_empty_envzProcessTestCase.test_empty_env  s     	:	% s~~tJL%/__"> 	2AB]]_NFF"6<<>2O!!/48*9 ?Q&:1&=  ! ?O ?_b1	2 	2?	2 	2s   AB6B1B61B66B?c                 N   t         j                  dz   }| j                  t              5  t	        j
                  |ddg       d d d        | j                  t              5  t	        j
                  t         j                  ddg       d d d        y # 1 sw Y   NxY w# 1 sw Y   y xY w)N r   r   zpass# )rW   rX   rb   ry   r   rD   )r%   cmds     r   test_invalid_cmdz ProcessTestCase.test_invalid_cmd4  s    nnt#z* 	2c401	2 z* 	@cnndI>?	@ 	@		2 	2	@ 	@s   B'BBB$c                    t         j                  j                         }d|d<   | j                  t              5  t        j                  t        |       d d d        t         j                  j                         }d|d<   | j                  t              5  t        j                  t        |       d d d        t         j                  j                         }d|d<   | j                  t              5  t        j                  t        |       d d d        t         j                  j                         }d|d<   t        j                  t        j                  d	d
gt
        j                  |      5 }|j                         \  }}| j                  |d       d d d        y # 1 sw Y   KxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NcabbagezFRUIT VEGETABLEr   zorange VEGETABLE=cabbager   lemonzFRUIT=ORANGEzorange=lemonr   z3import sys, os;sys.stdout.write(os.getenv("FRUIT"))r  s   orange=lemon)r   r   r   rb   ry   r   rD   r   rW   rX   rE   r   rY   r  s        r   test_invalid_envz ProcessTestCase.test_invalid_env>  st   "%.!"z* 	:_&9	: "5wz* 	:_&9	: "!(~z* 	:_&9	: "(ws~~t FG &0__"(	* 	6 ./]]_NFFV_5	6 	6%	: 	:	: 	:	: 	:	6 	6s/   FF+1F7/&GF(+F47G Gc                     t        j                  t        j                  ddgt         j                        }|j                  d       | j                  |j                  d       y )Nr   z/import sys;sys.exit(sys.stdin.read() == "pear")r   r   r   rR  rJ   s     r   test_communicate_stdinz&ProcessTestCase.test_communicate_stdin\  sQ    cnndEF $.??4 	
gq)r   c                     t        j                  t        j                  ddgt         j                        }|j                         \  }}| j                  |d       | j                  |d        y )Nr   z)import sys; sys.stdout.write("pineapple")rs   	   pineappler   rD   rW   rX   rE   r   rY   rS  s       r   test_communicate_stdoutz'ProcessTestCase.test_communicate_stdoutd  s\    cnndIK$.OO5 ==?.&r   c                     t        j                  t        j                  ddgt         j                        }|j                         \  }}| j                  |d        | j                  |d       y )Nr   z)import sys; sys.stderr.write("pineapple")r   r  r  rS  s       r   test_communicate_stderrz'ProcessTestCase.test_communicate_stderrl  s\    cnndIK$.OO5 ==?&.r   c                    t        j                  t        j                  ddgt         j                  t         j                  t         j                        }| j                  |j                  j                         | j                  |j                  j                         | j                  |j                  j                         |j                  d      \  }}| j                  |d       | j                  |d       y )Nr   zNimport sys,os;sys.stderr.write("pineapple");sys.stdout.write(sys.stdin.read())r@      bananar  )r   rD   rW   rX   rE   r   rB   rI   rC   rA   r   rY   rS  s       r   test_communicatez ProcessTestCase.test_communicatet  s    cnndCD $.??$.OO$.OO5 	''&==3+.r   c                    t        j                  t        j                  ddgdt         j                  t         j                  t         j                        }| j                  t         j                  |j                  dd       |j                         \  }}| j                  |d       | j                  |j                         d       y )	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   rA   rB   rC   r   g333333?r`   s   pineapple
pear
)
r   rD   rW   rX   rE   rb   rc   r   rY   encoderS  s       r   test_communicate_timeoutz(ProcessTestCase.test_communicate_timeout  s    cnndCD 15#-??$.OO$.OO	5 	*33Q]]H"% 	 	' ==?**>?r   c                 $   t        j                  t        j                  ddgt         j                        }| j                  t         j                  |j                  d       |j                         \  }}| j                  t        |      d       y )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));rs   g?r`   i   )
r   rD   rW   rX   rE   rb   rc   r   rY   len)r%   rK   rB   _s       r   %test_communicate_timeout_large_outputz5ProcessTestCase.test_communicate_timeout_large_output  ss    cnndEF %/OO	5 	*33Q]]CPmmoVm4r   c                 >   dD ]  }dD ]  }dD ]  }i }|rt         j                  |d<   |rt         j                  |d<   |rt         j                  |d<   |sHt        j                  t        fi |}|j	                          |j
                  %| j                  |j
                  j                         |j                  %| j                  |j                  j                         |j                  | j                  |j                  j                            y )NFTrA   rB   rC   )
r   rE   rD   r   r   rA   
assertTrueclosedrB   rC   )r%   
stdin_pipestdout_pipestderr_pipeoptionsrK   s         r   test_communicate_pipe_fd_leakz-ProcessTestCase.test_communicate_pipe_fd_leak  s    ' 	9J, 9#0 9K G!+5??(",6OO)",6OO)" "((DGDAMMOww*7xx+8xx+8#99	9r   c                     t        j                  t        j                  ddg      }|j	                         \  }}| j                  |d        | j                  |d        y )Nr   rS   )r   rD   rW   rX   r   rY   rS  s       r   test_communicate_returnsz(ProcessTestCase.test_communicate_returns  sR    cnnd8: ;==?&&r   c                    t        j                         \  }}t        j                  |       t        j                  |       t        j                  t
        j                  ddt        j                  z  gt        j                  t        j                  t        j                        }| j                  |j                  j                         | j                  |j                  j                         | j                  |j                  j                         dt        j                  z  }|j                  |      \  }}| j                  ||       y )Nr   zpimport sys,os;sys.stdout.write(sys.stdin.read(47));sys.stderr.write("x" * %d);sys.stdout.write(sys.stdin.read())r@      a)r   rj  rI   r   rD   rW   rX   r   PIPE_MAX_SIZErE   r   rB   rC   rA   r   rY   )r%   xyrK   string_to_writerB   rC   s          r   test_communicate_pipe_bufz)ProcessTestCase.test_communicate_pipe_buf  s     wwy1

cnndC &33	45 $.??$.OO$.OO5 	''&!6!66==91r   c                 0   t        j                  t        j                  ddgt         j                  t         j                  t         j                        }| j                  |j                  j                         | j                  |j                  j                         | j                  |j                  j                         |j                  j                  d       |j                  d      \  }}| j                  |d       | j                  |d       y )Nr   z0import sys,os;sys.stdout.write(sys.stdin.read())r@   r  s   splits   bananasplitr   )r   rD   rW   rX   rE   r   rB   rI   rC   rA   r   r   rY   rS  s       r   test_writes_before_communicatez.ProcessTestCase.test_writes_before_communicate  s    cnndCD $.??$.OO$.OO5 	''&	i ==20%r   c                 `   t         j                  ddt        z   dz   g}dD ]~  }t        j                  |fi dt        j
                  dt        j
                  |di}|5  |j                  j                  d       |j                  j                          | j                  |j                  j                         d       |j                  j                  d	       |j                  j                          | j                  |j                  j                         | j                  |j                  j                         d
       | j                  |j                  j                  d      d	       | j                  |j                  j                         d       d d d         y # 1 sw Y   xY w)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   rA   rB   Tzline1
zline3
zline2
   zline4
line5
line6
line7
line8)rW   rX   	SETBINARYr   rD   rE   rA   r   flushrY   rB   readlinerI   r   r	  )r%   r:   extra_kwargrK   s       r    test_universal_newlines_and_textz0ProcessTestCase.test_universal_newlines_and_text  sV   NNDy(&&'( : 	FK   >':??*2JOO*5t*= >A  Fi(  !2!2!4i@i(/  !2!2!4!*,  q!1!*,  !DFF F		FF Fs   D9F##F-	c                    t        j                  t        j                  ddt        z   dz   gt         j
                  t         j
                  d      }| j                  |j                  j                         | j                  |j                  j                         |j                         \  }}| j                  |d       y )Nr   r  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   )rC   rB   r   z#line2
line4
line5
line6
line7
line8)r   rD   rW   rX   r  rE   r   rB   rI   rC   r   rY   rS  s       r   #test_universal_newlines_communicatez3ProcessTestCase.test_universal_newlines_communicate  s    cnnd.:889 %/OO$.OO01!3" 	''==?C	Er   c                    t        j                  t        j                  ddt        z   t        j                  d      z   gt         j                  d      }|j                  d      \  }}| j                  |j                  d       y )Nr   r  a  
                               s = sys.stdin.readline()
                               assert s == "line1\n", repr(s)
                               s = sys.stdin.read()
                               assert s == "line3\n", repr(s)
                              r   )rA   r   line1
line3
r   )r   rD   rW   rX   r  textwrapdedentrE   r   rY   r   rS  s       r   )test_universal_newlines_communicate_stdinz9ProcessTestCase.test_universal_newlines_communicate_stdin,  ss    cnnd.:X__ N" ># #$ $.??013 ==)9:q)r   c                     t        j                  t        t         j                  t         j                  d      }|j	                          | j                  |j                  d       y )NT)rA   rB   r   r   )r   rD   r   rE   r   rY   r   rJ   s     r   .test_universal_newlines_communicate_input_nonez>ProcessTestCase.test_universal_newlines_communicate_input_none:  sF    
 _#-??$.OO046 	
q)r   c                 @   t        j                  t        j                  ddt        z   t        j                  d      z   gt         j                  t         j                  t         j                  d      }| j                  |j                  j                         | j                  |j                  j                         |j                  d      \  }}| j                  |j                  d       | j                  d|       | j                  |j!                  d	             y )
Nr   r  a  
                               s = sys.stdin.buffer.readline()
                               sys.stdout.buffer.write(s)
                               sys.stdout.buffer.write(b"line2\r")
                               sys.stderr.buffer.write(b"eline2\n")
                               s = sys.stdin.buffer.read()
                               sys.stdout.buffer.write(s)
                               sys.stdout.buffer.write(b"line4\n")
                               sys.stdout.buffer.write(b"line5\r\n")
                               sys.stderr.buffer.write(b"eline6\r")
                               sys.stderr.buffer.write(b"eline7\r\nz")
                              T)rA   rC   rB   r   r  r   zline1
line2
line3
line4
line5
zeline2
eline6
eline7
)r   rD   rW   rX   r  r  r  rE   r   rB   rI   rC   r   rY   r   r  r  rS  s       r   7test_universal_newlines_communicate_stdin_stdout_stderrzGProcessTestCase.test_universal_newlines_communicate_stdin_stdout_stderrF  s    cnnd.:X__ N" ># #$ $.??$.OO$.OO04!6" 	''==)9:q)>G 	))*DEFr   c                     dD ]v  }d|z  }t         j                  d|g}t        j                  |t        j                  t        j                  |      }|j                  d      \  }}| j                  |d       x y )N)zutf-16z	utf-32-bez@import sys; sys.stdout.buffer.write('1\r\n2\r3\n4'.encode('%s'))r   )rA   rB   r   r   r   z1
2
3
4)rW   rX   r   rD   rE   r   rY   )r%   r   r   r:   popenrB   rC   s          r   -test_universal_newlines_communicate_encodingsz=ProcessTestCase.test_universal_newlines_communicate_encodingsb  s     0 	3HLD NND$/D $$T+5??,6OO.68E #..R.8NFFV\2	3r   c                    dD ]  \  }}d}t         j                  d|g}t        j                  |t        j                  t        j                  d|      }|j                  d      \  }}| j                  |dj                  |              y )	N))r   r   )replaceu   ��)surrogateescapeu   )backslashreplacez\x80\x80z2import sys; sys.stdout.buffer.write(b'[\x80\x80]')r   r   )rA   rB   r   r   r   r   z[{}])rW   rX   r   rD   rE   r   rY   format)r%   r   expectedr   r:   r  rB   rC   s           r   test_communicate_errorsz'ProcessTestCase.test_communicate_errorsx  s    !
 	>FH>DNND$/D $$T+5??,6OO.5,2	4E
 #..R.8NFFVV]]8%<=%	>r   c                 ,   t         sd}nd}g }t        j                         }	 t        |      D ]u  }	 t        j
                  j                  |t        j                        }|j                  t	        j                  |t        j                  t        j                  z               w | j!                  d|z         t        d      D ]%  }t	        j"                  |j%                                ' t        d      D ]|  }t'        j(                  t*        j,                  ddgt&        j.                  t&        j.                  t&        j.                        }|j1                  d	      d
   }| j3                  |d	       ~ 	 |D ]  }	t	        j"                  |	        t5        j6                  |       y # t        $ r*}|j                  t        j                  k7  r Y d }~ d }~ww xY w# |D ]  }	t	        j"                  |	        t5        j6                  |       w xY w)Ni  i  z4failed to reach the file descriptor limit (tried %d)
      r   z-import sys;sys.stdout.write(sys.stdin.read())r@   s   limer   )r(   r   mkdtempranger   r   r   r   TESTFNappendopenO_WRONLYO_CREATOSErrorerrnoEMFILEskipTestrI   popr   rD   rW   rX   rE   r   rY   r   rmtree)
r%   max_handleshandlestmpdiritmpfileerK   datahs
             r   test_no_leakingzProcessTestCase.test_no_leaking  s   KK!!#	";' 
0 ggll693C3CDGNN2777BKK

4J#KL
0  !#./ 0 2Y ('( 2Y 0$$cnnd'K&L ,6??,6OO,6OO= }}W-a0  w/0  MM&!1  ww%,,.,  MM&!s6   G  A2F*$CG  *	G3GG  GG   3Hc                 t   | j                  t        j                  g d      d       | j                  t        j                  g d      d       | j                  t        j                  g d      d       | j                  t        j                  g d      d       | j                  t        j                  g d	      d
       | j                  t        j                  g d      d       | j                  t        j                  g d      d       | j                  t        j                  ddg      d       y )N)za b cr7  r  z"a b c" d e)ab"c\r7  z	ab\"c \ d)r  z \r7  zab\"c " \\" d)za\\\bzde fgr  za\\\b "de fg" h)za\"brm   r7  z
a\\\"b c d)za\\b cr7  r  z"a\\b c" d e)za\\b\ cr7  r  z"a\\b\ c" d eabr   zab "")rY   r   list2cmdliner$   s    r   test_list2cmdlinez!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                    t        j                  t        j                  ddgt         j                        }| j                  |j                  j                         | j                  |j                                t        j                  |j                  j                         d       |j                          | j                  |j                         d       y )Nr   zimport os; os.read(0, 1)r      Ar   )r   rD   rW   rX   rE   r   rA   rI   assertIsNonepollr   r   r4  r*   rY   rJ   s     r   	test_pollzProcessTestCase.test_poll  s    cnnd8:#-??4 	&!&&(#
!4(	1%r   c                     t        j                  t              }| j                  |j	                         d       | j                  |j	                         d       y rf   r   rD   r   rY   r*   rJ   s     r   	test_waitzProcessTestCase.test_wait  s>    _-1%1%r   c                    t        j                  t        j                  ddg      }| j	                  t         j
                        5 }|j                  d       d d d        | j                  dt        j                               | j                  |j                  t        j                        d       y # 1 sw Y   _xY w)Nr   zimport time; time.sleep(0.3)-C6?r`   z0.0001r   )r   rD   rW   rX   rb   rc   r*   rw   strrk   rY   r   SHORT_TIMEOUT)r%   rK   rm   s      r   test_wait_timeoutz!ProcessTestCase.test_wait_timeout  s    cnn"$BD Ez889 	#QFF6F"	#hAKK 01(=(=>B	# 	#s   B77C c                     | j                  t              5  t        j                  t        d       d d d        y # 1 sw Y   y xY w)Nr}  )rb   r   r   rD   r   r$   s    r   test_invalid_bufsizez$ProcessTestCase.test_invalid_bufsize  s7     y) 	8_h7	8 	8 	8s	   :Ac                     t        j                  t        d       }| j                  |j	                         d       t        j                  t        d       }| j                  |j	                         d       y )Nr   )rN   r  rJ   s     r   test_bufsize_is_nonez$ProcessTestCase.test_bufsize_is_none  sR    _d31%_d;1%r   c                    t        j                  t        j                  ddgt         j                  t         j                  t         j
                  d|      5 }|j                  j                  |       t        j                  |j                  j                                |j                  j                         }t        j                         5  	 |j                  j                          d d d        d |_        d d d        | j!                  j"                  d       | j!                  |       y # t        $ r Y Qw xY w# 1 sw Y   VxY w# 1 sw Y   SxY w)Nr   zDimport sys;sys.stdout.write(sys.stdin.readline());sys.stdout.flush()r   )rA   rB   rC   rN   r   r   )r   rD   rW   rX   rE   r^  rA   r   r   rI   r4  rB   r  r   SuppressCrashReportr  rY   r   )r%   liner  r   rK   	read_lines         r   _test_bufsize_equal_onez'ProcessTestCase._test_bufsize_equal_one  s   s~~t 64 5 %/OO%/__%/%7%7&'1CE 	 IJGGMM$HHQWW^^%&))+I,,. GGMMO
 AG!	" 	q)H-	   	 	sC   A7ED?D0*E0	D<9D?;D<<D??E	EEc                 0    d}| j                  ||d       y )Nzline
Tr   )r  r%   r  s     r    test_bufsize_equal_one_text_modez0ProcessTestCase.test_bufsize_equal_one_text_mode  s     $$T4D$Ir   c                     dt         j                  j                         z   }| j                  t        d      5  | j                  |dd       d d d        y # 1 sw Y   y xY w)Ns   linezline bufferingr   Fr  )r   linesepr  assertWarnsRegexRuntimeWarningr  r  s     r   "test_bufsize_equal_one_binary_modez2ProcessTestCase.test_bufsize_equal_one_binary_mode	  sZ     **,,"">3CD 	N((su(M	N 	N 	Ns   AAcpuc                     t        d      D ]X  }| j                  t              5  t        j                  t
        t        j                  t        j                         d d d        Z y # 1 sw Y   exY w)NrC  r   )r  rb   r   r   rD   r   rE   )r%   r  s     r   test_leaking_fds_on_errorz)ProcessTestCase.test_leaking_fds_on_error  s^     t 	9A""#56 9  (2(299 9	99 9s   9A((A1	c                    	 dd l }|j                   t        j                  dt        d      }t        j                  d|g}t        j                  |t        j                  d      }|5  |j                         d   }d d d        | j                  d	       | j                  |j                  d       y # t        t        f$ r | j	                  d       Y w xY w# 1 sw Y   ^xY w)
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)rC   r   r   r   )msvcrtCrtSetReportModeAttributeErrorImportErrorr  r  r  r   rW   rX   r   rD   rE   r   rY   r   )r%   r!  r   r  procrC   s         r   test_nonexisting_with_pipesz+ProcessTestCase.test_nonexisting_with_pipes  s    	:##  $ #% &		  & ~~tT*'1379  	+%%'*F	+$!,; , 	:MM89	:4	+ 	+s   B5 *C5 CCC$c                 z   g fd}t        j                  |      }|j                          	 | j                  t              5  t        j                  t        t
        j                  t
        j                  t
        j                         d d d        |j                          d }D ]  }	 t        j                  |        ||y # 1 sw Y   =xY w# t        $ r}|}Y d }~<d }~ww xY w# |j                          d }D ]0  }	 t        j                  |       # t        $ r}|}Y d }~*d }~ww xY w ||w xY w)Nc                      t        d      D ]:  } j                  t        j                                t	        j
                  d       < y )N   gMbP?)r  extendr   rj  timesleep)r  fdss    r   open_fdsz<ProcessTestCase.test_double_close_on_error.<locals>.open_fdsI  s4    2Y "

2779%

5!"r   )targetr@   )	threadingThreadstartrb   EnvironmentErrorr   rD   r   rE   r   r   rI   r  )r%   r.  texcfdr  r-  s         @r   test_double_close_on_errorz*ProcessTestCase.test_double_close_on_errorF  s"   	" H-			""#34 9  '1(2(299 FFHC HHRL 	 !9 9  C FFHC HHRL C 	 sf   C- AC	C- -C	CC- 	C*C%%C*-D:DD:	D1	%D,	'D:,D1	1	D:c                 *   	 t        j                  t        j                  ddg      | j	                  j
                  d        g fd}t        j                  d|      }|j                          t        rd}nd}j                  t        j                         | j	                  j
                  |d	       j                          | j	                  j
                  |d
	       |j                          | j	                  dd|fd|fg       y )Nr   zimport time; time.sleep(12)c                     j                  d j                         f        j                           j                          j                  d j                  f        j                          j                  d j                  f       y )Nthread-start-poll-resultthread-after-kill-and-waitthread-after-second-wait)r  r  ro  r*   r   )r%  resultss   r   kill_proc_timer_threadzDProcessTestCase.test_threadsafe_wait.<locals>.kill_proc_timer_threadj  sb    NN6		DEIIKIIKNN8$//JKIIKNN6HIr   皙?r   ir`   z*unexpected result in wait from main threadmsgz&unexpected result in second main wait.)r:  Nr;  r<  )r   rD   rW   rX   rY   r   r0  Timerr2  r(   r*   r   r	  r   )r%   r>  r4  expected_errorcoder%  r=  s       @@r   test_threadsafe_waitz$ProcessTestCase.test_threadsafe_waitc  s   M!>!@ A$/	J OOC!78		!" "$
 			'//	0*<I 	 	K 			*<E 	 	G 	

 	<79KL57IJL !	"r   c                     dj                  d      }t        j                  t        j                  d|g      }| j                  |j                  d      t        |             y )N;)zimport subprocess, syszJretcode = subprocess.call([sys.executable, '-c', 'print("Hello World!")'])zassert retcode == 0r   s   Hello World!)r   r   rv   rW   rX   r  r  ascii)r%   r   r{   s      r   test_issue8780zProcessTestCase.test_issue8780  sQ     xx # $
 ((#..$)EF))/:E&MJr   c                    t        j                         \  }}t        j                         \  }}t        j                         \  }}	 t        j                  dg|||       | j                  t
        j                  j                  |             | j                  t
        j                  j                  |             | j                  t
        j                  j                  |             y # t        $ r t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |       Y w xY w)N*r@   )r   mkstempr   rD   r  r   rI   remover,   r   exists)r%   ifhandleifnameofhandleofnameefhandleefnames          r    test_handles_closed_on_exceptionz0ProcessTestCase.test_handles_closed_on_exception  s    $++-&#++-&#++-&		se8H 	/0/0/0  	HHXIIfHHXIIfHHXIIf	s   C, ,BE76E7c                    t        j                  t        t         j                  t         j                  t         j                        }| j	                  |j
                  j                         | j	                  |j                  j                         | j	                  |j                  j                         |j                  ddz         y )Nr@      x   )
r   rD   r   rE   r   rB   rI   rC   rA   r   rJ   s     r   test_communicate_epipez&ProcessTestCase.test_communicate_epipe  sw    _#-??$.OO$.OO5 	''&	dUl#r   c           
         t        j                  d      }|j                  j                  }dddgdd dfg ddd df|dd	d
| dfg}t        j
                  j                  j                  t        j                  d      5  |D ]@  \  }}}}t        j                  ||      }||_
        | j                  t        |      |       B 	 d d d        y # 1 sw Y   y xY w)Nz
my-tool.py)lsT{   z#<Popen: returncode: 123 args: 'ls'>)daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTr   zP<Popen: returncode: 0 args: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...>rZ  Fz&<Popen: returncode: None args: ['ls']>)rZ  z	--my-optsr\  zP<Popen: returncode: None args: ['ls', '--my-opts', 'aaaaaaaaaaaaaaaaaaaaaaaa...>   z<Popen: returncode: 7 args: z('my-tool.py')>r<   r   )pathlibPath	__class__r1   rm  r   patchobjectr   rD   r   rY   repr)	r%   path_cmdpathlib_clscasesr  r   r   sxrK   s	            r   	test_reprzProcessTestCase.test_repr  s    <<-((11 EaVUD"JK+UD_aua#?}O!\]
 ]]  ''
(8(8:JK 	.(- .$UD"$$S6#  a"-.	. 	. 	.s   >ACCc                     t        j                  t        t         j                        }| j	                  |j
                  j                         |j                          |j                  ddz         y )Nr   rV  rW  )	r   rD   r   rE   r   rA   rI   r*   r   rJ   s     r   !test_communicate_epipe_only_stdinz1ProcessTestCase.test_communicate_epipe_only_stdin  sH    _#-??4&		dUl#r   SIGUSR1zRequires signal.SIGUSR1ro  zRequires os.killgetppidzRequires os.getppidc                 ~   d }t        j                   t         j                  |      }| j                  t         j                   t         j                  |       t        j                  ddg}dD ]C  }|t
        j                  i}t        j                  |fi |5 }|j                          d d d        E y # 1 sw Y   PxY w)Nc                      y r"   r4   )signumframes     r   handlerz7ProcessTestCase.test_communicate_eintr.<locals>.handler      r   r   z7import os, signal;os.kill(os.getppid(), signal.SIGUSR1)r   )	signalrl  r   rW   rX   r   rE   rD   r   )r%   rr  old_handlerr:   streamkwprocesss          r   test_communicate_eintrz&ProcessTestCase.test_communicate_eintr  s    	mmFNNG<v~~{C89 + 	&F*//*B!!$-"- &##%& &	&& &s   B33B<	/proc/%d/fdzLinux specificc                 z   	 dt        j                         z  }t        j                  |      }| j                  t              5  t        t        t        j                  t        j                  t        j                         d d d        t        j                  |      }| j                  ||       y # 1 sw Y   1xY w)Nrz  r@   )
r   getpidlistdirrb   r6   r8   r   r   rE   rY   )r%   fd_directoryfds_before_popenfds_after_exceptions       r   !test_failed_child_execute_fd_leakz1ProcessTestCase.test_failed_child_execute_fd_leak  s     	J$ryy{2::l312 	D##:??%??:??D	D !jj6)+>?	D 	Ds   >B11B:z+behavior currently not supported on Windowsc                     | j                  t              5 }t        j                  g d       d d d        | j	                  j
                  j                  d       y # 1 sw Y   0xY w)N)/opt/nonexistent_binarywithsomer:   r  )rb   r  r   rV   rY   rk   filenamerl   s     r   %test_file_not_found_includes_filenamez5ProcessTestCase.test_file_not_found_includes_filename  sT    01 	QQOOOP	Q--/HI	Q 	Qs   AA&c                     | j                  t              5 }t        j                  ddgd       d d d        | j	                  j
                  j                  d       y # 1 sw Y   0xY w)Nexit0z/some/nonexistent/directoryr  )rb   r  r   rD   rY   rk   r  rl   s     r    test_file_not_found_with_bad_cwdz0ProcessTestCase.test_file_not_found_with_bad_cwd  s\    01 	OQfc]0MN	O--/LM	O 	Os   AA(c                     | j                  t        j                  t           t        j
                         | j                  t        j                  t           t        j
                         y r"   )rF   r   rD   bytestypesGenericAliasCompletedProcessr  r$   s    r   test_class_getitemsz#ProcessTestCase.test_class_getitems  sD    j..u5u7I7IJj99#>@R@RSr   
HAVE_VFORKz!vfork() not enabled by configure.subprocess._fork_execc                    | j                  t        j                         t        d      |_        | j                  t              5  t        j                  t        j                  ddg       d d d        |j                          | j                  |j                  j                  d          t        j                  j                  t        dd      5  | j                  t              5  t        j                  t        j                  ddg       d d d        | j                  |j                   d   j                  d          d d d        y # 1 sw Y   xY w# 1 sw Y   IxY w# 1 sw Y   y xY w)Nzjust testing argsr   r   rw  
_USE_VFORKF)r  r   r  RuntimeErrorside_effectrb   r   rW   rX   assert_called_once	call_argsr:   r   rb  rc  r,   call_args_list)r%   mock_fork_execs     r   test__use_vforkzProcessTestCase.test__use_vfork  s    	
--.%12E%F"|, 	;NNCNND&9:	;))+0055b9:ZZz<? 	I""<0 ?f=>?^::2>CCBGH	I 	I		; 	;
? ?	I 	Is0   'E
E"''E3E"
EE	E""E+N)r1   r2   r3   rL   rP   r\   rd   rh   rn   r|   r   r   r   r   r   r   r   r   r   r   r   requires_resourcer   r   r   r   r   r   r   r   r   r   r   rm  skipIfr(   r   r   r   r  r  r  r  r  r  r"  r'  r*  rW   base_prefixprefixr,  	sysconfigis_python_buildr.  r1  r8  r;  r@  rE  rH  rL  rN  rP  rT  rX  rZ  r\  r_  ra  rc  
skipUnlessrk  hasattrru  r{  r  platformget_config_varr   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r&  r7  rD  rH  rT  rX  ri  rk  rt  r   ry  r   isdirr|  r  r  r  r  r   rb  r  r4   r   r   r>   r>   t   s|   !' 
554'
''(''%54 Wz*6 +6 +(<.)+	MDA9 X__Y DEG FG
 X__Y DE( F( X__Y DE( F(
*=&AN
K
 X__Y DEE FE X__Y DE- F-$C X__S__

224D4D X__S__

224X__.Y..0:<4<44**
*9
6	/=
:	3**
>4>&))( XA75.#A@B!B!F XA75.#A@BB6	0 X__S\\W,:<X__-Y--.@AQF23 X___T2@B2B3<2,@6<*'//@&5"9,'2.& %FNE2*
*G83,>*%"N"$	&&C8&.,JN Wu%
9 &
9'-R:2"h	K1(	$.&$ X324XV,+-XY/.0&0-4&& X}yryy{'BC)+@+@  X__Y MNJ OJ
 X__Y MNN ON
T X__111,??8:TZZ'(
I ):
Ir   r>   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z ej                  d      d        Zd Zd Zd Zd Z ej*                  ed      d        Zd Zd Zd Z ej6                  ed      d        Zd Zy)RunFuncTestCasec                 V    	 t         j                  d|g}t        j                  |fi |S )Nr   rW   rX   r   r   )r%   r   r;   argvs       r   
run_pythonzRunFuncTestCase.run_python(  s)    Bd+~~d-f--r   c                     | j                  d      }| j                  |j                  d       | j                  t        j
                        5  |j                          d d d        y # 1 sw Y   y xY wr   )r  rY   r   rb   r   rj   check_returncoder%   cps     r   test_returncodezRunFuncTestCase.test_returncode-  sZ    __78+z<<= 	"!	" 	" 	"s   A''A0c                     | j                  t        j                        5 }| j                  dd       d d d        | j	                  j
                  j                  d       y # 1 sw Y   0xY w)NrS   Trt   rT   )rb   r   rj   r  rY   rk   r   rl   s     r   
test_checkzRunFuncTestCase.test_check4  s\    z<<= 	DOO6dOC	D//4	D 	Ds   A##A,c                 r    t        j                  t        d      }| j                  |j                  d       y )NTrt   r   )r   r   r   rY   r   r  s     r   test_check_zerozRunFuncTestCase.test_check_zero9  s&    ^^O48*r   c                     | j                  t        j                        5  | j                  dd       d d d        y # 1 sw Y   y xY w)Nr^   r  r`   )rb   r   rc   r  r$   s    r   test_timeoutzRunFuncTestCase.test_timeout>  sB    
 z889 	@OO.O?	@ 	@ 	@s	   =Ac                 ~    | j                  dt        j                        }| j                  d|j                         y )Nrq   rs   rr   r  r   rE   rw   rB   r  s     r   test_capture_stdoutz#RunFuncTestCase.test_capture_stdoutF  s*    ___Z___Egryy)r   c                 ~    | j                  dt        j                        }| j                  d|j                         y )Nr   r   rr   )r  r   rE   rw   rC   r  s     r   test_capture_stderrz#RunFuncTestCase.test_capture_stderrK  s1    __C$.OO  5gryy)r   c                 "   t        j                         }| j                  |j                         |j	                  d       |j                  d       | j                  d|t        j                        }| j                  d|j                         y )Nr   r   r   r   r   )r   r   r   rI   r   r   r  r   rE   rw   rB   )r%   r   r  s      r   r   z+RunFuncTestCase.test_check_output_stdin_argP  sj    ##%!


__I  2 	gryy)r   c                     | j                  ddt        j                        }| j                  d|j                         y )Nr   r   )r   rB   r   r  r  s     r   r   z+RunFuncTestCase.test_check_output_input_arg[  s5    __Hjoo  7 	gryy)r   c                    t        j                         }| j                  |j                         |j	                  d       |j                  d       | j                  t        d      5 }| j                  d|d      }d d d        | j                  dj                  j                  d          | j                  d	|j                  j                  d          y # 1 sw Y   \xY w)
Nr   r   r   r@  r   r   r   rA   r   )r   r   r   rI   r   r   rb   ry   r  rw   rk   r:   r   s       r   r   z6RunFuncTestCase.test_check_output_stdin_with_input_argb  s    ##%!


zK  M 	>PQ__%?+-W % >F	> 	gq{{//23gq{{//23	> 	>s   )CC"r   c                 H   | j                  t        j                        5 }| j                  ddt        j                        }d d d        | j                  j                  j                  d       | j                  |j                  j                  d       y # 1 sw Y   VxY w)Nr   r   )ra   rB   rr   )	rb   r   rc   r  rE   rY   rk   r{   rB   )r%   rm   r  s      r   r   z)RunFuncTestCase.test_check_output_timeouto  s    z889 	7Q( joo ! 7B	7 	++W5++W5	7 	7s   #BB!c                     t         j                  j                         }d|d<   | j                  d|      }| j	                  |j
                  d       y )Nr   r   zCimport sys, os;sys.exit(33 if os.getenv("FRUIT")=="banana" else 31)r   !   )r   r   r   r  rY   r   )r%   r   r  s      r   test_run_kwargszRunFuncTestCase.test_run_kwargs~  sM    ""w__ M!'  ) 	+r   c                    t         rdnd}t        j                  |      }|| j                  | d       t	        |      }t        j                  |t
        j                        }| j                  |j                  d       | j                  t              5  t        j                  |t
        j                  d       d d d        y # 1 sw Y   y xY w)Nztree.comrZ  z required for this testrs   r   T)rB   r   )r(   r   r   r  r
   r   r   r^  rY   r   rb   r   )r%   progr   ress       r   test_run_with_pathlike_pathz+RunFuncTestCase.test_run_with_pathlike_path  s     'zD||D!<MMTF"9:;~nnT**<*<=+y) 	HNN4
(:(:$G	H 	H 	Hs   'CCc                     t        j                  t        j                        }|ddg}t	        j
                  |      }| j                  |j                  d       y )Nr   s   import sys; sys.exit(57)9   )r   r   rW   rX   r   r   rY   r   r%   r   r:   r  s       r   &test_run_with_bytes_path_and_argumentsz6RunFuncTestCase.test_run_with_bytes_path_and_arguments  sC    {{3>>*d78nnT",r   c                     t        t        j                        }|ddg}t        j                  |      }| j                  |j                  d       y )Nr   zimport sys; sys.exit(57)r  )r
   rW   rX   r   r   rY   r   r  s       r   )test_run_with_pathlike_path_and_argumentsz9RunFuncTestCase.test_run_with_pathlike_path_and_arguments  s?    'd67nnT",r   z#Maybe test trigger a leak on Ubuntuc                 X    t         j                  ddg}t        j                  |i        y )Nr   r   r   r  )r%   r:   s     r   test_run_with_an_empty_envz*RunFuncTestCase.test_run_with_an_empty_env  s$     f- 	t$r   c                     | j                  dd      }| j                  d|j                         | j                  d|j                         y )Nz>import sys;sys.stdout.write('BDFL'); sys.stderr.write('FLUFL')Tcapture_outputrr   s   FLUFL)r  rw   rB   rC   r  s     r   test_capture_outputz#RunFuncTestCase.test_capture_output  sE    __ : -1  2 	gryy)h		*r   c                    t        j                         }| j                  |j                         | j	                  t
        d      5 }| j                  dd|      }d d d        | j                  dj                  j                  d          | j                  d|j                  j                  d          y # 1 sw Y   \xY w)	NzAExpected ValueError when stdout and capture_output args supplied.r@  r   T)r  rB   rB   r   r  
r   r   r   rI   rb   ry   r  rw   rk   r:   r   s       r   #test_stdout_with_capture_output_argz3RunFuncTestCase.test_stdout_with_capture_output_arg      ##%!z"  $ 	F'(__%?59" % FF	F
 	h 0 0 34&(8(8(;<	F 	F   B77C c                    t        j                         }| j                  |j                         | j	                  t
        d      5 }| j                  dd|      }d d d        | j                  dj                  j                  d          | j                  d|j                  j                  d          y # 1 sw Y   \xY w)	NzAExpected ValueError when stderr and capture_output args supplied.r@  r   T)r  rC   rC   r   r  r  r   s       r   #test_stderr_with_capture_output_argz3RunFuncTestCase.test_stderr_with_capture_output_arg  r  r  z)requires posix like 'sleep' shell commandc                 J   	 t        j                         }	 t        j                  dddd       | j	                  d       | j                  |z
  dd d	       y # t        j
                  $ r2}t        j                         }t        j                         }Y d }~\d }~ww xY w)
Nzsleep 3Tr_   )r   ra   r  zTimeoutExpired not raised.g      ?z/TimeoutExpired was delayed! Bad traceback:
```
z```r@  )	r+  	monotonicr   r   r   rc   	traceback
format_exc
assertLess)r%   before_secsr5  
after_secsstackss        r   .test_run_with_shell_timeout_and_capture_outputz>RunFuncTestCase.test_run_with_shell_timeout_and_capture_output  s    Xnn&	4NN9D#*.0 II23
[0#O!(#' 	 	( (( 	,)J))+F	,s   A B"0(BB"c                 x   t        j                  d      }t        j                  t        j
                  dd|gd      }|j                  j                         }| j                  t        |      d|       | j                  |d   j                  d             | j                  |d	   j                  d
             y )Nz            from subprocess import *
            run("echo hello", shell=True, text=True)
            check_output("echo hello", shell=True, text=True)
            z-Xwarn_default_encodingr   Tr  rf  r   s   <string>:2: EncodingWarning: r   s   <string>:3: EncodingWarning: )r  r  r   r   rW   rX   rC   
splitlinesrY   r  r  r  )r%   r   r  liness       r   test_encoding_warningz%RunFuncTestCase.test_encoding_warning  s       
 ^^S^^-FdS+/1		$$&UQ.a++,LMNa++,LMNr   N)r1   r2   r3   r  r  r  r  r  r  r  r   r   r   r   r  r   r  r  r  r  rm  r  r(   r  r  r  r  r  r  r  r4   r   r   r  r  '  s    .
"5
+
@*
*
	**4 Wz*6 +6,H-- X$IJ% K%+
=
=  X__Y KL( M(Or   r  c                      dD ]"  } t         s
	 t        j                  |        | c S  t        j                  d      # t        $ r Y Ew xY w)N)staffnogroupgrpnobody	nfsnobodyz?No identified group name to use for this test on this platform.)r  getgrnamKeyErrorrm  rn  )
name_groups    r   _get_test_grp_namer    sW    H c
Z( c  abb	  s   =	A	A	zPOSIX specific testsc                       e Zd Z fdZd Zd Zd Zd Z G d dej                        Z
 ej                  d      d	        Z ej                  d      d
        Z ej                   ej$                  j'                  d       d      d        Zd Z ej,                   eed      xr	  eed      d      d        Z ej,                   eed      d      d        Z ej                    eed      d      d        Z ej,                   eed      d      d        Z ej                    eed      d      d        Z ej,                   eed      d      d        Z ej                    eed      d       d!        Z ej                   exs
  eed"       d#      d$        Z d% Z!d& Z"d' Z#d( Z$d) Z%d* Z& G d+ d,ej                        Z' ej                   ej$                  j'                  d-       d.      d/        Z(d0 Z) ej                   e*jV                  d1k(  d2      d3        Z,d4 Z-d5 Z.d6 Z/d7 Z0d8 Z1d9 Z2d: Z3 ej                   e*jV                  ji                  d;      d<      d=        Z5d> Z6d? Z7d@ Z8dA Z9dB Z:dC Z;dD Z<dE Z=dF Z>dG Z?dH Z@dI ZAdJ ZBdK ZCdL ZDdM ZEdN ZFdO ZGdP ZHdQ ZIdR ZJdS ZKdT ZLdU ZMdV ZNdW ZOdX ZPdY ZQ ej                   e*jV                  ji                  dZ      xr9  ej                  d[      j                   ej                  d\      j                  k(  d]      d^        ZT eUj                  d_d`      da        ZWdb ZXdc ZYdd ZZde Z[df Z\dg Z]dh Z^di Z_dj Z`dk ZaeUj                  dl        ZceUj                  dm        Zddn Zedo Zfdp Zgdq Zh ej,                  eidruxr	  eeids      dt      du        Zjdv Zkdw Zldx Zmdy Zn xZoS )zPOSIXProcessTestCasec                 0    t         |           d| _        y )Nz/_this/pa.th/does/not/exist)superr&   _nonexistent_dirr%   ra  s    r   r&   zPOSIXProcessTestCase.setUp  s     =r   c                     	 t        j                  | j                         | j                  d| j                  z         S # t        $ r}|}Y d }~|S d }~ww xY w)Nz,chdir to nonexistent directory %s succeeded.)r   chdirr  r   r  )r%   r  desired_exceptions      r   _get_chdir_exceptionz)POSIXProcessTestCase._get_chdir_exception  s`    		-HHT**+ IID++, -    	" !" ! 	"s   A 	A
AAc                    	 | j                         }	 t        j                  t        j                  ddg| j
                        }| j                  d|z         y # t        $ r|}| j                  |j                  |j                         | j                  |j                  |j                         | j                  |j                  |j                         Y d }~y d }~ww xY w)Nr   r   r  Expected OSError: %sr  r   rD   rW   rX   r  r   r  rY   r  strerrorr  r%   r  rK   r  s       r   test_exception_cwdz'POSIXProcessTestCase.test_exception_cwd  s    I 557
	B  #..$!;%)%:%:<A II,/@@A  	E .44agg>.77D.77DD	E   2A 	C#A2CCc                    	 | j                         }	 t        j                  t        j                  ddg| j
                        }| j                  d|z         y # t        $ r|}| j                  |j                  |j                         | j                  |j                  |j                         | j                  |j                  |j                         Y d }~y d }~ww xY w)Nr   r   r   r  r  r  s       r   test_exception_bad_executablez2POSIXProcessTestCase.test_exception_bad_executable  s    P 557
	B  #..$!;,0,A,ACA II,/@@A  	E .44agg>.77D.77DD	Er  c                    	 | j                         }	 t        j                  | j                  ddg      }| j	                  d|z         y # t
        $ r|}| j                  |j                  |j                         | j                  |j                  |j                         | j                  |j                  |j                         Y d }~y d }~ww xY w)Nr   r   r  )
r  r   rD   r  r   r  rY   r  r   r  r  s       r   test_exception_bad_args_0z.POSIXProcessTestCase.test_exception_bad_args_0*  s    M 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                       e Zd Zd Zy)&POSIXProcessTestCase.PopenNoDestructorc                      y r"   r4   r$   s    r   __del__z.POSIXProcessTestCase.PopenNoDestructor.__del__@  rs  r   N)r1   r2   r3   r  r4   r   r   PopenNoDestructorr	  ?  s    	r   r  r  c                     	 d }||_         t        j                  dt              5  | j	                  t
              5  | j                  dg       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                      | d   }dj                  t        j                        j                         }t	        j
                  |d|z   dz          y)N   z{:x}s   OSError:   :r   )r  r  EISDIRr  r   r   )r:   errpipe_writeerr_codes      r   proper_errorzHPOSIXProcessTestCase.test_exception_errpipe_normal.<locals>.proper_errorF  sA     HM}}U\\299;HHH]K($:T$ABr   subprocess.os.waitpidr  non_existent_command)r  r   rb  ChildProcessErrorrb   IsADirectoryErrorr  )r%   	fork_execr  s      r   test_exception_errpipe_normalz2POSIXProcessTestCase.test_exception_errpipe_normalC  s    L	 !-	ZZ/$57 	A""#45 A&&(>'?@A	A 	AA A	A 	As"   A-A!A-!A*	&A--A6c                 l   	 dfd}||_         t        j                  dt              5  | j	                  t
        j                        5 }| j                  dg       d d d        d d d        | j                  t              t        j                               y # 1 sw Y   @xY w# 1 sw Y   DxY w)Ns    ޭc                  <    | d   }t        j                  |       y)Nr  r   )r   r   )r:   r  
error_datas     r   	bad_errorzGPOSIXProcessTestCase.test_exception_errpipe_bad_data.<locals>.bad_errorY  s     HM HH]J/r   r  r  r  )r  r   rb  r  rb   r   SubprocessErrorr  rw   rd  r  rk   )r%   r  r  r  r  s       @r   test_exception_errpipe_bad_dataz4POSIXProcessTestCase.test_exception_errpipe_bad_dataT  s    	"(
	 !*	ZZ/$57 	A"":#=#=> A!&&(>'?@A	A
 	d:&AKK(89A A	A 	As#    B*BB*B'	#B**B3/proc/self/statuszneed /proc/self/statusc                 Z   t        j                  ddgd      }|j                         D ]  }|j                  d      s|} n | j	                  d       t        j                  ddgd      }|j                         D ]  }|j                  d      s|} n | j                  d	       y )
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   rv   r  r  r  assertNotEqual)r%   default_proc_statusr  default_sig_ign_maskrestored_proc_statusrestored_sig_ign_masks         r   test_restore_signalsz)POSIXProcessTestCase.test_restore_signalsj  s     )55+, %' (224 	DDy)'+$	D
 MMBC)66+, $ & )335 	Dy)(,%	 	02G!3 	 	4r   c                 "   	 t        j                  t        j                  ddgd      }t	        j
                  d      }t        |      }| j                  ||       y # t        $ r(}|j                  t        j                  k7  r Y d }~y d }~ww xY w)Nr   zimport os; print(os.getsid(0))T)start_new_sessionr   )r   rv   rW   rX   r   getsidintr&  PermissionErrorr  EPERM)r%   r{   
parent_sid	child_sidr  s        r   test_start_new_sessionz+POSIXProcessTestCase.test_start_new_session  s{    
	7,,^^T+KL&*,F 1JFI
I6  	ww%++% &	   (A 	B&B		Bsetpgidgetpgidz!no setpgid or getpgid on platformc                 "   	 t        j                  t        j                  ddgd      }t	        j
                  d      }t        |      }| j                  ||       y # t        $ r(}|j                  t        j                  k7  r Y d }~y d }~ww xY w)Nr   zimport os; print(os.getpgid(0))r   )process_group)r   rv   rW   rX   r   r7  r/  r&  r0  r  r1  )r%   r{   parent_pgid
child_pgidr  s        r   test_process_group_0z)POSIXProcessTestCase.test_process_group_0  s{    
	9,,^^T+LM"#%F **Q-KVJZ8  	ww%++% &	r5  setreuidzno setreuid on platformc                    t        j                         }|dk7  rdnd|g}t        j                  dk7  rdnd}t        '	 t	        j
                  |       |j                  |       |D ]  }dD ]  }| j                  ||      5  	 t        j                  t        j                  dd	g||      }t        |t              r t	        j
                  |      j                  }n|}t        |      }| j!                  ||       d d d          | j-                  t.              5  t        j0                  t2        d
       d d d        | j-                  t4              5  t        j0                  t2        t         j6                  t         j8                  d       d d d        t        =|:| j-                  t.              5  t        j0                  t2        |       d d d        y y y # t        $ r d }Y w xY w# t"        $ r Y t$        $ r8}	|	j&                  t&        j(                  t&        j*                  fvr Y d }	~	8d }	~	ww xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)N    darwinr  unknownr  )user	close_fdsr   zimport os; print(os.getuid())rw  rC              )r   r   rC  )r   geteuidrW   r  pwdgetpwnamr  r  subTestr   rv   rX   
isinstancer  pw_uidr/  rY   r0  r  r  EACCESr1  rb   ry   rg   r   OverflowErrorr  r   )
r%   uid
test_usersname_uidrC  rD  r{   user_uid
child_userr  s
             r   	test_userzPOSIXProcessTestCase.test_user  s/    jjl"e|e<
"||x78Y? X&!!(+
  	?D* ?	\\ty\A ??!+!8!8!$!@!B%)*3	"5 &dC0'*||D'9'@'@H'+H%([
((X>%? ??	?. z* 	<!!/;	< }- 	M!!/&(iiRZZeM	M ;8/"":. F%%oHEF F 0;E     + " "775<<*EE! F"? ?(	< 	<	M 	M
F Fsx   &G H;)G-,AH;I:I4I!G*)G*-	H8	6H;8H8	 -H3	-H;3H8	8H;;III!I*z setreuid() available on platformc                     | j                  t              5  t        j                  t        d       d d d        y # 1 sw Y   y xY w)N  rE  rb   ry   r   rg   r   r$   s    r   test_user_errorz$POSIXProcessTestCase.test_user_error  s5    z* 	?!!/>	? 	? 	?	   ;Asetregidzno setregid() on platformc                    t        j                         }|dk7  rdndg}t               }t        |j	                  |       ||gz   D ]  }dD ]  }| j                  ||      5  	 t        j                  t        j                  ddg||      }t        |t              r t        j                  |      j                  }n|}t        |      }| j                  ||       d d d          | j#                  t$              5  t        j&                  t(        d       d d d        | j#                  t*              5  t        j&                  t(        t         j,                  t         j.                  d	
       d d d        t        :| j#                  t$              5  t        j&                  t(        |       d d d        y y # t         $ r Y w xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   rxY w# 1 sw Y   y xY w)Nr?  r@  r  )grouprD  r   zimport os; print(os.getgid())rw  r\  rF  )r   r   r\  )r   getegidr  r  r  rJ  r   rv   rW   rX   rK  r  r  gr_gidr/  rY   r0  rb   ry   rg   r   rN  r  r   )	r%   gid
group_listr  r\  rD  r{   	group_gidchild_groups	            r   
test_groupzPOSIXProcessTestCase.test_group  s   jjl"e|e7
')
?j)3%' 	AE* A	\\\C AA!+!8!8!$!@!B&+*3	"5 &eS1(+U(;(B(BI(-I&)&k((i@!A AA	A, z* 	=!!/<	= }- 	N!!/&(iiRZZuN	N ;"":. I%%oZHI I ' + A A&	= 	=	N 	N
I IsU   !G#)F8AG<G5:G G,8	G	GG	GGG G),G5z setregid() available on platformc                     | j                  t              5  t        j                  t        d       d d d        y # 1 sw Y   y xY w)NrV  r]  rW  r$   s    r   test_group_errorz%POSIXProcessTestCase.test_group_error  s9    z* 	@!!/?	@ 	@ 	@rY  	setgroupszno setgroups() on platformc                    t        j                         }|dk7  rdndg}t               }d}t        |j	                  |       	 t        j                  t        j                  ddg|      }t        j                         }t        j                  |      }t        ?|D cg c]3  }t        |t              rt        j                  |      j                  n|5 }	}n|}	|r%| j!                  t#        |      t#        |             n%| j!                  t#        |	      t#        |             	 | j+                  t,              5  t        j.                  t0        dg       d d d        | j+                  t,              5  t        j.                  t0        t         j2                  t         j4                  d	g
       d d d        t        ;| j+                  t,              5  t        j.                  t0        |g       d d d        y y c c}w # t$        $ r+}
|
j&                  t&        j(                  k7  r d}Y d }
~
d }
~
ww xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr?  r@  Fr   z;import os, sys, json; json.dump(os.getgroups(), sys.stdout)extra_groupsTrw  rF  )r   r   rj  )r   r^  r  r  r  r   rv   rW   rX   	getgroupsjsonloadsrK  r  r  r_  rY   setr  r  r1  rb   ry   rg   r   r  r   )r%   r`  ra  r  
perm_errorr{   parent_groupschild_groupsgdesired_gidsexs              r   test_extra_groupsz&POSIXProcessTestCase.test_extra_groups  s   jjl"e|e7
')

?j)	G,,^^TRT!+-F LLNM::f-L)3 5$% ;EQ:LQ 6 6RS S  5  5  *  \!2C4FG  \!2C4EF z* 	F!!/E	F z* 	8!!/&(iiRZZ05w8	8
 ;"":. A%%o4><AA A ' 5  	xx5;;&J	*	F 	F	8 	8A AsB   (H  8G;<H76;II 	H4	 H//H47I IIz!setgroups() available on platformc                     | j                  t              5  t        j                  t        g        d d d        y # 1 sw Y   y xY w)Nri  rW  r$   s    r   test_extra_groups_errorz,POSIXProcessTestCase.test_extra_groups_error=  s9    z* 	D!!/C	D 	D 	DrY  umaskzPOSIX umask() is not available.c           	         d }	 t        j                         }t        j                  j	                  |d      }t        j                  t        j                  dd|dgd       t        j                  |      j                  dz  }d}| j                  ||t        |       d	t        |       
       |t        j                  |       y y # |t        j                  |       w w xY w)Nbeansr   zopen(z, 'w').close()+   )rx  i  i  z != r@  )r   r  r   r   r   r   rg   rW   rX   statst_moderY   octr   r  )r%   r  namer}  expected_modes        r   
test_umaskzPOSIXProcessTestCase.test_umaskB  s     	&%%'F77<<0D !!^^TU4(.+IJ!
 ggdm++e3G!M]G$'$6#7tCL>!J  L !f% "v!f% "s   B/C C&c                    t        j                         5  t        j                  t        j
                  ddg      }|j                          d d d        | j                  j                   t        j                         y # 1 sw Y   5xY w)Nr   zimport os; os.abort())r   r  r   rD   rW   rX   r*   rY   r   rt  SIGABRTrJ   s     r   test_run_abortz#POSIXProcessTestCase.test_run_abortX  sh    ((* 	  #..$"9"; <AFFH	 	!,,7		 	s   7B  B	c                 ,   t        j                  t        t        j                         d      }t        |      }| j                  d|j                                | j                  d|       | j                  t        t        j                        |       y )Nfake cmdrt  SIG)r   rj   r/  rt  r  r  rw   lowerr%   r   error_strings      r   "test_CalledProcessError_str_signalz7POSIXProcessTestCase.test_CalledProcessError_str_signal`  si    ++S-@,@*M3x 	h 2 2 45 	e\*c&..)<8r   c                 j    t        j                  dd      }t        |      }| j                  d|       y )NiKir  zunknown signal 9876543.r   rj   r  rw   r  s      r   *test_CalledProcessError_str_unknown_signalz?POSIXProcessTestCase.test_CalledProcessError_str_unknown_signalk  s,    ++HjA3x/>r   c                 j    t        j                  dd      }t        |      }| j                  d|       y )Nrf  r  znon-zero exit status 2.r  r  s      r   $test_CalledProcessError_str_non_zeroz9POSIXProcessTestCase.test_CalledProcessError_str_non_zerop  s,    ++Az:3x/>r   c                     t        j                  t        j                  ddgt         j                  d       }|5  | j                  |j                  j                         d       d d d        y # 1 sw Y   y xY w)Nr   r~  c                  .    t        j                  dd      S )Nr   apple)r   putenvr4   r   r   <lambda>z3POSIXProcessTestCase.test_preexec.<locals>.<lambda>|  s    		'70K r   )rB   
preexec_fn   appler?  rJ   s     r   test_preexecz!POSIXProcessTestCase.test_preexecu  si     cnndEF %/OO(K	M
  	8QXX]]_h7	8 	8 	8s   +A//A8c                 ^   d }	 t        j                  t        j                  ddg|      }| j	                  d       y # t         j
                  $ r*}| j                  t         j                  d       Y d }~y d }~wt        $ r)}| j                  d|j                  d          Y d }~y d }~ww xY w)	Nc                      t        d      )Nz'What if two swallows carried a coconut?ry   r4   r   r   raise_itz=POSIXProcessTestCase.test_preexec_exception.<locals>.raise_it  s    FGGr   r   r   r  zEException raised by preexec_fn did not make it to the parent process.z)Expected a ValueError from the preexec_fncoconutr   )r   rD   rW   rX   r   r   r  
_fork_execry   rw   r:   )r%   r  rK   r  s       r   test_preexec_exceptionz+POSIXProcessTestCase.test_preexec_exception  s    	H	0  #..$!;,46A II / 0 )) 	AOO))?A A  	0MM)QVVAY//	0s!   (? B, A77B,B''B,c                       e Zd Z	 d Zd Zy)+POSIXProcessTestCase._TestExecuteChildPopenc                 X    || _         t        j                  j                  | g|i | y r"   )	_testcaser   rD   r   )r%   testcaser:   r;   s       r   r   z4POSIXProcessTestCase._TestExecuteChildPopen.__init__  s'    %DN%%d<T<V<r   c           
         	 t        j                  j                  | g|i | t        d      D cg c]&  }t	        j
                  dt        j                        ( }}	 |D ]k  }| j                  j                  || j                  j                         | j                  j                         | j                  j                         fd       m 	 |D ]  }t	        j                  |        y c c}w # |D ]  }t	        j                  |        w xY w# t        d      D cg c]&  }t	        j
                  dt        j                        ( nc c}w }}	 |D ]k  }| j                  j                  || j                  j                         | j                  j                         | j                  j                         fd       m 	 |D ]  }t	        j                  |        w # |D ]  }t	        j                  |        w xY wxY w)N   	/dev/zeroz!At least one fd was closed early.r@  )r   rD   r<   r  r   r  O_RDONLYr  r   rA   r4  rB   rC   rI   )r%   r:   r;   r  devzero_fdsr6  s         r   r<   z:POSIXProcessTestCase._TestExecuteChildPopen._execute_child  s   %  //FtFvF ).a2#$  "ww{BKK@ 2 2%) I22 "TZZ%6%6%8$++:L:L:N%)[[%7%7%9%;$G 3 II * %%2 * %% ).a2#$  "ww{BKK@ 2 2 2%) I22 "TZZ%6%6%8$++:L:L:N%)[[%7%7%9%;$G 3 II * %%k %%sB   #D +C. A0C3 3DH"+EHA0G$H$HHN)r1   r2   r3   r   r<   r4   r   r   _TestExecuteChildPopenr    s    A	=	%r   r  r  z/dev/zero required.c           	          	 d }| j                  t        j                        5  | j                  | t        t        j
                  t        j
                  t        j
                  |       d d d        y # 1 sw Y   y xY w)Nc                  ,    t        j                  d      )Nz-force the _execute_child() errpipe_data path.)r   r   r4   r   r   r  zWPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes.<locals>.raise_it  s    ,,CE Er   )rA   rB   rC   r  )rb   r   r   r  r   rE   )r%   r  s     r   0test_preexec_errpipe_does_not_double_close_pipeszEPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes  si    D	E z99: 	E''o(oojoo)8 ( E	E 	E 	Es   AA33A<c                    t        j                         }	 t        j                          | j                  t        j                                t	        j
                  t        j                  ddgd        | j                  t        j                         d       t        j                          | j                  t        j                                t	        j
                  t        j                  ddgd        | j                  t        j                         d       |st        j                          y y # |st        j                          w w xY w)Nr   r   c                       y r"   r4   r4   r   r   r  zEPOSIXProcessTestCase.test_preexec_gc_module_failure.<locals>.<lambda>      r   r  z#Popen enabled gc when it shouldn't.c                       y r"   r4   r4   r   r   r  zEPOSIXProcessTestCase.test_preexec_gc_module_failure.<locals>.<lambda>  r  r   zPopen left gc disabled.)
gc	isenableddisabler,   r   rV   rW   rX   enabler  )r%   enableds     r   test_preexec_gc_module_failurez3POSIXProcessTestCase.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D6 6ErA  z!setrlimit() seems to fail on OS Xc                 R   	 ddl m}m}m}        }|\  }} |d|f       | j                  |||       	 t        j                  t        j                  ddgd        | j                  d       y # t        $ r}| j                  |       Y d }~d }~ww xY w# t        $ r Y y w xY w)Nr   )	getrlimit	setrlimitRLIMIT_NPROCr   r   c                       y r"   r4   r4   r   r   r  z@POSIXProcessTestCase.test_preexec_fork_failure.<locals>.<lambda>  r  r   r  z.RLIMIT_NPROC had no effect; probably superuser)resourcer  r  r  r$  r  r   r   rV   rW   rX   BlockingIOError)r%   r  r  r  r   limitsr  hards           r   test_preexec_fork_failurez.POSIXProcessTestCase.test_preexec_fork_failure  s    
	CC <(	D,D	*	<8	LOOS^^T26'35 MMJK  	MM#	  		s(   
A3 )B 3	B<BB	B&%B&c                    t        j                         \  }}t        |dd      5 }|j                  dt        j
                  z         |j                  dt        j                  z         d d d        t        j                  |d       t        j                  |      }|j                          t        j                  |       | j                  |j                  d       y # 1 sw Y   vxY wNwr  )r   z#!%s
z(exec '%s' -c 'import sys; sys.exit(47)'
i  rT   )r   rK  r  r   r   
unix_shellrW   rX   r   chmodr   rD   r*   rL  rY   r   )r%   r6  fnamefobjrK   s        r   test_args_stringz%POSIXProcessTestCase.test_args_string  s    $$&	E"c"34 	'JJx'"4"445JJB~~& '	' 	U#	
		%r*	' 	's   AC  C)c                     | j                  t        t        j                  t        j
                  ddgd       | j                  t        t        j                  t        j
                  ddgd       y )Nr   rS   rT   startupinfocreationflagsrb   ry   r   rV   rW   rX   r$   s    r   r   z&POSIXProcessTestCase.test_invalid_args  sb    *joo>>457&( 	 	* 	*joo>>457(* 	 	,r   c                 :   t         j                  j                         }d|d<   t        j                  dgdt        j
                  |      }|5  | j                  |j                  j                         j                  d      d       d d d        y # 1 sw Y   y xY wNr  r   zecho $FRUITr   r   rB   r   s    	
r  
r   r   r   r   rD   rE   rY   rB   r	  r  r%   r   rK   s      r   test_shell_sequencez(POSIXProcessTestCase.test_shell_sequence  s~    "!wm_A$.OO!')  	LQXX]]_22<@(K	L 	L 	Ls   :BBc                 8   t         j                  j                         }d|d<   t        j                  ddt        j
                  |      }|5  | j                  |j                  j                         j                  d      d       d d d        y # 1 sw Y   y xY wr  r  r  s      r   test_shell_stringz&POSIXProcessTestCase.test_shell_string	  s|    "!w]!$.OO!')  	LQXX]]_22<@(K	L 	L 	Ls   :BBc                    t        j                         \  }}t        |dd      5 }|j                  dt        j
                  z         |j                  dt        j                  z         d d d        t        j                  |d       t        j                  |      }t        j                  |       | j                  |d       y # 1 sw Y   \xY wr  )r   rK  r  r   r   r  rW   rX   r   r  r   rV   rL  rY   )r%   r6  r  r  r[   s        r   test_call_stringz%POSIXProcessTestCase.test_call_string	  s    $$&	E"c"34 	'JJx'"4"445JJB~~& '	' 	__U#
		%R 	' 	's   ACCc           	         g }dD ]Z  }dD ]S  }t         j                  j                  ||      }t         j                  j                  |      sC|j	                  |       U \ |s| j                  d       d}t         j                  j                  |      r0t         j                  j                  |      s|j	                  |       |D ]v  }t        j                  d|dt        j                        }|5  | j                  |j                  j                         j                         t        |d             d d d        x y # 1 sw Y   xY w)	N)z/binz	/usr/bin/z/usr/local/bin)bashkshz"bash or ksh required for this testz/bin/shzecho $0T)rX   r   rB   rG  )r   r   r   isfiler  r  islinkr   rD   rE   rY   rB   r	  r  r  )r%   shellsr  r  shrK   s         r   test_specific_shellz(POSIXProcessTestCase.test_specific_shell	  s   = 	&F' &WW\\&$/77>>"%MM"%&	&
 MM>?77>>"bggnnR&8MM" 	NB  r(29A N  !6!6!8%G:LMN N	NN Ns   4AEE	c                    t        j                   t         j                  t         j                        }	 t        j                  t
        j                  ddgdt        j                  t        j                  t        j                        }t        j                   t         j                  |       |j                  j                  d        t        ||      |  |S # t        j                   t         j                  |       w xY w)Nr   zif 1:
                                 import sys, time
                                 sys.stdout.write('x\n')
                                 sys.stdout.flush()
                                 time.sleep(30)
                                 TrD  rA   rB   rC   r   )rt  SIGINTdefault_int_handlerr   rD   rW   rX   rE   rB   r	  getattr)r%   methodr:   ru  rK   s        r   _kill_processz"POSIXProcessTestCase._kill_process0	  s    
 mmFMM63M3MN	6  #..$ 9% "& ,0'1(2(2	9A MM&--5 	
a6D! MM&--5s   AC &C?)netbsdopenbsdz"Due to known OS bug (issue #16762)c                 L   t        j                  t        j                  ddgdt         j                  t         j                  t         j                        }|j
                  j                  d       t        j                  d        t        ||      |  |j                          y )Nr   zif 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             Tr  r   )r   rD   rW   rX   rE   rB   r	  r+  r,  r  r   )r%   r  r:   rK   s       r   _kill_dead_processz'POSIXProcessTestCase._kill_dead_processI	  sw    
 cnnd 5! "
 (,#-??$.OO$.OO5 	
a

16D!	r   c                     | j                  dt        j                        }|j                         \  }}| j	                  d|       | j                  |j                         d       y )Nsend_signals   KeyboardInterruptr   )r  rt  r  r   rw   r&  r*   r%   rK   r  rC   s       r   test_send_signalz%POSIXProcessTestCase.test_send_signal`	  sL    }fmm<MMO	6*F3AFFHa(r   c                     | j                  d      }|j                         \  }}| j                  |d       | j                  |j                         t        j
                          y )Nro  r   )r  r   rY   r*   rt  SIGKILLr  s       r   	test_killzPOSIXProcessTestCase.test_killf	  sM    v&MMO	6%FNN?3r   c                     | j                  d      }|j                         \  }}| j                  |d       | j                  |j                         t        j
                          y )N	terminater   )r  r   rY   r*   rt  SIGTERMr  s       r   test_terminatez#POSIXProcessTestCase.test_terminatel	  sM    {+MMO	6%FNN?3r   c                 D    | j                  dt        j                         y Nr  )r  rt  r  r$   s    r   test_send_signal_deadz*POSIXProcessTestCase.test_send_signal_deadr	  s    v}}=r   c                 &    | j                  d       y Nro  r  r$   s    r   test_kill_deadz#POSIXProcessTestCase.test_kill_deadv	  s    'r   c                 &    | j                  d       y Nr  r  r$   s    r   test_terminate_deadz(POSIXProcessTestCase.test_terminate_deadz	  s    ,r   c                     g }|D ]@  }t        j                  |      }t        j                  |      }|j                  |||f       B |S r"   )r   get_inheritabledupr  )r%   save_fdsr-  r6  inheritablesaveds         r   	_save_fdszPOSIXProcessTestCase._save_fds~	  sM     	1B,,R0KFF2JEJJE;/0	1 
r   c                 t    |D ]3  \  }}}t        j                  |||       t        j                  |       5 y )N)r  )r   dup2rI   )r%   r-  r6  r  r  s        r   _restore_fdsz!POSIXProcessTestCase._restore_fds	  s3    &) 	"B{GGE2;7HHUO	r   c                    d}| j                  |      }|D ]  \  }}}|dk(  s|} n 	 |D ]  }t        j                  |        t        j                  t
        j                  ddg|t        j                  t        j                        j                         \  }}| j                  |d       | j                  |d       | j                  |       y # | j                  |       w xY w)Nr   r   rV  r@   r  r>  )r	  r   rI   r   rD   rW   rX   rE   r   rY   r  )	r%   r-  rA   	saved_fdsr6  r  r  r   r   s	            r   check_close_std_fdsz(POSIXProcessTestCase.check_close_std_fds	  s     NN3'	&/ 	"B{Qw		) !'';)<
 #(oo(oo/ 0;{} C S(+S),i(Di(s   BC C%c                 (    | j                  dg       y rf   r  r$   s    r   test_close_fd_0z$POSIXProcessTestCase.test_close_fd_0	        !%r   c                 (    | j                  dg       y Nr   r  r$   s    r   test_close_fd_1z$POSIXProcessTestCase.test_close_fd_1	  r  r   c                 (    | j                  dg       y )Nrf  r  r$   s    r   test_close_fd_2z$POSIXProcessTestCase.test_close_fd_2	  r  r   c                 *    | j                  ddg       y )Nr   r   r  r$   s    r   test_close_fds_0_1z'POSIXProcessTestCase.test_close_fds_0_1	        !Q(r   c                 *    | j                  ddg       y )Nr   rf  r  r$   s    r   test_close_fds_0_2z'POSIXProcessTestCase.test_close_fds_0_2	  r  r   c                 *    | j                  ddg       y )Nr   rf  r  r$   s    r   test_close_fds_1_2z'POSIXProcessTestCase.test_close_fds_1_2	  r  r   c                 *    | j                  g d       y )N)r   r   rf  r  r$   s    r   test_close_fds_0_1_2z)POSIXProcessTestCase.test_close_fds_0_1_2	  s     	  +r   c                 z   	 t        j                  d      }t        j                  d      }	 t        j                  d       t        j                  d       t        j                  t
        j                  ddg      j                          t        j                  |d       t        j                  |d       t        j                  |       t        j                  |       y # t        j                  |d       t        j                  |d       t        j                  |       t        j                  |       w xY w)Nr   r   r   z*print('AssertionError:0:CLOEXEC failure.'))	r   r  rI   r   rD   rW   rX   r*   r  )r%   	new_stdin
new_stdouts      r   test_small_errpipe_write_fdz0POSIXProcessTestCase.test_small_errpipe_write_fd	  s    KFF1I	VVAY
	!HHQKHHQK
 NND@B CCG46 GGIq!GGJ"HHYHHZ  GGIq!GGJ"HHYHHZ s   AC" "AD:c                    t        d      D cg c]  }t        j                          }}	 |D cg c]  \  }}|	 }}}|D ]  \  }}t        j                  |        t        j
                  |d   d       t        j                  |d   dd       | j                  t        d            }	 t        |      D ]  \  }}t        j                  ||        t        j                  t        j                  ddg|d   |d   |d         }|j                          | j                  |       |D ]  }t        j                  |dd        t        j                   |d   d	      }	t        j                   |d   d	      j#                         }
| j%                  |	d
       | j%                  |
d       |D ]  }t        j&                  |        y c c}w c c}}w # | j                  |       w xY w# D ]  }t        j&                  |        w xY w)Nr   r      STDINr   r   Zimport sys; got = sys.stdin.read();sys.stdout.write("got %s"%got); sys.stderr.write("err")rf  r@   rC  	   got STDIN   err)r  r   rK  r   unlinkr   r5  r	  	enumerater  r   rD   rW   rX   r*   r  r	  r  rY   rI   )r%   r  tempsr6  r  temp_fdsr  temp_fdrK   r   r   s              r   test_remapping_std_fdsz+POSIXProcessTestCase.test_remapping_std_fds	  s   -21X6!!#66(	,12yr52H2 # !	E		% ! HHXa[(+HHXa[!Q' uQx0I-#,X#6 )KBGGGR()
 $$cnndN&O #1+#A;#A;( !!), #Q"# ''(1+t,C''(1+t,224CS,/S&)  Q 726 !!),  s;   G	G* GA/G* -A,G BG* G* G''G* *Hc                    t        d      D cg c]  }t        j                          }}|D cg c]  \  }}|	 }}}	 |D ]  \  }}t        j                  |        | j                  t        d            }		 t        |      D ]  \  }}
t        j                  |
|        t        j                  |d       t        j                  |dd       t        j                  t        j                  ddg|||      }|j                          |D ]  }t        j                  |dd        t        j                  |d      }t        j                  |d      j!                         }| j#                  |	       | j%                  |d       | j%                  |d	       |D ]  }t        j&                  |        y c c}w c c}}w # | j#                  |	       w xY w# |D ]  }t        j&                  |        w xY w)
Nr   r'  r   r   r(  r@   rC  r)  r*  )r  r   rK  r   r+  r	  r,  r  r   r5  r   rD   rW   rX   r*   r	  r  r  rY   rI   )r%   stdin_no	stdout_no	stderr_nor  r-  r6  r  r.  r  r/  rK   r   r   s                 r   check_swap_fdsz#POSIXProcessTestCase.check_swap_fds	  s   -21X6!!#66(-.92uB..'	" !	E		% ! uQx0I-#,X#6 )KBGGGR() 8,1a( $$cnndN&O #$$& " 'BHHRA&' ggi.ggi.446!!),S,/S&)  Q 7.B !!),  s/   F4F9 9G :C(F? "5G ?GG G3c                     | j                  ddd       | j                  ddd       | j                  ddd       | j                  ddd       | j                  ddd       | j                  ddd       y )Nr   r   rf  )r5  r$   s    r   test_swap_fdsz"POSIXProcessTestCase.test_swap_fds-
  sn    Aq!$Aq!$Aq!$Aq!$Aq!$Aq!$r   c                 j   | j                  t        d            }	 |D ]C  }t        j                         5 }t	        j
                  |j                         |       d d d        E t        t        d            t        |      z
  j                         }t	        j                  |       g d}i }t        ||      D ]  \  }}	||||	   <    t        j                  d      }
t        t        d            t        |      z
  j                         }t        j                  t        j                   d|
t#        |      gfi |}| j%                  |d       t        ||      D ]  \  }}	t	        j&                  |dt        j(                         t	        j*                  |d      }t-        t/        t0        |j3                  d                  }t        j                  d| d	| d
| d| d|	 d      }| j%                  |	g||        	 | j5                  |       y # 1 sw Y   xY w# | j5                  |       w xY w)Nr   r@   z
                import os, sys
                skipped_fd = int(sys.argv[1])
                for fd in range(3):
                    if fd != skipped_fd:
                        os.write(fd, str(fd).encode('ascii'))
            r   r   rC  rG  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  r4  rn  r  rI   zipr  r  r   rV   rW   rX   r  rY   r5  SEEK_SETr	  r  mapr/  r
  r  )r%   from_fdsto_fdsr  from_fdffd_to_close	arg_namesr;   to_fdr   
skipped_fdr[   
read_bytesread_fdsrA  s                   r   #_check_swap_std_fds_with_one_closedz8POSIXProcessTestCase._check_swap_std_fds_with_one_closed5
  s
   NN58,	&	)# 1++- 1GGAHHJ01 11 uQx=3x=8==?KHH[!5IF"%h"7 3+2y'(3 ?? $ D eAh-#f+5::<J#..$c*o!N +#)+BR#"%h"7 	9!R[[1WWWd3
C):):7)C DEoo +""*4x 8''.i 0&&.Z/Fug N' 
   %(C8	9 i(I1 1H i(s#   H %HF%H H	H H2c                     t        j                  t        d      d      D ]8  }t        j                  t        d      d      D ]  }| j	                  ||        : y )Nr   rf  )	itertoolscombinationsr  permutationsrF  )r%   r<  r=  s      r   !test_swap_std_fds_with_one_closedz6POSIXProcessTestCase.test_swap_std_fds_with_one_closeda
  sV    !..uQx; 	KH#00q1= K886JK	Kr   c                    d }	 t        j                  t        |       | j                  d       y # t        $ rD}| j                  t         j                         | j                  t        |      d       Y d }~y d }~wt         j                  $ rD}| j                  t         j                         | j                  t        |      d       Y d }~y d }~ww xY w)Nc                      t        d      )N   surrogate:r  r4   r   r   preparezCPOSIXProcessTestCase.test_surrogates_error_message.<locals>.prepareg
  s    /00r   r  z1Expected ValueError or subprocess.SubprocessErrorrN  z!Exception occurred in preexec_fn.)r   rV   r   r   ry   r   r  rY   r  r   assertIsNotNone)r%   rO  r   s      r   test_surrogates_error_messagez2POSIXProcessTestCase.test_surrogates_error_messagef
  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    2 	C:A::C:CCc                    dD ]Y  \  }}|j                  dd      }dt        |      z  }t        j                  j	                         }|||<   d|d<   |}t        j                  t        j                  d|g|      }|j                  d	      }| j                  |j                  d      t        |             |j                  dd      }d
t        |      z  }t        j                  j	                         }|||<   t        j                  t        j                  d|g|      }|j                  d	      }| j                  |j                  d      t        |             \ y )N))testu   abc)u   test42rG  r  z&import os; print(ascii(os.getenv(%s)))CLC_ALLr   r   s   
z'import os; print(ascii(os.getenvb(%s))))r  rd  r   r   r   r   rv   rW   rX   r   rY   r
  rG  )r%   keyvalueencoded_valuescriptr   decoded_valuerB   s           r   test_undecodable_envz)POSIXProcessTestCase.test_undecodable_envy
  s9   G 	KJC!LL2CDM >S	IF**//#CCH  CM!M,,v.F ]]7+FV]]73U=5IJ **W&78C>cJF**//#C$CH,,v.F ]]7+FV]]73U=5IJ5	Kr   c                 4   t        j                  t        d         }t        t        dd        }t         j                  j                  t        d         \  }}t        j                  |      }t        j                  |g|z         }| j                  |d       d|dj                  |      j                  d      fz  }t        j                  |d      }| j                  |d       t         j                  j                         }||d<   t        j                  |g|z   |	      }| j                  |d       t         j                  j                         }t        j                  |      |d
<   t        j                  |g|z   |	      }| j                  |d       y )Nr   r   s   '%s' %s r   Tr^  PATHr   s   PATH)r   r   r   r  r   r  r   rV   rY   r   r  r   r   environb)	r%   abs_programr:   r   programexitcoder  r   envbs	            r   test_bytes_programz'POSIXProcessTestCase.test_bytes_program
  sG   kk/!"45OAB'(oa&89g++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                 
   t        j                  dd      }t        j                  dd      }t        j                  t        j
                  |gt        j                  t        j                  t        j                  d      }| j                  |j                  d       t        j                  t        j
                  |gt        j                  d      }|j                         \  }}t        t        t        |j                  d	                  }t        |j                  j                         |j                  j                         |j                   j                         g      }| j#                  ||z  d
|d||z         y )Nzinput_reader.pysubprocessdatasubdirfd_status.pyF)rA   rB   rC   rD  r   rB   rD     ,zExpected no fds from z to be open in child, found )r   findfiler   rD   rW   rX   rE   r   r   rn  r;  r/  r  rA   r4  rB   rC   r,   )	r%   sleeper	fd_statusp1p2r{   error
result_fdsunwanted_fdss	            r   test_pipe_cloexecz&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 	l2  ,Z,-FH	Ir   c                   
 t        j                  dd      }t        j                  dd      }d}|dz  dz   }t        j                  t        j
                  |gt        j                  t        j                  d	      
t        j                  t        j
                  ||g
j                  t        j                  d	      | j                  
j                         | j                  j                         
fd
}fd}| j                  |       | j                  |       
j                  j                  |       
j                  j                          t        j                  j                  gg g d      \  }}}	| j                  |d       | j                  j                  j!                         |       
j                  j                          j                  j                          y )Nzqcat.pyrg  rh  zqgrep.pys   zxcvbn      
F)rA   rB   rD  c                  F    	  j                          y # t        $ r Y y w xY wr"   r  ProcessLookupError)rp  s   r   kill_p1zBPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p1
  #    %     	  c                  F    	  j                          y # t        $ r Y y w xY wr"   rz  )rq  s   r   kill_p2zBPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p2
  r}  r~  r  zThe child hung)r   rm  r   rD   rW   rX   rE   rB   r   r*   rA   r   rI   selectr  rY   r	  )r%   qcatqgrepsubdatar  r|  r  	readfilesignored1ignored2rp  rq  s             @@r   test_pipe_cloexec_real_toolsz1POSIXProcessTestCase.test_pipe_cloexec_real_tools
  sa   	2BC  4DE{U"s~~t4$.OOJOO(-/ s~~ug>$&IIjoo(-/ 	  	
	
 	  
t
(.ryyk2r2(N%	8X	#34)40
		
		r   c                   
 t        j                  dd      }t        j                         }| j	                  t        j
                  |d          | j	                  t        j
                  |d          t        |      
t        d      D ]e  }t        j                  t        j                  t        j                        }| j	                  t        j
                  |       
j                  |       g 
D ]  }t        j                  |d        t        j                  t        j                   |gt        j"                  d	      }|j%                         \  }}t        t'        t(        |j+                  d
                  }| j-                  |
z  
d       t        j                  t        j                   |gt        j"                  d	      }|j%                         \  }}t        t'        t(        |j+                  d
                  }| j/                  |
z  d       | j1                  d|d       t        
fdt        d      D              }	t        j                  t        j                   |gt        j"                  d|	      }|j%                         \  }}t        t'        t(        |j+                  d
                  }| j/                  ||	z
  
z  d       | j1                  d|d       y )Nrj  rg  rh  r   r   	   TFrk  rl  zSome fds were closedzSome fds were left openzSubprocess failedc              3   >   K   | ]  }j                           y wr"   )r  ).0r  r.  s     r   	<genexpr>z6POSIXProcessTestCase.test_close_fds.<locals>.<genexpr>  s     ;Q(,,.;s   r  rB   rD  pass_fdsz'Some fds not in pass_fds were left open)r   rm  r   rj  r   rI   rn  r  r  devnullr  addset_inheritabler   rD   rW   rX   rE   r   r;  r/  r  rY   r,   rw   )r%   ro  r-  r  r6  rK   r{   ignoredremaining_fdsfds_to_keepr.  s             @r   test_close_fdsz#POSIXProcessTestCase.test_close_fds
  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                 b   	 t        j                  dd      }t        j                  t        j
                  dt        j                  d|z        gt        j                        }|j                         \  }}|j                         }| j                  t        |      dd|z  	       t        t        t        |d
   j!                         j#                  d                  }t        t        t        |d   j!                         j#                  d                  }| j%                  ||z  d	       y )Nrj  rg  rh  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))
        rs   rf  z(expected exactly two lines of output:
%rr@  r   rl  r   zSome fds were left open.)r   rm  r   rD   rW   rX   r  r  rE   r   r  rY   r  rn  r;  r/  r  r  r,   )r%   ro  rK   r{   unused_stderroutput_lines
opened_fdsr  s           r   %test_close_fds_when_max_fd_is_loweredz:POSIXProcessTestCase.test_close_fds_when_max_fd_is_lowered!  s    	J$$^<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   r  r~   c           	         t        j                  dd      }t               }t        d      D ]  }t	        j
                         }| j                  t        j                  |d          | j                  t        j                  |d          t	        j                  |d   d       t	        j                  |d   d       |j                  |        |D ]  }t        j                  t        j                  |gt        j                  d|f      }|j                         \  }}t        t!        t"        |j%                  d	                  }	||hz
  }
| j'                  ||	d
       | j)                  |	|
z  d       | j+                  t,              5 }| j)                  t        j.                  t0        d|f             d d d        | j'                  dt3        j4                                y # 1 sw Y   2xY w)Nrj  rg  rh  r~   r   r   Tr  rl  zfd to be passed not passedzfd to be closed passedF)rD  r  zoverriding close_fds)r   rm  rn  r  r   rj  r   rI   r  updater   rD   rW   rX   rE   r   r;  r/  r  rw   r,   assertWarnsr  rV   r   r  warning)r%   ro  r.  r  r-  r6  rK   r{   r  r  to_be_closedcontexts               r   test_pass_fdsz"POSIXProcessTestCase.test_pass_fdst  s   $$^<LM	5q 	!A'')COOBHHc!f-OOBHHc!f-s1vt,s1vt,OOC 	!  	HB  #..)!<(24+-&2A  mmoOFGCd); <=M#rd?LMM"m-IJ]\957 !!.1 ;W  '"'2&": ;; MM0#goo2FG%	H; ;s   -G))G2	c                 2   t        j                  dd      }t        j                         \  }}| j	                  t        j
                  |       | j	                  t        j
                  |       t        j                  |d       t        j                  |d       ||f}t        j                  |g}|t        t        t        |            z  }t        j                  |t        j                  d|      }|j                         \  }}t!        t        t"        |j%                  d                  }	| j'                  |	t!        |      d|z         | j'                  t        j(                  |      d       | j'                  t        j(                  |      d       y )	Nrj  rg  rh  TFr  rl  z	output=%a)r   rm  r   rj  r   rI   r  rW   rX   r  r;  r  r   rD   rE   r   rn  r/  r  rY   r  )
r%   rZ  r  non_inheritabler  r:   rK   r{   r  r-  s
             r   test_pass_fds_inheritablez.POSIXProcessTestCase.test_pass_fds_inheritable  s5   !!.9IJ')wwy$_+./2
;-
?E21'Sh'((T$.OOt&.0 --/#c6<<-./ 	c(m[6-AB 	++K8$?++O<eDr   c                 N   	 t        j                  dd      }g }t        d      D ]e  }t        j                  t        j
                  t        j                        }| j                  t        j                  |       |j                  |       g t        j                         \  }}| j                  t        j                  |       | j                  t        j                  |       |j                  d|       t        j                  t        j                  |g|d   |d   |d   d|      5  t        j                   |d	      }d d d        j#                  d
      D ch c]  }t%        |       }	}| j'                  |	h dt)        |      z  d|       y # 1 sw Y   UxY wc c}w )Nrj  rg  rh  rf  r   r   T)rA   rB   rC   rD  r  rC  rl  >   r   r   rf  zoutput=)r   rm  r  r   r  r  O_RDWRr   rI   r  rj  insertr   rD   rW   rX   r	  r  r/  rY   	frozenset)
r%   ro  r  r  r6  stdout_rstdout_wr{   numr-  s
             r   test_pass_fds_redirectedz-POSIXProcessTestCase.test_pass_fds_redirected  sN   E$$^<LM	q 	 ARYY/BOOBHHb)OOB	 
  WWY((+(+8$s~~y9$,QK%-a[%-a[(,'/1 	- WWXt,F	- $*<<#56Cs3x66i)H*==
?ST	- 	- 7s   +FF"Fc                     t        j                  t        j                  d      5 }t	        j
                  t        ||      }|j                          d d d        y # 1 sw Y   y xY w)Nr+)rB   rA   rG   r  r   r  r   rD   r   r*   r%   inoutrK   s      r   %test_stdout_stdin_are_single_inout_fdz:POSIXProcessTestCase.test_stdout_stdin_are_single_inout_fd  K    WWRZZ& 	%  (-U<AFFH	 	 	   -AA$c                     t        j                  t        j                  d      5 }t	        j
                  t        ||      }|j                          d d d        y # 1 sw Y   y xY w)Nr  r   r  r  s      r   &test_stdout_stderr_are_single_inout_fdz;POSIXProcessTestCase.test_stdout_stderr_are_single_inout_fd  sK    WWRZZ& 	%  (-e=AFFH	 	 	r  c                     t        j                  t        j                  d      5 }t	        j
                  t        ||      }|j                          d d d        y # 1 sw Y   y xY w)Nr  )rC   rA   r  r  s      r   %test_stderr_stdin_are_single_inout_fdz:POSIXProcessTestCase.test_stderr_stdin_are_single_inout_fd  r  r  c                 >   t        j                  dd      }t        j                  t        j
                  |gt        j                  t        j                        }|j                         \  }}| j                  d|j                  d|j                  d      z         y )Nzsigchild_ignore.pyrg  rh  r   r   z6sigchild_ignore.py exited non-zero with this error:
%sr   )r   rm  r   rD   rW   rX   rE   r   rY   r   r
  )r%   sigchild_ignorerK   rB   rC   s        r   test_wait_when_sigchild_ignoredz4POSIXProcessTestCase.test_wait_when_sigchild_ignored  s}    !**+?2BDcnno>$.OOJOOMALL +:w/+0 	1r   c           	         t        j                  d      }t        j                  t        j
                  ddgt        j                  d      }|j                  }| j                  |j                         	 | j                  |j                  d      d       | j                  | |j                  |gg g d      d          |j                          y # |j                          w xY w)	Nr  r   z$import sys;sys.stdout.write("apple")r   )rB   rN   rw  s   applg        )r   import_moduler   rD   rW   rX   rE   rB   r   rI   rY   r	  rw   r  r*   )r%   r  rK   r?  s       r   test_select_unbufferedz+POSIXProcessTestCase.test_select_unbuffered  s     ,,X6cnnd:; %/OO%&	(
 HH 	QVVAY0MM!]V]]A3B<Q?@FFHAFFHs   5A
C C"c           	      x   t        j                  t        j                  ddgt         j                  t         j                        }| j                  |j                  j                         | j                  |j                  j                         t        |      }|j                  }t        j                  dt        f      5  d }d d d        t        r | j                  t         j                          y | j#                  |t         j                   D cg c]  }t        |       c}       y # 1 sw Y   gxY wc c}w )Nr   z import sys, time;time.sleep(0.2)r   r   )r   rD   rW   rX   rE   r   rB   rI   rC   idpidr   check_warningsResourceWarningr(   r   r)   rw   )r%   rK   identr  os        r   test_zombie_fast_process_delz1POSIXProcessTestCase.test_zombie_fast_process_del  s    
 cnnd01 %/OO$.OO	5
 	''1ee++R,AB 	A	 j001 MM%1C1C!DA"Q%!DE	 	 "Es   D+D7
+D4c           	         t        j                  t        j                  ddgt         j                  t         j                        }| j                  |j                  j                         | j                  |j                  j                         t        |      }|j                  }t        j                  dt        f      5  d }t        j                          d d d        t!        j"                  |t$        j&                         t(        r | j+                  t         j,                         n7| j/                  |t         j,                  D cg c]  }t        |       c}       t1        j2                  d       | j5                  t6              5  t        j                  t8        t         j                  t         j                        5 }	 d d d        d d d        | j5                  t6        t         j:                  |d       t(        r | j+                  t         j,                         y | j=                  |t         j,                  D cg c]  }t        |       c}       y # 1 sw Y   xY wc c}w # 1 sw Y   xY w# 1 sw Y   xY wc c}w )Nr   zimport time;time.sleep(3)r   r   r?  r   )r   rD   rW   rX   rE   r   rB   rI   rC   r  r  r   r  r  r   
gc_collectr   ro  rt  r  r(   r   r)   rw   r+  r,  rb   r  r   waitpidr   )r%   rK   r  r  r  r%  s         r   !test_leak_fast_process_del_killedz6POSIXProcessTestCase.test_leak_fast_process_del_killed  s    cnnd./ %/OO$.OO	5
 	''1ee++R,AB 	!A 	! 	V^^$j001 MM%1C1C!DA"Q%!DE 	

3w' 	!!/)3)3: =A	 	'2::sA6j001UJ4F4F$GqRU$GH5	! 	! "E 	 	 %Hs<   I	I(
9I9I-I9J
I%-I6	2I99Jc                    t        j                  dd      }t        j                  d      | j	                  t        j
                         t        j                  t        j                  |gt        j                  dfd      }|j                         \  }}t        t        t        |j                  d                  }| j!                  |       y )	Nrj  rg  rh  r   Tc                  0    t        j                  d       S r  )r   r  )r6  s   r   r  zCPOSIXProcessTestCase.test_close_fds_after_preexec.<locals>.<lambda>I  s    2 r   )rB   rD  r  rl  )r   rm  r   r  r   rI   r   rD   rW   rX   rE   r   rn  r;  r/  r  r   )r%   ro  rK   r{   r  r  r6  s         @r   test_close_fds_after_preexecz1POSIXProcessTestCase.test_close_fds_after_preexec?  s    $$^<LM	 VVAY"%cnni8$.OOt(>@ --/CV\\$%789]+r   c                 
   dd l }t        j                         }	 d }t        j                          ddgd dgfdgdd dgfdgdgddgfdgdgd dffD ]q  \  }}}}| j	                  t
              5 }|j                  ||dd||d	d	d	d	d
dddddddg dd	|d       d d d        | j                  dt        j                               s 	 |st        j                          y y # 1 sw Y   IxY w# |st        j                          w w xY w)Nr   c                       y r"   r4   r4   r   r   r  z5POSIXProcessTestCase.test_fork_exec.<locals>.<lambda>Z  r  r   r[  s   exe   envs   argTr4   rw  r   rf  r   rw  Fztakes exactly)_posixsubprocessr  r  r  rb   r   r  r   r  rk   r  )	r%   r  
gc_enabledfuncr:   exe_listr   env_listr   s	            r   test_fork_execz#POSIXProcessTestCase.test_fork_execP  s3    	 \\^
 	  DIIK F8TF843TF84F8SF84F8T3/	2 F-hX &&y1 %S$..hb#xBB1adAr1be%%    #cmm2DE-F0 

 %% %$ 

 s$   AC) -(C/C) C&	"C) )Dc                 $   dd l } G d d      }t        j                         }	 t        j                          ddddd |d	       |d
      ffD ]  }| j	                  t
        dj                  |            5 }|j                  dgdgd|d dgddddd	d
dddddd d d dd d       d d d        | j                  dt        j                                	 |st        j                          y y # 1 sw Y   IxY w# |st        j                          w w xY w)Nr   c                       e Zd ZdZd Zd Zy)JPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadIntTc                     || _         y r"   )rX  )r%   rX  s     r   r   zSPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__init__~  s	    "
r   c                 L    | j                   rd| _         | j                  S t        )NF)firstrX  ry   r$   s    r   __int__zRPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__int__  s     ::!&DJ::%  r   N)r1   r2   r3   r  r   r  r4   r   r   BadIntr  |  s    E#!r   r  )rw  rf  r   rw  r~   )r  rw  )      *   l            )r~   rw  )r  r]  r]  r  r   rf  zfds_to_keep={}r@  s   falseTr  rw  r   rw  r  )r  r  r  r  rb   ry   r  r  rw   r  rk   r  )r%   r  r  r  r  rm   s         r   %test_fork_exec_sorted_fd_sanity_checkz:POSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_checkx  s&    	 	! 	! \\^
	IIK !#F1I&  ? &&",33K@ ' B 
$EF$..!
XJk4&BB1adAdD"d$
$ mS-=>'?* 

 
$ 
$ 

 s$   AC6 7+C*"/C6 *C3	/C6 6Dc                 L   t        j                  t              }|5  t        j                  j                  |d      5 }t        |j                  _        |j                          |j                  j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrA   )r   rD   r   r   rb  rc  BrokenPipeErrorrI   r  r   assert_called_withr%   r%  mock_proc_stdins      r   ,test_communicate_BrokenPipeError_stdin_closezAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_close  s     0 	74::$$T73 	70?O!!-!!446	7 	7 	7 	7 	7 	7s#   !BA B=BB	BB#c                    t        j                  t              }|5  t        j                  j                  |d      5 }t        |j                  _        |j                  d       |j                  j                  d       |j                  j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrA      stuff)r   rD   r   r   rb  rc  r  r   r  r   assert_called_once_withrI   r  s      r   ,test_communicate_BrokenPipeError_stdin_writezAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_write  s     0 	<4::$$T73 	<0?O!!-X&!!99(C!!99;		< 	< 	< 	< 	< 	<s#   !B6AB*B6*B3	/B66B?c                 @   t        j                  t        j                  dgt         j                  t         j                        }|5  t
        j                  j                  |d      5 }t        t        j                  d      5 }t        |j                  _        |j                         |j                  _        |j!                  d       |j                  j#                          d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)N-hr   rA   wbr  )r   rD   rW   rX   rE   r   rb  rc  r  r   r  r  r  r  r4  return_valuer   r  )r%   r%  r  dev_nulls       r   ,test_communicate_BrokenPipeError_stdin_flushzAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_flush  s      6&0oo'18  	<4::$$T73 	<RZZ&	<*20?O!!-2://2CO""/X&!!99;	< 	< 	< 	< 	< 	< 	< 	< 	<s=   !D(DA C<#D+D<DDD	DDc                    t        j                  t        j                  dgt         j                  t         j                        }|5  t
        j                  j                  |d      5 }t        |j                  _
        |j                  d       |j                  j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r   rA   i  r`   )r   rD   rW   rX   rE   r   rb  rc  r  rI   r  r   r  r  s      r   9test_communicate_BrokenPipeError_stdin_close_with_timeoutzNPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_close_with_timeout  s      6&0oo'18  	<4::$$T73 	<0?O!!-S)!!99;		< 	< 	< 	< 	< 	<s%   !C(AB;*C;C	 CCN
W_STOPCODEzneed _testcapi.W_STOPCODEc                 \   	 t         }t        j                  |      }t        j                  |j
                  d       t        j                  d      }t        j                  d|j
                  |f      5  |j                         }d d d        | j                  d       y # 1 sw Y   xY w)Nr   rc  r   r  )r  )r   r   rD   r   wait_processr  	_testcapir  r   rb  r*   rY   )r%   r:   r%  statusr   s        r   test_stoppedz!POSIXProcessTestCase.test_stopped  s     	P% 	TXX2%%a(ZZ/txx>PQ 	%J	% 	R(	% 	%s   6B""B+c                    t        j                  t              }t        j                  |j
                  d       | j                  |j                         t        j                  d      5 }|j                  t        j                         d d d        j                          | j                  |j                         y # 1 sw Y   5xY w)Nr   r  zos.kill)r   rD   r   r   r  r  r   r   r   rb  r  rt  r  assert_not_calledrP  )r%   r%  	mock_kills      r   test_send_signal_racez*POSIXProcessTestCase.test_send_signal_race  s     0 	TXX2 	$//*ZZ	" 	-iV^^,	-
 	##% 	T__-	- 	-s   + B??Cc                 ~   t        j                  t        j                  ddg      }|j                  s|j                          |j                  st        j                  j                  |dd       5  d |_        |j                  t        j                         d d d        |j                          y # 1 sw Y   xY w)Nr   zexit(1)r  c                       y r"   r4   r4   r   r   r  z=POSIXProcessTestCase.test_send_signal_race2.<locals>.<lambda>   r  r   )new)r   rD   rW   rX   r   r  r   rb  rc  r  rt  r  ro  rJ   s     r   test_send_signal_race2z+POSIXProcessTestCase.test_send_signal_race2  s     cnndI>? ,,FFH ,, ZZq&l; 	*ALMM&..)	* 	
	* 	*s   3'B33B<c                     t        j                  t        j                  ddgt         j                        }	 	 |j                  d       y # t         j                  $ r Y nw xY w.)Nr   z+import os, time; os.close(1), time.sleep(2)rs   r_   r`   )r   rD   rW   rX   rE   r   rc   r%   r%  s     r   1test_communicate_repeated_call_after_stdout_closezFPOSIXProcessTestCase.test_communicate_repeated_call_after_stdout_close  se    !N!P'18    -,, 	 s   A A"!A"c                     dt          d}t        d|      \  }}}| j                  |d       | j                  d|       y )Nzif 1:
        import atexit
        import subprocess

        def dummy():
            pass

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

        atexit.register(exit_handler)
        r   r   s0   preexec_fn not supported at interpreter shutdown)r   r	   rY   rw   )r%   r   r  r   r   s        r   test_preexec_at_exitz)POSIXProcessTestCase.test_preexec_at_exit  sN     .. /	 'tT23c"I3Or   )pr1   r2   r3   r&   r  r  r  r  r   rD   r  r   rb  r  r!  rm  r  r   r   rM  r+  r4  r  r  r<  rT  rX  rd  rf  ru  rw  r(   r  r  r  r  r  r  r  r  r  r  rW   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%  r0  r5  r7  rF  rK  rQ  r\  re  ru  r  r  r|  st_devr  r   requires_mac_verr  r  r  r  r  r  r  r  r  r  r  cpython_onlyr  r  r  r  r  r  r  r  r  r  r	  r  __classcell__ra  s   @r   r  r    s   >!BBB*J,,  TZZ'(A )A  TZZ'(: ):* X__(;<<-/4/4,7  XY/JGB	4J<>9>9  XZ02KL1F M1Ff X__WR,.PQ? R? XZ02MN'I O'IR X__WR,.PQ@ R@ X[13OP.A Q.A` X__WR-/RSD TD X__Y:gb'&:":68&8&(8	9?
?
	80 %!1!1 %2 X__446KLE ME* X__ "EGLGL(+	,LL!N(2 X__S\\,,-BC9;;*)44>(-
)2&&&))),
!*+Z+`%()XK
K&K:&6I.'R-=` X__S\\,,Y7 IRWWV_++wrwwy/A/H/HHEGI9GI9` Wb!$H %HBE<U4	1"F0)IV," % %N ' 'R7<<
< X$. >$Y=46)6).,	Pr   r  zWindows specific testsc                       e Zd Zd Zd Zd Zd Zd Zej                  d        Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)Win32ProcessTestCasec                     d}d}t        j                         }||_        ||_        t        j                  t
        |       y )Nr   r   r  )r   STARTUPINFOdwFlagswShowWindowrV   r   )r%   STARTF_USESHOWWINDOWSW_MAXIMIZEr  s       r   test_startupinfoz%Win32ProcessTestCase.test_startupinfo&  s@      ! ,,.2"- 	$/	1r   c                 p    d}d}t        j                  ||      }t        j                  t        |       y )Nr   r   )r  r  r  )r   r  rV   r   )r%   STARTF_USERSHOWWINDOWr  r  s       r   test_startupinfo_keywordsz.Win32ProcessTestCase.test_startupinfo_keywords5  s8     !" ,,)#
 	$/	1r   c                 h   t        j                         }t         j                  |_        t         j                  |_        t        d      D ]M  }t        }t        t        j                  d      5 }t        j                  ||t         j                  |      }|5  |j                          d d d        | j                  |j                  d       d d d        | j                  |j                  t         j                         | j!                  |j"                         | j!                  |j$                         | j!                  |j&                         | j                  |j
                  t         j                         | j                  |j(                  dg i       P y # 1 sw Y   xY w# 1 sw Y   xY w)Nrf  r  )rB   rC   r  r   handle_list)r   r  r  r  SW_HIDEr  r  r   r  r   r  rD   r   r   rY   r   r   	hStdInput
hStdOutput	hStdErrorlpAttributeList)r%   r  r  r  nullr%  s         r   test_startupinfo_copyz*Win32ProcessTestCase.test_startupinfo_copyE  s]    ,,.(==","4"4 q 	OA!Cbjj#& 5$!''/3/9/@/@4?A  '$$&'  !45 [00'<<>k334k445k334[44j6H6HI[88=":MN#	O' '5 5s$   .*F(F)$F(F%!F((F1	c                     d}t         j                  j                  d       t        j                  t         j
                  dz   |       y )N   z'    a DOS box should flash briefly ...
z# -c "import time; time.sleep(0.25)"r  )rW   rC   r   r   rV   rX   )r%   CREATE_NEW_CONSOLEs     r   test_creationflagsz'Win32ProcessTestCase.test_creationflags`  s8    

CD=>&8	:r   c                 v    | j                  t        t        j                  t        j
                  ddgd        y )Nr   rS   c                       yr  r4   r4   r   r   r  z8Win32ProcessTestCase.test_invalid_args.<locals>.<lambda>m  r  r   r  r  r$   s    r   r   z&Win32ProcessTestCase.test_invalid_argsh  s1    *joo>>457%. 	 	0r   c                      G d dt               }| j                  t              5  t        j                  t
         |              d d d        y # 1 sw Y   y xY w)Nc                       e Zd ZdZy)4Win32ProcessTestCase.test_issue31471.<locals>.BadEnvN)r1   r2   r3   keysr4   r   r   BadEnvr.  s  s    Dr   r0  r   )dictrb   r   r   rD   r   )r%   r0  s     r   test_issue31471z$Win32ProcessTestCase.test_issue31471o  sC    	T 	y) 	<_&(;	< 	< 	<s   !AAc                 x    t        j                  t        j                  ddgd      }| j	                  |d       y )Nr   rS   T)rD  rT   rU   rZ   s     r   r  z#Win32ProcessTestCase.test_close_fdsx  s5    __cnnd8:(,. 	R r   c           	         dd l }t        j                         }| j                  t        j                  |d          | j                  t        j                  |d          g }|D ]8  }t        j
                  |d       |j                  |j                  |             : t        j                  t        j                  ddj                  |d         gt        j                  d      }|j                         \  }}| j                  |j                   d       t#        |j%                                t        j                  t        j                  ddj                  |d         gt        j                  t        j                  d      }|j                         \  }}| j                  |j                   d       | j'                  d	|       g }t        j(                         }	d
|i|	_        t        j                  t        j                  ddj                  |d         gt        j                  t        j                  |	d      }|j                         \  }}| j                  |j                   d       | j'                  d	|       t-        j.                  dt0        f      5  t        j(                         }	d
|d d  i|	_        t        j                  t        j                  ddj                  |d         gt        j                  t        j                  |	d      }|j                         \  }}| j                  |j                   d       d d d        y # 1 sw Y   y xY w)Nr   r   Tr   z2import msvcrt; print(msvcrt.open_osfhandle({}, 0))Frk  )rB   rC   rD  s   OSErrorr  )rB   rC   r  rD  z.*overriding close_fds)r!  r   rj  r   rI   r  r  get_osfhandler   rD   rW   rX   r  rE   r   rY   r   r/  r  rw   r  r#  r   r  r  )
r%   r!  r-  r  r6  rK   rB   rC   r  r  s
             r   test_close_fds_with_stdioz.Win32ProcessTestCase.test_close_fds_with_stdio  s   ggi#a&)#a&) 	5Br4(NN6//34	5 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 ]]_NFFQ\\1-		. 		. 		.s   B)MMc                 p    t        j                         }i |_        t        j                  t        |       y )Nr  r   r  r#  rV   r   r%   r  s     r   test_empty_attribute_listz.Win32ProcessTestCase.test_empty_attribute_list  s)     ,,.&(#$/	1r   c                 t    t        j                         }dg i|_        t        j                  t        |       y )Nr  r  r8  r9  s     r   test_empty_handle_listz+Win32ProcessTestCase.test_empty_handle_list  s.     ,,.'4b&9#$/	1r   c                    t         j                  j                         }d|d<   t        j                  dgdt        j
                  |      }|5  | j                  d|j                  j                                d d d        y # 1 sw Y   y xY wNphysalisr   rn  r   r  s   physalis	r   r   r   r   rD   rE   rw   rB   r	  r  s      r   r  z(Win32ProcessTestCase.test_shell_sequence  sm    "$weWA$.OO!')  	8MM+qxx}}7	8 	8 	8s   +BBc                    t         j                  j                         }d|d<   t        j                  ddt        j
                  |      }|5  | j                  d|j                  j                                d d d        y # 1 sw Y   y xY wr>  r@  r  s      r   r  z&Win32ProcessTestCase.test_shell_string  sk    "$wU!$.OO!')  	8MM+qxx}}7	8 	8 	8s   +BB
c                 ,   dD ]  }t         j                  j                         }d|d<   t        j                  ddt        j
                  ||      }|5  | j                  d|j                  j                         |       d d d         y # 1 sw Y   xY w)N)ansioemr?  r   rn  r   )r   rB   r   r   r@  )r%   encr   rK   s       r   test_shell_encodingsz)Win32ProcessTestCase.test_shell_encodings  s    " 	@CZZ__&F(F7O  a(2%+*-/A  @j!((--/3?@ @	@@ @s   ,B

B	c                 t    t        j                  t        j                  dz         }| j	                  |d       y )Nz -c "import sys; sys.exit(47)"rT   rU   rZ   s     r   r  z%Win32ProcessTestCase.test_call_string  s.    __S^^=> ?R r   c                    t        j                  t        j                  ddgt         j                  t         j                  t         j                        }|5  |j
                  j                  d        t        ||      |  |j                         \  }}| j                  |d       |j                         }d d d        | j                  d       y # 1 sw Y   xY w)Nr   zif 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             time.sleep(30)
                             r@   r   r   r   )r   rD   rW   rX   rE   rB   r	  r  r   rY   r*   r&  )r%   r  r:   rK   r  rC   r   s          r   r  z"Win32ProcessTestCase._kill_process  s    cnnd 5! " $.??$.OO$.OO5  	" HHMM!GAv%IAvVS)J	" 	J*	" 	"s   A CCc                    t        j                  t        j                  ddgt         j                  t         j                  t         j                        }|5  |j
                  j                  d       t        j                  d        t        ||      |  |j                         \  }}| j                  |d       |j                         }d d d        | j                  d       y # 1 sw Y   xY w)Nr   zif 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             sys.exit(42)
                             r@   r   r   r  )r   rD   rW   rX   rE   rB   r	  r+  r,  r  r   rY   r*   )r%   r  r:   rK   r  rC   r[   s          r   r  z'Win32ProcessTestCase._kill_dead_process  s    cnnd 5! " $.??$.OO$.OO5  
	 HHMM!JJqMGAv%IAvVS)B
	 	R 
	 
	s   A5C''C0c                 D    | j                  dt        j                         y r  )r  rt  r  r$   s    r   r  z%Win32ProcessTestCase.test_send_signal  s    =&..9r   c                 &    | j                  d       y r  r  r$   s    r   r  zWin32ProcessTestCase.test_kill  s    6"r   c                 &    | j                  d       y r  rL  r$   s    r   r  z#Win32ProcessTestCase.test_terminate  s    ;'r   c                 D    | j                  dt        j                         y r  )r  rt  r  r$   s    r   r  z*Win32ProcessTestCase.test_send_signal_dead  s    v~~>r   c                 &    | j                  d       y r  r  r$   s    r   r  z#Win32ProcessTestCase.test_kill_dead  s    'r   c                 &    | j                  d       y r  r  r$   s    r   r  z(Win32ProcessTestCase.test_terminate_dead  s    ,r   N)r1   r2   r3   r  r  r%  r)  r   r   r  r2  r  r6  r:  r<  r  r  rF  r  r  r  r  r  r  r  r  r  r4   r   r   r  r  #  s    11 O6:0 < <!0.d1188
@!+*!.:#(?(-r   r  c                       e Zd Z G d dej                        Zej                  j                  ej                  d      d        Z	d Z
d Zd Zd Zd	 Zy
)	MiscTestsc                   $     e Zd Z	 g Z fdZ xZS )MiscTests.RecordingPopenc                 Z    t        |   |i | | j                  j                  |        y r"   )r  r   instances_createdr  )r%   r:   r;   ra  s      r   r   z!MiscTests.RecordingPopen.__init__'  s)    Gd-f-""))$/r   )r1   r2   r3   rV  r   r  r  s   @r   RecordingPopenrT  #  s    J	0 	0r   rW  _communicatec                 J   	 t         |_        	 t        j                  j	                  t
        j                  d      5 }t         |_        t        j                  j	                  t
        d| j                        5  | j                  t               5   |t        j                  ddgfdt
        j                  i| d d d        d d d        |j                  dd  D ]6  }| j                  |t        j                  d       d|j                          8 g }|j                  D ]-  }|t        j                  d	      k(  s|j                  |       / | j!                  |j"                  d
|j                         | j%                  t'        |      d|j                         d d d        | j                  j(                  j+                         }|j-                          |j/                          | j%                  g | j                  j(                         y # 1 sw Y   ZxY w# 1 sw Y   _xY w# 1 sw Y   xY w# | j                  j(                  j+                         }|j-                          |j/                          | j%                  g | j                  j(                         w xY w)N_waitrD   r   zLimport time
time.sleep(9)
import sys
sys.stderr.write('\n!runaway child!\n')rB   r   r`   z.no open-ended wait() after the first allowed: g      ?rf  r@  )KeyboardInterruptr  r   rb  rc  r   rD   rW  rb   rW   rX   r^  r  r&  rV   r  assertLessEqual
call_countrY   r  rV  r  ro  r*   )r%   popenermock__communicater;   
mock__waitrV   sigint_callsrx  s           r   _test_keyboardinterrupt_no_killz)MiscTests._test_keyboardinterrupt_no_kill+  s^   	 ):%	H"":#3#3W= @ *;
&ZZ&&z7'+':':< E**+<= E"M!N E (2'9'9E >DEEE '55ab9 <D'' $))D"9L)889;<<
  "&55 2Dtyy66$++D12 $$Z%:%:A)3)B)B % D  \!2A%/%>%> ! @-@4 ));;??AGLLNLLNR!4!4!F!FG/E EE E	@ @4 ));;??AGLLNLLNR!4!4!F!FGs[   .H6 ;H*7H+H8H A:H*;A"H*H6 HHH'	"H**H3/H6 6A,J"c                 F    | j                  t        j                  d       y NgT㥛 @r`   )rb  r   rV   r$   s    r   #test_call_keyboardinterrupt_no_killz-MiscTests.test_call_keyboardinterrupt_no_killW  s    ,,Z__e,Lr   c                 F    | j                  t        j                  d       y rd  )rb  r   r   r$   s    r   "test_run_keyboardinterrupt_no_killz,MiscTests.test_run_keyboardinterrupt_no_killZ  s    ,,Z^^U,Kr   c                 ,    d }| j                  |       y )Nc                  R    t        j                  | i |5 }t        # 1 sw Y   y xY wr"   )r   rD   r[  )r:   r;   unused_processs      r   popen_via_context_managerz[MiscTests.test_context_manager_keyboardinterrupt_no_kill.<locals>.popen_via_context_manager^  s-    !!4262 (n''( (s   &)rb  )r%   rk  s     r   .test_context_manager_keyboardinterrupt_no_killz8MiscTests.test_context_manager_keyboardinterrupt_no_kill]  s    	( 	,,-FGr   c                    | j                  t        j                  d      d       | j                  t        j                  d      d       d }	 t	        j
                         }t        j                  j                  |d      }t        j                  t        rdnd|z         \  }}| j                  |d       |t        j                  |       y y # |t        j                  |       w w xY w)Nz
echo xyzzyxyzzy)r   rn  r   ztype zcat r   )rY   r   	getoutputgetstatusoutputr   r  r   r   r   r(   r&  rmdir)r%   dirr  r  r{   s        r   test_getoutputzMiscTests.test_getoutputc  s    --l;WE33LA%	' 	""$C77<<U+D'77%6T9;NFF* s s   A)C C*c                 H   	 h d}t        t        j                        }t               }dd l}t        j                  j                         D ]@  \  }}|j                  d      rt        ||j                  f      r0|j                  |       B | j                  |||z
         y )N>   r  rH  rk  Handler  r   r  )rn  r   __all__r  __dict__itemsr  rK  
ModuleTyper  rY   )r%   intentionally_excludedexportedpossible_exportsr  r  rX  s          r   test__all__zMiscTests.test__all__v  s    8!Rz))*5%..446 	'KD%s#%%"2"2!45  &	' 	#36L#LMr   N)r1   r2   r3   r   rD   rW  r   rb  rc  rb  re  rg  rl  rs  r}  r4   r   r   rR  rR  !  s_    0)) 0 
ZZz''8)H 9)HVMLH&Nr   rR  PollSelectorz!Test needs selectors.PollSelectorc                       e Zd Zd Zd Zy)ProcessTestCaseNoPollc                     t         j                  | _        t        j                  t         _        t
        j                  |        y r"   )r   _PopenSelectororig_selector	selectorsSelectSelectorr>   r&   r$   s    r   r&   zProcessTestCaseNoPoll.setUp  s,    '66$-$<$<
!d#r   c                 X    | j                   t        _        t        j	                  |        y r"   )r  r   r  r>   r/   r$   s    r   r/   zProcessTestCaseNoPoll.tearDown  s    $($6$6
!  &r   Nr0   r4   r   r   r  r    s    $
'r   r  zWindows-specific testsc                   F     e Zd Z fdZ fdZd Zd Zd Zd Zd Z	 xZ
S )CommandsWithSpacesc                     t         |           t        j                  dd      \  }}|j	                         | _        t        j                  |d       t        j                  |       y )Nz.pyzte stsV   import sys;sys.stdout.write('%d %s' % (len(sys.argv), [a.lower () for a in sys.argv])))	r  r&   r   rK  r  r  r   r   rI   )r%   r?  r  ra  s      r   r&   zCommandsWithSpaces.setUp  sP    ##E735[[^

 c 	
 	r   c                 `    t        j                  | j                         t        |           y r"   )r   rL  r  r  r/   r  s    r   r/   zCommandsWithSpaces.tearDown  s    
		$**r   c                    t         j                  |d<   t        j                  |i |}|5  | j                  |j                  j                         j                  d      d| j                  z         d d d        y # 1 sw Y   y xY w)NrB   mbcsz2 [%r, 'ab cd'])r   rE   rD   rY   rB   r	  r
  r  )r%   r:   r;   rK   s       r   with_spaceszCommandsWithSpaces.with_spaces  sp    %??xd-f- 	hhmm%%f-$**,	 	 	s   AA;;Bc           	      n    | j                  dt        j                  d| j                  dddd       y )N"" "ab cdr   r^  r  rW   rX   r  r$   s    r   test_shell_string_with_spacesz0CommandsWithSpaces.test_shell_string_with_spaces  s-    S^^TZZ-46=> 	 	@r   c                 `    | j                  t        j                  | j                  dgd       y )Nr  r   r^  r  r$   s    r   test_shell_sequence_with_spacesz2CommandsWithSpaces.test_shell_sequence_with_spaces  s$    #..$**g>aHr   c           	      j    | j                  dt        j                  d| j                  ddd       y )Nr  r  r  r  r$   s    r   test_noshell_string_with_spacesz2CommandsWithSpaces.test_noshell_string_with_spaces  s$    S^^TZZ$& 	'r   c                 \    | j                  t        j                  | j                  dg       y )Nr  r  r$   s    r   !test_noshell_sequence_with_spacesz4CommandsWithSpaces.test_noshell_sequence_with_spaces  s    #..$**g>?r   )r1   r2   r3   r&   r/   r  r  r  r  r  r  r  s   @r   r  r    s)    @
I'
@r   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)ContextManagerTestsc                    t        j                  t        j                  ddgt         j                  t         j                        5 }| j                  |j                  j                         d       | j                  |j                  j                         d       d d d        | j                  j                  j                         | j                  |j                  j                         y # 1 sw Y   TxY w)Nr   zAimport sys;sys.stdout.write('stdout');sys.stderr.write('stderr');r   s   stdouts   stderr)r   rD   rW   rX   rE   rY   rB   r	  rC   r  r  r  s     r   	test_pipezContextManagerTests.test_pipe  s    s~~t => &0__%/__6 	<
 :>T[[--/;T[[--/;	< 	**+**+	< 	<s   AC..C7c                     t        j                  t        j                  ddg      5 }	 d d d        | j	                  j
                  d       y # 1 sw Y   &xY w)Nr   zimport sys; sys.exit(100)d   )r   rD   rW   rX   rY   r   r  s     r   r  z#ContextManagerTests.test_returncode  sQ    s~~t:< = 	@D	 	#.		 	s   AAc                     t        j                  t        j                  ddgt         j                        5 }|j                  d       | j                  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   z2import sys;sys.exit(sys.stdin.read() == 'context')r   s   contextr   rR  r  s     r   r  z*ContextManagerTests.test_communicate_stdin  si    s~~tHI $.??4 	1 8<Z(T__a0	1 	1 	1s   .A..A7c                     | j                  t              5  t        j                  t        t        j
                  t        j
                        5 }	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   )rb   r   r   rD   r   rE   r  s     r   r   z%ContextManagerTests.test_invalid_args  sd    12 	!!/)3)3: =A	 	 	 	s#   9A.A"A."A+	'A..A7c                    	 t        j                  t        t         j                  t        j
                  dz        }|j                         }|j                  j                  dt        j
                  z         | j                  |j                         | j                  t        |j                  d d d        | j                  |j                  d       | j                  |j                  j                          y )Nrf  )rA   rN   rV  r   )r   rD   r   rE   r   r  	__enter__rA   r   r   r   rb   r  __exit__rY   r  r  r  s     r   test_broken_pipe_cleanupz,ContextManagerTests.test_broken_pipe_cleanup  s    G&0oo(/(=(=a(?A ~~ 	

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

))*r   N)r1   r2   r3   r  r  r  r   r  r4   r   r   r  r    s    ,/1+r   r  __main__)Hrm  r   rS  r   test.supportr   r   r   r   test.support.script_helperr	   r   rW   rt  rG   rH  r   r  r   r+  r  r  r  r  r  r   r0  r  r  rl  r_  test.support.os_helperr
   r  r$  rH  r  rk  PGOrn  has_subprocess_supportr  r(   r  r   r  NotADirectoryErrorr0  r   rX   r   r   TestCaser    	Exceptionr6   rD   r8   r>   r  r  r  r  r  r  rR  r  r  r  r  r1   mainr4   r   r   <module>r     s      ( & " ( 7  
  	  	           	    + ;;
(

9
::%%
(

=
>>\\W$	 @I I)');_M >>40( 8$$  &	 	>j.. >pIl pIf-BOl BOJ	c 23gP< gP 4gPT1 Y 89{-< {- :{-zaN!! aNH WY78:'O ':' Y 89(@, (@ :(@V3+, 3+l zHMMO gv  I
  
C  
C
EsB   H H# H1 H? H H #H.-H.1H<;H<?I