a
    QIh"                     @  s  d dl mZ d dlZd dlmZmZmZ d dlZd dlZd dl	Z	ddl
mZ ddl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 erd d	lmZmZ ed
Zddd
dddZdZeddddZeddddZ ddddZ!G dd deZ"ej#$deegdddddZ%edddd Z&eddd!d"Z'eddd#d$Z(ddd%d&Z)d'dd(d)d*Z*d'dd(d+d,Z+ej#j,d-d.ddd/d0Z-dS )1    )annotationsN)TYPE_CHECKINGProtocolTypeVar   )_core)slow)TooSlowError
fail_afterfail_atmove_on_after
move_on_atsleepsleep_foreversleep_until)assert_checkpoints)	AwaitableCallableTzCallable[[], Awaitable[T]]float)fexpected_durreturnc                   sV   t  }t| I d H }t  | }t||  d||   krHdk sNn J | S )NgG?g      ?)timeperf_counteroutcomeZacaptureprintunwrap)r   r   startresultZdur r    S/var/www/html/venv_bot_3.9/lib/python3.9/site-packages/trio/_tests/test_timeouts.pycheck_takes_about   s    r"   g      ?Noner   c               	     s   dddd} t | tI d H  dddd}t |tI d H  t  tdI d H  W d    n1 sf0    Y  tt J ttj	 tdI d H  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr#   r$   c                     s   t t t I d H  d S N)r   r   current_timeTARGETr    r    r    r!   sleep_1C   s    ztest_sleep.<locals>.sleep_1c                     s   t tI d H  d S r%   )r   r'   r    r    r    r!   sleep_2H   s    ztest_sleep.<locals>.sleep_2r   )
r"   r'   r   r   r   r   r&   pytestraises	Cancelled)r(   r)   r    r    r!   
test_sleepA   s    ,r-   c                    s"   dddd} t | tI d H  d S )Nr#   r$   c                     s:   t t tdI d H  W d    n1 s,0    Y  d S Nd   )r   r'   r   r    r    r    r!   sleep_3W   s    
z#test_move_on_after.<locals>.sleep_3r"   r'   )r0   r    r    r!   test_move_on_afterU   s    r2   c               	     s   t j  dd fdd} t  4 I d H X}||  tt t  I d H  W d    n1 sf0    Y  W d   I d H  q1 I d H s0    Y  d S )Nr#   r$   c                     s(   t j I d H  t j td  d S r%   )triolowlevel
checkpointZ
rescheduler   Valuer    taskr    r!   	wake_taskb   s    z1test_cannot_wake_sleep_forever.<locals>.wake_task)	r3   r4   current_taskZopen_nurseryZ
start_soonr*   r+   RuntimeErrorr   )r9   Znurseryr    r7   r!   test_cannot_wake_sleep_forever^   s    

r<   c                   @  s   e Zd ZddddddZdS )TimeoutScoper   boolztrio.CancelScope)secondsshieldr   c                C  s   d S r%   r    )selfr?   r@   r    r    r!   __call__m       zTimeoutScope.__call__N)__name__
__module____qualname__rB   r    r    r    r!   r=   l   s   r=   scope)rG   r   c              
     s   t  }| tdd}|  ztj I d H  W n tjyR   t	d Y n0 d|_
ttj  tj I d H  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )NTr@   zshield didn't workF)r   CancelScoper'   cancelr3   r4   r5   r,   r*   Zfailr@   r+   )rG   outerinnerr    r    r!   test_context_shields_from_outerp   s    rM   c                    s"   dddd} t | tI d H  d S )Nr#   r$   c               	     sl   t  P} ttdd$ |   t I d H  W d    n1 s@0    Y  W d    n1 s^0    Y  d S NTrH   )r   rI   r   r'   rJ   r   rK   r    r    r!   r8      s    z:test_move_on_after_moves_on_even_if_shielded.<locals>.taskr1   r7   r    r    r!   ,test_move_on_after_moves_on_even_if_shielded}   s    rP   c                    s"   dddd} t | tI d H  d S )Nr#   r$   c               
     s   t tx t P} ttdd$ |   t I d H  W d    n1 sL0    Y  W d    n1 sj0    Y  W d    n1 s0    Y  d S rN   )	r*   r+   r	   r   rI   r
   r'   rJ   r   rO   r    r    r!   r8      s    z4test_fail_after_fails_even_if_shielded.<locals>.taskr1   r7   r    r    r!   &test_fail_after_fails_even_if_shielded   s    rQ   c                    s  dddd} t t  t| tI d H  W d    n1 s>0    Y  tt d  tdI d H  W d    n1 s|0    Y  dddd}t t  t|tI d H  W d    n1 s0    Y  t	d tdI d H  W d    n1 s0    Y  d S )	Nr#   r$   c                     sB   t t t  tdI d H  W d    n1 s40    Y  d S r.   )r   r   r&   r'   r   r    r    r    r!   sleep_4   s    ztest_fail.<locals>.sleep_4r/   r   c                     s:   t t tdI d H  W d    n1 s,0    Y  d S r.   )r
   r'   r   r    r    r    r!   sleep_5   s    
ztest_fail.<locals>.sleep_5)
r*   r+   r	   r"   r'   r   r   r&   r   r
   )rR   rS   r    r    r!   	test_fail   s    .,.
rT   c               
     s   t d} tdft| ft| ffD ]D\}}tjtdd ||I d H  W d    q1 sX0    Y  qtdft| ft| ftdft| ft	| ffD ]^\}}tjtdd8 || W d    n1 s0    Y  W d    q1 s0    Y  qd S )Nnanz8^(deadline|`seconds`) must (not )*be (non-negative|NaN)$match)
r   r   r   r*   r+   
ValueErrorr
   r   r   r   )rU   Zfunvalcmr    r    r!   test_timeouts_raise_value_error   s.    .
r\   z_core.MockClock)
mock_clockr   c                   sR  t d}|jdksJ | d t }|}|jd u s<J |j|d ksNJ |jdks\J |d |_|j|d ksxJ |jdksJ d|_|j|d ksJ |jdksJ W d    n1 s0    Y  t d}|jdu sJ d|_|jdu sJ | d t }|2}|j|d ks J ||u s.J W d    n1 sD0    Y  d S )N         FT)r   relative_deadlinejumpr   r&   is_relativedeadliner@   )r]   rcsr   csr    r    r!   test_timeout_deadline_on_entry   s.    

,
rg   c                   sv  t d}| d t }d}tjt|d" |j|d ks@J W d    n1 sT0    Y  | d tjt|d" |j|d ksJ W d    n1 s0    Y  tjt|d d|_W d    n1 s0    Y  |jdksJ |jrJ t	d}d}tj
t|d |jsJ W d    n1 s20    Y  tj
t|d d|_W d    n1 sh0    Y  d S )	Nr^   r_   zC^unentered relative cancel scope does not have an absolute deadlinerW            zG^unentered non-relative cancel scope does not have a relative deadline$)r   rb   r   r&   r*   ZwarnsDeprecationWarningrd   rc   r   r+   r;   ra   )r]   rf   r   Z	match_strr    r    r!   test_invalid_access_unentered   s(    
0
0$
,rl   znot implemented)reasonc                    s(   t d} | jsJ td}|js$J d S )Nr^   )r   rd   r
   ra   )Z
my_fail_atZmy_fail_afterr    r    r!    test_fail_access_before_entering  s    
rn   ).
__future__r   r   typingr   r   r   r   r*   r3    r   Z_core._tests.tutilr   Z	_timeoutsr	   r
   r   r   r   r   r   r   testingr   collections.abcr   r   r   r"   r'   r-   r2   r<   r=   markZparametrizerM   rP   rQ   rT   r\   rg   rl   Zxfailrn   r    r    r    r!   <module>   sB   (
!"