
    <e_y                       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	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n# e $ r dZY nw xY w	 d dl!Z!n# e $ r dZ!Y nw xY w	 d dl"Z"n# e $ r dZ"Y nw xY w	 d dl#Z#n	#  dZ#Y nxY wej$        r e j%        d	          ej&        s e j%        d
          e
j'        dk    Z(e(rdZ)ndZ)dZ*e+e,e-fZ.e
j/        ddfa0d Z1 G d de j2                  Z3 G d de4          Z5 G d de	j6                  Z7 G d de3          Z8 G d de3          Z9d Z: e j;        e(d           G d de3                      Z< e j=        e(d            G d! d"e3                      Z> G d# d$e j2                  Z? e j=         e@ed%          d&           G d' d(e8                      ZA e j=        e(d)           G d* d+e3                      ZB G d, d-e3          ZCeDd.k    r e jE                     dS dS )/    N)mock)support)check_sanitizer)import_helper)	os_helper)warnings_helper)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          } | d S t          j        | t          j                  r#t          j        | g          j        dk    r| fad S d S d S )Ntruer   )	shutilwhichosaccessX_OK
subprocessrun
returncodeZERO_RETURN_CMD)
shell_trues    +/usr/lib/python3.11/test/test_subprocess.pysetUpModuler   J   sg    f%%J
	*bg&& (
|$$/144%-( (44    c                       e Zd Zd Zd ZdS )BaseTestCasec                 ,    t          j                     d S N)r   reap_childrenselfs    r   setUpzBaseTestCase.setUpU   s     	r   c                    t           sVt          j        D ]}|                                 t          j                     |                     t          j        d           |                                  t          j                     d S )Nzsubprocess._active not empty)		mswindowsr   _activewait_cleanupassertFalse
doCleanupsr   r"   )r$   insts     r   tearDownzBaseTestCase.tearDownZ   s     	"*  		!!!"$B   	r   N__name__
__module____qualname__r%   r.    r   r   r   r   T   s2             

  
  
  
  
 r   r   c                       e Zd ZdS )PopenTestExceptionN)r0   r1   r2   r3   r   r   r5   r5   g   s        Dr   r5   c                       e Zd ZdZd ZdS )PopenExecuteChildRaiseszePopen subclass for testing cleanup of subprocess.PIPE filehandles when
    _execute_child fails.
    c                      t          d          )NzForced Exception for Test)r5   )r$   argskwargss      r   _execute_childz&PopenExecuteChildRaises._execute_childo   s     !<===r   N)r0   r1   r2   __doc__r;   r3   r   r   r7   r7   k   s-         > > > > >r   r7   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d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ej         e!d          d             Z" ej         e!d          d             Z# ej         e!d          d              Z$d! Z%d" Z&d# Z'd$ Z(d% Z)d& Z* ej         e!d'          d(             Z+ ej         e!d'          d)             Z,d* Z- ej         e.j/        e.j0        k    d+          d,             Z1 ej         e.j/        e.j0        k    d+           ej          e2j3                    d-          d.                         Z4d/ Z5d0 Z6d1 Z7d2 Z8d3 Z9d4 Z:d5 Z;d6 Z<d7 Z=d8 Z>d9 Z?d: Z@d; ZAd< ZBd= ZCd> ZD ejE        eFo eGeFd?          d@          dA             ZH ejE        eFo eGeFd?          d@          dB             ZIdC ZJ ej         e.jK        dDk    dE           ej          e2jL        dF          dGk    dH           ej          eMdIJ          dK          dL                                     ZNdM ZOdN ZPdO ZQdP ZRdQ ZSdR ZTdS ZUdT ZVdU ZWdV ZXdW ZYdX ZZdY Z[dZ Z\d[ Z]d\ Z^d] Z_d^ Z`d_ Zad` Zbda Zcdb Zddc Zedd Zfde Zgdf Zhdg Zidh Zjdi Zkdj Zldk Zmdl Zndm Zodn Zpdo Zqdp Zrdq Zsdr Zt ejE         eGeuds          dt           ejE         eGevdu          dv           ejE         eGevdw          dx          dy                                     Zw ejE        evjx        y                    dz evjz                    z            d{          d|             Z{ ej         e!d}          d~             Z| ej         e!d}          d             Z}d Z~ ej          e2jL        d           d           ej        d          d                         ZdS )ProcessTestCasec                    t          j        t          t           j        t           j        t           j                  }	 |                     |j        t          j                   |                     |j        t          j                   |                     |j	        t          j                   |j        
                                 |j        
                                 |j	        
                                 |                                 d S # |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_defaultu   s   _#-?:?$.O5 5 5	!!!'2+<===!!!(B,=>>>!!!(B,=>>>GMMOOOHNNHNNFFHHHHH GMMOOOHNNHNNFFHHHHs   A/D A!E.c                    t          j        t          t           j        t           j        t           j        d          }	 |                     |j        t          j                   |                     |j        t          j                   |                     |j	        t          j                   |j        
                                 |j        
                                 |j	        
                                 |                                 d S # |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   _#-?:?$.OQ@ @ @	!!!'2<888!!!(BL999!!!(BL999GMMOOOHNNHNNFFHHHHH GMMOOOHNNHNNFFHHHHs   A/D A!E/c                 t    t          j        t          j        ddg          }|                     |d           d S Nr   import sys; sys.exit(47)/   r   callsys
executableassertEqualr$   rcs     r   test_call_seqzProcessTestCase.test_call_seq   s=    _cnd8: ; ;R     r   c                 z    |                      t          j        t          j        t          j        ddgd           d S )Nr   while True: pass皙?timeout)assertRaisesr   TimeoutExpiredrV   rW   rX   r#   s    r   test_call_timeoutz!ProcessTestCase.test_call_timeout   sD    
 	*3Z_>41CD"% 	 	' 	' 	' 	' 	'r   c                 d    t          j        t                    }|                     |d           d S Nr   )r   
check_callr   rY   rZ   s     r   test_check_call_zeroz$ProcessTestCase.test_check_call_zero   s.    "?33Qr   c                     |                      t          j                  5 }t          j        t          j        ddg           d d d            n# 1 swxY w Y   |                     |j        j        d           d S rR   )	rb   r   CalledProcessErrorrg   rW   rX   rY   	exceptionr   r$   cs     r   test_check_call_nonzeroz'ProcessTestCase.test_check_call_nonzero   s    z<== 	@!3>4#=#? @ @ @	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	/44444   "AAAc                    t          j        t          j        ddg          }|                     d|           |                     t          d          5  t          j        g d            d d d            n# 1 swxY w Y   |                     t          d          5  t          j        g d           d d d            d S # 1 swxY w Y   d S )	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   sU   (79 9gv&&&##JDF F 	5 	5#Bt4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 ##JCE E 	5 	5#Be4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s$   A66A:=A:C  CCc                     |                      t          j                  5 }t          j        t          j        ddg           d d d            n# 1 swxY w Y   |                     |j        j        d           d S )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   s    z<== 	G#^T+DEG G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	/33333ro   c                     t          j        t          j        ddgt           j                  }|                     d|           d S )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   sH    ('MN!(* * * 	gv&&&&&r   c                 &   t          j                    }|                     |j                   |                    d           |                    d           t          j        t          j	        ddg|          }| 
                    d|           d S )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   s    #%%!!!




(IK   	gv&&&&&r   c                 x    t          j        t          j        ddgd          }|                     d|           d S )Nr   r   r   inputr   r   rv   rW   rX   rw   rz   s     r   test_check_output_input_argz+ProcessTestCase.test_check_output_input_arg   sH    (IK   	gv&&&&&r   c                 x    t          j        t          j        ddgd          }|                     d|           dS )z<input=None has a legacy meaning of input='' on check_output.r   3import sys; print('XX' if sys.stdin.read() else '')Nr   s   XXr   rv   rW   rX   assertNotInrz   s     r   test_check_output_input_nonez,ProcessTestCase.test_check_output_input_none   sJ    (FH   	'''''r   c                 z    t          j        t          j        ddgd d          }|                     d|           d S )Nr   r   T)r   textXXr   rz   s     r   !test_check_output_input_none_textz1ProcessTestCase.test_check_output_input_none_text   sL    (FH' ' ' 	v&&&&&r   c                 z    t          j        t          j        ddgd d          }|                     d|           d S )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   sL    (FHt5 5 5 	v&&&&&r   c                 |    t          j        t          j        ddgd dd          }|                     d|           d S )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   sH    (~6WX? ? ? 	eV$$$$$r   c                 :   |                      t                    5 }t          j        t          j        ddgt          j                  }|                     d           d d d            n# 1 swxY w Y   |                     d|j	        j
        d                    d S )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   r9   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FF		G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G
 	h 0 344444s   AA**A.1A.c                 "   t          j                    }|                     |j                   |                    d           |                    d           |                     t                    5 }t          j	        t          j        ddg|d          }|                     d           d d d            n# 1 swxY w Y   |                     d|j        j        d                    |                     d	|j        j        d                    d S )
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   r9   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PP		Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q
 	gq{/2333gq{/233333s   2:B88B<?B<c                 $   |                      t          j                  5 }t          j        t          j        ddgd          }|                     d           d d d            n# 1 swxY w Y   |                     |j        j	        d           d S )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99 
	2Q,^T()   F II0111
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 	+W55555s   9A%%A),A)c                     t           j                                        }d|d<   t          j        t
          j        ddg|          }|                     |d           d S )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  sg    """w_cndGH "() ) ) 	Qr   c                 ~   t          j                    5 }|                     t          t          j        d           t          j        j        j        j        }dg|dz   z  } | j        t          t          j        g|R   d d d            n# 1 swxY w Y   | 	                    |
                                d           d S )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)9ANNN!'09EHC8a<0MDi)9JMJJJJ		K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K
 	r*****s   A*B

BBc                 P   t          j        t          j        ddgt           j        t           j                  }|                     |j        j                   |                     |j        j                   |	                                 | 
                    |j        d            d S )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_none2  s    cnd4EF *
I I I''''''	$'''''r   c                    d}t          j        t          j        d|gt           j        t           j                  }|                     |j        j                   |                     |j        j                   |	                                \  }}| 
                    |j        d|           | 
                    |                                d           d S )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 cndD9$.OJOM M M''''''==??Sq#...':;;;;;r   c                 P   t          j        t          j        ddgt           j        t           j                  }|                     |j        j                   |                     |j        j                   |	                                 | 
                    |j        d            d S )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_noneR  s    cnd4EF)zH H H'''&&&	4(((((r   c                     |dgz   }t          j        |fi |}|                                 |                     d|j                   d S NrS   rT   )r   rD   r)   rY   r   )r$   pre_argsr:   r9   rK   s        r   _assert_pythonzProcessTestCase._assert_python[  sU     566T,,V,,	Q\*****r   c                     t           j                            t           j                            t          j                  d          }|                     |dgt          j                   d S Ndoesnotexistr   rX   )r   pathjoindirnamerW   rX   r   r$   r   s     r   test_executablezProcessTestCase.test_executablec  sT     w||BGOOCN$C$C$24 4\40S^LLLLLr   c                     t           j                            t           j                            t          j                  d          }|                     |dgt          j        t          j                             d S r   )r   r   r   r   rW   rX   r   fsencoder   s     r   test_bytes_executablez%ProcessTestCase.test_bytes_executablen  sn    w||BGOOCN$C$C$24 4\40'){3>'B'B 	 	D 	D 	D 	D 	Dr   c                     t           j                            t           j                            t          j                  d          }|                     |dgt          t          j                             d S r   )r   r   r   r   rW   rX   r   r	   r   s     r   test_pathlike_executablez(ProcessTestCase.test_pathlike_executablet  sl    w||BGOOCN$C$C$24 4\40'/'?'? 	 	A 	A 	A 	A 	Ar   c                     t           j        dg}|                     |           |                     t          | j        |t
          d                    d S )Nr   r   r   )rW   rX   r   rb   NONEXISTING_ERRORSNONEXISTING_CMD)r$   r   s     r    test_executable_takes_precedencez0ProcessTestCase.test_executable_takes_precedencez  s^     ND)H%%%,-x%4Q%7 	 	9 	9 	9 	9 	9r   z"executable argument replaces shellc                 J    |                      g t          j        d           d S NT)rX   shell)r   rW   rX   r#   s    r   test_executable_replaces_shellz.ProcessTestCase.test_executable_replaces_shell  s'     	B3>FFFFFr   c                 n    |                      g t          j        t          j                  d           d S r   )r   r   r   rW   rX   r#   s    r   $test_bytes_executable_replaces_shellz4ProcessTestCase.test_bytes_executable_replaces_shell  s<    B2;s~+F+F"& 	 	( 	( 	( 	( 	(r   c                 d    |                      g t          t          j                  d           d S r   )r   r	   rW   rX   r#   s    r   'test_pathlike_executable_replaces_shellz7ProcessTestCase.test_pathlike_executable_replaces_shell  s:    B8CN+C+C"& 	 	( 	( 	( 	( 	(r   c                     t          j        |          5  t          j                    cd d d            S # 1 swxY w Y   d S r!   )r   
change_cwdr   getcwd)r$   cwds     r   _normalize_cwdzProcessTestCase._normalize_cwd  s     !#&& 	 	9;;	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   599c                     t           j                            t          j                  }t           j                            |          S r!   )r   r   realpathrW   rX   split)r$   python_paths     r   _split_python_pathz"ProcessTestCase._split_python_path  s-    g&&s~66w}}[)))r   c                    t          j        |ddgfdt           j        i|}|                     |j        j                   |                                 |                     d|j                   t          j
        j        }|                      ||           ||j                                                                                             d S )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\***7#,//!!(--//"8"8":":;;	= 	= 	= 	= 	=r   c                     t          j                    }|                     |          }|                     |t          j        |           d S Nr   )r   
gettempdirr   r  rW   rX   r$   temp_dirs     r   test_cwdzProcessTestCase.test_cwd  sF    &((&&x003>x@@@@@r   c                     t          j                    }|                     |          }|                     |t          j        t          j        |                     d S r  )r   r  r   r  rW   rX   r   r   r  s     r   test_cwd_with_bytesz#ProcessTestCase.test_cwd_with_bytes  sP    &((&&x003>r{87L7LMMMMMr   c                     t          j                    }|                     |          }|                     |t          j        t          |                     d S r  )r   r  r   r  rW   rX   r	   r  s     r   test_cwd_with_pathlikez&ProcessTestCase.test_cwd_with_pathlike  sN    &((&&x003>x7I7IJJJJJr   z"pending resolution of issue #15533c                    |                                  \  }}t          j                            t          j        |          }t          j                    5 }|                     t          t          j
        |g           |                     t          t          j
        |g|           |                     |          }|                     |||           d d d            d S # 1 swxY w Y   d S 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  s5    #'"9"9";";
KW\\")[99
!! 	EY /1A)l, , ,/1A)l	  ; ; ;,,Z88JZDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   A>C  C$'C$c                    |                                  \  }}t          j                            t          j        |          }d}t          j                    5 }|                     t          t          j
        |g|           |                     t          t          j
        |g||           |                     |          }|                     ||||           d d d            d S # 1 swxY w Y   d S )Nsomethingyoudonthaver   rX   r   r  )r$   r  r  r  doesntexistr   s         r   !test_cwd_with_relative_executablez1ProcessTestCase.test_cwd_with_relative_executable  sA    #'"9"9";";
KW\\")[99
,!! 
	-Y /1A*m
  D D D/1A*m
"+  - - - ,,Z88JZ!+  - - -
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	-s   BC&&C*-C*c                    |                                  \  }}t          j                            ||          }t          j                            t          j        |          }t          j                    5 }|                     t          t          j
        |g|           |                     |          }|                     |||           d d d            d S # 1 swxY w Y   d S 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W\\*k::
W\\")[99
!! 	CY /1A)l	  ; ; ;++I66IY
	BBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   5ACC CzTest is not venv-compatiblec                     |                                  \  }}|                     |          }|                     |dt          j        |           d S )Nr#  r$  )r  r   r  rW   rX   )r$   r  r  s      r   test_executable_with_cwdz(ProcessTestCase.test_executable_with_cwd  se     #'"9"9";";
K((44
%;$'N
 	 	D 	D 	D 	D 	Dr   z#need an installed Python. See #7774c                 l    |                      t          j                    dt          j                   d S )Nr#  r   )r  r   r   rW   rX   r#   s    r   test_executable_without_cwdz+ProcessTestCase.test_executable_without_cwd  s;     	&<$'N 	 	4 	4 	4 	4 	4r   c                 $   t          j        t          j        ddgt           j                  }|j                            d           |j                                         |                                 | 	                    |j
        d           d S )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	  s}    cndKM(o/ / / 	
g		q)))))r   c                    t          j                    }|                     |j                   |                                }t          j        |d           t          j        |dd           t          j	        t          j        ddg|          }|                                 |                     |j        d           d S Nr   r   r   r/  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    #%%!!!IIKK
G
AqcndKM " " " 	
q)))))r   c                 X   t          j                    }|                     |j                   |                    d           |                    d           t          j        t          j	        ddg|          }|
                                 |                     |j        d           d S r2  )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   s    #%%!!!




cndKM!# # # 	
q)))))r   c                     t          j        t          j        ddgt           j                  }|5  |                     |j                                        d           d d d            d S # 1 swxY w Y   d S )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    cndBD *1 1 1  	9 	9QX]]__i888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9   .A++A/2A/c                 t   t          j                    }|                     |j                   |                                }t          j        t          j        ddg|          }|	                                 t          j        |dd           |                     t          j        |d          d           d S )Nr   r<  rs   r      r=  r   r   r   rI   r3  r   rD   rW   rX   r)   r   r4  rY   r  r5  s       r   test_stdout_filedesz#ProcessTestCase.test_stdout_filedes4  s    #%%!!!IIKKcndBD !# # # 	

AqD))955555r   c                 H   t          j                    }|                     |j                   t	          j        t          j        ddg|          }|                                 |	                    d           | 
                    |                                d           d S )Nr   r<  rs   r   r=  r   r   r   rI   r   rD   rW   rX   r)   r   rY   r  r9  s      r   test_stdout_fileobjz#ProcessTestCase.test_stdout_fileobj@  s    #%%!!!cndBD "$ $ $ 	




I.....r   c                     t          j        t          j        ddgt           j                  }|5  |                     |j                                        d           d d d            d S # 1 swxY w Y   d S )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_pipeK  s    cndFH *1 1 1  	= 	=QX]]__m<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=r@  c                 t   t          j                    }|                     |j                   |                                }t          j        t          j        ddg|          }|	                                 t          j        |dd           |                     t          j        |d          d           d S )Nr   rI  r   r   rB  rJ  rC  r5  s       r   test_stderr_filedesz#ProcessTestCase.test_stderr_filedesS  s    #%%!!!IIKKcndFH !# # # 	

AqD))=99999r   c                 H   t          j                    }|                     |j                   t	          j        t          j        ddg|          }|                                 |	                    d           | 
                    |                                d           d S )Nr   rI  r   r   rJ  rF  r9  s      r   test_stderr_fileobjz#ProcessTestCase.test_stderr_fileobj_  s    #%%!!!cndFH "$ $ $ 	




M22222r   c                 2   t          j        t          j        ddgt           j        t           j                  }|                                \  }}|                     |d           |                     |d           |                     |j        d           d S )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_redirectj  s     cnd-. %/O$.O5 5 5 '''%%%q)))))r   c                    t          j        t          j        ddgt           j        t           j                  }|5  |                     |j                                        d           d d d            d S # 1 swxY w Y   d S )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  s    cnd;<
 %/O$.$57 7 7  	> 	>QX]]__n===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   .A66A:=A:c                 J   t          j                    }|                     |j                   t	          j        t          j        ddg||          }|                                 |	                    d           | 
                    |                                d           d S )Nr   rU  r   r   rV  rF  r9  s      r   test_stdout_stderr_filez'ProcessTestCase.test_stdout_stderr_file  s    #%%!!!cnd;<
 %'$&( ( ( 	




N33333r   c                    d}t          j        t          j        d|gt           j        t           j                  }|                     |j        j                   |                     |j        j                   |	                                \  }}| 
                    |j        d|           | 
                    |                                d           d S )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    "
 cndD9$.OJOM M M''''''==??Sq#...'<=====r   c                     t          j        t          j        ddgt           j                  }|                                 |                     |j        d            d S )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  s^    cnd23 &0%79 9 9 	
4(((((r   c                     t          j        t          j        ddgt           j                  }|                                 |                     |j        d            d S )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  s^    cnd=> &0%7	9 9 9
 	
4(((((r   c                     t          j        t          j        ddgt           j                  }|                                 |                     |j        d            d S )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  s^    cnd23 %/$68 8 8 	
$'''''r   F_GETPIPE_SZz%fcntl.F_GETPIPE_SZ required for test.c                    t          j                    \  }}	 t          j        |t          j                  }t          j        |           t          j        |           n-# t          j        |           t          j        |           w xY w|dz  }|dk     rt          j        d          t          j        t          j
        ddgt          j        t          j        t          j        |          }	 |j        |j        |j        fD ]G}|                     t          j        |                                t          j                  |           H|j                            d           |j                                         |j                                         |j                                         |                                 |                                 d S # |                                 |                                 w xY w)N   i   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fcntlrc  rI   unittestSkipTestr   rD   rW   rX   rE   rA   rB   rC   rY   r3  r   killr)   )r$   test_pipe_rtest_pipe_wpipesize_defaultrh  rK   fifos          r   test_pipesizeszProcessTestCase.test_pipesizes  s    $&799 [	"${;8JKKH[!!!H[!!!! H[!!!H[!!!!#q(c>>#=? ? ?^T*+ /*/?X7 7 7	!(AH5    Ku/ABB    GMM'"""GMMOOOHNNHNNFFHHHFFHHHHH FFHHHFFHHHHs   A   *B
1CG *H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 ]G}|                     t          j        |                                t          j                  |           H	 t          j        |           t          j        |           n-# t          j        |           t          j        |           w xY w|j	                                         |j
                                         |j                                         |                                 |                                 d S # |                                 |                                 w xY w)Nr   rf  rg  )r   rD   rW   rX   rE   r   ri  rj  rc  rA   rB   rC   rY   r3  rI   rm  r)   )r$   rK   fp_rfp_wdefault_pipesizerq  s         r   test_pipesize_defaultz%ProcessTestCase.test_pipesize_default  s|    ^T*+ /*/?R1 1 1	JD$#(;tU5G#H#H Wah9 * *D$$DKKMM53EFF(* * * **
   GMMOOOHNNHNNFFHHHFFHHHHH FFHHHFFHHHHs&   F$ A;D )F$ *D,,AF$ $*Gc                 4   t           j                                        }d|d<   t          j        t
          j        ddgt          j        |          5 }|                                \  }}| 	                    |d           d d d            d S # 1 swxY w Y   d S )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 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   .B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 }|                                \  }}t          |                                          }|                     |t                     fd|D             }| 
                    |g            ddd           dS # 1 swxY w Y   dS )z+Verify that env={} is as empty as possible.c                 T    d| v p$d| v p | dk    p|                      d          p| dk    S )z:Determine if an environment variable is under our control.	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    
  1$ $! $%$)*i)@)@$O%r   r   z)import os; print(list(os.environ.keys()))r|  c                 *    g | ]} |          |S r3   r3   ).0kr  s     r   
<listcomp>z2ProcessTestCase.test_empty_env.<locals>.<listcomp>-  s8     ? ? ?Q&:&:1&=&=?q ? ? ?r   N)r   rD   rW   rX   rE   r   evalstriprF   listrY   )r$   rK   rB   rC   child_env_namesr  s        @r   test_empty_envzProcessTestCase.test_empty_env  s   	% 	% 	% s~tJL%/_"> > > 	2AB]]__NFF"6<<>>22O!!/4888? ? ? ?/ ? ? ?O_b111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   A8B88B<?B<c                 ^   t           j        dz   }|                     t                    5  t	          j        |ddg           d d d            n# 1 swxY w Y   |                     t                    5  t	          j        t           j        ddg           d d d            d S # 1 swxY w Y   d S )N r   r   zpass# )rW   rX   rb   ry   r   rD   )r$   cmds     r   test_invalid_cmdz ProcessTestCase.test_invalid_cmd1  s7   nt#z** 	2 	2c40111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 z** 	@ 	@cndI>???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s#   AAA3"B""B&)B&c                    t           j                                        }d|d<   |                     t                    5  t          j        t          |           d d d            n# 1 swxY w Y   t           j                                        }d|d<   |                     t                    5  t          j        t          |           d d d            n# 1 swxY w Y   t           j                                        }d|d<   |                     t                    5  t          j        t          |           d d d            n# 1 swxY w Y   t           j                                        }d|d<   t          j        t          j	        d	d
gt
          j
        |          5 }|                                \  }}|                     |d           d d d            d S # 1 swxY w Y   d S )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;  s   ""%.!"z** 	: 	:_&9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: ""5wz** 	: 	:_&9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: ""!(~z** 	: 	:_&9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: ""(ws~t FG &0_"(	* * * 	6 ./]]__NFFV_555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6sG   A&&A*-A*.CCCEE
E
".GG!$G!c                     t          j        t          j        ddgt           j                  }|                    d           |                     |j        d           d S )Nr   z/import sys;sys.exit(sys.stdin.read() == "pear")r   r   r   rQ  rJ   s     r   test_communicate_stdinz&ProcessTestCase.test_communicate_stdinY  sd    cndEF $.?4 4 4 	
gq)))))r   c                     t          j        t          j        ddgt           j                  }|                                \  }}|                     |d           |                     |d            d S )Nr   z)import sys; sys.stdout.write("pineapple")rs   	   pineappler   rD   rW   rX   rE   r   rY   rR  s       r   test_communicate_stdoutz'ProcessTestCase.test_communicate_stdouta  ss    cndIK$.O5 5 5 ==??...&&&&&r   c                     t          j        t          j        ddgt           j                  }|                                \  }}|                     |d            |                     |d           d S )Nr   z)import sys; sys.stderr.write("pineapple")r   r  r  rR  s       r   test_communicate_stderrz'ProcessTestCase.test_communicate_stderri  ss    cndIK$.O5 5 5 ==??&&&.....r   c                    t          j        t          j        ddgt           j        t           j        t           j                  }|                     |j        j                   |                     |j        j                   |                     |j	        j                   |
                    d          \  }}|                     |d           |                     |d           d S )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   rR  s       r   test_communicatez ProcessTestCase.test_communicateq  s    cndCD $.?$.O$.O5 5 5 	''''''&&&==33+++.....r   c                    t          j        t          j        ddgdt           j        t           j        t           j                  }|                     t           j        |j        dd           |                                \  }}|                     |d           |                     |	                                d           d S )	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   encoderR  s       r   test_communicate_timeoutz(ProcessTestCase.test_communicate_timeout  s    cndCD 15#-?$.O$.O	5 	5 	5 	*3Q]H"% 	 	' 	' 	' ==??****>?????r   c                 "   t          j        t          j        ddgt           j                  }|                     t           j        |j        d           |                                \  }}|                     t          |          d           d S )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  s    cndEF %/O	5 	5 	5 	*3Q]CPPPmmooVm44444r   c                    dD ]}dD ]}dD ]}i }|rt           j        |d<   |rt           j        |d<   |rt           j        |d<   |s:t          j        t          fi |}|                                 |j        |                     |j        j                   |j        |                     |j        j                   |j	        |                     |j	        j                   ،݌d S )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   ' 	9 	9J, 9 9#0 9 9K G! ;+5?(" <,6O)" <,6O)" ! "(DDGDDAMMOOOw*777x+888x+888#99	9 	9r   c                     t          j        t          j        ddg          }|                                \  }}|                     |d            |                     |d            d S )Nr   rS   )r   rD   rW   rX   r   rY   rR  s       r   test_communicate_returnsz(ProcessTestCase.test_communicate_returns  sf    cnd8: ; ;==??&&&&&&&&r   c                 V   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                   dt          j        z  }|                    |          \  }}|                     ||           d S )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   ri  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     wyy1

cndC &3	45 $.?$.O$.O5 5 5 	''''''&&&!66==9911111r   c                    t          j        t          j        ddgt           j        t           j        t           j                  }|                     |j        j                   |                     |j        j                   |                     |j	        j                   |j	        
                    d           |                    d          \  }}|                     |d           |                     |d           d S )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   rR  s       r   test_writes_before_communicatez.ProcessTestCase.test_writes_before_communicate  s    cndCD $.?$.O$.O5 5 5 	''''''&&&	i   ==22000%%%%%r   c                 H   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                            d           |j                                         | 	                    |j
                                        d           |j                            d	           |j                                         |                     |j
        j                   | 	                    |j
                                        d
           | 	                    |j
                            d          d	           | 	                    |j
                                        d           d d d            n# 1 swxY w Y   d S )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$   r9   extra_kwargrK   s       r    test_universal_newlines_and_textz0ProcessTestCase.test_universal_newlines_and_text  s   NDy(&&'( : 	F 	FK  > >':?*2JO*5t*= > >A  F Fi(((  !2!2!4!4i@@@i(((///  !2!2!4!4!*, , ,  q!1!1!*, , ,  !DF F FF F F F F F F F F F F F F F F		F 	Fs   D;FF	F	c                 d   t          j        t          j        ddt          z   dz   gt           j        t           j        d          }|                     |j        j                   |                     |j	        j                   |
                                \  }}|                     |d           d S )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   rR  s       r   #test_universal_newlines_communicatez3ProcessTestCase.test_universal_newlines_communicate  s    cnd.:889 %/O$.O01!3 3 3" 	''''''==??C	E 	E 	E 	E 	Er   c                    t          j        t          j        ddt          z   t          j        d          z   gt           j        d          }|                    d          \  }}| 	                    |j
        d           d S )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   rR  s       r   )test_universal_newlines_communicate_stdinz9ProcessTestCase.test_universal_newlines_communicate_stdin)  s    cnd.:X_ N" ># ># #$ $.?013 3 3 ==)9::q)))))r   c                     t          j        t          t           j        t           j        d          }|                                 |                     |j        d           d S )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_none7  sW    
 _#-?$.O046 6 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
                   |                    d          \  }}|                     |j        d           |                     d|           |                     |                    d	                     d S )
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  rR  s       r   7test_universal_newlines_communicate_stdin_stdout_stderrzGProcessTestCase.test_universal_newlines_communicate_stdin_stdout_stderrC  s    cnd.:X_ N" ># ># #$ $.?$.O$.O04!6 6 6" 	''''''==)9::q)))>GGG 	))*DEEFFFFFr   c                     dD ]q}d|z  }t           j        d|g}t          j        |t          j        t          j        |          }|                    d          \  }}|                     |d           rd S )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   r9   popenrB   rC   s          r   -test_universal_newlines_communicate_encodingsz=ProcessTestCase.test_universal_newlines_communicate_encodings_  s     0 	3 	3HLD ND$/D $T+5?,6O.68 8 8E #..R.88NFFV\2222	3 	3r   c                    dD ]\  }}d}t           j        d|g}t          j        |t          j        t          j        d|          }|                    d          \  }}|                     |d                    |                     d S )	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   r9   r  rB   rC   s           r   test_communicate_errorsz'ProcessTestCase.test_communicate_errorsu  s    !
 	> 	>FH>DND$/D $T+5?,6O.5,2	4 4 4E
 #..R.88NFFVV]]8%<%<====%	> 	>r   c                 
   t           sd}nd}g }t          j                    }	 t          |          D ]}	 t          j                            |t          j                  }|	                    t	          j
        |t          j        t          j        z                       m# t          $ r!}|j        t          j        k    r Y d }~ n d }~ww xY w|                     d|z             t          d          D ](}t	          j        |                                           )t          d          D ]v}t'          j        t*          j        ddgt&          j        t&          j        t&          j                  }|                    d	          d
         }|                     |d	           w	 |D ]}	t	          j        |	           t5          j        |           d S # |D ]}	t	          j        |	           t5          j        |           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    	KKK!##	";'' 
0 
0 gll693CDDGNN277BK
4J#K#KLLLL   w%,..EEEEE
  !#./ 0 0 0 2YY ( ('''' 2YY 0 0$cnd'K&L ,6?,6O,6O= = = }}W--a0  w////0   M&!!!!!   M&!!!!s6   G A)BG 
C
)C?G C

CG /Hc                    |                      t          j        g d          d           |                      t          j        g d          d           |                      t          j        g d          d           |                      t          j        g d          d           |                      t          j        g d	          d
           |                      t          j        g d          d           |                      t          j        g d          d           |                      t          j        ddg          d           d S )N)za b cr6  r  z"a b c" d e)ab"c\r6  z	ab\"c \ d)r  z \r6  zab\"c " \\" d)za\\\bzde fgr  za\\\b "de fg" h)za\"brm   r6  z
a\\\"b c d)za\\b cr6  r  z"a\\b c" d e)za\\b\ cr6  r  z"a\\b\ c" d eabr   zab "")rY   r   list2cmdliner#   s    r   test_list2cmdlinez!ProcessTestCase.test_list2cmdline  s   01D1D1DEE&	( 	( 	(01D1D1DEE&	( 	( 	(01E1E1EFF+	- 	- 	-01K1K1KLL-	/ 	/ 	/01D1D1DEE(	* 	* 	*01G1G1GHH)	+ 	+ 	+01I1I1IJJ+	- 	- 	-0$<< 	" 	" 	" 	" 	"r   c                    t          j        t          j        ddgt           j                  }|                     |j        j                   |                     |	                                           t          j        |j                                        d           |                                 |                     |	                                d           d S )Nr   zimport os; os.read(0, 1)r      Ar   )r   rD   rW   rX   rE   r   rA   rI   assertIsNonepollr   r   r3  r)   rY   rJ   s     r   	test_pollzProcessTestCase.test_poll  s    cnd8:#-?4 4 4 	&&&!&&((###
!!4(((	1%%%%%r   c                     t          j        t                    }|                     |                                d           |                     |                                d           d S rf   r   rD   r   rY   r)   rJ   s     r   	test_waitzProcessTestCase.test_wait  sT    _--1%%%1%%%%%r   c                    t          j        t          j        ddg          }|                     t           j                  5 }|                    d           d d d            n# 1 swxY w Y   |                     dt          |j	                             | 
                    |                    t          j                  d           d S )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    cn"$BD E Ez899 	#QFF6F"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#hAK 0 0111(=>>BBBBBs   A$$A(+A(c                     |                      t                    5  t          j        t          d           d d d            d S # 1 swxY w Y   d S )Nrz  )rb   r   r   rD   r   r#   s    r   test_invalid_bufsizez$ProcessTestCase.test_invalid_bufsize  s     y)) 	8 	8_h777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   AA
Ac                    t          j        t          d           }|                     |                                d           t          j        t          d           }|                     |                                d           d S )Nr   )rN   r  rJ   s     r   test_bufsize_is_nonez$ProcessTestCase.test_bufsize_is_none  sk    _d331%%%_d;;;1%%%%%r   c                    t          j        t          j        ddgt           j        t           j        t           j        d|          5 }|j                            |           t          j	        |j        
                                           |j                                        }t          j                    5  	 |j        	                                 n# t          $ r Y nw xY wd d d            n# 1 swxY w Y   d |_        d d d            n# 1 swxY w Y   |                     |j        d           |                     ||           d S )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   r3  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 %/O%/_%/%7&'1CE E E 	 IJGMM$HQW^^%%&&&))++I,..  GMMOOOO   D              
 AG!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	" 	q)))H-----s[   A2D8C0:CC0
C!C0 C!!C0$D0C4	4D7C4	8
DDDc                 :    d}|                      ||d           d S )Nzline
Tr   )r  r$   r  s     r    test_bufsize_equal_one_text_modez0ProcessTestCase.test_bufsize_equal_one_text_mode   s*     $$T4D$IIIIIr   c                     dt           j                                        z   }|                     t          d          5  |                     |dd           d d d            d S # 1 swxY w Y   d S )Ns   linezline bufferingr   Fr  )r   linesepr  assertWarnsRegexRuntimeWarningr  r  s     r   "test_bufsize_equal_one_binary_modez2ProcessTestCase.test_bufsize_equal_one_binary_mode  s     **,,,"">3CDD 	N 	N((su(MMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	Ns   A##A'*A'c                     t          d          D ]d}|                     t                    5  t          j        t
          t          j        t          j                   d d d            n# 1 swxY w Y   ed S )NrB  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 	9 	9A""#566 9 9 (2(29 9 9 99 9 9 9 9 9 9 9 9 9 9 9 9 9 9	9 	9s   1A))A-	0A-	c                    	 dd l }|j         n,# t          t          f$ r |                     d           Y nw xY wt          j        dt          d          }t          j	        d|g}t          j        |t          j        d          }|5  |                                d         }d d d            n# 1 swxY w Y   |                     |d	           |                     |j        d           d S )
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  sY   	:MMM###, 	: 	: 	:MM899999	:    #	       & ~tT*'1379 9 9  	+ 	+%%''*F	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+$$$!,,,,,s    &77	B00B47B4c                    g fd}t          j        |          }|                                 	 |                     t                    5  t          j        t          t
          j        t
          j        t
          j                   d d d            n# 1 swxY w Y   |	                                 d }D ]0}	 t          j        |           # t          $ r}|}Y d }~)d }~ww xY w||d S # |	                                 d }D ]0}	 t          j        |           # t          $ r}|}Y d }~)d }~ww xY w||w xY w)Nc                      t          d          D ]<}                     t          j                               t	          j        d           =d S )N   gMbP?)r  extendr   ri  timesleep)r  fdss    r   open_fdsz<ProcessTestCase.test_double_close_on_error.<locals>.open_fdsE  sM    2YY " "

2799%%%
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_errorB  s   	" 	" 	" 	" 	" H---					""#344 9 9 '1(2(29 9 9 99 9 9 9 9 9 9 9 9 9 9 9 9 9 9 FFHHHC  HRLLLL   CCCCCC	  FFHHHC  HRLLLL   CCCCCC					sq   C/ <B	C/ BC/ BC/ ;C
C&C!!C&/D>D D> 
D6	*D1	,D>1D6	6D>c                 :   t          j        t          j        ddg          |                     j        d           g fd}t          j        d|          }|                                 t          rd}nd}
                    t          j                   |                     j        |d	
           
                                 |                     j        |d
           |                                 |                     dd|fd|fg           dS )z?Issue21291: Popen.wait() needs to be threadsafe for returncode.r   zimport time; time.sleep(12)Nc                  B                        d                                 f                                                                                                    d j        f                                                                  d j        f           d S )Nthread-start-poll-resultthread-after-kill-and-waitthread-after-second-wait)r  r  rm  r)   r   )r$  resultss   r   kill_proc_timer_threadzDProcessTestCase.test_threadsafe_wait.<locals>.kill_proc_timer_threadf  s    NN6		DEEEIIKKKIIKKKNN8$/JKKKIIKKKNN6HIIIIIr   皙?r   ir`   z*unexpected result in wait from main threadmsgz&unexpected result in second main wait.)r9  Nr:  r;  )r   rD   rW   rX   rY   r   r/  Timerr1  r'   r)   r   r	  r   )r$   r=  r3  expected_errorcoder$  r<  s       @@r   test_threadsafe_waitz$ProcessTestCase.test_threadsafe_wait_  sq   !>!@ A A$///	J 	J 	J 	J 	J 	J OC!788				 	$!" "$
 			'/	000*<I 	 	K 	K 	K 			*<E 	 	G 	G 	G 	

 	<79KL57IJL !	" 	" 	" 	" 	"r   c                     d                     d          }t          j        t          j        d|g          }|                     |                    d          t          |                     d S )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  se     xx # $ $
 (#.$)EFF))/::E&MMJJJJJr   c                    t          j                    \  }}t          j                    \  }}t          j                    \  }}	 t          j        dg|||           n# t          $ r{ t          j        |           t          j        |           t          j        |           t          j        |           t          j        |           t          j        |           Y nw xY w|                     t
          j	        
                    |                     |                     t
          j	        
                    |                     |                     t
          j	        
                    |                     d S )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     	 	 	HXIfHXIfHXIf	 	//000//000//00000s   A BC#"C#c                 f   t          j        t          t           j        t           j        t           j                  }|                     |j        j                   |                     |j        j                   |                     |j        j                   |	                    ddz             d S )Nr@      x   )
r   rD   r   rE   r   rB   rI   rC   rA   r   rJ   s     r   test_communicate_epipez&ProcessTestCase.test_communicate_epipe  s    _#-?$.O$.O5 5 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                            t          j	        d          5  |D ]G\  }}}}t          j	        ||          }||_
        |                     t          |          |           H	 d d d            d S # 1 swxY w Y   d S )Nz
my-tool.py)lsT{   z#<Popen: returncode: 123 args: 'ls'>)daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTr   zP<Popen: returncode: 0 args: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...>rY  Fz&<Popen: returncode: None args: ['ls']>)rY  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__r0   rk  r   patchobjectr   rD   r   rY   repr)	r$   path_cmdpathlib_clscasesr  r   r   sxrK   s	            r   	test_reprzProcessTestCase.test_repr  sI   <--(1 EaVUD"JK+++UD_aua!\!\!\!\]
 ] ''
(8:JKK 	. 	.(- . .$UD"$S666#  a"----.	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   *ACC
Cc                     t          j        t          t           j                  }|                     |j        j                   |                                 |                    ddz             d S )Nr   rU  rV  )	r   rD   r   rE   r   rA   rI   r)   r   rJ   s     r   !test_communicate_epipe_only_stdinz1ProcessTestCase.test_communicate_epipe_only_stdin  s_    _#-?4 4 4&&&		dUl#####r   SIGUSR1zRequires signal.SIGUSR1rm  zRequires os.killgetppidzRequires os.getppidc                 `   d }t          j         t           j        |          }|                     t           j         t           j        |           t          j        ddg}dD ]N}|t
          j        i}t          j        |fi |5 }|                                 d d d            n# 1 swxY w Y   Od S )Nc                     d S r!   r3   )signumframes     r   handlerz7ProcessTestCase.test_communicate_eintr.<locals>.handler      Dr   r   z7import os, signal;os.kill(os.getppid(), signal.SIGUSR1)r   )	signalrk  r   rW   rX   r   rE   rD   r   )r$   rq  old_handlerr9   streamkwprocesss          r   test_communicate_eintrz&ProcessTestCase.test_communicate_eintr  s    	 	 	mFNG<<v~{CCC89 + 	& 	&F*/*B!$--"-- &##%%%& & & & & & & & & & & & & & &	& 	&s   B""B&	)B&	/proc/%d/fdzLinux specificc                 ~   dt          j                    z  }t          j        |          }|                     t                    5  t          t          t          j        t          j        t          j                   ddd           n# 1 swxY w Y   t          j        |          }| 	                    ||           dS )z;Test for the fork() failure fd leak reported in issue16327.ry  r@   N)
r   getpidlistdirrb   r5   r7   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     %ry{{2:l33122 	D 	D##:?%?:?D D D D	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D !j66)+>?????s   7BBBz+behavior currently not supported on Windowsc                     |                      t                    5 }t          j        g d           d d d            n# 1 swxY w Y   |                     |j        j        d           d S )N)/opt/nonexistent_binarywithsomer9   r  )rb   r  r   rV   rY   rk   filenamerl   s     r   %test_file_not_found_includes_filenamez5ProcessTestCase.test_file_not_found_includes_filename  s    011 	QQOOOOPPP	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q-/HIIIIIs   >AAc                     |                      t                    5 }t          j        ddgd           d d d            n# 1 swxY w Y   |                     |j        j        d           d S )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1 	OQfc]0MNNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O-/LMMMMMs   A  AAc                     |                      t          j        t                   t          j                   |                      t          j        t                   t          j                   d S r!   )rF   r   rD   bytestypesGenericAliasCompletedProcessr  r#   s    r   test_class_getitemsz#ProcessTestCase.test_class_getitems  sJ    j.u5u7IJJJj9#>@RSSSSSr   
HAVE_VFORKz!vfork() not enabled by configure.subprocess._fork_execc                    |                      t          j                   t          d          |_        |                     t                    5  t          j        t          j        ddg           d d d            n# 1 swxY w Y   |	                                 |                      |j
        j        d                    t          j                            t          dd          5  |                     t                    5  t          j        t          j        ddg           d d d            n# 1 swxY w Y   |                     |j        d         j        d                    d d d            d S # 1 swxY w Y   d S )Nzjust testing argsr   r   rt  
_USE_VFORKF)r  r   r  RuntimeErrorside_effectrb   r   rW   rX   assert_called_once	call_argsr9   r   ra  rb  r+   call_args_list)r$   mock_fork_execs     r   test__use_vforkzProcessTestCase.test__use_vfork  s    	
-...%12E%F%F"|,, 	; 	;NCND&9:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;))+++05b9:::Zz<?? 	I 	I""<00 ? ?f=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^:2>CBGHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	IsH   "A<<B B &E2"D/#E2/D3	3E26D3	7.E22E69E6N)r0   r1   r2   rL   rP   r\   rd   rh   rn   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rk  skipIfr'   r   r   r   r   r  r  r  r  r  r!  r&  r)  rW   base_prefixprefixr+  	sysconfigis_python_buildr-  r0  r7  r:  r?  rD  rG  rK  rM  rO  rS  rW  rY  r[  r^  r`  rb  
skipUnlessrj  hasattrrr  rx  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%  r6  rC  rG  rS  rW  rh  rj  rs  r   rx  r   isdirr{  r  r  r  r  r   ra  r  r3   r   r   r>   r>   s   s	           ! ! !' ' '     
5 5 55 5 54 4 4' ' '
' 
' 
'' ' '( ( (' ' '' ' '% % %5 5 54 4 46 6 6     + + +( ( (< < <.) ) )+ + +	M 	M 	MD D DA A A9 9 9 X_Y DEEG G FEG
 X_Y DEE( ( FE( X_Y DEE( ( FE(
  * * *= = =&A A AN N N
K K K
 X_Y DEEE E FEE X_Y DEE- - FE-$C C C X_S_
224 4D D4 4D X_S_
224 4X_.Y.00:< <4 4< <4 44* * ** * *
* 
* 
*9 9 9
6 
6 
6	/ 	/ 	/= = =
: 
: 
:	3 	3 	3* * **
> 
> 
>4 4 4> > >&) ) )) ) )( ( ( XA775.#A#A@B B   B B D XA775.#A#A@B B B B6	0 	0 	0 X_S\W,:< <X_-Y-.@AAQF23 3 X___T222@B B2 2B B3 3< <2,@ @ @6 6 6<* * *' ' '/ / // / /@ @ @&5 5 5"9 9 9,' ' '2 2 2.& & & %F %F %FNE E E2* * *
* 
* 
*G G G83 3 3,> > >*%" %" %"N" " "$	& 	& 	&& & &C C C8 8 8& & &. . .,J J JN N N
9 
9 
9'- '- '-R  :2" 2" 2"h	K 	K 	K1 1 1(	$ 	$ 	$. . .&$ $ $ X3324 4XV,,+- -XY//.0 0& &0 0- -4 4&& X}yry{{'BCC)+ +@ @+ +@  X_Y MNNJ J ONJ
 X_Y MNNN N ONN
T T T X_11,???8: :TZ'((
I 
I )(: :
I 
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d Zd Zd Zd Zd Z ej        ed          d             Zd Zd Zd Z ej        ed          d             Zd ZdS )RunFuncTestCasec                 D    t           j        d|g}t          j        |fi |S )z4Run Python code in a subprocess using subprocess.runr   rW   rX   r   r   )r$   r   r:   argvs       r   
run_pythonzRunFuncTestCase.run_python$  s(    d+~d--f---r   c                     |                      d          }|                     |j        d           |                     t          j                  5  |                                 d d d            d S # 1 swxY w Y   d S r   )r  rY   r   rb   r   rj   check_returncoder$   cps     r   test_returncodezRunFuncTestCase.test_returncode)  s    __788+++z<== 	" 	"!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   A22A69A6c                     |                      t          j                  5 }|                     dd           d d d            n# 1 swxY w Y   |                     |j        j        d           d S )NrS   Trt   rT   )rb   r   rj   r  rY   rk   r   rl   s     r   
test_checkzRunFuncTestCase.test_check0  s    z<== 	DOO6dOCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D/44444s   AAAc                 r    t          j        t          d          }|                     |j        d           d S )NTrt   r   )r   r   r   rY   r   r  s     r   test_check_zerozRunFuncTestCase.test_check_zero5  s4    ^O4888*****r   c                     |                      t          j                  5  |                     dd           d d d            d S # 1 swxY w Y   d S )Nr^   r  r`   )rb   r   rc   r  r#   s    r   test_timeoutzRunFuncTestCase.test_timeout:  s    
 z899 	@ 	@OO.O???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   AA	A	c                 ~    |                      dt          j                  }|                     d|j                   d S )Nrq   rs   rr   r  r   rE   rw   rB   r  s     r   test_capture_stdoutz#RunFuncTestCase.test_capture_stdoutB  s5    ___Z__EEgry)))))r   c                 ~    |                      dt          j                  }|                     d|j                   d S )Nr   r   rr   )r  r   rE   rw   rC   r  s     r   test_capture_stderrz#RunFuncTestCase.test_capture_stderrG  s>    __C$.O  5 5gry)))))r   c                 .   t          j                    }|                     |j                   |                    d           |                    d           |                     d|t          j                  }| 	                    d|j
                   d S )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_argL  s    #%%!!!




__I  2 2 	gry)))))r   c                     |                      ddt          j                  }|                     d|j                   d S )Nr   r   )r   rB   r   r  r  s     r   r   z+RunFuncTestCase.test_check_output_input_argW  sB    __Hjo  7 7 	gry)))))r   c                    t          j                    }|                     |j                   |                    d           |                    d           |                     t          d          5 }|                     d|d          }d d d            n# 1 swxY w Y   | 	                    d|j
        j        d                    | 	                    d	|j
        j        d                    d S )
Nr   r   r   r?  r   r   r   rA   r   )r   r   r   rI   r   r   rb   ry   r  rw   rk   r9   r   s       r   r   z6RunFuncTestCase.test_check_output_stdin_with_input_arg^  s   #%%!!!




zK  M M 	>PQ__%?+-W % > >F	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	gq{/2333gq{/233333s   4BB Bc                 8   |                      t          j                  5 }|                     ddt          j                  }d d d            n# 1 swxY w Y   |                     |j        j        d           |                     |j        j        d           d S )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_timeoutk  s    z899 	7Q( jo ! 7 7B	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	+W555+W55555s   #AAAc                     t           j                                        }d|d<   |                     d|          }|                     |j        d           d S )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_kwargsy  s]    """w__ M!'  ) ) 	+++++r   c                    t           rdnd}t          j        |          }||                     | d           t	          |          }t          j        |t
          j                  }|                     |j	        d           | 
                    t                    5  t          j        |t
          j        d           d d d            d S # 1 swxY w Y   d S )Nztree.comrY  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!    '0zzD|D!!<MMT:::;;;~~nT**<===+++y)) 	H 	HN4
(:$GGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	Hs   "CCCc                     t          j        t          j                  }|ddg}t	          j        |          }|                     |j        d           d S )Nr   s   import sys; sys.exit(57)9   )r   r   rW   rX   r   r   rY   r   r$   r   r9   r  s       r   &test_run_with_bytes_path_and_argumentsz6RunFuncTestCase.test_run_with_bytes_path_and_arguments  sM    {3>**d78nT"",,,,,r   c                     t          t          j                  }|ddg}t          j        |          }|                     |j        d           d S )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  sK    ''d67nT"",,,,,r   z#Maybe test trigger a leak on Ubuntuc                 P    t           j        ddg}t          j        |i            d S )Nr   r   r   r  )r$   r9   s     r   test_run_with_an_empty_envz*RunFuncTestCase.test_run_with_an_empty_env  s/     f- 	t$$$$$$r   c                     |                      dd          }|                     d|j                   |                     d|j                   d S )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  sX    __ : -1  2 2 	gry)))h	*****r   c                    t          j                    }|                     |j                   |                     t
          d          5 }|                     dd|          }d d d            n# 1 swxY w Y   |                     d|j        j	        d                    |                     d|j        j	        d                    d S )	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   r9   r   s       r   #test_stdout_with_capture_output_argz3RunFuncTestCase.test_stdout_with_capture_output_arg     #%%!!!z"  $ $ 	F'(__%?59" % F FF	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F
 	h 0 3444&(8(;<<<<<   
A//A36A3c                    t          j                    }|                     |j                   |                     t
          d          5 }|                     dd|          }d d d            n# 1 swxY w Y   |                     d|j        j	        d                    |                     d|j        j	        d                    d S )	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                 L   t          j                    }	 t          j        dddd           |                     d           nB# t          j        $ r0}t          j                    }t          j                    }Y d}~nd}~ww xY w|                     ||z
  dd| d	
           dS )zJOutput capturing after a timeout mustn't hang forever on open filehandles.zsleep 3Tr_   )r   ra   r  zTimeoutExpired not raised.Ng      ?z/TimeoutExpired was delayed! Bad traceback:
```
z```r?  )	r*  	monotonicr   r   r   rc   	traceback
format_exc
assertLess)r$   before_secsr4  
after_secsstackss        r   .test_run_with_shell_timeout_and_capture_outputz>RunFuncTestCase.test_run_with_shell_timeout_and_capture_output  s     n&&	4N9D#*.0 0 0 0 II23333	 ( 	, 	, 	,))J)++FFFFFF	,
 	
[0#'!' ' ' 	 	( 	( 	( 	( 	(s   A B&A==Bc                    t          j        d          }t          j        t          j        dd|gd          }|j                                        }|                     t          |          d|           | 
                    |d                             d                     | 
                    |d	                             d
                     d S )Nz            from subprocess import *
            run("echo hello", shell=True, text=True)
            check_output("echo hello", shell=True, text=True)
            z-Xwarn_default_encodingr   Tr  re  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 1 1	$$&&UQ...a++,LMMNNNa++,LMMNNNNNr   N)r0   r1   r2   r  r  r  r  r  r  r  r   r   r   r   r  r  r  r  rk  r  r'   r  r  r  r  r  r  r  r3   r   r   r  r  #  s       . . .
" " "5 5 5
+ + +
@ @ @* * *
* * *
	* 	* 	** * *4 4 46 6 6, , ,H H H- - -- - - X$IJJ% % KJ%+ + +
= 
= 
=
= 
= 
=  X_Y KLL( ( ML(O O O O Or   r  c                      dD ]3} t           r*	 t          j        |            n# t          $ r Y +w xY w| c S 4t          j        d          )N)staffnogroupgrpnobody	nfsnobodyz?No identified group name to use for this test on this platform.)r  getgrnamKeyErrorrk  rl  )
name_groups    r   _get_test_grp_namer    sx    H c c
 	Z((((   	  abbbs   "
//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                            d           d          d             Zd Z ej         eed          o 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p 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                            d-           d.          d/             Z(d0 Z) ej        e*j+        d1k    d2          d3             Z,d4 Z-d5 Z.d6 Z/d7 Z0d8 Z1d9 Z2d: Z3 ej        e*j+        4                    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*j+        4                    dZ          o+ ejR        d[          jS         ejR        d\          jS        k    d]          d^             ZT eUjV        d_d`          da             ZWdb ZXdc ZYdd ZZde Z[df Z\dg Z]dh Z^di Z_dj Z`dk ZaeUjb        dl             ZceUjb        dm             Zddn Zedo Zfdp Zgdq Zh ej        eidruo eeids          dt          du             Zjdv Zkdw Zldx Zm xZnS )yPOSIXProcessTestCasec                 V    t                                                       d| _        d S )Nz/_this/pa.th/does/not/exist)superr%   _nonexistent_dirr$   r`  s    r   r%   zPOSIXProcessTestCase.setUp  s"     =r   c                     	 t          j        | j                   |                     d| j        z             n# t          $ r}|}Y d }~nd }~ww xY w|S )Nz,chdir to nonexistent directory %s succeeded.)r   chdirr  r   r  )r$   r  desired_exceptions      r   _get_chdir_exceptionz)POSIXProcessTestCase._get_chdir_exception  s    		-HT*+++ IID+, - - - -  	" 	" 	" !"		" ! s   9 
AA

Ac                    |                                  }	 t          j        t          j        ddg| j                  }|                     d|z             dS # t          $ rk}|                     |j	        |j	                   |                     |j
        |j
                   |                     |j        |j                   Y d}~dS d}~ww xY w)z;Test error in the child raised in the parent for a bad cwd.r   r   r  Expected OSError: %sN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     5577
	B #.$!;%)%:< < <A II,/@@AAAAA  	E 	E 	E .4ag>>>.7DDD.7DDDDDDDDD	E   (A 
C"A CCc                    |                                  }	 t          j        t          j        ddg| j                  }|                     d|z             dS # t          $ rk}|                     |j	        |j	                   |                     |j
        |j
                   |                     |j        |j                   Y d}~dS d}~ww xY w)zBTest error in the child raised in the parent for a bad executable.r   r   r   r  Nr  r  s       r   test_exception_bad_executablez2POSIXProcessTestCase.test_exception_bad_executable  s     5577
	B #.$!;,0,AC C CA II,/@@AAAAA  	E 	E 	E .4ag>>>.7DDD.7DDDDDDDDD	Er  c                    |                                  }	 t          j        | j        ddg          }|                     d|z             dS # t
          $ rk}|                     |j        |j                   |                     |j        |j                   |                     |j	        |j	                   Y d}~dS d}~ww xY w)z?Test error in the child raised in the parent for a bad args[0].r   r   r  N)
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     5577		B $"7r!BCCA II,/@@AAAAA  	E 	E 	E .4ag>>>.7DDD.7DDDDDDDDD	Es   A 
CA B<<Cc                       e Zd Zd ZdS )&POSIXProcessTestCase.PopenNoDestructorc                     d S r!   r3   r#   s    r   __del__z.POSIXProcessTestCase.PopenNoDestructor.__del__;  rr  r   N)r0   r1   r2   r	  r3   r   r   PopenNoDestructorr  :  s#        	 	 	 	 	r   r
  r  c                    d }||_         t          j        dt                    5  |                     t
                    5  |                     dg           ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z>Test error passing done through errpipe_write in the good casec                      | d         }d                     t          j                                                  }t	          j        |d|z   dz              dS )N   z{:x}s   OSError:   :r   )r  r  EISDIRr  r   r   )r9   errpipe_writeerr_codes      r   proper_errorzHPOSIXProcessTestCase.test_exception_errpipe_normal.<locals>.proper_errorA  sK     HM}}U\2299;;HH]K($:T$ABBB1r   subprocess.os.waitpidr  non_existent_commandN)r  r   ra  ChildProcessErrorrb   IsADirectoryErrorr
  )r$   	fork_execr  s      r   test_exception_errpipe_normalz2POSIXProcessTestCase.test_exception_errpipe_normal>  sC   	 	 	 !-	Z/$57 7 7 	A 	A""#455 A A&&(>'?@@@A A A A A A A A A A A A A A A	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As5   A<A$A<$A(	(A<+A(	,A<<B B c                    dfd}||_         t          j        dt                    5  |                     t
          j                  5 }|                     dg           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |                     t                    t          |j                             dS )zZTest error passing done through errpipe_write where its not
        in the expected formats    ޭc                  B    | d         }t          j        |           dS )Nr  r   )r   r   )r9   r  
error_datas     r   	bad_errorzGPOSIXProcessTestCase.test_exception_errpipe_bad_data.<locals>.bad_errorT  s%     HM H]J///1r   r  r  r  N)r  r   ra  r  rb   r   SubprocessErrorr
  rw   rc  r  rk   )r$   r  r  r  r  s       @r   test_exception_errpipe_bad_dataz4POSIXProcessTestCase.test_exception_errpipe_bad_dataO  so    )
	 	 	 	 	 !*	Z/$57 7 7 	A 	A"":#=>> A!&&(>'?@@@A A A A A A A A A A A A A A A	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A
 	d:&&AK(8(899999s5    BA."B.A2	2B5A2	6BB	B	/proc/self/statuszneed /proc/self/statusc                    t          j        ddgd          }|                                D ]}|                    d          r|} n|                     d           t          j        ddgd          }|                                D ]}|                    d          r|} n|                     ||d	           d S )
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_signalse  s    )5+, %' ' ' (2244 	D 	DDy)) '+$ MMBCCC)6+, $ &  &  & )3355 	 	Dy)) (,% 	02G!3 	 	4 	4 	4 	4 	4r   c                    	 t          j        t          j        ddgd          }t	          j        d          }t          |          }|                     ||           d S # t          $ r!}|j	        t          j
        k    r Y d }~d S 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6666  	 	 	w%+%% &%%%%%	   #A   
B*BBsetpgidgetpgidz!no setpgid or getpgid on platformc                    	 t          j        t          j        ddgd          }t	          j        d          }t          |          }|                     ||           d S # t          $ r!}|j	        t          j
        k    r Y d }~d S d }~ww xY w)Nr   zimport os; print(os.getpgid(0))r   )process_group)r   rv   rW   rX   r   r5  r-  r$  r.  r  r/  )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8888  	 	 	w%+%% &%%%%%	r3  setreuidzno setreuid on platformc                    t          j                    }|dk    rdnd|g}t          j        dk    rdnd}t          =	 t	          j        |           |                    |           n# t          $ r d }Y nw xY w|D ]}dD ]}|                     ||          5  	 t          j
        t          j        dd	g||          }t          |t                    rt	          j        |          j        }n|}t          |          }|                     ||           nB# t"          $ r Y n6t$          $ r*}	|	j        t&          j        t&          j        fvr Y d }	~	nd }	~	ww xY wd d d            n# 1 swxY w Y   |                     t.                    5  t          j        t2          d
           d d d            n# 1 swxY w Y   |                     t4                    5  t          j        t2          t           j        t           j        d           d d d            n# 1 swxY w Y   t          R|R|                     t.                    5  t          j        t2          |           d d d            d S # 1 swxY w Y   d S d S d S )N    darwinr  unknownr  )user	close_fdsr   zimport os; print(os.getuid())rt  rA              )r   r   rA  )r   geteuidrW   r  pwdgetpwnamr  r  subTestr   rv   rX   
isinstancer  pw_uidr-  rY   r.  r  r  EACCESr/  rb   ry   rg   r   OverflowErrorr  r   )
r$   uid
test_usersname_uidrA  rB  r{   user_uid
child_userr  s
             r   	test_userzPOSIXProcessTestCase.test_user  s    jll"e||ee<
"|x7788Y? X&&&!!(++++         	? 	?D* ? ?	\\ty\AA ? ??!+!8!$!@!B%)*3	"5 "5 "5 &dC00 ,'*|D'9'9'@HH'+H%([[
((X>>>> +   " " " "75<*EEE! FEEEE"? ? ? ? ? ? ? ? ? ? ? ? ? ? ??* z** 	< 	<!/;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< }-- 	M 	M!/&(iRZeM M M M	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M ;8/"":.. F F%oHEEEEF F F F F F F F F F F F F F F F F F ;//s   )A& &A54A5E"$D=AE"
E	E" 	E	) E		E"E	E""E&)E&	F11F58F52HHHI++I/2I/z setreuid() available on platformc                     |                      t                    5  t          j        t          d           d d d            d S # 1 swxY w Y   d S )N  rC  rb   ry   r   rg   r   r#   s    r   test_user_errorz$POSIXProcessTestCase.test_user_error  s    z** 	? 	?!/>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?   AAAsetregidzno setregid() on platformc                 6   t          j                    }|dk    rdndg}t                      }t          |                    |           ||gz   D ]}dD ]}|                     ||          5  	 t          j        t          j	        ddg||          }t          |t                    rt          j        |          j        }n|}t          |          }|                     ||           n# t           $ r Y nw xY wd d d            n# 1 swxY w Y   |                     t$                    5  t          j        t(          d           d d d            n# 1 swxY w Y   |                     t*                    5  t          j        t(          t           j        t           j        d	
           d d d            n# 1 swxY w Y   t          P|                     t$                    5  t          j        t(          |           d d d            d S # 1 swxY w Y   d S d S )Nr=  r>  r  )grouprB  r   zimport os; print(os.getgid())rt  rZ  rD  )r   r   rZ  )r   getegidr  r  r  rH  r   rv   rW   rX   rI  r  r  gr_gidr-  rY   r.  rb   ry   rg   r   rL  r  r   )	r$   gid
group_listr  rZ  rB  r{   	group_gidchild_groups	            r   
test_groupzPOSIXProcessTestCase.test_group  so   jll"e||ee7
'))
?j)))3%' 	A 	AE* A A	\\\CC A AA!+!8!$!@!B&+*3	"5 "5 "5 &eS11 .(+U(;(;(BII(-I&)&kk((i@@@@ +   A A A A A A A A A A A A A A AA( z** 	= 	=!/<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= }-- 	N 	N!/&(iRZuN N N N	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N ;"":.. I I%oZHHHHI I I I I I I I I I I I I I I I I I ;sm   ,D.$C)AD)
C6	3D5C6	6DD	D	,EEE92F77F;>F;#HHHz setregid() available on platformc                     |                      t                    5  t          j        t          d           d d d            d S # 1 swxY w Y   d S )NrT  r[  rU  r#   s    r   test_group_errorz%POSIXProcessTestCase.test_group_error  s    z** 	@ 	@!/????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@rW  	setgroupszno setgroups() on platformc                    t          j                    }|dk    rdndg}t                      }d}t          |                    |           	 t          j        t          j        ddg|          }t          j	                    }t          j        |          }t          d |D             }n|}|r1|                     t          |          t          |                     n`|                     t          |          t          |                     n/# t          $ r"}	|	j        t          j        k    r d}Y d }	~	nd }	~	ww xY w|                     t$                    5  t          j        t(          d	g           d d d            n# 1 swxY w Y   |                     t$                    5  t          j        t(          t           j        t           j        d
g           d d d            n# 1 swxY w Y   t          Q|                     t$                    5  t          j        t(          |g           d d d            d S # 1 swxY w Y   d S d S )Nr=  r>  Fr   z;import os, sys, json; json.dump(os.getgroups(), sys.stdout)extra_groupsc                 n    g | ]2}t          |t                    rt          j        |          j        n|3S r3   )rI  r  r  r  r]  )r  gs     r   r  z:POSIXProcessTestCase.test_extra_groups.<locals>.<listcomp>   sI      5  5  5$% ;EQ:L:L SQ 6 6RS  5  5  5r   Trt  rD  )r   r   rh  )r   r\  r  r  r  r   rv   rW   rX   	getgroupsjsonloadsrY   setr  r  r/  rb   ry   rg   r   r  r   )
r$   r^  r_  r  
perm_errorr{   parent_groupschild_groupsdesired_gidsexs
             r   test_extra_groupsz&POSIXProcessTestCase.test_extra_groups  sG   jll"e||ee7
'))

?j)))	G,^TRT!+- - -F LNNM:f--L 5  5)3 5  5  5  * G  \!2!2C4F4FGGGG  \!2!2C4E4EFFFF%  	 	 	x5;&&JJJJJJ	* z** 	F 	F!/EEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F z** 	8 	8!/&(iRZ05w8 8 8 8	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8
 ;"":.. A A%o4><A A A AA A A A A A A A A A A A A A A A A A ;sN   #D 
D<D77D<FF	F'3G&&G*-G*H<<I I z!setgroups() available on platformc                     |                      t                    5  t          j        t          g            d d d            d S # 1 swxY w Y   d S )Nrg  rU  r#   s    r   test_extra_groups_errorz,POSIXProcessTestCase.test_extra_groups_error8  s    z** 	D 	D!/CCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	DrW  umaskzPOSIX umask() is not available.c           	         d }	 t          j                    }t          j                            |d          }t          j        t          j        dd|dgd           t          j	        |          j
        dz  }d}|                     ||t          |           d	t          |           
           |t          j        |           d S d S # |t          j        |           w w xY w)Nbeansr   zopen(z, 'w').close()+   )rw  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_umask=  s    	&%''F7<<00D !^T+I4+I+I+IJ! ! ! !
 gdmm+e3G!M]G$'$6$6!J!JCLL!J!J  L L L !f%%%%% "!v!f%%%% "s   B/C C&c                    t          j                    5  t          j        t          j        ddg          }|                                 d d d            n# 1 swxY w Y   |                     |j         t          j
                   d S )Nr   zimport os; os.abort())r   r  r   rD   rW   rX   r)   rY   r   rs  SIGABRTrJ   s     r   test_run_abortz#POSIXProcessTestCase.test_run_abortS  s    (** 	 	 #.$"9"; < <AFFHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	!,77777s   6AAAc                 T   t          j        t          t          j                   d          }t          |          }|                     d|                                           |                     d|           |                     t          t          j                  |           d S )Nfake cmdrs  SIG)r   rj   r-  rs  r  r  rw   lowerr$   r   error_strings      r   "test_CalledProcessError_str_signalz7POSIXProcessTestCase.test_CalledProcessError_str_signal[  s    +S-@-@,@*MM3xx 	h 2 2 4 4555 	e\***c&.))<88888r   c                 z    t          j        dd          }t          |          }|                     d|           d S )NiKir  zunknown signal 9876543.r   rj   r  rw   r  s      r   *test_CalledProcessError_str_unknown_signalz?POSIXProcessTestCase.test_CalledProcessError_str_unknown_signalf  s:    +HjAA3xx/>>>>>r   c                 z    t          j        dd          }t          |          }|                     d|           d S )Nre  r  znon-zero exit status 2.r  r  s      r   $test_CalledProcessError_str_non_zeroz9POSIXProcessTestCase.test_CalledProcessError_str_non_zerok  s:    +Az::3xx/>>>>>r   c                     t          j        t          j        ddgt           j        d           }|5  |                     |j                                        d           d d d            d S # 1 swxY w Y   d S )Nr   r{  c                  ,    t          j        dd          S )Nr   apple)r   putenvr3   r   r   <lambda>z3POSIXProcessTestCase.test_preexec.<locals>.<lambda>w  s    	'70K0K r   )rB   
preexec_fn   appler>  rJ   s     r   test_preexecz!POSIXProcessTestCase.test_preexecp  s     cndEF %/O(K(K	M M M
  	8 	8QX]]__h777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   .A--A14A1c                 `   d }	 t          j        t          j        ddg|          }|                     d           d S # t           j        $ r+}|                     t           j        d           Y d }~d S d }~wt          $ r,}| 	                    d|j
        d                    Y d }~d S d }~ww xY w)	Nc                       t          d          )Nz'What if two swallows carried a coconut?ry   r3   r   r   raise_itz=POSIXProcessTestCase.test_preexec_exception.<locals>.raise_it|  s    FG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   r9   )r$   r  rK   r  s       r   test_preexec_exceptionz+POSIXProcessTestCase.test_preexec_exception{  s   	H 	H 	H	0 #.$!;,46 6 6A II / 0 0 0 0 0 ) 	A 	A 	AOO)?A A A A A A A A A  	0 	0 	0MM)QVAY/////////	0s!   #? B- A44B-!B((B-c                       e Zd ZdZd Zd ZdS )+POSIXProcessTestCase._TestExecuteChildPopenz3Used to test behavior at the end of _execute_child.c                 H    || _         t          j        j        | g|R i | d S r!   )	_testcaser   rD   r   )r$   testcaser9   r:   s       r   r   z4POSIXProcessTestCase._TestExecuteChildPopen.__init__  s3    %DN%d<T<<<V<<<<<r   c           
      6   	 t          j        j        | g|R i | d t          d          D             }	 |D ]g}| j                            || j                                        | j                                        | j	                                        fd           h	 |D ]}t          j        |           d S # |D ]}t          j        |           w xY w# d t          d          D             }	 |D ]g}| j                            || j                                        | j                                        | j	                                        fd           h	 |D ]}t          j        |           w # |D ]}t          j        |           w xY wxY w)Nc                 L    g | ]!}t          j        d t           j                  "S )	/dev/zero)r   r  O_RDONLY)r  r  s     r   r  zNPOSIXProcessTestCase._TestExecuteChildPopen._execute_child.<locals>.<listcomp>  s6     2 2 2#$  "w{BK@@ 2 2 2r      z!At least one fd was closed early.r?  )r   rD   r;   r  r  r   rA   r3  rB   rC   r   rI   )r$   r9   r:   devzero_fdsr5  s        r   r;   z:POSIXProcessTestCase._TestExecuteChildPopen._execute_child  s   % /FtFFFvFFF
2 2(-a2 2 2%) I I22 "TZ%6%6%8%8$+:L:L:N:N%)[%7%7%9%9%;$G 3 I I I II * % %% %k % %%2 2(-a2 2 2%) I I22 "TZ%6%6%8%8$+:L:L:N:N%)[%7%7%9%9%;$G 3 I I I II * % %%k % %%s0   C A*B< <CF5A*E: F:FFN)r0   r1   r2   r<   r   r;   r3   r   r   _TestExecuteChildPopenr    s8        AA	= 	= 	=	% 	% 	% 	% 	%r   r  r  z/dev/zero required.c           	          d }|                      t          j                  5  |                     | t          t          j        t          j        t          j        |           ddd           dS # 1 swxY w Y   dS )z6Issue16140: Don't double close pipes on preexec error.c                  *    t          j        d          )Nz-force the _execute_child() errpipe_data path.)r   r  r3   r   r   r  zWPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes.<locals>.raise_it  s    ,CE E Er   )rA   rB   rC   r  N)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  s    	E 	E 	E z9:: 	E 	E''o(ojo)8 ( E E E	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   ?A//A36A3c                    t          j                    }	 t          j                     |                     t          j                               t	          j        t          j        ddgd            |                     t          j                    d           t          j                     | 	                    t          j                               t	          j        t          j        ddgd            | 	                    t          j                    d           |st          j                     d S d S # |st          j                     w w xY w)Nr   r   c                      d S r!   r3   r3   r   r   r  zEPOSIXProcessTestCase.test_preexec_gc_module_failure.<locals>.<lambda>      t r   r  z#Popen enabled gc when it shouldn't.c                      d S r!   r3   r3   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/    ,..	JLLLR\^^,,,OS^T26'3|5 5 5 5R\^^BD D D IKKKOOBLNN+++OS^T26'3|5 5 5 5OOBLNN,EFFF 
 7 
s   DD6 6Er?  z!setrlimit() seems to fail on OS Xc                 v   	 ddl m}m}m} n,# t          $ r}|                     |           Y d }~nd }~ww xY w ||          }|\  }} ||d|f           |                     |||           	 t          j        t          j
        ddgd            |                     d           d S # t          $ r Y d S w xY w)Nr   )	getrlimit	setrlimitRLIMIT_NPROCr   r   c                      d S r!   r3   r3   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CCCCCCCCC 	 	 	MM#	<((	D	,D	***	<888	LOS^T26'3|5 5 5 5 MMJKKKKK	  	 	 	DD	s"   
 
616/$B* *
B87B8c                    t          j                    \  }}t          |dd          5 }|                    dt          j        z             |                    dt          j        z             d d d            n# 1 swxY w Y   t          j	        |d           t          j        |          }|                                 t          j        |           |                     |j        d           d S Nwr  )r   z#!%s
z(exec '%s' -c 'import sys; sys.exit(47)'
i  rT   )r   rJ  r  r   r   
unix_shellrW   rX   r   chmodr   rD   r)   rK  rY   r   )r$   r5  fnamefobjrK   s        r   test_args_stringz%POSIXProcessTestCase.test_args_string  s   $&&	E"c"3444 	'JJx'"44555JJB~& ' ' '	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	U##	
	%r*****   AA::A>A>c                     |                      t          t          j        t          j        ddgd           |                      t          t          j        t          j        ddgd           d S )Nr   rS   rT   startupinfocreationflagsrb   ry   r   rV   rW   rX   r#   s    r   r   z&POSIXProcessTestCase.test_invalid_args  sx    *jo>457&( 	 	* 	* 	* 	*jo>457(* 	 	, 	, 	, 	, 	,r   c                 H   t           j                                        }d|d<   t          j        dgdt          j        |          }|5  |                     |j                                        	                    d          d           d d d            d S # 1 swxY w Y   d S 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$.O!') ) )  	L 	LQX]]__22<@@(KKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	Ls   	ABBBc                 F   t           j                                        }d|d<   t          j        ddt          j        |          }|5  |                     |j                                        	                    d          d           d d d            d S # 1 swxY w Y   d S r  r  r  s      r   test_shell_stringz&POSIXProcessTestCase.test_shell_string 	  s    ""!w]!$.O!') ) )  	L 	LQX]]__22<@@(KKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	Ls   ABBBc                    t          j                    \  }}t          |dd          5 }|                    dt          j        z             |                    dt          j        z             d d d            n# 1 swxY w Y   t          j	        |d           t          j        |          }t          j        |           |                     |d           d S r  )r   rJ  r  r   r   r  rW   rX   r   r  r   rV   rK  rY   )r$   r5  r  r  r[   s        r   test_call_stringz%POSIXProcessTestCase.test_call_string
	  s   $&&	E"c"3444 	'JJx'"44555JJB~& ' ' '	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	_U##
	%R     r  c           	         g }dD ][}dD ]V}t           j                            ||          }t           j                            |          r|                    |           W\|s|                     d           d}t           j                            |          r4t           j                            |          s|                    |           |D ]}t          j        d|dt          j	                  }|5  | 
                    |j                                                                        t          |d                     d d d            n# 1 swxY w Y   d S )	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   rF  )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' & &W\\&$//7>>"%% &MM"%%%&  	@MM>???7>>" 	bgnnR&8&8 	MM" 	N 	NB r(29 9 9A N N  !6!6!8!8%G:L:LMMMN N N N N N N N N N N N N N N	N 	Ns   5AE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        |           n$# t          j         t           j        |           w xY w|j        	                    d            t          ||          |  |S )Nr   zif 1:
                                 import sys, time
                                 sys.stdout.write('x\n')
                                 sys.stdout.flush()
                                 time.sleep(30)
                                 TrB  rA   rB   rC   r   )rs  SIGINTdefault_int_handlerr   rD   rW   rX   rE   rB   r  getattr)r$   methodr9   rt  rK   s        r   _kill_processz"POSIXProcessTestCase._kill_process+	  s    
 mFM63MNN	6 #.$ 9% "& ,0'1(2(2	9 	9 	9A M&-5555FM&-5555 	
a6D!!s   AB !B0)netbsdopenbsdz"Due to known OS bug (issue #16762)c                 8   t          j        t          j        ddgdt           j        t           j        t           j                  }|j                            d           t          j        d            t          ||          |  |
                                 d S )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  r9   rK   s       r   _kill_dead_processz'POSIXProcessTestCase._kill_dead_processD	  s    
 cnd 5! "
 (,#-?$.O$.O5 5 5 	
a
16D!!	r   c                     |                      dt          j                  }|                                \  }}|                     d|           |                     |                                d           d S )Nsend_signals   KeyboardInterruptr   )r  rs  r  r   rw   r$  r)   r$   rK   r  rC   s       r   test_send_signalz%POSIXProcessTestCase.test_send_signal[	  sc    }fm<<MMOO	6*F333AFFHHa(((((r   c                     |                      d          }|                                \  }}|                     |d           |                     |                                t          j                    d S )Nrm  r   )r  r   rY   r)   rs  SIGKILLr  s       r   	test_killzPOSIXProcessTestCase.test_killa	  sd    v&&MMOO	6%%%FN?33333r   c                     |                      d          }|                                \  }}|                     |d           |                     |                                t          j                    d S )N	terminater   )r  r   rY   r)   rs  SIGTERMr  s       r   test_terminatez#POSIXProcessTestCase.test_terminateg	  sd    {++MMOO	6%%%FN?33333r   c                 F    |                      dt          j                   d S Nr  )r  rs  r  r#   s    r   test_send_signal_deadz*POSIXProcessTestCase.test_send_signal_deadm	  s     v}=====r   c                 0    |                      d           d S Nrm  r  r#   s    r   test_kill_deadz#POSIXProcessTestCase.test_kill_deadq	  s    '''''r   c                 0    |                      d           d S Nr  r  r#   s    r   test_terminate_deadz(POSIXProcessTestCase.test_terminate_deadu	  s    ,,,,,r   c                     g }|D ]B}t          j        |          }t          j        |          }|                    |||f           C|S r!   )r   get_inheritabledupr  )r$   save_fdsr,  r5  inheritablesaveds         r   	_save_fdszPOSIXProcessTestCase._save_fdsy	  sT     	1 	1B,R00KF2JJEJJE;/0000
r   c                 n    |D ]1\  }}}t          j        |||           t          j        |           2d S )N)r  )r   dup2rI   )r$   r,  r5  r	  r  s        r   _restore_fdsz!POSIXProcessTestCase._restore_fds	  sH    &) 	 	"B{GE2;7777HUOOOO	 	r   c                    d}|                      |          }|D ]\  }}}|dk    r|} n	 |D ]}t          j        |           t          j        t
          j        ddg|t          j        t          j                                                  \  }}| 	                    |d           | 	                    |d           | 
                    |           d S # | 
                    |           w xY w)Nr   r   rU  r@   r  r=  )r
  r   rI   r   rD   rW   rX   rE   r   rY   r  )	r$   r,  rA   	saved_fdsr5  r	  r  r   r   s	            r   check_close_std_fdsz(POSIXProcessTestCase.check_close_std_fds	  s    NN3''	&/ 	 	"B{Qww 	)  !';)<
 #(o(o/ / / 0;{}} C S(+++S),,,i(((((Di((((s   BC C-c                 2    |                      dg           d S rf   r  r#   s    r   test_close_fd_0z$POSIXProcessTestCase.test_close_fd_0	        !%%%%%r   c                 2    |                      dg           d S Nr   r  r#   s    r   test_close_fd_1z$POSIXProcessTestCase.test_close_fd_1	  r  r   c                 2    |                      dg           d S )Nre  r  r#   s    r   test_close_fd_2z$POSIXProcessTestCase.test_close_fd_2	  r  r   c                 4    |                      ddg           d S )Nr   r   r  r#   s    r   test_close_fds_0_1z'POSIXProcessTestCase.test_close_fds_0_1	         !Q(((((r   c                 4    |                      ddg           d S )Nr   re  r  r#   s    r   test_close_fds_0_2z'POSIXProcessTestCase.test_close_fds_0_2	  r  r   c                 4    |                      ddg           d S )Nr   re  r  r#   s    r   test_close_fds_1_2z'POSIXProcessTestCase.test_close_fds_1_2	  r  r   c                 4    |                      g d           d S )N)r   r   re  r  r#   s    r   test_close_fds_0_1_2z)POSIXProcessTestCase.test_close_fds_0_1_2	  s"     	  +++++r   c                 `   t          j        d          }t          j        d          }	 t          j        d           t          j        d           t          j        t
          j        ddg                                           t          j        |d           t          j        |d           t          j        |           t          j        |           dS # t          j        |d           t          j        |d           t          j        |           t          j        |           w xY w)z=Issue #15798: Popen should work when stdio fds are available.r   r   r   z*print('AssertionError:0:CLOEXEC failure.')N)	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   F1II	VAYY
	!HQKKKHQKKK
 ND@B C CCG4666 GIq!!!GJ"""HYHZ      GIq!!!GJ"""HYHZ    s   AC AD-c                    d t          d          D             }	 d |D             }|D ]\  }}t          j        |           t          j        |d         d           t          j        |d         dd           |                     t          d                    }	 t          |          D ]\  }}t          j        ||           t          j	        t          j        ddg|d         |d	         |d         
          }|                                 |                     |           n# |                     |           w xY w|D ]}t          j        |dd           t          j        |d	         d          }t          j        |d         d                                          }	|                     |d           |                     |	d           |D ]}t          j        |           d S # |D ]}t          j        |           w xY w)Nc                 4    g | ]}t          j                    S r3   r   rJ  r  r  s     r   r  z?POSIXProcessTestCase.test_remapping_std_fds.<locals>.<listcomp>	  !    666!##666r   r   c                     g | ]\  }}|S r3   r3   r  r5  r  s      r   r  z?POSIXProcessTestCase.test_remapping_std_fds.<locals>.<listcomp>	  s    222yr5222r   r      STDINr   r   Zimport sys; got = sys.stdin.read();sys.stdout.write("got %s"%got); sys.stderr.write("err")re  r@   rB  	   got STDIN   err)r  r   unlinkr   r4  r
  	enumerater  r   rD   rW   rX   r)   r  r  r  rY   rI   )
r$   tempstemp_fdsr5  r  r  temp_fdrK   r   r   s
             r   test_remapping_std_fdsz+POSIXProcessTestCase.test_remapping_std_fds	  s3   66U1XX666(	22E222H # ! !	E	%     HXa[(+++HXa[!Q''' uQxx00I-#,X#6#6 ) )KBGGR(((( $cndN&O #1+#A;#A;( ( ( !!),,,,!!),,,, # #Q""""'(1+t,,C'(1+t,,2244CS,///S&)))    h  s&   BG, A5D( G, (D??BG, ,Hc                    d t          d          D             }d |D             }	 |D ]\  }}t          j        |           |                     t          d                    }	 t	          |          D ]\  }}	t          j        |	|           t          j        |d           t          j        |dd           t          j	        t          j        ddg|||          }
|
                                 |D ]}t          j        |dd           t          j        |d	          }t          j        |d	                                          }|                     |           n# |                     |           w xY w|                     |d
           |                     |d           |D ]}t          j        |           d S # |D ]}t          j        |           w xY w)Nc                 4    g | ]}t          j                    S r3   r)  r*  s     r   r  z7POSIXProcessTestCase.check_swap_fds.<locals>.<listcomp>	  r+  r   r   c                     g | ]\  }}|S r3   r3   r-  s      r   r  z7POSIXProcessTestCase.check_swap_fds.<locals>.<listcomp>	  s    ...92uB...r   r.  r   r   r/  r@   rB  r0  r1  )r  r   r2  r
  r3  r  r   r4  r   rD   rW   rX   r)   r  r  r  rY   rI   )r$   stdin_no	stdout_no	stderr_nor4  r5  r5  r  r  r6  rK   r   r   s                r   check_swap_fdsz#POSIXProcessTestCase.check_swap_fds	  s   66U1XX666.....'	" ! !	E	%     uQxx00I-#,X#6#6 ) )KBGGR(((( 8,,,1a((( $cndN&O #$$& & & " ' 'BHRA&&&&gi..gi..4466!!),,,,!!),,,,S,///S&)))    h  s$   >G &C%E! G !E88/G Gc                    |                      ddd           |                      ddd           |                      ddd           |                      ddd           |                      ddd           |                      ddd           d S )Nr   r   re  )r>  r#   s    r   test_swap_fdsz"POSIXProcessTestCase.test_swap_fds(
  s    Aq!$$$Aq!$$$Aq!$$$Aq!$$$Aq!$$$Aq!$$$$$r   c                    |                      t          d                    }	 |D ]T}t          j                    5 }t	          j        |                                |           d d d            n# 1 swxY w Y   Ut          t          d                    t          |          z
                                  }t	          j	        |           g d}i }t          ||          D ]\  }}	||||	         <   t          j        d          }
t          t          d                    t          |          z
                                  }t          j        t          j        d|
t#          |          gfi |}|                     |d           t          ||          D ]\  }}	t	          j        |dt          j                   t	          j        |d          }t-          t/          t0          |                    d                              }t          j        d| d	| d
| d| d|	 d          }|                     |	g||           	 |                     |           d S # |                     |           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   rB  rF  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  r3  rn  r  rI   zipr  r  r   rV   rW   rX   r  rY   r4  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_fdsr@  s                   r   #_check_swap_std_fds_with_one_closedz8POSIXProcessTestCase._check_swap_std_fds_with_one_closed0
  s   NN588,,	&	)# 1 1+-- 1GAHHJJ0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 uQxx==3x==8==??KH[!!!555IF"%h"7"7 3 3+2y'((? $  D eAhh--#f++5::<<J#.$c*oo!N + +#)+ +BR###"%h"7"7 	9 	9!R[111WWd33
C):):7)C)C D DEEo '"*' '06' ''.' ' '/' ' HM' ' '  
   %(C8888	9 i(((((Di((((s/   I (A/#I /A3	3I 6A3	7GI I4c                     t          j        t          d          d          D ]=}t          j        t          d          d          D ]}|                     ||           >d S )Nr   re  )	itertoolscombinationsr  permutationsrO  )r$   rE  rF  s      r   !test_swap_std_fds_with_one_closedz6POSIXProcessTestCase.test_swap_std_fds_with_one_closed\
  su    !.uQxx;; 	K 	KH#0q1== K K886JJJJK	K 	Kr   c                    d }	 t          j        t          |           |                     d           d S # t          $ rM}|                     t           j                   |                     t          |          d           Y d }~d S d }~wt           j	        $ rM}| 
                    t           j                   |                     t          |          d           Y d }~d S d }~ww xY w)Nc                       t          d          )N   surrogate:r  r3   r   r   preparezCPOSIXProcessTestCase.test_surrogates_error_message.<locals>.prepareb
  s    /000r   r  z1Expected ValueError or subprocess.SubprocessErrorrW  z!Exception occurred in preexec_fn.)r   rV   r   r   ry   r   r  rY   r  r  assertIsNotNone)r$   rX  r   s      r   test_surrogates_error_messagez2POSIXProcessTestCase.test_surrogates_error_messagea
  s   	1 	1 	1	KO"$ $ $ $ IIIJJJJJ  	; 	; 	;j3444SXX'9:::::::::) 	L 	L 	L  !6777SXX'JKKKKKKKKK	Ls#   7 
C(AB		C(AC##C(c                    dD ]\  }}|                     dd          }dt          |          z  }t          j                                        }|||<   d|d<   |}t          j        t          j        d|g|          }|	                    d	          }| 
                    |                    d          t          |                     |                     dd          }d
t          |          z  }t          j                                        }|||<   t          j        t          j        d|g|          }|	                    d	          }| 
                    |                    d          t          |                     d S )N))testu   abc)u   test42rF  r  z&import os; print(ascii(os.getenv(%s)))CLC_ALLr   r   s   
z'import os; print(ascii(os.getenvb(%s))))r  rc  r   r   r   r   rv   rW   rX   r   rY   r	  rF  )r$   keyvalueencoded_valuescriptr   decoded_valuerB   s           r   test_undecodable_envz)POSIXProcessTestCase.test_undecodable_envt
  s|   G 	K 	KJC!LL2CDDM >S		IF*//##CCH  CM!M,v.  F ]]7++FV]]733U=5I5IJJJ **W&788C>cJF*//##C$CH,v.  F ]]7++FV]]733U=5I5IJJJJ5	K 	Kr   c                 |   t          j        t          d                   }t          t          dd                    }t           j                            t          d                   \  }}t          j        |          }t          j        |g|z             }|                     |d           d|d	                    |          
                    d          fz  }t          j        |d          }|                     |d           t           j                                        }||d<   t          j        |g|z   |	          }|                     |d           t           j                                        }t          j        |          |d
<   t          j        |g|z   |	          }|                     |d           d S )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_programr9   r   programexitcoder  r   envbs	            r   test_bytes_programz'POSIXProcessTestCase.test_bytes_program
  s   k/!"455OABB'((oa&899g+g&& ?K=#5661%%% K$)>)>w)G)GHH?3d3331%%% joo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        d           t          j        t          j        |gt          j        d          }|                                \  }}t          t          t          |                    d	                              }t          |j                                        |j                                        |j                                        g          }|                     ||z  d
|d||z             d S )Nzinput_reader.pysubprocessdatasubdirfd_status.pyF)rA   rB   rC   rB  r   rB   rB     ,zExpected no fds from z to be open in child, found )r   findfiler   rD   rW   rX   rE   r   r   rn  rD  r-  r  rA   r3  rB   rC   r+   )	r$   sleeper	fd_statusp1p2r{   error
result_fdsunwanted_fdss	            r   test_pipe_cloexecz&POSIXProcessTestCase.test_pipe_cloexec
  sk   "#4=MNNN$^<LMMM	s~w7$.OJO%/_G G G 	,,,s~y9%/_G G G ((S&,,t"4"45566
BHOO--ry/?/?/A/AI,,..0 1 1 	l22  ,||Z,-F-FH	I 	I 	I 	I 	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	                   
fd
}fd}|                     |           |                     |           
j
                            |           
j
                                         t          j        j        gg g d          \  }}}	|                     |d           |                     j                                        |           
j                                         j                                         d S )Nzqcat.pyrp  rq  zqgrep.pys   zxcvbn      
F)rA   rB   rB  c                  T    	                                    d S # t          $ r Y d S w xY wr!   r  ProcessLookupError)ry  s   r   kill_p1zBPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p1
  ;    %       
''c                  T    	                                    d S # t          $ r Y d S w xY wr!   r  )rz  s   r   kill_p2zBPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p2
  r  r  r  zThe child hung)r   rv  r   rD   rW   rX   rE   rB   r   r)   rA   r   rI   selectr  rY   r  )r$   qcatqgrepsubdatar  r  r  	readfilesignored1ignored2ry  rz  s             @@r   test_pipe_cloexec_real_toolsz1POSIXProcessTestCase.test_pipe_cloexec_real_tools
  s   	2BCCC 4DEEE{U"s~t4$.OJO(-/ / / s~ug>$&Ijo(-/ / / 	      	 	 	 	 	
	 	 	 	 	
 	      
t
(.ryk2r2(N(N%	8X	#3444))4000
	
	r   c                 F  
 t          j        dd          }t          j                    }|                     t          j        |d                    |                     t          j        |d                    t          |          
t          d          D ]`}t          j        t          j	        t          j
                  }|                     t          j        |           
                    |           a
D ]}t          j        |d           t          j        t          j        |gt          j        d	          }|                                \  }}t          t'          t(          |                    d
                              }|                     |
z  
d           t          j        t          j        |gt          j        d	          }|                                \  }}t          t'          t(          |                    d
                              }|                     |
z  d           |                     d|d           t          
fdt          d          D                       }	t          j        t          j        |gt          j        d|	          }|                                \  }}t          t'          t(          |                    d
                              }|                     ||	z
  
z  d           |                     d|d           d S )Nrs  rp  rq  r   r   	   TFrt  ru  zSome fds were closedzSome fds were left openzSubprocess failedc              3   @   K   | ]}                                 V  d S r!   )r  )r  r  r-  s     r   	<genexpr>z6POSIXProcessTestCase.test_close_fds.<locals>.<genexpr>  s+      ;;Q(,,..;;;;;;r   r  rB   rB  pass_fdsz'Some fds not in pass_fds were left open)r   rv  r   ri  r   rI   rn  r  r  devnullr  addset_inheritabler   rD   rW   rX   rE   r   rD  r-  r  rY   r+   rw   )r$   rx  r,  r  r5  rK   r{   ignoredremaining_fdsfds_to_keepr-  s             @r   test_close_fdsz#POSIXProcessTestCase.test_close_fds
  s   $^<LMMM	gii#a&)))#a&)))s88q 	 	AR[11BOOBHb)))LL 	) 	)Br4((((cni8$.OuF F F--//CV\\$%7%7889918/	1 	1 	1 cni8$.OtE E E--//CV\\$%7%7889912	4 	4 	4a(;<<< ;;;;%((;;;;;cni8$.Ot&13 3 3 --//CV\\$%7%78899-+5AB	D 	D 	Da(;<<<<<r   freebsdz/devz/dev/fdz.Requires fdescfs mounted on /dev/fd on FreeBSDc                    t          j        dd          }t          j        t          j        dt          j        d|z            gt          j                  }|	                                \  }}|
                                }|                     t          |          dd|z  	           t          t          t          |d
                                                             d                              }t          t          t          |d                                                             d                              }|                     ||z  d	           dS )z;Confirm that issue21618 is fixed (may fail under valgrind).rs  rp  rq  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   re  z(expected exactly two lines of output:
%rr?  r   ru  r   zSome fds were left open.N)r   rv  r   rD   rW   rX   r  r  rE   r   r  rY   r  rn  rD  r-  r  r  r+   )r$   rx  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[   
 $^<LMMM	 cndHO/	^ _/	05 05 0` #-/a03 03 03d !"((**\**AH6Q 	 	S 	S 	SS,q/"7"7"9"9"?"?"E"EFFGG
C\!_%:%:%<%<%B%B4%H%HIIJJ37 	 	9 	9 	9 	9 	9r   r  r~   c           	      J   t          j        dd          }t                      }t          d          D ]}t	          j                    }|                     t          j        |d                    |                     t          j        |d                    t	          j        |d         d           t	          j        |d         d           |	                    |           |D ]>}t          j        t          j        |gt          j        d|f          }|                                \  }}t          t!          t"          |                    d	                              }	||hz
  }
|                     ||	d
           |                     |	|
z  d           |                     t,                    5 }|                     t          j        t0          d|f                     d d d            n# 1 swxY w Y   |                     dt3          |j                             @d S )Nrs  rp  rq  r~   r   r   Tr  ru  zfd to be passed not passedzfd to be closed passedF)rB  r  zoverriding close_fds)r   rv  rn  r  r   ri  r   rI   r  updater   rD   rW   rX   rE   r   rD  r-  r  rw   r+   assertWarnsr  rV   r   r  warning)r$   rx  r-  r  r,  r5  rK   r{   r  r  to_be_closedcontexts               r   test_pass_fdsz"POSIXProcessTestCase.test_pass_fdso  s<   $^<LMMM	55q 	! 	!A'))COOBHc!f---OOBHc!f---s1vt,,,s1vt,,,OOC     	H 	HB #.)!<(24+-&2 2 2A  mmooOFGCd);); < <==M#rd?LMM"m-IJJJ]\957 7 7 !!.11 ;W  '"'2&": ": ": ; ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; MM0#go2F2FGGGG%	H 	Hs   11G..G2	5G2	c                 j   t          j        dd          }t          j                    \  }}|                     t          j        |           |                     t          j        |           t          j        |d           t          j        |d           ||f}t          j        |g}|t          t          t          |                    z  }t          j        |t          j        d|          }|                                \  }}t!          t          t"          |                    d                              }	|                     |	t!          |          d|z             |                     t          j        |          d           |                     t          j        |          d           d S )	Nrs  rp  rq  TFr  ru  z	output=%a)r   rv  r   ri  r   rI   r  rW   rX   r  rD  r  r   rD   rE   r   rn  r-  r  rY   r  )
r$   rc  r  non_inheritabler  r9   rK   r{   r  r,  s
             r   test_pass_fds_inheritablez.POSIXProcessTestCase.test_pass_fds_inheritable  st   !.9IJJJ')wyy$_+.../222
;---
?E2221'Sh''(((T$.Ot&.0 0 0 --//#c6<<--..// 	c(mm[6-ABBB 	+K88$???+O<<eDDDDDr   c                 N   t          j        dd          }g }t          d          D ]`}t          j        t          j        t          j                  }|                     t          j        |           |	                    |           at          j
                    \  }}|                     t          j        |           |                     t          j        |           |                    d|           t          j        t          j        |g|d         |d         |d         d|          5  t          j        |d	          }d
d
d
           n# 1 swxY w Y   d |                    d          D             }|                     |h dt'          |          z  d|           d
S )z7Regression test for https://bugs.python.org/issue32270.rs  rp  rq  re  r   r   T)rA   rB   rC   rB  r  rB  Nc                 ,    h | ]}t          |          S r3   )r-  )r  nums     r   	<setcomp>z@POSIXProcessTestCase.test_pass_fds_redirected.<locals>.<setcomp>  s    666Cs3xx666r   ru  >   r   r   re  zoutput=)r   rv  r  r   r  r  O_RDWRr   rI   r  ri  insertr   rD   rW   rX   r  r  rY   	frozenset)	r$   rx  r  r  r5  stdout_rstdout_wr{   r,  s	            r   test_pass_fds_redirectedz-POSIXProcessTestCase.test_pass_fds_redirected  s   $^<LMMM	q 	  	 ARY//BOOBHb)))OOBWYY((+++(+++8$$$s~y9$,QK%-a[%-a[(,'/1 1 1 	- 	- WXt,,F	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 766<<#5#5666iii)H*=*==?S?S?STTTTTs   -EEEc                     t          j        t          j        d          5 }t	          j        t          ||          }|                                 d d d            d S # 1 swxY w Y   d S )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      WRZ&& 	% (-U< < <AFFHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   1AA"%A"c                     t          j        t          j        d          5 }t	          j        t          ||          }|                                 d d d            d S # 1 swxY w Y   d S )Nr  r   r  r  s      r   &test_stdout_stderr_are_single_inout_fdz;POSIXProcessTestCase.test_stdout_stderr_are_single_inout_fd  s    WRZ&& 	% (-e= = =AFFHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  c                     t          j        t          j        d          5 }t	          j        t          ||          }|                                 d d d            d S # 1 swxY w Y   d S )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                 2   t          j        dd          }t          j        t          j        |gt          j        t          j                  }|                                \  }}|                     d|j	        d|
                    d          z             d S )Nzsigchild_ignore.pyrp  rq  r   r   z6sigchild_ignore.py exited non-zero with this error:
%sr   )r   rv  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 D Dcno>$.OJOM M MAL +:w//+0 	1 	1 	1 	1 	1r   c           	         t          j        d          }t          j        t          j        ddgt          j        d          }|j        }|                     |j	                   	 | 
                    |                    d          d           |                     | |j        |gg g d          d                    |                                 d S # |                                 w xY w)	Nr  r   z$import sys;sys.stdout.write("apple")r   )rB   rN   r  s   applg        )r   import_moduler   rD   rW   rX   rE   rB   r   rI   rY   r  rw   r  r)   )r$   r  rK   rH  s       r   test_select_unbufferedz+POSIXProcessTestCase.test_select_unbuffered  s     ,X66cnd:; %/O%&	( ( (
 H   	QVVAYY000MM!]V]A3B<<Q?@@@FFHHHHHAFFHHHHs   %AC C(c                 ,   t          j        t          j        ddgt           j        t           j                  }|                     |j        j                   |                     |j        j                   t          |          }|j
        }t          j        dt          f          5  d }d d d            n# 1 swxY w Y   t          r!|                     t           j                   d S |                     |d t           j        D                        d S )Nr   z import sys, time;time.sleep(0.2)r   r   c                 ,    g | ]}t          |          S r3   idr  os     r   r  zEPOSIXProcessTestCase.test_zombie_fast_process_del.<locals>.<listcomp>      !D!D!DA"Q%%!D!D!Dr   )r   rD   rW   rX   rE   r   rB   rI   rC   r  pidr   check_warningsResourceWarningr'   r   r(   rw   )r$   rK   identr  s       r   test_zombie_fast_process_delz1POSIXProcessTestCase.test_zombie_fast_process_del  s=   
 cnd01 %/O$.O	5 5 5
 	''''''1e+R,ABB 	 	A	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  	Fj011111 MM%!D!D1C!D!D!DEEEEEs   (B77B;>B;c                    t          j        t          j        ddgt           j        t           j                  }|                     |j        j                   |                     |j        j                   t          |          }|j
        }t          j        dt          f          5  d }t          j                     d d d            n# 1 swxY w Y   t!          j        |t$          j                   t(          r |                     t           j                   n*|                     |d t           j        D                        t1          j        d           |                     t6                    5  t          j        t8          t           j        t           j                  5 }	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     t6          t           j        |d           t(          r!|                     t           j                   d S |                     |d t           j        D                        d S )	Nr   zimport time;time.sleep(3)r   r   c                 ,    g | ]}t          |          S r3   r  r  s     r   r  zJPOSIXProcessTestCase.test_leak_fast_process_del_killed.<locals>.<listcomp>(  r  r   r>  r   c                 ,    g | ]}t          |          S r3   r  r  s     r   r  zJPOSIXProcessTestCase.test_leak_fast_process_del_killed.<locals>.<listcomp>8  s    $G$G$GqRUU$G$G$Gr   )r   rD   rW   rX   rE   r   rB   rI   rC   r  r  r   r  r  r   
gc_collectr   rm  rs  r  r'   r   r(   rw   r*  r+  rb   r  r   waitpidr   )r$   rK   r  r  r$  s        r   !test_leak_fast_process_del_killedz6POSIXProcessTestCase.test_leak_fast_process_del_killed  s    cnd./ %/O$.O	5 5 5
 	''''''1e+R,ABB 	! 	!A   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	V^$$$ 	Fj01111 MM%!D!D1C!D!D!DEEE 	
3w'' 	 	!/)3)3: : : =A              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	'2:sA666 	Ij011111U$G$GJ4F$G$G$GHHHHHsH   (C

CC31G	$F2&G	2F6	6G	9F6	:G		GGc                    t          j        dd          }t          j        d          |                     t          j                   t          j        t          j	        |gt          j
        dfd          }|                                \  }}t          t          t          |                    d                              }|                     |           d S )	Nrs  rp  rq  r   Tc                  .    t          j        d           S r  )r   r  )r5  s   r   r  zCPOSIXProcessTestCase.test_close_fds_after_preexec.<locals>.<lambda>D  s    2 r   )rB   rB  r  ru  )r   rv  r   r  r   rI   r   rD   rW   rX   rE   r   rn  rD  r-  r  r   )r$   rx  rK   r{   r  r  r5  s         @r   test_close_fds_after_preexecz1POSIXProcessTestCase.test_close_fds_after_preexec:  s    $^<LMMM	 VAYY"%%%cni8$.Ot(>(>(>(>@ @ @ --//CV\\$%7%7889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 ]\  }}}}|                     t
                    5 }|                    ||dd||d	d	d	d	d
dddddddg dd	|d           d d d            n# 1 swxY w Y   |                     dt          |j	                             	 |st          j
                     d S d S # |st          j
                     w w xY w)Nr   c                      d S r!   r3   r3   r   r   r  z5POSIXProcessTestCase.test_fork_exec.<locals>.<lambda>U  s    4 r   rZ  s   exe   envs   argTr3   rt  r   re  r   r  Fztakes exactly)_posixsubprocessr  r  r  rb   r   r  r   r  rk   r  )	r$   r  
gc_enabledfuncr9   exe_listr   env_listr   s	            r   test_fork_execz#POSIXProcessTestCase.test_fork_execK  s    	 \^^
 	  <DIKKK F8TF843TF84F8SF84F8T3/	2 F F-hX &&y11 %S$..hb#xBB1adAr1be% % %% % % % % % % % % % % % % % %    #cm2D2DEEEE-F0  
 : 
s0   AC5 /,B'C5 'B+	+C5 .B+	/,C5 5Dc                 T   dd l } G d d          }t          j                    }	 t          j                     ddddd |d	           |d
          ffD ]}|                     t
          d                    |                    5 }|                    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            n# 1 swxY w Y   |                     dt          |j
                             	 |st          j                     d S d S # |st          j                     w w xY w)Nr   c                       e Zd ZdZd Zd ZdS )JPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadIntTc                     || _         d S r!   )ra  )r$   ra  s     r   r   zSPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__init__y  s    "


r   c                 :    | j         rd| _         | j        S t          )NF)firstra  ry   r#   s    r   __int__zRPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__int__{  s!    : &!&DJ:%  r   N)r0   r1   r2   r  r   r  r3   r   r   BadIntr  w  s7        E# # #! ! ! ! !r   r  )rt  re  r   r  r~   )r  r  )      *   l            )r~   r  )r  r\  r\  r  r   re  zfds_to_keep={}r?  s   falseTr  rt  r   r  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_checks  s    	 	! 	! 	! 	! 	! 	! 	! 	! \^^
	IKKK !#FF1II&  ? ? &&",33K@@ ' B B 
$EF$..!
XJk4&BB1adAdD"d$ $ $
$ 
$ 
$ 
$ 
$ 
$ 
$ 
$ 
$ 
$ 
$ 
$ 
$ 
$ 
$ mS-=-=>>>>'?*  
 : 
s0   A D /C5D C	D C		,D D'c                 Z   t          j        t                    }|5  t          j                            |d          5 }t          |j        _        |	                                 |j        
                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrA   )r   rD   r   r   ra  rb  BrokenPipeErrorrI   r  r   assert_called_withr$   r$  mock_proc_stdins      r   ,test_communicate_BrokenPipeError_stdin_closezAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_close  s    00 	7 	74:$$T733 	70?O!-!44666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s4   !B ?B<B B	B B	B  B$'B$c                    t          j        t                    }|5  t          j                            |d          5 }t          |j        _        |	                    d           |j        
                    d           |j        
                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrA      stuff)r   rD   r   r   ra  rb  r  r   r  r   assert_called_once_withrI   r  s      r   ,test_communicate_BrokenPipeError_stdin_writezAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_write  s2    00 	< 	<4:$$T733 	<0?O!-X&&&!99(CCC!99;;;		< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s5   !B;AB#B;#B'	'B;*B'	+B;;B?B?c                 8   t          j        t          j        dgt           j        t           j                  }|5  t
          j                            |d          5 }t          t          j
        d          5 }t          |j        _        |                                |j        _        |                    d           |j                                         d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N-hr   rA   wbr  )r   rD   rW   rX   rE   r   ra  rb  r  r   r  r  r  r  r3  return_valuer   r  )r$   r$  r  dev_nulls       r   ,test_communicate_BrokenPipeError_stdin_flushzAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_flush  s     6&0o'18 8 8  	< 	<4:$$T733 	<RZ&&	<*20?O!-2://2C2CO"/X&&&!99;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<sZ   !DC76AC C7 C$$C7'C$(C7+D7C;	;D>C;	?DDDc                    t          j        t          j        dgt           j        t           j                  }|5  t
          j                            |d          5 }t          |j	        _
        |                    d           |j	                                         d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r   rA   i  r`   )r   rD   rW   rX   rE   r   ra  rb  r  rI   r  r   r  r  s      r   9test_communicate_BrokenPipeError_stdin_close_with_timeoutzNPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_close_with_timeout  s:     6&0o'18 8 8  	< 	<4:$$T733 	<0?O!-S)))!99;;;		< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s6   !C AB(C (B,	,C /B,	0C  CCN
W_STOPCODEzneed _testcapi.W_STOPCODEc                 X   t           }t          j        |          }t          j        |j        d           t          j        d          }t          j	        d|j        |f          5  |
                                }ddd           n# 1 swxY w Y   |                     |d           dS )zATest wait() behavior when waitpid returns WIFSTOPPED; issue29335.r   rl  r   r  )r  N)r   r   rD   r   wait_processr  	_testcapir  r   ra  r)   rY   )r$   r9   r$  statusr   s        r   test_stoppedz!POSIXProcessTestCase.test_stopped  s    
 %% 	TX2222%a((Z/tx>PQQQ 	% 	%J	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	R(((((s   (B		BBc                    t          j        t                    }t          j        |j        d           |                     |j                   t          j	        d          5 }|
                    t          j                   d d d            n# 1 swxY w Y   |                                 |                     |j                   d S )Nr   r	  zos.kill)r   rD   r   r   r  r  r   r   r   ra  r  rs  r  assert_not_calledrY  )r$   r$  	mock_kills      r   test_send_signal_racez*POSIXProcessTestCase.test_send_signal_race  s     00 	TX2222 	$/***Z	"" 	-iV^,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-
 	##%%% 	T_-----s   # BBBc                 v   t          j        t          j        ddg          }|j        s|                                 |j        t          j                            |dd           5  d |_        |	                    t          j                   d d d            n# 1 swxY w Y   |                                 d S )Nr   zexit(1)r  c                      d S r!   r3   r3   r   r   r  z=POSIXProcessTestCase.test_send_signal_race2.<locals>.<lambda>  s    d r   )new)r   rD   rW   rX   r   r  r   ra  rb  r  rs  r  rm  rJ   s     r   test_send_signal_race2z+POSIXProcessTestCase.test_send_signal_race2  s     cndI>?? , 	FFHHH , 	 Zq&ll;; 	* 	*ALMM&.)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	
s   ''BB!Bc                     t          j        t          j        ddgt           j                  }	 	 |                    d           d S # t           j        $ r Y nw xY w/)Nr   z+import os, time; os.close(1), time.sleep(2)rs   Tr_   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   s{    !N!P'18 8 8	   ---,   		s   A AA)or0   r1   r2   r%   r  r   r  r  r   rD   r
  r   ra  r  r  rk  r  r   r   rL  r)  r2  r  r  r:  rR  rV  rb  rd  rt  rv  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&  r7  r>  r@  rO  rT  rZ  re  rn  r~  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  __classcell__r`  s   @r   r  r    s	       > > > > >! ! !B B BB B BB B B*    J,    TZ'((A A )(A  TZ'((: : )(:* X_(;<<<-/ /4 4/ /4,7 7 7  XY//JGGB	4J4J<> >9 9> >9  XZ002KLL1F 1F ML1Ff X_WWR,,.PQQ? ? RQ? XZ002MNN'I 'I ON'IR X_WWR,,.PQQ@ @ RQ@ X[113OPP.A .A QP.A` X_WWR--/RSSD D TSD X_Y:ggb'&:&:":68 8& &8 8&(8 8 8	9 	9 	9? ? ?
? ? ?
	8 	8 	80 0 0 % % % % %!1 % % %2 X_4446KLLE E MLE  * X_ "EG GL LG GL(+ + +	, 	, 	,L L LL L L! ! !N N N(  2 X_S\,,-BCC9; ; ; ;*) ) )4 4 44 4 4> > >( ( (- - -    
) ) )2& & && & && & &) ) )) ) )) ) ), , ,
! ! !*+ + +Z+ + +`% % %() () ()XK K K
K K K&K K K:& & &6I I I.' ' 'R-= -= -=` X_S\,,Y77 IRWV__+wrwy/A/A/HHEG GI9 I9G GI9` Wb!$$H H %$HBE E E<U U U4      	1 	1 	1  "F F F0)I )I )IV, , ," % % %N ' ' 'R7 7 7< < << < <
< 
< 
< X$. >$WY==46 6) )6 6). . .,  	 	 	 	 	 	 	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dS )Win32ProcessTestCasec                     d}d}t          j                    }||_        ||_        t          j        t
          |           d S )Nr   r   r  )r   STARTUPINFOdwFlagswShowWindowrV   r   )r$   STARTF_USESHOWWINDOWSW_MAXIMIZEr  s       r   test_startupinfoz%Win32ProcessTestCase.test_startupinfo  sW      ! ,..2"- 	$/	1 	1 	1 	1 	1 	1r   c                 p    d}d}t          j        ||          }t          j        t          |           d S )Nr   r   )r#  r$  r  )r   r"  rV   r   )r$   STARTF_USERSHOWWINDOWr&  r  s       r   test_startupinfo_keywordsz.Win32ProcessTestCase.test_startupinfo_keywords  sV     !" ,)#
 
 
 	$/	1 	1 	1 	1 	1 	1r   c                 J   t          j                    }t           j        |_        t           j        |_        t          d          D ]\}t          }t          t          j
        d          5 }t          j        ||t           j        |          }|5  |                                 d d d            n# 1 swxY w Y   |                     |j        d           d d d            n# 1 swxY w Y   |                     |j        t           j                   |                     |j                   |                     |j                   |                     |j                   |                     |j        t           j                   |                     |j        dg i           ^d S )Nre  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_copy.  s
    ,..(=","4 q 	O 	OA!Cbj#&& 5$!'/3/9/@4?A A A  ' '$$&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '  !4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 [0'<> > >k3444k4555k3444[4j6HIII[8=":MNNNN#	O 	Os6   )%C!B/#C!/B33C!6B37C!!C%	(C%	c                     d}t           j                            d           t          j        t           j        dz   |           d S )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_creationflagsI  sQ    
CDDD=>&8	: 	: 	: 	: 	: 	:r   c                 r    |                      t          t          j        t          j        ddgd            d S )Nr   rS   c                      dS r  r3   r3   r   r   r  z8Win32ProcessTestCase.test_invalid_args.<locals>.<lambda>V  s    Q r   r  r  r#   s    r   r   z&Win32ProcessTestCase.test_invalid_argsQ  sC    *jo>457%.Y 	 	0 	0 	0 	0 	0r   c                      G d dt                     }|                     t                    5  t          j        t
           |                       d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdZdS )4Win32ProcessTestCase.test_issue31471.<locals>.BadEnvN)r0   r1   r2   keysr3   r   r   BadEnvr<  \  s        DDDr   r>  r   )dictrb   r   r   rD   r   )r$   r>  s     r   test_issue31471z$Win32ProcessTestCase.test_issue31471X  s    	 	 	 	 	T 	 	 	y)) 	< 	<_&&((;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   $AA#&A#c                 x    t          j        t          j        ddgd          }|                     |d           d S )Nr   rS   T)rB  rT   rU   rZ   s     r   r  z#Win32ProcessTestCase.test_close_fdsa  sG    _cnd8:(,. . . 	R     r   c           	         dd l }t          j                    }|                     t          j        |d                    |                     t          j        |d                    g }|D ]?}t          j        |d           |                    |                    |                     @t          j	        t          j        dd                    |d                   gt          j        d          }|                                \  }}|                     |j        d           t#          |                                           t          j	        t          j        dd                    |d                   gt          j        t          j        d          }|                                \  }}|                     |j        d           |                     d	|           g }t          j                    }	d
|i|	_        t          j	        t          j        dd                    |d                   gt          j        t          j        |	d          }|                                \  }}|                     |j        d           |                     d	|           t-          j        dt0          f          5  t          j                    }	d
|d d          i|	_        t          j	        t          j        dd                    |d                   gt          j        t          j        |	d          }|                                \  }}|                     |j        d           d d d            d S # 1 swxY w Y   d S )Nr   r   Tr   z2import msvcrt; print(msvcrt.open_osfhandle({}, 0))Frt  )rB   rC   rB  s   OSErrorr,  )rB   rC   r  rB  z.*overriding close_fds)r   r   ri  r   rI   r  r  get_osfhandler   rD   rW   rX   r  rE   r   rY   r   r-  r  rw   r"  r1  r   r  r  )
r$   r   r,  r  r5  rK   rB   rC   r,  r  s
             r   test_close_fds_with_stdioz.Win32ProcessTestCase.test_close_fds_with_stdioh  sn   gii#a&)))#a&))) 	5 	5Br4(((NN6//334444cndRYYZabcZdeeg$.OuF F F q)))FLLNNcndRYYZabcZdeeg$.OJOW[] ] ] q)))j&)))  ,..'4k&B#cndRYYZabcZdeeg$.OJO)4F F F q)))j&))) +-E-;-= > > 		. 		.$022K+8'!!!**EK' #.$"V"]"]^efg^h"i"i"k(2
-8EK K KA ]]__NFFQ\1---		. 		. 		. 		. 		. 		. 		. 		. 		. 		. 		. 		. 		. 		. 		. 		. 		. 		.s   0B*M''M+.M+c                 p    t          j                    }i |_        t          j        t          |           d S )Nr  r   r"  r1  rV   r   r$   r  s     r   test_empty_attribute_listz.Win32ProcessTestCase.test_empty_attribute_list  s@     ,..&(#$/	1 	1 	1 	1 	1 	1r   c                 t    t          j                    }dg i|_        t          j        t          |           d S )Nr,  r  rF  rG  s     r   test_empty_handle_listz+Win32ProcessTestCase.test_empty_handle_list  sE     ,..'4b&9#$/	1 	1 	1 	1 	1 	1r   c                 "   t           j                                        }d|d<   t          j        dgdt          j        |          }|5  |                     d|j                                                   d d d            d S # 1 swxY w Y   d S 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  s    ""$weWA$.O!') ) )  	8 	8MM+qx}}777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   	.BBBc                     t           j                                        }d|d<   t          j        ddt          j        |          }|5  |                     d|j                                                   d d d            d S # 1 swxY w Y   d S rL  rN  r  s      r   r  z&Win32ProcessTestCase.test_shell_string  s    ""$wU!$.O!') ) )  	8 	8MM+qx}}777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   .BB
Bc                 ,   dD ]}t           j                                        }d|d<   t          j        ddt          j        ||          }|5  |                     d|j                                        |           d d d            n# 1 swxY w Y   d S )N)ansioemrM  r   rn  r   )r   rB   r   r   rN  )r$   encr   rK   s       r   test_shell_encodingsz)Win32ProcessTestCase.test_shell_encodings  s    " 	@ 	@CZ__&&F(F7O a(2%+*-/ / /A  @ @j!(--//3???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @	@ 	@s   /BB	B	c                 t    t          j        t          j        dz             }|                     |d           d S )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                            d            t          ||          |  |                                \  }}| 	                    |d           |
                                }d d d            n# 1 swxY w Y   |                     |d           d S )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  r9   rK   r  rC   r   s          r   r  z"Win32ProcessTestCase._kill_process  s   cnd 5! " $.?$.O$.O5 5 5  	" 	" HMM!GAv%%IAvVS)))J	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	J*****s   A/CCCc                    t          j        t          j        ddgt           j        t           j        t           j                  }|5  |j                            d           t          j        d            t          ||          |  |
                                \  }}|                     |d           |                                }d d d            n# 1 swxY w Y   |                     |d           d S )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  r9   rK   r  rC   r[   s          r   r  z'Win32ProcessTestCase._kill_dead_process  s#   cnd 5! " $.?$.O$.O5 5 5  
	 
	 HMM!JqMMMGAv%%IAvVS)))B
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 	R     s   BCCCc                 F    |                      dt          j                   d S r  )r  rs  r  r#   s    r   r  z%Win32ProcessTestCase.test_send_signal  s     =&.99999r   c                 0    |                      d           d S r  r  r#   s    r   r  zWin32ProcessTestCase.test_kill  s    6"""""r   c                 0    |                      d           d S r  rZ  r#   s    r   r  z#Win32ProcessTestCase.test_terminate  s    ;'''''r   c                 F    |                      dt          j                   d S r  )r  rs  r  r#   s    r   r  z*Win32ProcessTestCase.test_send_signal_dead  s     v~>>>>>r   c                 0    |                      d           d S r  r  r#   s    r   r   z#Win32ProcessTestCase.test_kill_dead  s    '''''r   c                 0    |                      d           d S r  r  r#   s    r   r  z(Win32ProcessTestCase.test_terminate_dead  s    ,,,,,r   N)r0   r1   r2   r'  r*  r3  r7  r   r   r  r@  r  rD  rH  rJ  r  r  rT  r  r  r  r  r  r  r  r   r  r3   r   r   r   r     su       1 1 11 1 1 O O O6: : :0 0 0 < < <! ! !0. 0. 0.d1 1 11 1 18 8 88 8 8
@ 
@ 
@! ! !+ + +*! ! !.: : :# # #( ( (? ? ?( ( (- - - - -r   r   c                       e Zd Z G d dej                  Zej                            ej        d          d             Z	d Z
d Zd Zd Zd	 Zd
S )	MiscTestsc                   &     e Zd ZdZg Z fdZ xZS )MiscTests.RecordingPopenz<A Popen that saves a reference to each instance for testing.c                 n     t                      j        |i | | j                            |            d S r!   )r  r   instances_createdr  )r$   r9   r:   r`  s      r   r   z!MiscTests.RecordingPopen.__init__  s<    EGGd-f---"))$/////r   )r0   r1   r2   r<   rd  r   r  r  s   @r   RecordingPopenrb    sD        JJ	0 	0 	0 	0 	0 	0 	0 	0 	0r   re  _communicatec                     t           |_        	 t          j                            t
          j        d          5 }t           |_        t          j                            t
          d| j                  5  |                     t                     5   |t          j
        ddgfdt
          j        i| ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |j        dd         D ]4}|                     |t          j        d          d	|j                    5g }|j        D ]0}|t          j        d
          k    r|                    |           1|                     |j        d|j                   |                     t'          |          d|j                   ddd           n# 1 swxY w Y   | j        j                                        }|                                 |                                 |                     g | j        j                   dS # | j        j                                        }|                                 |                                 |                     g | j        j                   w xY w)a  Fake a SIGINT happening during Popen._communicate() and ._wait().

        This avoids the need to actually try and get test environments to send
        and receive signals reliably across platforms.  The net effect of a ^C
        happening during a blocking subprocess execution which we want to clean
        up from is a KeyboardInterrupt coming out of communicate() or wait().
        _waitrD   r   zLimport time
time.sleep(9)
import sys
sys.stderr.write('\n!runaway child!\n')rB   Nr   r`   z.no open-ended wait() after the first allowed: g      ?re  r?  )KeyboardInterruptr  r   ra  rb  r   rD   re  rb   rW   rX   r]  r  r$  rV   r  assertLessEqual
call_countrY   r  rd  r  rm  r)   )r$   popenermock__communicater:   
mock__waitrV   sigint_callsrw  s           r   _test_keyboardinterrupt_no_killz)MiscTests._test_keyboardinterrupt_no_kill  s    ):%	H"":#3W== @ *;
&Z&&z7'+':< < E E**+<== E E"M!N E E (2'9E >DE E EE E E E E E E E E E E E E E EE E E E E E E E E E E E E E E '5abb9 < <D'' $)D"9"9"9;)8; ;< < < <  "&5 2 2Dty66666$++D111$$Z%:A)3)B % D D D  \!2!2A%/%> ! @ @ @-@ @ @ @ @ @ @ @ @ @ @ @ @ @ @4 );??AAGLLNNNLLNNNR!4!FGGGGG );??AAGLLNNNLLNNNR!4!FGGGGsx   *H% 8F20C#B:.C:B>>CB>CF2C	F2C	CF2&H% 2F66H% 9F6:H% %A(Jc                 H    |                      t          j        d           d S NgT㥛 @r`   )rp  r   rV   r#   s    r   #test_call_keyboardinterrupt_no_killz-MiscTests.test_call_keyboardinterrupt_no_kill@  s#    ,,Z_e,LLLLLr   c                 H    |                      t          j        d           d S rr  )rp  r   r   r#   s    r   "test_run_keyboardinterrupt_no_killz,MiscTests.test_run_keyboardinterrupt_no_killC  s#    ,,Z^U,KKKKKr   c                 6    d }|                      |           d S )Nc                  N    t          j        | i |5 }t          # 1 swxY w Y   d S r!   )r   rD   ri  )r9   r:   unused_processs      r   popen_via_context_managerz[MiscTests.test_context_manager_keyboardinterrupt_no_kill.<locals>.popen_via_context_managerG  sW    !42622 (n''( ( ( ( ( ( ( ( ( (s   )rp  )r$   ry  s     r   .test_context_manager_keyboardinterrupt_no_killz8MiscTests.test_context_manager_keyboardinterrupt_no_killF  s.    	( 	( 	( 	,,-FGGGGGr   c                    |                      t          j        d          d           |                      t          j        d          d           d }	 t	          j                    }t          j                            |d          }t          j        t          rdnd|z             \  }}| 
                    |d           |t          j        |           d S d S # |t          j        |           w w xY w)Nz
echo xyzzyxyzzy)r   r|  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_getoutputL  s    -l;;WEEE3LAA%	' 	' 	' 	"$$C7<<U++D'7%16T9; ;NFF*** s s   A,C C3c                 b   h d}t          t          j                  }t                      }ddl}t          j                                        D ]G\  }}|                    d          rt          ||j        f          r2|	                    |           H| 
                    |||z
             dS )z*Ensure that __all__ is populated properly.>   r  rF  rj  Handler  r   Nr  )rn  r   __all__r  __dict__itemsr  rI  
ModuleTyper  rY   )r$   intentionally_excludedexportedpossible_exportsr  r~  ra  s          r   test__all__zMiscTests.test__all___  s    !R!R!Rz)**55%.4466 	' 	'KD%s## %%"2!455   &&&&#36L#LMMMMMr   N)r0   r1   r2   r   rD   re  r   ra  rb  rp  rs  ru  rz  r  r  r3   r   r   r`  r`  
  s        0 0 0 0 0) 0 0 0 
Zz'88)H )H 98)HVM M ML L LH H H  &N N N N Nr   r`  PollSelectorz!Test needs selectors.PollSelectorc                       e Zd Zd Zd ZdS )ProcessTestCaseNoPollc                     t           j        | _        t          j        t           _        t
                              |            d S r!   )r   _PopenSelectororig_selector	selectorsSelectSelectorr>   r%   r#   s    r   r%   zProcessTestCaseNoPoll.setUpq  s2    '6$-$<
!d#####r   c                 \    | j         t          _        t                              |            d S r!   )r  r   r  r>   r.   r#   s    r   r.   zProcessTestCaseNoPoll.tearDownv  s'    $($6
!  &&&&&r   Nr/   r3   r   r   r  r  n  s2        $ $ $
' ' ' ' '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          \  }}|                                | _        t          j        |d           t          j        |           d S )Nz.pyzte stsV   import sys;sys.stdout.write('%d %s' % (len(sys.argv), [a.lower () for a in sys.argv])))	r  r%   r   rJ  r  r  r   r   rI   )r$   rH  r  r`  s      r   r%   zCommandsWithSpaces.setUp~  sh    #E7335[[^^

 c 	
 	
 	
 	r   c                 z    t          j        | j                   t                                                       d S r!   )r   rK  r  r  r.   r  s    r   r.   zCommandsWithSpaces.tearDown  s1    
	$*r   c                    t           j        |d<   t          j        |i |}|5  |                     |j                                                            d          d| j        z             d d d            d S # 1 swxY w Y   d S )NrB   mbcsz2 [%r, 'ab cd'])r   rE   rD   rY   rB   r  r	  r  )r$   r9   r:   rK   s       r   with_spaceszCommandsWithSpaces.with_spaces  s    %?xd-f-- 	 	hmm%%f--$*,  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A	A99A= A=c           	      f    |                      dt          j        d| j        dddd           d S )N"" "ab cdr   r]  r  rW   rX   r  r#   s    r   test_shell_string_with_spacesz0CommandsWithSpaces.test_shell_string_with_spaces  sP    S^^^TZZZ-4WW6=> 	 	@ 	@ 	@ 	@ 	@r   c                 X    |                      t          j        | j        dgd           d S )Nr  r   r]  r  r#   s    r   test_shell_sequence_with_spacesz2CommandsWithSpaces.test_shell_sequence_with_spaces  s,    #.$*g>aHHHHHr   c           	      b    |                      dt          j        d| j        ddd           d S )Nr  r  r  r  r#   s    r   test_noshell_string_with_spacesz2CommandsWithSpaces.test_noshell_string_with_spaces  sC    S^^^TZZZ$WW& 	' 	' 	' 	' 	'r   c                 T    |                      t          j        | j        dg           d S )Nr  r  r#   s    r   !test_noshell_sequence_with_spacesz4CommandsWithSpaces.test_noshell_sequence_with_spaces  s'    #.$*g>?????r   )r0   r1   r2   r%   r.   r  r  r  r  r  r  r  s   @r   r  r  {  s                  @ @ @
I I I' ' '
@ @ @ @ @ @ @r   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )ContextManagerTestsc                    t          j        t          j        ddgt           j        t           j                  5 }|                     |j                                        d           |                     |j                                        d           d d d            n# 1 swxY w Y   | 	                    |j        j
                   | 	                    |j        j
                   d S )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 6 6 	<
 :>T[--//;;;T[--//;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	*+++*+++++s   AB  B$'B$c                     t          j        t          j        ddg          5 }	 d d d            n# 1 swxY w Y   |                     |j        d           d S )Nr   zimport sys; sys.exit(100)d   )r   rD   rW   rX   rY   r   r  s     r   r  z#ContextManagerTests.test_returncode  s    s~t:< = = 	@D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	#.....s   044c                     t          j        t          j        ddgt           j                  5 }|                    d           |                     |j        d           d d d            d S # 1 swxY w Y   d S )Nr   z2import sys;sys.exit(sys.stdin.read() == 'context')r   s   contextr   rQ  r  s     r   r  z*ContextManagerTests.test_communicate_stdin  s    s~tHI $.?4 4 4 	1 8<Z(((T_a000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   1A,,A03A0c                     |                      t                    5  t          j        t          t          j        t          j                  5 }	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   )rb   r   r   rD   r   rE   r  s     r   r   z%ContextManagerTests.test_invalid_args  s    122 	 	!/)3)3: : : =A              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s5   1A2AA2A	A2!A	"A22A69A6c                    t          j        t          t           j        t          j        dz            }|                                }|j                            dt          j        z             | 	                    |j
                   |                     t          |j        ddd           |                     |j
        d           |                     |j        j                   dS )z9Broken pipe error should not prevent wait() (Issue 21619)re  )rA   rN   rU  Nr   )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    &0o(/(=a(?A A A ~~ 	
 55666$/***'4=$dCCC!,,,
)*****r   N)r0   r1   r2   r  r  r  r   r  r3   r   r   r  r    s_        , , ,/ / /1 1 1  + + + + +r   r  __main__)Frk  r   r\  r   test.supportr   r   r   r   r   rW   rs  rG   rQ  r   r  r   r*  r  r  r  r  r  r   r/  r  r  rl  r^  test.support.os_helperr	   r  r#  rF  r  rj  PGOrl  has_subprocess_supportr  r'   r  r   r  NotADirectoryErrorr.  r   rX   r   r   TestCaser   	Exceptionr5   rD   r7   r>   r  r  r  r  r  r   r`  r  r  r  r  r0   mainr3   r   r   <module>r     s                ( ( ( ( ( ( & & & & & & " " " " " " ( ( ( ( ( (     



  				     				                       				    + + + + + +   IIIJJJJ   
CCCJJJJ   
CCCLLLLEEE
; ;
(
9
:
::% ?
(
=
>
>>\W$	  @II I)');_M >40( ( (         8$      &	 	 	 	 	 	 	 	> > > > >j. > > >mI mI mI mI mIl mI mI mI`-AO AO AO AO AOl AO AO AOH	c 	c 	c 233U U U U U< U U 43Up0 Y 899{- {- {- {- {-< {- {- :9{-zaN aN aN aN aN! aN aN aNH WWY778: :' ' ' ' 'O ' ': :' Y 899(@ (@ (@ (@ (@, (@ (@ :9(@V3+ 3+ 3+ 3+ 3+, 3+ 3+ 3+l zHMOOOOO sB    B BBB B"!B"&B+ +B54B59B> >C