
    ,hg                       U 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m	Z	m
Z
 d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZ d d	lmZ d dlZd dlZd d
lmZmZ ddlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z)m*Z* ddl+m,Z, ddl-m.Z.m/Z/m0Z0 erd dl1m2Z2 d dl3m4Z4 ddl5m6Z6 ejn                  dk(  rdZ8de9d<   neZ8de9d<   de9d<   de9d<   de9d<   ejt                  dk(  Z;ese;sejn                  dk7  rd dlm<Z<m=Z=m>Z> nd\  Z<Z=Z>dHdZ? e?d      Z@ e?d      ZA e?d      ZBe;rdId ZCndId!ZCe	 	 	 	 	 	 dJd"       ZDe	 	 	 	 	 	 dJd#       ZEej                  j                  d$eDeEgd%d&g'      ZHe
d(ee!   f   ZIde9d)<   eHdKd*       ZJeHdKd+       ZKeH	 	 	 	 dKd,       ZLeHdKd-       ZMeHdKd.       ZN e?d/      ZOeHdKd0       ZPeHdKd1       ZQdLd2ZRdLd3ZSe)dLd4       ZTeHdKd5       ZUdLd6ZVeHdKd7       ZWej                  j                  e; d89      eHdKd:              ZYej                  j                  e; d89      eH	 	 	 	 dKd;              ZZe*dLd<       Z[dLd=Z\dLd>Z]dMd?Z^ej                  j                  e; d@9      	 	 	 	 	 	 dNdA       Z_dLdBZ`ej                  j                   edC      j                          dD9      dLdE       ZbdMdFZcdLdGZdy)O    )annotationsN)AsyncIteratorCallable)AbstractAsyncContextManagerasynccontextmanager)partial)Path)Signals)TYPE_CHECKINGAnyNoReturn)mock)MatcherRaisesGroup   )EventProcess_core
fail_aftermove_on_afterrun_processsleepsleep_forever)skip_if_fbsd_pipes_brokenslow)open_process)	MockClockassert_no_checkpointswait_all_tasks_blocked)	FrameType)	TypeAlias)ReceiveStreamwin32r!   
SignalTypeSIGKILLSIGTERMSIGUSR1posix)r%   r&   r'   )NNNc                0    t         j                  ddd| z   gS )Nz-u-czimport sys; )sys
executable)codes    ]/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/trio/_tests/test_subprocess.pypythonr/   B   s    NND$(=>>    zsys.exit(0)zsys.exit(1)z0sys.stdout.buffer.write(sys.stdin.buffer.read())c                    dt        |       gS )Nr   )strsecondss    r.   SLEEPr5   L   s    W&&r0   c                     t        d|  d      S )Nzimport time; time.sleep())r/   r3   s    r.   r5   r5   Q   s    0	;<<r0   c                   K   t        | i | d {   }	 | |j                          |j                          d {    y 7 37 # |j                          |j                          d {  7   w xY wwN)r   killwait)argskwargsprocs      r.   open_process_then_killr?   U   sb     
 t.v..D
		iik /
 	 			iiksB   A7AA7A	 #A7A A7A7	$A4-A0.A44A7c                z  K   t        j                         4 d {   }|j                  dd       |j                  t	        t
        g| i |       d {   }t        |t              sJ |}| |j                  j                          d d d       d {    y 7 7 J7 	# 1 d {  7  sw Y   y xY ww)NcheckF)
r   open_nursery
setdefaultstartr   r   
isinstancer   cancel_scopecancel)r<   r=   nurseryvaluer>   s        r.   run_process_in_nurseryrJ   b   s     
 !!# & &w'5)mmGK$I$$I&$IJJ%))
##%& & &J& & & &sV   B;B B;8B&B"7B&B;B$B;"B&$B;&B8,B/-B84B;background_processr   zrun_process in nursery)ids.BackgroundProcessTypec                h  K    | t               4 d {   }|j                          d {    d d d       d {    t        t              sJ |j                  J |j
                  dk(  sJ t        |      dt          dk(  sJ  | t              4 d {   }|j                          d {    d d d       d {    |j
                  dk(  sJ t        |      dj                  t        d      k(  sJ y 7 7 7 # 1 d {  7  sw Y   xY w7 }7 g7 Y# 1 d {  7  sw Y   ixY ww)Nr   <trio.Process : exited with status 0>   <trio.Process {!r}: {}>exited with status 1)		EXIT_TRUEr;   rE   r   _pidfd
returncoderepr
EXIT_FALSEformatrK   r>   s     r.   
test_basicr[   |   s    !),  iik dG$$;;??a:>)4KLLL!*-  iik ??a:299         s   D2C<D2DC>DD2D AD2DD2D1D2D6D2D;D2>D D2DD	DD2DD2D/#D&$D/+D2c                  K   t        j                  dd      5   | t              4 d {   }|j                  J |j	                          d {    d d d       d {    t        t              sJ |j                  J |j                  dk(  sJ t        |      dt         dk(  sJ  | t              4 d {   }|j	                          d {    d d d       d {    |j                  dk(  sJ t        |      dj                  t        d	      k(  sJ 	 d d d        y 7 7 7 # 1 d {  7  sw Y   xY w7 7 p7 b# 1 d {  7  sw Y   rxY w# 1 sw Y   y xY ww)
N#trio._subprocess.can_try_pidfd_openFnewr   rO   rP   rQ   rR   rS   )r   patchrT   rU   r;   rE   r   rV   rW   rX   rY   rZ   s     r.   test_basic_no_pidfdra      sR    	9u	E 
%i0 	 	D;;&&))+	 	 $(({{""!##Dz~i[8OPPP%j1 	 	T))+	 	!##Dz6=="
 
 	
 

 
		 	 	 			 	 	 	
 
s   E-E!D+E!"D1D-D1E!!D/"AE!?E E!EEEE!'E
(9E!"	E-+E!-D1/E!1E	7D:8E	?E!E
E!E	EE	E!!E*&E-c                  K    | t        d            4 d {   }|j                  J dt        |      v sJ |j                          |j                  j                          |j                  J dt        |      v sJ |j                  J |j                  J d d d       d {    y 7 7 # 1 d {  7  sw Y   y xY ww)N'  runningexited)r5   rV   rW   r:   _procr;   rU   )rK   ps     r.   test_auto_update_returncoderh      s      "%+. ( (!||##DG##		||''47""xx||''( ( ( ( ( ( (sE   CB.CBB2C(B0)C0C2C8B;9C Cc                  K    | t        d            4 d {   }t        j                         4 d {   }|j                  |j                         |j                  |j                         |j                  |j                         t                d {    |j                  j                          d d d       d {    t        j                         4 d {   }|j                  |j                         |j                  |j                         |j                  |j                         t                d {    |j                          d d d       d {    d d d       d {    y 7 `7 F7 7 # 1 d {  7  sw Y   xY w7 7 V7 8# 1 d {  7  sw Y   HxY w7 ?# 1 d {  7  sw Y   y xY ww)N
   )	r5   r   rB   
start_soonr;   r   rF   rG   r:   rK   r>   rH   s      r.   test_multi_waitrm      sl    !%),  %%' 	* 	*7tyy)tyy)tyy)(***  '')	* 	* %%' 	 	7tyy)tyy)tyy)(***IIK	 	  	* +		* 	* 	* 	*	 +		 	 	 	   s   G	E8G	F4E;F4AFE>F7F4F F4F F4#AFFFF4"F#F4'G	2F23G	;F4>F F4F	F	F	F4FF4F/	#F&$F/	+F42G	4G:F=;GG	c           	       K   t        j                  dd      5   | t        d            4 d {   }t        j                         4 d {   }|j                  |j                         |j                  |j                         |j                  |j                         t                d {    |j                  j                          d d d       d {    t        j                         4 d {   }|j                  |j                         |j                  |j                         |j                  |j                         t                d {    |j                          d d d       d {    d d d       d {    d d d        y 7 h7 N7 7 # 1 d {  7  sw Y   xY w7 7 ^7 @# 1 d {  7  sw Y   PxY w7 G# 1 d {  7  sw Y   WxY w# 1 sw Y   y xY ww)Nr]   Fr^   rj   )r   r`   r5   r   rB   rk   r;   r   rF   rG   r:   rl   s      r.   test_multi_wait_no_pidfdro      s    	9u	E %eBi0 	 	D))+ . .w""499-""499-""499-,...$$++-. . ))+  w""499-""499-""499-,...		 	 	 	. /	. . . . /	   	 	 	 	 s  G5G)FG)GF
GAF"0F
1F"GF G7F7
8G;AF=F9
F=/G:F;;G?G)
GG)	G5G)GF" G"F4(F+)F40G9F=;G=GGGGG)G&	GG&	"G))G2.G5zbdata = sys.stdin.buffer.read(); sys.stdout.buffer.write(data); sys.stderr.buffer.write(data[::-1])c           
     $  K    | t         t        j                  t        j                  t        j                        4 d {   ddfd}d	d}j                  J j                  J t        j                         4 d {   }t        j                         dz   |j                  _	        |j                  |       |j                  |j                         |j                  |j                  d d d          d d d       d {    j                  j                  rJ j                          d {   dk(  sJ d d d       d {    y 7 7 7 O# 1 d {  7  sw Y   _xY w7 67 ## 1 d {  7  sw Y   y xY ww)
Nstdinstdoutstderrs+   the quick brown fox jumps over the lazy dogc                    K   j                   J j                   j                          d {    j                   j                          d {    y 7 '7 wr9   )rr   send_allaclose)msgr>   s   r.   
feed_inputztest_pipes.<locals>.feed_input   sK     ::))**%%c*****##%%% +%s!   -AA!AAAAc                V   K   t               }| 2 3 d {   }||z  }7 
6 ||k(  sJ y wr9   )	bytearray)streamexpectedseenchunks       r.   check_outputz test_pipes.<locals>.check_output   s;     ;D%  ev8###s   )  ) 	)g      >@r   returnNone)r|   r"   r}   bytesr   r   )+COPY_STDIN_TO_STDOUT_AND_BACKWARD_TO_STDERR
subprocessPIPErs   rt   r   rB   current_timerF   deadlinerk   cancelled_caughtr;   )rK   ry   r   rH   rx   r>   s       @@r.   
test_pipesr      sY    !3oo	 & &
 
<	&
	$ {{&&{{&&%%' 	E 	E7,1,>,>,@4,GG  )z*|T[[#>|T[[#dd)D	E 	E ''888YY[ A%%=& & &,	E 	E 	E 	E 	E !=& & & &s   ?FEFAE;	E
E;A8E"E;E /E; E7	E;
FE9FE; E;"E4	(E+)E4	0E;9F;FFF	Fc                L  K    | t        d      t        j                  t        j                  t        j                        4 d {   t        rdnddfd}j                  J j
                  J j                  J t        d      5  j                  j                  d       d {    t        d       d {    j                  j                  d	z          d {     |d
d       d {    j                  j                  dz   dz   z          d {     |dd       d {     |dd       d {    j                  j                  dz          d {     |dd
       d {    j                  j                  d       d {    t        d      5 } |dd
       d {    d d d        j                  sJ j                  j                         d {     |dd       d {    j                  j                          d {    j
                  j                  d       d {   dk(  sJ j                  j                  d       d {   dk(  sJ j                          d {    d d d        d d d       d {    j                  d
k(  sJ y 7 |7 7 7 7 7 7 7 7 l7 ^7 >7 $# 1 sw Y   $xY w7 7 7 7 7 7 i# 1 sw Y   hxY w7 _# 1 d {  7  sw Y   oxY ww)Nzidx = 0
while True:
    line = sys.stdin.readline()
    if line == '': break
    request = int(line.strip())
    print(str(idx * 2) * request)
    print(str(idx * 2 + 1) * request * 2, file=sys.stderr)
    idx += 1
rq      
s   
c                ~  K   t        j                         4 d {   }	 	 	 	 	 	 	 	 dfd}j                  J j                  J |j	                  |j                  || dz         |j	                  |j                  |dz  | dz  dz          d d d       d {    y 7 7 # 1 d {  7  sw Y   y xY ww)Nc                  K   |dkD  rO| j                  |       d {   }|| j                         t        |      z  k(  sJ |t        |      z  }|dkD  rO|dk(  sJ | j                  t                     d {   k(  sJ y 7 i7 w)Nr   )receive_someencodelen)r|   countdigitresultnewlines       r.   	drain_onez3test_interactive.<locals>.expect.<locals>.drain_one%  s     
  !)'-':':5'A!A%UG*;*;*=F*KLLV,  !) !A:%!'!4!4S\!BBgMMM	 "B Cs'   BB9B$B<B	=B	Br   rQ   )r|   r"   r   intr   r   r   r   )r   rB   rs   rt   rk   )idxrequestrH   r   r   r>   s       r.   expectz test_interactive.<locals>.expect"  s     ))+ U Uw
N)
N
N 
N 	
N {{..{{..""9dkk7C!GL""9dkk7Q;aRST#U U U U U U UsE   B=B$B=A3B(B=B&B=&B=(B:.B1/B:6B=   s   12g?s   345r   i90  s   100s   200rQ   d   r         0   s   999999   i?B r0   )r   r   r   r   r   r   )r/   r   r   r(   rr   rs   rt   r   rv   r   r   r   rw   r   r;   rV   )rK   r   scoper   r>   s      @@r.   test_interactiver     s     "		
 oo ; ; 
 %g	U( zz%%{{&&{{&&] 	**%%e,,,***%%fw&6777E"""**%%fw&6&?'&IJJJC.  C.  **%%dWn555A,**%%i000s# #uQl""#)))**%%g...F###**##%%%11!44;;11!44;;))+'	Q; ;z ??a{;R -7"J  50"# # /#%44'	 	Q; ; ; ;s  AL$K	L$ALL2K3LK
%L+K,L<K=+L(K)L9K:L
K%L0K1LK"L$K"%L4K(K%
K(4L:K5;LK7!L-K9."LK;'L8K=9LK?LL"L$-L.L$L
LLLLLLLL"L%K((K2-	L7L9L;L=L?LL
	LL$L!LL!L$c                   K   t        d t        d      D              } t        t        | dd       d {   }|j                  t        k(  sJ |j
                  dk(  sJ |j                  | k(  sJ |j                  dk(  sJ t        t        d       d {   }|j                  t        k(  sJ |j
                  dk(  sJ |j                  dk(  sJ |j                  J t        t        | dd       d {   }|j                  t        k(  sJ |j
                  dk(  sJ |j                  | k(  sJ |j                  | d d d   k(  sJ t        j                  t              5  t        t        d	
       d {    d d d        d}t        j                  t        |      5  t        t        t        j                  
       d {    d d d        t        j                  t        |      5  t        t        t        j                         d {    d d d        t        j                  t        |j                  ddd            5  t        t        t        j                         d {    d d d        t        j                  t        d      5  t        t        dt        j                          d {    d d d        t        j                  t        d      5  t        t        dd        d {    d d d        y 7 7 p7 7 # 1 sw Y   xY w7 X# 1 sw Y   XxY w7 # 1 sw Y   xY w7 # 1 sw Y   xY w7 # 1 sw Y   xY w7 b# 1 sw Y   y xY ww)Nc              3  H   K   | ]  }t        j                  d d        yw)r      N)randomrandint).0_s     r.   	<genexpr>ztest_run.<locals>.<genexpr>R  s     >A3'>s    "i   T)rr   capture_stdoutcapture_stderrr   r0   r   r   zoh no, it's textrr   z^stdout=subprocess\.PIPE is only valid with nursery\.start, since that's the only way to access the pipe(; use nursery\.start or pass the data you want to write directly)*$match)rs   rs   rt   rQ   )rt   z.^can't specify both stdout and capture_stdout$)r   rs   z.^can't specify both stderr and capture_stderr$)r   rt   )r   ranger   CATr<   rV   rs   rt   r   pytestraisesUnicodeError
ValueErrorr   r   replaceDEVNULL)datar   pipe_stdout_errors      r.   test_runr   Q  s    >u>>D	 F ;;#!!==D  ==Cs488F;;#!!==C==  3	 F ;;EEE!!==D  ==D2J&& 
|	$ 9#%78889 H	z):	; 6#Z__5556	z):	; 7#joo6667	''(A>
 7 #joo666	7
 
?
 O #d:;M;MNNN	O
 
?
 A #d4@@@	A A_ 9 	99 9
 	66 6 	77 7 	7	7 7 	O	O O 	A	A As2  2M%LA M%LAM%5L6A+M%!L6L7L;%M% #LLL#M%+#L.L+L.4M%#L=*L;+L=/#M%$M6M	7M;#M%M4M5M9
M%M%M%LLM%LL(#M%+L..L83M%;L==MM%	MMM%MM"M%c                 j  K   t        d      } t        j                  t        j                        5 }t        | t        j                  d       d {    d d d        j                  j                  | k(  sJ |j                  j                  dk(  sJ |j                  j                  dk(  sJ |j                  j                  J t        | ddd       d {   }|j                  | k(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ y 7 # 1 sw Y   xY w7 Ww)	Nz/sys.stderr.buffer.write(b'test\n'); sys.exit(1)T)rr   r   rQ   s   test
F)r   r   rA   r0   )r/   r   r   r   CalledProcessErrorr   r   rI   cmdrV   rt   rs   r<   )r   excinfor   s      r.   test_run_checkr     s    
C
DC	z44	5 N#Z%7%7MMMN==##==##q((==9,,==''	 F ;;#==C==I%%!!! 	NN Ns<   /D3 D%D#D%BD3D1A	D3#D%%D.*D3c                    K   t        t        j                  ddgddz         d {   } | j                  dk(  sJ | j                  | j
                  cxu rJ  J y 7 6w)Nr*   zimport sys; sys.stdin.close()   xi   r   r   )r   r+   r,   rV   rs   rt   )r   s    r.   test_run_with_broken_piper     s_     	>?Vm F !!==FMM11111s   %A A7A c                  K    | t         t        j                  t        j                  t        j                        4 d {   }|j                  J |j
                  J |j                  J |j                  j                  d       d {    |j                  j                          d {    g }	 |j                  j                  d       d {   }|dk(  rn|j                  |       ;dj                  |      dk(  sJ d d d       d {    j                  dk(  sJ t        t         ddt        j                         d {   }|j                  dk(  sJ |j
                  dk(  sJ |j                  J  | t        t        j                  t        j                  	      4 d {   }|j
                  J |j                  J |j                  j!                          d {    |j#                          d {    d d d       d {    |j                  dk(  sJ t$        rJ	 t'        j(                         \  }} | t         t        j                  |t        j                        4 d {   }t'        j*                  |       |j                  J |j
                  J |j                  J |j                  j                  d       d {    |j                  j!                          d {    |j#                          d {   dk(  sJ t'        j,                  |d
      dk(  sJ t'        j,                  |d
      dk(  sJ d d d       d {    t'        j*                  |       y y 7 ?7 7 7 7 x# 1 d {  7  sw Y   xY w7 W7 7 7 7 # 1 d {  7  sw Y   xY w7 M7 7 7 7 n# 1 d {  7  sw Y   ~xY w# t'        j*                         w xY ww)Nrq   s   1234T   r0   s   12344321r   )rr   r   rt   )rr   rt   i   )r   r   r   STDOUTstdiors   rt   rv   send_eofr   appendjoinrV   r   r   rr   rw   r;   r(   ospipecloseread)rK   r>   outputr   r   rws          r.   test_stderr_stdoutr     s_    !3oo  	 / /
 
zz%%{{&&{{""jj!!'***jj!!###**11"55E|MM% 	 
 xx;..%/ /& ??a 3  	 F !!==K''==   "oo     
{{""{{""jj!!!iik  ??a	779DAq); oo!((	 / /
 zz)){{**{{**jj))'222jj'')))!YY[(A--wwq$';66wwq$'3../ /  HHQK) [/ 	+# 6/ / / /, 	"   / 3)(/ / / /  HHQKs  ?PN PA	NN!N0N1%NN	2N	PN9PN%A#P2N(3P6:N40N+1N4N.	N4PN1P6AO* =O
>O* AOO !OOOO?OO* $O%O* )PNN	NPN"NN"	P(P+N4.N41P4O:N=;OP
O* OOOO* O'OO'#O* *PPc                    K   t        j                  t              5 } t        dgd       d {    d d d        dt	         j
                        v sJ dt	        | j
                        v sJ t        rpt        j                  t              5 } t        dgd       d {    d d d        t        j                  t              5 } t        dd       d {    d d d        y y 7 # 1 sw Y   xY w7 S# 1 sw Y   RxY w7 *# 1 sw Y   y xY ww)	Nlszutf-8)encodingzunbuffered byte streamsz&the 'encoding' option is not supportedT)shellF)r   r   	TypeErrorr   r2   rI   r(   )r   s    r.   test_errorsr     s     	y	! 5WD6G4445 %GMM(:::3s7==7III]]9% 	3vT222	3]]9% 	2t5111	2 	2 	 	55 5 3	3 	3 2	2 	2s   DC&C$C&ADC4C2C4#!DDD D
D$C&&C/+D2C44C=9D DDDc                *   K   	 	 	 	 	 	 d fd} |t         j                  t               d {     |t         j                  t               d {    t
        st        st        j                  dk7  r |d t               d {    y y 7 ^7 =7 
w)Nc                  K   t        d      5 } t        d            4 d {   } | |       |j                          d {    d d d       d {    d d d        j                  rJ t        r|J j
                  | k(  sJ y j
                  dk7  sJ y 7 y7 [7 M# 1 d {  7  sw Y   ]xY w# 1 sw Y   axY ww)N      ?  r   )r   r5   r;   r   r(   rV   )send_itsignumr   r>   rK   s       r.   test_one_signalz%test_signals.<locals>.test_one_signal  s      3 	"5)%+6 " "$iik!!" "	" )))%%??vg---??a'''"!" " " "	" 	"st   CB:BB:B%B!B%
B:B#B:ACB:!B%#B:%B7	+B.,B7	3B::C?Cr#   c                ,    | j                  t              S r9   )send_signalr'   r>   s    r.   <lambda>ztest_signals.<locals>.<lambda>  s    4+;+;G+D r0   )r   zCallable[[Process], None]r   zsignal.Signals | Noner   r   )
r   r:   r%   	terminater&   r   r(   r+   platformr'   )rK   r   s   ` r.   test_signalsr     s     (*(%( 
( ',,
000
'++W
555 e(?DgNNN )@ 15 	Os3   +BB"BB4BBBBBzPOSIX specific)reasonc                n  K   t         rt        j                  dk(  ry t        j                  t        j                  t        j
                        }	  | t        d            4 d {   }t        j                         4 d {   }|j                  |j                         t                d {    |j                          t        j                         dz   |j                  _        d d d       d {    j                  j                   rJ |j"                  dk(  sJ d d d       d {    t        j                  t        j                  |       y 7 7 7 7 h# 1 d {  7  sw Y   xxY w7 F# 1 d {  7  sw Y   VxY w# t        j                  t        j                  |       w xY ww)Nr#   r   r   r   )r   r+   r   signalSIGCHLDSIG_IGNr5   r   rB   rk   r;   r   r:   r   rF   r   r   rV   rK   old_sigchldr>   rH   s       r.   test_wait_reapable_failsr     sO     0--?K3 &eDk2 	( 	(d))+ K Kw""499-,...		050B0B0Ds0J$$-	K K
 ++<<<??a''	( 	( 	fnnk2	(K.K K K K	( 	( 	( 	( 	fnnk2s   AF5F %E&F )E7EE7)E /E0:E *E75E6-E7#F .E5/F 3%F5F E7E E7 E2	&E)'E2	.E75F 7F	=F >F	F &F22F5c           	       K   t         rt        j                  dk(  ry t        j                  dd      5  t        j
                  t
        j                  t
        j                        }	  | t        d            4 d {   }t        j                         4 d {   }|j                  |j                         t                d {    |j                          t        j                         dz   |j                   _        d d d       d {    j                   j$                  rJ |j&                  dk(  sJ d d d       d {    t        j
                  t
        j                  |       	 d d d        y 7 7 7 7 q# 1 d {  7  sw Y   xY w7 O# 1 d {  7  sw Y   _xY w# t        j
                  t
        j                  |       w xY w# 1 sw Y   y xY ww)Nr#   r]   Fr^   r   r   r   )r   r+   r   r   r`   r   r   r   r5   r   rB   rk   r;   r   r:   r   rF   r   r   rV   r   s       r.   !test_wait_reapable_fails_no_pidfdr   1  sx    
 0	9u	E 7mmFNNFNNC	7 *%+6 , ,$ --/ O O7&&tyy10222IIK494F4F4H34NG((1	O O
 #//@@@!++, , MM&..+67 7,O2O O O O, , , , MM&..+67 7s   2G"3G(F-=E9>F-FE;
F)FE=
:FFE?-F;F-FF-$G0	G"9F-;F=F?FFF
FFF-F*	F!F*	&F--&GGGG"c                 ,   ddl m}  t        r't        j                  dk(  st        j                  dk(  ry | j
                  j                  d      st        j                  d       ddl	m
} dt        j                  d	d
g      dfd}t        j                  t        j                  |      }	 t        j                  d        |j                          j#                  d      dk(  sJ 	 j$                   j'                          j#                          t        j                  t        j                  |       y # j$                   j'                          j#                          t        j                  t        j                  |       w xY w)Nr   )wait_child_exitingr#   darwinwaitidzwaitid only)sync_wait_reapableFr   3600c                *    dj                          y NT)r:   )sigframe	got_alarmsleepers     r.   on_alarmz#test_waitid_eintr.<locals>.on_alarm`  s    	r0   rQ   )timeouti)r   r   r   zFrameType | Noner   r   )_subprocess_platformr   r   r+   r   
__module__endswithr   skip_subprocess_platform.waitidr   r   Popenr   SIGALRMalarmpidr;   rV   r:   )r   r   r   old_sigalrmr   r   s       @@r.   test_waitid_eintrr  J  s    :#,,'1S\\X5M((11(;M"
 I01G
 --9K
3Q7;;'||A|&",,,% LLNLLNfnnk2 % LLNLLNfnnk2s   1>E AFc            	     b  K   ddfd} t        j                         4 d {   }|j                  t        t        t        d      |              t                d {    |j                  j                          d d d       d {    sJ y 7 o7 57 # 1 d {  7  sw Y   xY ww)NFc                   K   d| j                          	 t                d {    | j                  J y 7 # | j                  J w xY wwr   )r   r   rV   )r>   custom_deliver_cancel_calleds    r.   custom_deliver_cancelz9test_custom_deliver_cancel.<locals>.custom_deliver_cancelv  sM     '+$	//!!??... "??...s%   A: 8: A: A

Arc   deliver_cancelr>   r   r   r   	r   rB   rk   r   r   r5   r   rF   rG   )r  rH   r  s     @r.   test_custom_deliver_cancelr  s  s     #( 	/ !!# & &wKt=RS	
 %&&&##%& & (''& 	'	& & & &sV   !B/BB/8B B!B?B/
B
B/BB/B, B#!B,(B/c                     dddfd} t        t        t        t        d                  5  t        j                  | d       d d d        y # 1 sw Y   y xY w)Nc                @   K   | j                          t        d      w)Nfoo)r   r   r   s    r.   r  z6test_bad_deliver_cancel.<locals>.custom_deliver_cancel  s     s   c            	     J  K   t        j                         4 d {   } | j                  t        t        t        d                   t                d {    | j                  j                          d d d       d {    y 7 k7 17 	# 1 d {  7  sw Y   y xY ww)Nrc   r  r  )rH   r  s    r.   do_stuffz)test_bad_deliver_cancel.<locals>.do_stuff  s     %%' 	* 	*7U4[AVW )***  '')	* 	* 	* +		* 	* 	* 	*sV   B#BB#8BB
B7B#BB#
BB#B BB B#z^foo$T)strict_exception_groupsr  r   )r   r   r   r   run)r  r  s    @r.   test_bad_deliver_cancelr    sF     * 
[W!=>	? :		(D9: : :s   AAc                  K   t         j                  dfd}| j                  t         d|       t        j                  t
        d      5  t        j                         4 d {   }|j                  t        t        d             t                d {    |j                  j                          d d d       d {    d d d        y 7 h7 97 # 1 d {  7  sw Y   !xY w# 1 sw Y   y xY ww)Nc                *     |        t        d      )Nwhoops)OSError)selforiginal_terminates    r.   broken_terminatez>test_warn_on_failed_cancel_terminate.<locals>.broken_terminate  s    4 hr0   r   z
.*whoops.*r   rc   )r!  r   r   r   )r   r   setattrr   warnsRuntimeWarningr   rB   rk   r   r5   r   rF   rG   )monkeypatchr#  rH   r"  s      @r.   $test_warn_on_failed_cancel_terminater(    s      **  .>?	nL	9 *%%' 	* 	*7{E$K8(***  '')	* 	** *	**	* 	* 	* 	** *sx   A	C5C)%C&C))-CCC5C) CC)	C5C)CC)C&	CC&	"C))C2.C5z
posix onlyc                  K   |j                  t        dd        t        j                  t        d      5  t        j                         4 d {   }|j                  t        t        d             t                d {    |j                  j                          d d d       d {    d d d        y 7 h7 97 # 1 d {  7  sw Y   !xY w# 1 sw Y   y xY ww)Nr   c                      y r9    )r<   s    r.   r   z8test_warn_on_cancel_SIGKILL_escalation.<locals>.<lambda>  s    r0   z.*ignored SIGTERM.*r   rc   )r$  r   r   r%  r&  r   rB   rk   r   r5   r   rF   rG   )autojump_clockr'  rH   s      r.   &test_warn_on_cancel_SIGKILL_escalationr-    s     
 .@A	n,A	B *%%' 	* 	*7{E$K8(***  '')	* 	** *	**	* 	* 	* 	** *sv   4CCB8C-B> B:B>C*B<+C/	C8C:B><C>C	CC	CCCc                   K   t        t        j                        5  t        j                         4 d {   } | j                  t        t               d {   }t        |t              sJ |}d d d       d {    d d d        j                  dk(  sJ y 7 d7 D7 "# 1 d {  7  sw Y   2xY w# 1 sw Y   6xY ww)NrQ   )r   r   r   r   rB   rD   r   rX   rE   r   rV   )rH   rI   r>   s      r.    test_run_process_background_failr/    s     	Z22	3 "%%' 	" 	"7!--Z@@EeW--!D	" 	""
 ??a		"@	" 	" 	" 	"" "ss   CB5BB5B BB 0B5;B<B5 CB5B B5 B2	&B)'B2	.B55B>:C/dev/fdz,requires a way to iterate through open filesc                   K   t        j                          t        t        d      j	                               } t        t               d {    t        t        d      j	                               | k(  sJ t        j                  t        j                        5  t        t               d {    d d d        t        t        d      j	                               | k(  sJ t        j                  t              5  t        dg       d {    d d d        t        t        d      j	                               | k(  sJ y 7 7 # 1 sw Y   xY w7 D# 1 sw Y   CxY ww)Nr0  z	/dev/fd/0)gccollectsetSyncPathiterdirr   rT   r   r   r   r   rX   PermissionError)starting_fdss    r.   test_for_leaking_fdsr9    s    
 JJLx	*2245L
i
   x	"**,-==	z44	5 &*%%%&x	"**,-==		' );-((()x	"**,-=== ! 	&& &
 	)) )sh   A	ED?AEE-E.E2AE:E
EE1EEEEEEEc                   K   dd}| j                  t        j                  d|       t        t        t              5  t        t        d       d {    d d d        y 7 # 1 sw Y   y xY ww)Nc                    K   yw)Noopsr+  )r<   r=   s     r.   very_broken_openz9test_run_process_internal_error.<locals>.very_broken_open  s	     s   r   Tr   )r<   objectr=   r>  r   r2   )r$  trio_subprocessr   AttributeErrorr   rT   )r'  r=  s     r.   test_run_process_internal_errorrB    s]      ((.:JK	^^	4 :)D999: :9: :s.   :A-A!AA!	A-A!!A*&A-c                   K   d dfd} t        t        d             d {   }t        j                         4 d {   }|j	                  | |       t                d {    t        t              sJ |j                          t               5  |j                  j                          |j                          d d d        t        d      5  j                          d {    d d d        j                         sJ d       d d d       d {    y 7 7 7 # 1 sw Y   cxY w7 F# 1 sw Y   ExY w7 %# 1 d {  7  sw Y   y xY ww)Nc                v   K   t               | j                          d {    j                          y 7 wr9   )r   r;   r4  )r>   noticed_exits    r.   wait_and_tellz7test_subprocess_pidfd_unnotified.<locals>.wait_and_tell  s.     wiik 	s   979rc   r   z,child task wasn't woken after poll, DEADLOCKr  )r   r5   r   rB   rk   r   rE   r   r   r   rf   r;   pollr   is_set)rF  r>   rH   rE  s      @r.    test_subprocess_pidfd_unnotifiedrI    s/    L eDk**D!!# U Uw=$/$&&&,.."$ 	JJOOIIK		
 1 	& ##%%%	& ""$T&TTU U U +U&	 	 &	& 	&U U U Us    EDE DE D>$D %0D>+D" D>D0'D.(D0,D>ED<EE D>"D+	'D>.D00D9	5D><E>EEEE)r-   r2   r   	list[str])r4   r   r   rJ  )r<   r   r=   r   r   zAsyncIterator[Process])rK   rM   r   r   r   )r'  pytest.MonkeyPatchr   r   )r,  r   r'  rK  r   r   )e
__future__r   r2  r   r   r   r   r+   collections.abcr   r   
contextlibr   r   	functoolsr   pathlibr	   r5  r
   typingr   r   r   unittestr   r   r?  trio.testingr   r    r   r   r   r   r   r   r   r   _core._tests.tutilr   r   lowlevelr   testingr   r   r   typesr    typing_extensionsr!   _abcr"   r   r$   __annotations__namer(   r%   r&   r'   r/   rT   rX   r   r5   r?   rJ   markparametrizebackground_process_paramrM   r[   ra   rh   rm   ro   r   r   r   r   r   r   r   r   r   skipifr   r   r  r  r  r(  r-  r/  existsr9  rB  rI  r+  r0   r.   <module>rb     s   " 	 	    
 3 G  $  
    -	 	 	 A # N N+$<<7 J	 #J	#	 	 	 
7%CLLG$;00 0GWg? =!	M"
?@'
= 			 	 	 
&
&
& 
& 
& ";;2234	12 3   $,(*$ y   " 
 
& (-(	( (  &  ( /5*/ + & &D I  I X6Ar"* 2 2 B BJ2 O O: I&673  83( I&677-7	7  87. %3 %3P(0:$*  Il3
*
*#
* 

* 4
*  ""$$9  >	> :Ur0   