a
    (ñ»j÷g  ã                   @  sp  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�rDd dl1m2Z2 d dl3m4Z4 ddl5m6Z6 ej7dk�r^dZ8de9d< neZ8de9d< de9d< de9d< de9d< ej:dkZ;e�s˜e;�s¤ej7dk�rºd dlm<Z<m=Z=m>Z> n
d\Z<Z=Z>dddœdd „Z?e?d!ƒZ@e?d"ƒZAe?d#ƒZBe;�rd$dd%œd&d'„ZCnd$dd%œd(d'„ZCed)d)d*d+œd,d-„ƒZDed)d)d*d+œd.d/„ƒZEejFjGd0eDeEgd1d2gd3�ZHe
d4ee! f ZIde9d5< eHd5d6d7œd8d9„ƒZJeHd5d6d7œd:d;„ƒZKeHd5d6d7œd<d=„ƒZLeHd5d6d7œd>d?„ƒZMeHd5d6d7œd@dA„ƒZNe?dBƒZOeHd5d6d7œdCdD„ƒZPeHd5d6d7œdEdF„ƒZQd6dGœdHdI„ZRd6dGœdJdK„ZSe)d6dGœdLdM„ƒZTeHd5d6d7œdNdO„ƒZUd6dGœdPdQ„ZVeHd5d6d7œdRdS„ƒZWejFjXe; dTdU�eHd5d6d7œdVdW„ƒƒZYejFjXe; dTdU�eHd5d6d7œdXdY„ƒƒZZe*d6dGœdZd[„ƒZ[d6dGœd\d]„Z\d6dGœd^d_„Z]d`d6daœdbdc„Z^ejFjXe; dddU�ded`d6dfœdgdh„ƒZ_d6dGœdidj„Z`ejFjXedkƒ a¡  dldU�d6dGœdmdn„ƒZbd`d6daœdodp„Zcd6dGœdqdr„ZddS )sé    )Ú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&   )NNNÚstrz	list[str])ÚcodeÚreturnc                 C  s   t jddd|  gS )Nz-uú-czimport sys; )ÚsysÚ
executable)r)   © r.   úAE:\soccer\ml_env\Lib\site-packages\trio/_tests/test_subprocess.pyÚpythonB   s    r0   zsys.exit(0)zsys.exit(1)z0sys.stdout.buffer.write(sys.stdin.buffer.read())Úint)Úsecondsr*   c                 C  s   dt | ƒgS )Nr   )r(   ©r2   r.   r.   r/   ÚSLEEPL   s    r4   c                 C  s   t d| › d�ƒS )Nzimport time; time.sleep(ú))r0   r3   r.   r.   r/   r4   Q   s    r   zAsyncIterator[Process]©ÚargsÚkwargsr*   c                  O sR   t | i |¤ŽI d H }z |V  W | ¡  | ¡ I d H  n| ¡  | ¡ I d H  0 d S ©N)r   ÚkillÚwait)r7   r8   Úprocr.   r.   r/   Úopen_process_then_killU   s    ÿr=   c               	   O s�   t  ¡ 4 I d H šf}| dd¡ | ttg| ¢R i |¤Ž¡I d H }t|tƒsNJ ‚|}|V  |j 	¡  W d   ƒI d H  qŒ1 I d H s‚0    Y  d S )NÚcheckF)
r   Úopen_nurseryÚ
setdefaultÚstartr   r   Ú
isinstancer   Úcancel_scopeÚcancel)r7   r8   ÚnurseryÚvaluer<   r.   r.   r/   Úrun_process_in_nurseryb   s    "rG   Úbackground_processr   zrun_process in nursery)Zids.ÚBackgroundProcessTypeÚNone)rH   r*   c              	   Ã  s   | t ƒ4 I d H š$}| ¡ I d H  W d   ƒI d H  qJ1 I d H s@0    Y  t|tƒsXJ ‚|jd u sfJ ‚|jdkstJ ‚t|ƒdt › d�ksŒJ ‚| tƒ4 I d H š$}| ¡ I d H  W d   ƒI d H  qÖ1 I d H sÌ0    Y  |jdksäJ ‚t|ƒd td¡ksüJ ‚d S )Nr   ú<trio.Process ú: exited with status 0>é   ú<trio.Process {!r}: {}>úexited with status 1)	Ú	EXIT_TRUEr;   rB   r   Ú_pidfdÚ
returncodeÚreprÚ
EXIT_FALSEÚformat©rH   r<   r.   r.   r/   Ú
test_basic|   s    88
þrW   c              
   Ã  sD  t jddd��� | tƒ4 I d H š2}|jd u s2J ‚| ¡ I d H  W d   ƒI d H  qj1 I d H s`0    Y  t|tƒsxJ ‚|jd u s†J ‚|jdks”J ‚t|ƒdt› d�ks¬J ‚| t	ƒ4 I d H š$}| ¡ I d H  W d   ƒI d H  qö1 I d H sì0    Y  |jdk�sJ ‚t|ƒd 
t	d	¡k�s J ‚W d   ƒ n1 �s60    Y  d S )
Nú#trio._subprocess.can_try_pidfd_openF©Únewr   rK   rL   rM   rN   rO   )r   ÚpatchrP   rQ   r;   rB   r   rR   rS   rT   rU   rV   r.   r.   r/   Útest_basic_no_pidfdŽ   s    88
þr\   c              	   Ã  s®   | t dƒƒ4 I d H š€}|jd u s$J ‚dt|ƒv s4J ‚| ¡  |j ¡  |jd usTJ ‚dt|ƒv sdJ ‚|jd u srJ ‚|jd us€J ‚W d   ƒI d H  qª1 I d H s 0    Y  d S )Né'  ÚrunningZexited)r4   rR   rS   r:   Ú_procr;   rQ   )rH   Úpr.   r.   r/   Útest_auto_update_returncode¢   s    
ra   c              
   Ã  s6  | t dƒƒ4 I d H �š}t ¡ 4 I d H šP}| |j¡ | |j¡ | |j¡ tƒ I d H  |j ¡  W d   ƒI d H  qŽ1 I d H s„0    Y  t ¡ 4 I d H šP}| |j¡ | |j¡ | |j¡ tƒ I d H  | ¡  W d   ƒI d H  �q1 I d H sú0    Y  W d   ƒI d H  �q21 I d H �s(0    Y  d S )Né
   )	r4   r   r?   Ú
start_soonr;   r   rC   rD   r:   ©rH   r<   rE   r.   r.   r/   Útest_multi_wait±   s    4re   c                 Ã  sj  t jddd���D | tdƒƒ4 I d H �š}t ¡ 4 I d H šP}| |j¡ | |j¡ | |j¡ tƒ I d H  |j 	¡  W d   ƒI d H  q 1 I d H s–0    Y  t ¡ 4 I d H šP}| |j¡ | |j¡ | |j¡ tƒ I d H  | 
¡  W d   ƒI d H  �q1 I d H �s0    Y  W d   ƒI d H  �qF1 I d H �s<0    Y  W d   ƒ n1 �s\0    Y  d S )NrX   FrY   rb   )r   r[   r4   r   r?   rc   r;   r   rC   rD   r:   rd   r.   r.   r/   Útest_multi_wait_no_pidfdÅ   s    4rf   zbdata = sys.stdin.buffer.read(); sys.stdout.buffer.write(data); sys.stderr.buffer.write(data[::-1])c              
   ƒ  s>  | t tjtjtjd�4 I d H �š‰d‰ ddœ‡ ‡fdd„}dddd	œd
d„}ˆjd usZJ ‚ˆjd ushJ ‚t ¡ 4 I d H šZ}t ¡ d |j_	| 
|¡ | 
|ˆjˆ ¡ | 
|ˆjˆ d d d… ¡ W d   ƒI d H  qè1 I d H sÞ0    Y  |jjrôJ ‚ˆ ¡ I d H dk�sJ ‚W d   ƒI d H  �q:1 I d H �s00    Y  d S )N©ÚstdinÚstdoutÚstderrs+   the quick brown fox jumps over the lazy dogrJ   ©r*   c                   “  s4   ˆj d usJ ‚ˆj  ˆ ¡I d H  ˆj  ¡ I d H  d S r9   )rh   Úsend_allÚacloser.   ©Úmsgr<   r.   r/   Ú
feed_inputë   s    ztest_pipes.<locals>.feed_inputr!   Úbytes)ÚstreamÚexpectedr*   c                 Ó  s2   t ƒ }| 2 z3 d H W }||7 }q
6 ||ks.J ‚d S r9   )Ú	bytearray)rr   rs   ÚseenÚchunkr.   r.   r/   Úcheck_outputð   s    z test_pipes.<locals>.check_outputg      >@éÿÿÿÿr   )Ú+COPY_STDIN_TO_STDOUT_AND_BACKWARD_TO_STDERRÚ
subprocessÚPIPEri   rj   r   r?   Úcurrent_timerC   Údeadlinerc   Úcancelled_caughtr;   )rH   rp   rw   rE   r.   rn   r/   Ú
test_pipesá   s&    ü
Dr   c              
   ƒ  s\  | t dƒtjtjtjd�4 I d H �š‰tr.dnd‰ ddddœ‡ ‡fdd	„}ˆjd usXJ ‚ˆjd usfJ ‚ˆjd ustJ ‚td
ƒ��Š ˆj d¡I d H  t	dƒI d H  ˆj dˆ  ¡I d H  |ddƒI d H  ˆj dˆ  d ˆ  ¡I d H  |ddƒI d H  |ddƒI d H  ˆj dˆ  ¡I d H  |ddƒI d H  ˆj d¡I d H  t
dƒ� }|ddƒI d H  W d   ƒ n1 �sl0    Y  |j�s‚J ‚ˆj ˆ ¡I d H  |ddƒI d H  ˆj ¡ I d H  ˆj d¡I d H dk�sÐJ ‚ˆj d¡I d H dk�sìJ ‚ˆ ¡ I d H  W d   ƒ n1 �s0    Y  W d   ƒI d H  �qH1 I d H �s>0    Y  ˆjdk�sXJ ‚d S )Nz×idx = 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
rg   ó   
s   
r1   rJ   )ÚidxÚrequestr*   c              	   “  s¨   t  ¡ 4 I d H š~}dddddœ‡ fdd„}ˆjd us8J ‚ˆjd usFJ ‚| |ˆj|| d ¡ | |ˆj|d | d d ¡ W d   ƒI d H  q¤1 I d H sš0    Y  d S )	Nr!   r1   rJ   )rr   ÚcountÚdigitr*   c                 “  sl   |dkr@|   |¡I d H }||›  ¡ t|ƒ ks2J ‚|t|ƒ8 }q |dksLJ ‚|   tˆ ƒ¡I d H ˆ kshJ ‚d S )Nr   )Úreceive_someÚencodeÚlen)rr   rƒ   r„   Úresult)Únewliner.   r/   Ú	drain_one%  s    z3test_interactive.<locals>.expect.<locals>.drain_oner   rM   )r   r?   ri   rj   rc   )r�   r‚   rE   rŠ   ©r‰   r<   r.   r/   Úexpect"  s    z test_interactive.<locals>.expecté   s   12gš™™™™™¹?s   345r   i90  s   100s   200rM   éd   r   éÈ   ó   0é   s   999999é   i?B ó    )r0   rz   r{   r'   rh   ri   rj   r   rl   r   r   r~   rm   r…   r;   rR   )rH   rŒ   Úscoper.   r‹   r/   Útest_interactive  sF    ÿ
ó
0\r•   rk   c                  Ã  s®  t dd„ tdƒD ƒƒ} tt| ddd�I d H }|jtks:J ‚|jdksHJ ‚|j| ksVJ ‚|jdksdJ ‚ttdd�I d H }|jtks„J ‚|jdks’J ‚|jdks J ‚|jd u s®J ‚tt| ddd�I d H }|jtksÒJ ‚|jdksàJ ‚|j| ksîJ ‚|j| d d d	… k�sJ ‚t	 
t¡�" ttd
d�I d H  W d   ƒ n1 �s<0    Y  d}t	j
t|d��$ tttjd�I d H  W d   ƒ n1 �s„0    Y  t	j
t|d��$ tttjd�I d H  W d   ƒ n1 �sÈ0    Y  t	j
t| ddd¡d��$ tttjd�I d H  W d   ƒ n1 �s0    Y  t	j
tdd��& ttdtjd�I d H  W d   ƒ n1 �s\0    Y  t	j
tdd��$ ttdd d�I d H  W d   ƒ n1 �s 0    Y  d S )Nc                 s  s   | ]}t  d d¡V  qdS )r   éÿ   N)ÚrandomÚrandint)Ú.0Ú_r.   r.   r/   Ú	<genexpr>R  r“   ztest_run.<locals>.<genexpr>i   T)rh   Úcapture_stdoutÚcapture_stderrr   r“   ©rœ   rx   zoh no, it's text©rh   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)ri   ri   rj   rM   )rj   z.^can't specify both stdout and capture_stdout$)rœ   ri   z.^can't specify both stderr and capture_stderr$)r�   rj   )rq   Úranger   ÚCATr7   rR   ri   rj   ry   ÚpytestÚraisesÚUnicodeErrorÚ
ValueErrorrz   r{   ÚreplaceÚDEVNULL)Údatarˆ   Zpipe_stdout_errorr.   r.   r/   Útest_runQ  s`    üü244þ4þ6þr«   c                  Ã  sÜ   t dƒ} t tj¡�&}t| tjdd�I d H  W d   ƒ n1 s@0    Y  |jj| ksZJ ‚|jj	dksjJ ‚|jj
dkszJ ‚|jjd u sŠJ ‚t| dddd�I d H }|j| ks®J ‚|jdks¼J ‚|j
dksÊJ ‚|j	dksØJ ‚d S )	Nz/sys.stderr.buffer.write(b'test\n'); sys.exit(1)T)rh   r�   rM   s   test
F)rœ   r�   r>   r“   )r0   r¤   r¥   rz   ÚCalledProcessErrorr   r©   rF   ÚcmdrR   rj   ri   r7   )r­   Úexcinforˆ   r.   r.   r/   Útest_run_checkŠ  s"    4ür¯   c                  Ã  sN   t tjddgdd d�I d H } | jdks,J ‚| j| j  u rDd u sJn J ‚d S )Nr+   zimport sys; sys.stdin.close()ó   xi   rŸ   r   )r   r,   r-   rR   ri   rj   )rˆ   r.   r.   r/   Útest_run_with_broken_pipeŸ  s    
þr±   c              	   Ã  sâ  | t tjtjtjd�4 I d H š }|jd us.J ‚|jd us<J ‚|jd u sJJ ‚|j d¡I d H  |j ¡ I d H  g }|j 	d¡I d H }|dkrŒq˜| 
|¡ qpd |¡dksªJ ‚W d   ƒI d H  qÔ1 I d H sÊ0    Y  |jdksâJ ‚tt ddtjd�I d H }|jdk�s
J ‚|jdk�sJ ‚|jd u �s*J ‚| ttjtjd	�4 I d H šV}|jd u �sVJ ‚|jd u �sfJ ‚|j ¡ I d H  | ¡ I d H  W d   ƒI d H  �q²1 I d H �s¨0    Y  |jdk�sÂJ ‚t�rÞ�zt ¡ \}}| t tj|tjd�4 I d H š¸}t |¡ |jd u �sJ ‚|jd u �s J ‚|jd u �s0J ‚|j d¡I d H  |j ¡ I d H  | ¡ I d H dk�sjJ ‚t |d
¡dk�s€J ‚t |d
¡dk�s–J ‚W d   ƒI d H  �qÄ1 I d H �sº0    Y  W t |¡ nt |¡ 0 d S )Nrg   s   1234é   r“   s   12344321r   T)rh   rœ   rj   )rh   rj   i   )ry   rz   r{   ÚSTDOUTZstdiori   rj   rl   Zsend_eofr…   ÚappendÚjoinrR   r   r£   rh   rm   r;   r'   ÚosÚpipeÚcloseÚread)rH   r<   Úoutputrv   rˆ   ÚrÚwr.   r.   r/   Útest_stderr_stdout©  sv    ü<üý<ü
Fr½   c                  Ã  sä   t  t¡�$} tdgdd�I d H  W d   ƒ n1 s40    Y  dt| jƒv sPJ ‚dt| jƒv sbJ ‚tràt  t¡�$} tdgdd�I d H  W d   ƒ n1 sš0    Y  t  t¡�"} tddd�I d H  W d   ƒ n1 sÖ0    Y  d S )	NZlszutf-8)Úencodingzunbuffered byte streamsz&the 'encoding' option is not supportedT)ÚshellF)r¤   r¥   Ú	TypeErrorr   r(   rF   r'   )r®   r.   r.   r/   Útest_errorsï  s    22rÁ   c                 ƒ  sd   ddddœ‡ fdd„}|t jtƒI d H  |t jtƒI d H  tsBtsLtjdkr`|dd	„ t	ƒI d H  d S )
NzCallable[[Process], None]zsignal.Signals | NonerJ   )Úsend_itÚsignumr*   c              
   “  s¼   t dƒ�f}ˆ tdƒƒ4 I d H š,}| |ƒ | ¡ I d H  W d   ƒI d H  q`1 I d H sV0    Y  W d   ƒ n1 st0    Y  |jrˆJ ‚trª|d us˜J ‚|j| ks¸J ‚n|jdks¸J ‚d S )Nç      ð?é  r   )r   r4   r;   r~   r'   rR   )rÂ   rÃ   r”   r<   ©rH   r.   r/   Útest_one_signalÿ  s    
V
z%test_signals.<locals>.test_one_signalr"   c                 S  s
   |   t¡S r9   )Úsend_signalr&   ©r<   r.   r.   r/   Ú<lambda>  r“   ztest_signals.<locals>.<lambda>)
r   r:   r$   Ú	terminater%   r
   r'   r,   Úplatformr&   )rH   rÇ   r.   rÆ   r/   Útest_signalsý  s
    rÍ   zPOSIX specific)Úreasonc              
   Ã  s  t rtjdkrd S t tjtj¡}zØ| tdƒƒ4 I d H šœ}t ¡ 4 I d H šF}| 	|j
¡ tƒ I d H  | ¡  t ¡ d |j_W d   ƒI d H  q¦1 I d H sœ0    Y  |jjr²J ‚|jdksÀJ ‚W d   ƒI d H  qê1 I d H sà0    Y  W t tj|¡ nt tj|¡ 0 d S )Nr"   rÅ   rÄ   r   )r
   r,   rÌ   ÚsignalÚSIGCHLDÚSIG_IGNr4   r   r?   rc   r;   r   r:   r|   rC   r}   r~   rR   ©rH   Zold_sigchldr<   rE   r.   r.   r/   Útest_wait_reapable_fails  s    ::rÓ   c                 Ã  sB  t rtjdkrd S tjddd���
 t tjtj¡}zØ| tdƒƒ4 I d H šœ}t	 
¡ 4 I d H šF}| |j¡ tƒ I d H  | ¡  t	 ¡ d |j_W d   ƒI d H  q¸1 I d H s®0    Y  |jjrÄJ ‚|jdksÒJ ‚W d   ƒI d H  qü1 I d H sò0    Y  W t tj|¡ nt tj|¡ 0 W d   ƒ n1 �s40    Y  d S )Nr"   rX   FrY   rÅ   rÄ   r   )r
   r,   rÌ   r   r[   rÏ   rÐ   rÑ   r4   r   r?   rc   r;   r   r:   r|   rC   r}   r~   rR   rÒ   r.   r.   r/   Ú!test_wait_reapable_fails_no_pidfd1  s    ::rÔ   c               
     s  ddl m}  tr(tjdks$tjdkr(d S | j d¡s>t d¡ ddl	m
} d‰ t d	d
g¡‰ddddœ‡ ‡fdd„}t tj|¡}zTt d¡ |ˆjƒ ˆjdd�dks¬J ‚W ˆjd u rÈˆ ¡  ˆ ¡  t tj|¡ n*ˆjd u ròˆ ¡  ˆ ¡  t tj|¡ 0 d S )Nr   )Úwait_child_exitingr"   ÚdarwinZwaitidzwaitid only)Úsync_wait_reapableFr   Z3600r1   zFrameType | NonerJ   )ÚsigÚframer*   c                   s   d‰ ˆ  ¡  d S ©NT)r:   )rØ   rÙ   ©Z	got_alarmZsleeperr.   r/   Úon_alarm`  s    z#test_waitid_eintr.<locals>.on_alarmrM   )Útimeouti÷ÿÿÿ)Z_subprocess_platformrÕ   r
   r,   rÌ   Ú
__module__Úendswithr¤   ÚskipZ_subprocess_platform.waitidr×   rz   ÚPopenrÏ   ZSIGALRMZalarmÚpidr;   rR   r:   )rÕ   r×   rÜ   Zold_sigalrmr.   rÛ   r/   Útest_waitid_eintrJ  s,    



û
rã   c               	   ƒ  sŽ   d‰ dddœ‡ fdd„} t  ¡ 4 I d H šD}| tttdƒ| d�¡ tƒ I d H  |j ¡  W d   ƒI d H  q‚1 I d H sx0    Y  ˆ sŠJ ‚d S )	NFr   rJ   ©r<   r*   c                 “  s@   d‰ |   ¡  ztƒ I d H  W | jd us<J ‚n| jd us:J ‚0 d S rÚ   )rË   r   rR   rÉ   ©Zcustom_deliver_cancel_calledr.   r/   Úcustom_deliver_cancelv  s
    z9test_custom_deliver_cancel.<locals>.custom_deliver_cancelr]   ©Zdeliver_cancel©	r   r?   rc   r   r   r4   r   rC   rD   )ræ   rE   r.   rå   r/   Útest_custom_deliver_cancels  s    ÿ4ré   c                    sf   dddœdd„‰ ddœ‡ fdd„} t t ttd	ƒƒƒ� tj| d
d� W d   ƒ n1 sX0    Y  d S )Nr   rJ   rä   c                 Ó  s   |   ¡  tdƒ‚d S )NZfoo)rË   r§   rÉ   r.   r.   r/   ræ   Œ  s    z6test_bad_deliver_cancel.<locals>.custom_deliver_cancelrk   c               	   “  sn   t  ¡ 4 I d H šD} |  tttdƒˆ d�¡ tƒ I d H  | j ¡  W d   ƒI d H  qj1 I d H s`0    Y  d S )Nr]   rç   rè   )rE   ©ræ   r.   r/   Údo_stuff�  s    ÿz)test_bad_deliver_cancel.<locals>.do_stuffz^foo$T)Zstrict_exception_groups)r   r   r§   r   Úrun)rë   r.   rê   r/   Útest_bad_deliver_cancel‹  s    	rí   zpytest.MonkeyPatch)Úmonkeypatchr*   c              
   ƒ  s¼   t j‰ dddœ‡ fdd„}|  t d|¡ tjtdd��r t ¡ 4 I d H š<}| t	t
d	ƒ¡ tƒ I d H  |j ¡  W d   ƒI d H  qš1 I d H s�0    Y  W d   ƒ n1 s®0    Y  d S )
Nr   r   )Úselfr*   c                   s   ˆ | ƒ t dƒ‚d S )NZwhoops)ÚOSError)rï   ©Zoriginal_terminater.   r/   Úbroken_terminate   s    z>test_warn_on_failed_cancel_terminate.<locals>.broken_terminaterË   z
.*whoops.*r    r]   )r   rË   Úsetattrr¤   ÚwarnsÚRuntimeWarningr   r?   rc   r   r4   r   rC   rD   )rî   rò   rE   r.   rñ   r/   Ú$test_warn_on_failed_cancel_terminate�  s    rö   z
posix onlyr   )Úautojump_clockrî   r*   c              
   Ã  s¦   |  tddd„ ¡ tjtdd��r t ¡ 4 I d H š<}| tt	dƒ¡ t
ƒ I d H  |j ¡  W d   ƒI d H  q„1 I d H sz0    Y  W d   ƒ n1 s˜0    Y  d S )NrË   c                  W  s   d S r9   r.   )r7   r.   r.   r/   rÊ   ²  r“   z8test_warn_on_cancel_SIGKILL_escalation.<locals>.<lambda>z.*ignored SIGTERM.*r    r]   )ró   r   r¤   rô   rõ   r   r?   rc   r   r4   r   rC   rD   )r÷   rî   rE   r.   r.   r/   Ú&test_warn_on_cancel_SIGKILL_escalation­  s    rø   c               
   Ã  sœ   t tjƒ�p t ¡ 4 I d H š:} |  tt¡I d H }t|t	ƒs>J ‚|}W d   ƒI d H  ql1 I d H sb0    Y  W d   ƒ n1 s€0    Y  |j
dks˜J ‚d S )NrM   )r   rz   r¬   r   r?   rA   r   rT   rB   r   rR   )rE   rF   r<   r.   r.   r/   Ú test_run_process_background_fail½  s    Lrù   ú/dev/fdz,requires a way to iterate through open filesc                  Ã  sæ   t  ¡  ttdƒ ¡ ƒ} ttƒI d H  ttdƒ ¡ ƒ| ks>J ‚t t	j
¡� ttƒI d H  W d   ƒ n1 sn0    Y  ttdƒ ¡ ƒ| ks�J ‚t t¡�  tdgƒI d H  W d   ƒ n1 sÀ0    Y  ttdƒ ¡ ƒ| ksâJ ‚d S )Nrú   z	/dev/fd/0)ÚgcZcollectÚsetÚSyncPathÚiterdirr   rP   r¤   r¥   rz   r¬   rT   ÚPermissionError)Zstarting_fdsr.   r.   r/   Útest_for_leaking_fdsÆ  s    ,.r   c                 Ã  sb   ddddœdd„}|   tjd|¡ tttƒ�" ttdd�I d H  W d   ƒ n1 sT0    Y  d S )	NÚobjectr(   r6   c                  ß  s   dS )NZoopsr.   )r7   r8   r.   r.   r/   Úvery_broken_openÝ  s    z9test_run_process_internal_error.<locals>.very_broken_openZ_open_processTrž   )ró   ÚtrioZ_subprocessr   ÚAttributeErrorr   rP   )rî   r  r.   r.   r/   Útest_run_process_internal_errorÚ  s    r  c               	   ƒ  s  d ‰ dddœ‡ fdd„} t tdƒƒI d H }t ¡ 4 I d H šÄ}| | |¡ tƒ I d H  tˆ tƒsbJ ‚| ¡  t	ƒ �" |j
 ¡  | ¡  W d   ƒ n1 s˜0    Y  tdƒ� ˆ  ¡ I d H  W d   ƒ n1 sÎ0    Y  ˆ  ¡ sèJ dƒ‚W d   ƒI d H  �q1 I d H �s0    Y  d S )	Nr   rJ   rä   c                 “  s    t ƒ ‰ |  ¡ I d H  ˆ  ¡  d S r9   )r   r;   rü   rÉ   ©Znoticed_exitr.   r/   Úwait_and_tellé  s    z7test_subprocess_pidfd_unnotified.<locals>.wait_and_tellr]   r�   z,child task wasn't woken after poll, DEADLOCK)r   r4   r   r?   rc   r   rB   r   rË   r   r_   r;   Úpollr   Úis_set)r  r<   rE   r.   r  r/   Ú test_subprocess_pidfd_unnotifiedæ  s    
&
,r
  )eÚ
__future__r   rû   r¶   r—   rÏ   rz   r,   Úcollections.abcr   r   Ú
contextlibr   r   Ú	functoolsr   Úpathlibr   rý   r	   Útypingr
   r   r   Zunittestr   r¤   r  Ztrio.testingr   r   Ú r   r   r   r   r   r   r   r   Z_core._tests.tutilr   r   Zlowlevelr   Ztestingr   r   r   Útypesr   Ztyping_extensionsr    Ú_abcr!   rÌ   r#   Ú__annotations__Únamer'   r$   r%   r&   r0   rP   rT   r£   r4   r=   rG   ÚmarkZparametrizeZbackground_process_paramrI   rW   r\   ra   re   rf   ry   r   r•   r«   r¯   r±   r½   rÁ   rÍ   ZskipifrÓ   rÔ   rã   ré   rí   rö   rø   rù   Úexistsr   r  r
  r.   r.   r.   r/   Ú<module>   sÌ   (


ýÿÿÿ"L9	E(	þ