o
    4@Hh<Q                     @  sr  d dl mZ d dlZd dlmZ d dlZd dlmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZmZ dd	lmZ dd
lT ddlmZ ddlmZ erXd dlmZ d dlmZmZ d;ddZd<ddZd;ddZ d=ddZ!d=ddZ"d;dd Z#d;d!d"Z$d;d#d$Z%d;d%d&Z&d;d'd(Z'd;d)d*Z(d;d+d,Z)d;d-d.Z*d;d/d0Z+d;d1d2Z,d;d3d4Z-d;d5d6Z.d;d7d8Z/d;d9d:Z0dS )>    )annotationsN)TYPE_CHECKING)RaisesGroup   )_coresleepsocket)can_bind_ipv6)StapledStreamaclose_forcefully)SocketListener)*)_assert_raises)_UnboundedByteQueue)Nursery)ReceiveStream
SendStreamreturnNonec               	     s   g  d
 fdd} d
 fdd}t  4 I d H }||  || || W d   I d H  n1 I d H s9w   Y  g  d
 fdd}t  4 I d H }|| |j  W d   I d H  n1 I d H sjw   Y   d	gksvJ d S )Nr   r   c                    s,   t dD ]	} t I d H  q d d S )N
   zbusy bee exhausted)ranger   
checkpointappend)_record X/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/trio/_tests/test_testing.pybusy_bee   s   z-test_wait_all_tasks_blocked.<locals>.busy_beec                        t  I d H   d d S )Nzquiet at last!wait_all_tasks_blockedr   r   r   r   r   waiting_for_bee_to_leave       z=test_wait_all_tasks_blocked.<locals>.waiting_for_bee_to_leavec                     s6   z	t  I d H  W d S  tjy    d Y d S w )Nok)r!   r   	Cancelledr   r   r   r   r   cancelled_while_waiting,   s   z<test_wait_all_tasks_blocked.<locals>.cancelled_while_waitingr$   r   r   )r   open_nursery
start_sooncancel_scopecancel)r   r"   nurseryr&   r   r   r   test_wait_all_tasks_blocked   s    

(
(r-   
mock_clock	MockClockc              	     s   g  d fdd}t  4 I d H 1}|| t I d H   dgks%J | d t I d H   ddgks8J W d   I d H  d S 1 I d H sIw   Y  d S )	Nr   r   c                     s(     d tdI d H    d d S )Ntt start   tt finishedr   r   r   r   r   r   timeout_task;   s   
z?test_wait_all_tasks_blocked_with_timeouts.<locals>.timeout_taskr0   r   r2   r'   )r   r(   r)   r!   jump)r.   r4   r,   r   r   r   )test_wait_all_tasks_blocked_with_timeouts8   s   

.r6   c               	     s   g  d fdd} d fdd}d fdd}d fd	d
}t  4 I d H $}||  || || || || W d   I d H  n1 I d H sQw   Y   g dks^J d S )Nr   r   c                     sD     d tdI d H  tdI d H  tdI d H    d d S )Nblink startg{Gz?	blink endr3   r   r   r   r   blinkL   s   
z7test_wait_all_tasks_blocked_with_cushion.<locals>.blinkc                     r   )Nwait_no_cushion endr    r   r   r   r   wait_no_cushionS   r#   zAtest_wait_all_tasks_blocked_with_cushion.<locals>.wait_no_cushionc                        t dI d H   d d S )Ng{Gz?wait_small_cushion endr    r   r   r   r   wait_small_cushionW      zDtest_wait_all_tasks_blocked_with_cushion.<locals>.wait_small_cushionc                     r<   )NgQ?wait_big_cushion endr    r   r   r   r   wait_big_cushion[   r?   zBtest_wait_all_tasks_blocked_with_cushion.<locals>.wait_big_cushion)r7   r:   r8   r=   r=   r@   r'   )r   r(   r)   )r9   r;   r>   rA   r,   r   r   r   (test_wait_all_tasks_blocked_with_cushionI   s   



(rB   recwarnpytest.WarningsRecorderc              
     sD  t   t I d H  W d    n1 sw   Y  tt t   W d    n1 s/w   Y  W d    n1 s>w   Y  tjtjfD ]4}t| tt! t   | I d H  W d    n1 siw   Y  W d    n1 sxw   Y  qIt   t I d H  t I d H  W d    d S 1 sw   Y  d S N)	assert_checkpointsr   r   pytestraisesAssertionErrorcheckpoint_if_cancelledcancel_shielded_checkpointprintrC   partial_yieldr   r   r   test_assert_checkpointss   s2   "rO   c              
     s~  t   W d    n1 sw   Y  tt" t   t I d H  W d    n1 s/w   Y  W d    n1 s>w   Y  tjtjfD ]4}t| tt! t   | I d H  W d    n1 siw   Y  W d    n1 sxw   Y  qItt2 t   t I d H  t I d H  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S rE   )	assert_no_checkpointsrG   rH   rI   r   r   rJ   rK   rL   rM   r   r   r   test_assert_no_checkpoints   s:   "rQ   c               
     s  g  d fdddfd	d
} dfdd}t  }t 4 I d H C}|| | ||| |d4 I d H  t I d H  W d   I d H  n1 I d H sOw   Y   g dks\J W d   I d H  n1 I d H slw   Y  t  }|d4 I d H  W d   I d H  n1 I d H sw   Y  tt/ |d4 I d H  W d   I d H  n1 I d H sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nvalobjectr   r   c                   s   t |   |  d S rE   )rL   r   )rR   r   r   r   t   s   ztest_Sequencer.<locals>.tseq	Sequencerc              	     s   | d4 I d H   d W d   I d H  n1 I d H sw   Y  | d4 I d H   d W d   I d H  n1 I d H s@w   Y  | d4 I d H   d W d   I d H  d S 1 I d H scw   Y  d S )N   f1rW      rY   rZ      rY   r\   r   rU   rT   r   r   rY      s   
(
(
.ztest_Sequencer.<locals>.f1c              	     s   | d4 I d H   d W d   I d H  n1 I d H sw   Y  | d4 I d H   d W d   I d H  d S 1 I d H sAw   Y  d S )Nr   f2r   r   ra   r   r   r^   r_   r   r   ra      s   
(
.ztest_Sequencer.<locals>.f2r1   )r`   rX   rb   r[   r]   r   )rR   rS   r   r   )rU   rV   r   r   )rV   r   r(   r)   r!   rG   rH   RuntimeError)rY   ra   rU   r,   r   )r   rT   r   test_Sequencer   s2   (((*"rd   c               
     s8  g  t  d fdd} t 4 I d H 5}|| d || d d	4 I d H  W d   I d H  n1 I d H s<w   Y  W d   I d H  n1 I d H sQw   Y   d
dgks^J tt/ d4 I d H  W d   I d H  n1 I d H s}w   Y  W d    d S W d    d S 1 sw   Y  d S )Niintr   r   c              
     s   t  L}| dkr|  z | 4 I d H  W d   I d H  n1 I d H s(w   Y  W n ty@    d|  d Y n	w W d    d S W d    d S 1 sTw   Y  d S )NrW   zseq(z) RuntimeError)r   CancelScoper+   rc   r   )re   scoper   rU   r   r   child   s    
("z$test_Sequencer_cancel.<locals>.childrW   r   r   zseq(1) RuntimeErrorzseq(2) RuntimeErrorrZ   )re   rf   r   r   )rV   r   r(   r)   rG   rH   rc   )rj   r,   r   ri   r   test_Sequencer_cancel   s&   
*(*"rk   c                	   C  s   t t tt W d    n1 sw   Y  W d    n1 s$w   Y  t t  tt dd  W d    n1 sBw   Y  W d    n1 sQw   Y  tt t1 s`w   Y  d S )NfoorW   )rG   rH   rI   r   rc   	TypeErrorr   r   r   r   test__assert_raises   s   



rn   c               
     s  t    d  d  ddksJ  ddks J  d   dks-J ttj  d W d    n1 sCw   Y  ttj    W d    n1 s]w   Y  tt  d W d    n1 sww   Y   d	 t   	dI d H d	ksJ W d    n1 sw   Y   d
  d t   	dI d H dksJ W d    n1 sw   Y  t   	 I d H dksJ W d    n1 sw   Y  d fdd} d fdd}t
 4 I d H }||d || d W d   I d H  n1 I d H sw   Y  ttj3 t
 4 I d H }||d ||d W d   I d H  n1 I d H sLw   Y  W d    n	1 s\w   Y     ttj  d W d    n	1 s|w   Y   ddksJ   dksJ  	dI d H dksJ  	 I d H dksJ    t  dfdd}t
 4 I d H }||d || W d   I d H  d S 1 I d H sw   Y  d S ) N   123   456rW      1r   s   23456   789string   abc   defs   ghi   ds   efghidatabytesr   r   c                   s   t  I d H   |  d S rE   )r!   putrw   ubqr   r   putter  r#   z'test__UnboundeByteQueue.<locals>.putterexpectc                   sD   t     I d H | ksJ W d    d S 1 sw   Y  d S rE   )rF   get)r~   r{   r   r   getter  s   "z'test__UnboundeByteQueue.<locals>.getter   xyzs   asdf   ---    c                     s   t  I d H     d S rE   )r!   closer   )ubq2r   r   closer=  s   z'test__UnboundeByteQueue.<locals>.closerrw   rx   r   r   )r~   rx   r   r   r'   )r   ry   
get_nowaitrG   rH   r   
WouldBlockrm   rF   r   r(   r)   r   BusyResourceErrorr   ClosedResourceError)r}   r   r,   r   r   )r|   r   r   test__UnboundeByteQueue   sr   






**0r   c               	     s   t  dfdd  dI d H  dd	ksJ  d
ks#J t   I d H  W d    n1 s8w   Y  ttj   W d    n1 sRw   Y  ttj d W d    n1 smw   Y   dI d H  t   I d H dksJ W d    n1 sw   Y  dd fdd} t	 4 I d H }|
|  |
|  W d   I d H  n1 I d H sw   Y  dksJ t   I d H  W d    n1 sw   Y   I d H dksJ  I d H dksJ ttj  dI d H  W d    n	1 sw   Y  jd u s%J jd u s-J jd u s5J g dfdd}dfdd}dfdd}t |||j|u s[J j|u scJ j|u skJ dI d H   I d H  tI d H    g dksJ d S )Nrw   rx   r   r   c                   s>   t    | I d H  W d    d S 1 sw   Y  d S rE   )rF   send_allrz   )mssr   r   do_send_allI  s   "z*test_MemorySendStream.<locals>.do_send_allro   rW   rq   s   23r   rp   r   c                     s6   z
 dI d H  W d S  t jy   d7 Y d S w )N   xxxrW   )r   r   r   )r   resource_busy_countr   r   do_send_all_count_resourcebusyc  s   z=test_MemorySendStream.<locals>.do_send_all_count_resourcebusyr   r   r   c                     s       dks	J d d S )Nrt   send_all_hook)get_data_nowaitr   r   )mss2r   r   r   r     s   z,test_MemorySendStream.<locals>.send_all_hookc                          d d S )N"wait_send_all_might_not_block_hookr   r   r   r   r   r        zAtest_MemorySendStream.<locals>.wait_send_all_might_not_block_hookc                          d d S )N
close_hookr   r   r   r   r   r        z)test_MemorySendStream.<locals>.close_hookrt   )r   r   r   r   r   r'   )MemorySendStreamr   rF   wait_send_all_might_not_blockrG   rH   r   r   get_datar(   r)   acloser   r   r   r   r   r   r   )r   r,   r   r   r   r   )r   r   r   r   r   r   test_MemorySendStreamF  sl   

(r   c               
     s  t   d fdd}  d | dI d H d	ksJ | d
I d H dks&J  d | d I d H dks6J ttj2 t 4 I d H }|| d
 || d
 W d   I d H  n1 I d H saw   Y  W d    n1 spw   Y   jd u s|J  d       | d
I d H dksJ | d
I d H dksJ | d
I d H dksJ t	
tj  d W d    n1 sw   Y  dfdd}g dfdd}t ||j|u sJ j|u sJ d d
I d H dksJ d
I d H dksJ d
I d H dksJ d d _d
I d H dks(J d t   I d H  W d    n	1 sCw   Y  dgksPJ t	
tj d
I d H  W d    d S 1 skw   Y  d S )N	max_bytes
int | Noner   rx   c                   s<   t    | I d H W  d    S 1 sw   Y  d S rE   )rF   receive_somer   )mrsr   r   do_receive_some  s   $z1test_MemoryReceiveStream.<locals>.do_receive_somert   rW      ar   s   bcru   r   r   r   c                     r   )Nr   )put_datar   )mrs2r   r   receive_some_hook  r   z3test_MemoryReceiveStream.<locals>.receive_some_hookc                     r   )Nclosedr   r   r   r   r   r     r   z,test_MemoryReceiveStream.<locals>.close_hooks   yyys   yyyxxxr   s   zzzs   lost on closer   )r   r   r   rx   r'   )MemoryReceiveStreamr   r   r   r   r(   r)   r   put_eofrG   rH   r   r   r   rF   r   )r   r,   r   r   r   )r   r   r   r   test_MemoryReceiveStream  s\   

(




$r   c                    s   t  } |   ttj | dI d H dksJ W d    n1 s%w   Y  |   ttj | d W d    n1 sDw   Y  t  }|d |  ttj |dI d H  W d    d S 1 sow   Y  d S )Nr   r   ro   r   )r   r   rG   rH   r   r   r   r   )r   r   r   r   r   test_MemoryRecvStream_closing  s    
"r   c                    s   t  } t }t| | | dI d H  t| | |dI d H dks%J | dI d H  t| |dds6J |dI d H dksBJ t| |ddsKJ t| |ddsTJ t| |ddr]J |dI d H dksiJ |   t| | |dI d H dks~J d S )	Nro   r   rp   rW   r      4s   56r   )r   r   memory_stream_pumpr   r   r   )r   r   r   r   r   test_memory_stream_pump  s"   


r   c               	     sl  t  \}  | jd usJ | jd u sJ | jd usJ  jd u s"J | dI d H   dI d H dks6J d fdd}t 4 I d H }|	|d	 t
 I d H  | d	I d H  W d   I d H  n1 I d H sjw   Y  t 4 I d H }|	|d
 t
 I d H  |  I d H  W d   I d H  n1 I d H sw   Y  t  \}  t 4 I d H }|	|d
 t
 I d H  |   W d   I d H  n1 I d H sw   Y  t  \}  | j}d | _| dI d H  ddd}d fdd}t 4 I d H }|	|| |	| W d   I d H  n1 I d H sw   Y  || _| dI d H   dI d H dks4J d S )Nro   r   expectedrx   r   r   c                   s     dI d H | ksJ d S Nr   r   )r   rr   r   receiver     z1test_memory_stream_one_way_pair.<locals>.receiverrt   r   rp   r,   r   c                   s   t  I d H  | j  d S rE   )r!   r*   r+   )r,   r   r   r   cancel_after_idle0  r#   z:test_memory_stream_one_way_pair.<locals>.cancel_after_idlec                     sD   t tj  dI d H  W d    d S 1 sw   Y  d S r   )rG   rH   r   r%   r   r   r   r   r   check_for_cancel4  s   "z9test_memory_stream_one_way_pair.<locals>.check_for_cancelrr   s   456789)r   rx   r   r   )r,   r   r   r   r'   )memory_stream_one_way_pairr   r   r   r   r   r   r   r(   r)   r!   r   r   )sr   r,   oldr   r   r   r   r   test_memory_stream_one_way_pair  sL   
((

(

*r   c               	     s   t  \  dI d H  dI d H  dI d H dks"J  dI d H dks.J   I d H  dI d H dksAJ dfdd} d fd	d
}t 4 I d H }|| ||  W d   I d H  d S 1 I d H ssw   Y  d S )Nro   rt   r   r   r   r   c                     s"   t  I d H   dI d H  d S )Nr   )r!   r   r   )br   r   senderM  s   z'test_memory_stream_pair.<locals>.senderc                     s     dI d H dksJ d S )Nr   r   r   r   )ar   r   r   Q  r   z)test_memory_stream_pair.<locals>.receiverr'   )memory_stream_pairr   r   send_eofr   r(   r)   )r   r   r,   r   )r   r   r   test_memory_stream_pairC  s   

.r   c                    s:   ddd} t | d I d H  d	dd}t|d I d H  d S )
Nr   ,tuple[MemorySendStream, MemoryReceiveStream]c                        t  S rE   )r   r   r   r   r   one_way_stream_makerZ     zDtest_memory_streams_with_generic_tests.<locals>.one_way_stream_makerqtuple[StapledStream[MemorySendStream, MemoryReceiveStream], StapledStream[MemorySendStream, MemoryReceiveStream]]c                     r   rE   )r   r   r   r   r   half_closeable_stream_maker_     zKtest_memory_streams_with_generic_tests.<locals>.half_closeable_stream_maker)r   r   )r   r   )check_one_way_streamcheck_half_closeable_stream)r   r   r   r   r   &test_memory_streams_with_generic_testsY  
   

r   c                    s:   ddd} t | | I d H  d	dd}t||I d H  d S )
Nr    tuple[SendStream, ReceiveStream]c                     r   rE   )lockstep_stream_one_way_pairr   r   r   r   r   i  r   zFtest_lockstep_streams_with_generic_tests.<locals>.one_way_stream_makerYtuple[StapledStream[SendStream, ReceiveStream], StapledStream[SendStream, ReceiveStream]]c                     r   rE   )lockstep_stream_pairr   r   r   r   two_way_stream_makern  r   zFtest_lockstep_streams_with_generic_tests.<locals>.two_way_stream_maker)r   r   )r   r   )r   check_two_way_stream)r   r   r   r   r   (test_lockstep_streams_with_generic_testsh  r   r   c                    s2  ddd} t  }|dI d H  |d | t|I d H  t  }|d	I d H  |d | t|I d H  trYt jt jd
}|dI d H  |d | t|I d H  tt drt jt jd
}t	
 $}| d}||I d H  |d | t|I d H  W d    d S 1 sw   Y  d S d S )Nlistenerr   r   r   c                   s   | 4 I d H f t | I d H }|4 I d H B |  I d H }|4 I d H  |dI d H  |dI d H dks8J W d   I d H  n1 I d H sHw   Y  W d   I d H  n1 I d H s]w   Y  W d   I d H  d S 1 I d H ssw   Y  d S )N   xrW   )open_stream_to_socket_listeneracceptr   r   )r   client_streamserver_streamr   r   r   checkx  s   **.z2test_open_stream_to_socket_listener.<locals>.check)z	127.0.0.1r   r   )z0.0.0.0r   )family)z::r   AF_UNIXz/sock)r   r   r   r   )tsocketr   bindlistenr   r	   AF_INET6hasattrr   tempfileTemporaryDirectory)r   socktmpdirpathr   r   r   #test_open_stream_to_socket_listenerw  s0   








"r   c                  C  sV   ddd} t jtdd	 t| t td
dd W d    d S 1 s$w   Y  d S )Nr.   rS   autojump_clockr   r   c                   s   d S rE   r   r.   r   r   r   r   busy_kitchen  s   z$test_trio_test.<locals>.busy_kitchenz"^too many clocks spoil the broth!$)matchr   )autojump_thresholdr   )r.   rS   r   rS   r   r   )rG   rH   
ValueError	trio_testr/   )r   r   r   r   test_trio_test  s   
"r   r'   )r.   r/   r   r   )rC   rD   r   r   )1
__future__r   r   typingr   rG   trio.testingr    r   r   r   r   _core._tests.tutilr	   _highlevel_genericr
   r   _highlevel_socketr   testingtesting._check_streamsr   testing._memory_streamsr   trior   trio.abcr   r   r-   r6   rB   rO   rQ   rd   rk   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sD    

 

*


&


H
\
=


8


*