U
    g!                     @   s  d dl Z d dlmZ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dZeg ee f ee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e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&e
j'dd"d#d$Z(e
j'dd"d%d&Z)ej j*d'd(ddd)d*Z+dS )+    N)	AwaitableCallableProtocolTypeVar   )_core)slow)TooSlowError
fail_afterfail_atmove_on_after
move_on_atsleepsleep_foreversleep_until)assert_checkpointsT)fexpected_durreturnc                    sV   t  }t| I d H }t  | }t||  d||   krHdk sNn t| S )NgG?g      ?)timeperf_counteroutcomeZacaptureprintAssertionErrorunwrap)r   r   startresultZdur r   =/tmp/pip-unpacked-wheel-ks04xdmi/trio/_tests/test_timeouts.pycheck_takes_about   s    r    g      ?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 5 Q R X tt , ttj	 tdI d H  W 5 Q R X W 5 Q R X d S )Nr!   c                      s   t t t I d H  d S N)r   r   current_timeTARGETr   r   r   r   sleep_1>   s    ztest_sleep.<locals>.sleep_1c                      s   t tI d H  d S r"   )r   r$   r   r   r   r   sleep_2C   s    ztest_sleep.<locals>.sleep_2r   )
r    r$   r   r   r   r   r#   pytestraises	Cancelled)r%   r&   r   r   r   
test_sleep<   s    r*   c                     s"   d ddd} t | tI d H  d S )Nr!   c                	      s&   t t tdI d H  W 5 Q R X d S Nd   )r   r$   r   r   r   r   r   sleep_3R   s    
z#test_move_on_after.<locals>.sleep_3r    r$   )r-   r   r   r   test_move_on_afterP   s    r/   c               
      sp   t j  d d fdd} t  4 I d H 4}||  tt t  I d H  W 5 Q R X W 5 Q I d H R X d S )Nr!   c                      s(   t j I d H  t j td  d S r"   )triolowlevel
checkpointZ
rescheduler   Valuer   taskr   r   	wake_task]   s    z1test_cannot_wake_sleep_forever.<locals>.wake_task)	r0   r1   Zcurrent_taskZopen_nurseryZ
start_soonr'   r(   RuntimeErrorr   )r6   Znurseryr   r4   r   test_cannot_wake_sleep_foreverY   s    

r8   c                   @   s    e Zd ZeeejdddZdS )TimeoutScope)secondsshieldr   c                C   s   d S r"   r   )selfr:   r;   r   r   r   __call__h       zTimeoutScope.__call__N)__name__
__module____qualname__floatboolr0   CancelScoper=   r   r   r   r   r9   g   s   r9   scope)rE   r   c                    s   t  }| tddr}|  ztj I d H  W n  tjk
rT   t	d Y nX d|_
ttj tj I d H  W 5 Q R X W 5 Q R X W 5 Q R X d S )NTr;   zshield didn't workF)r   rD   r$   cancelr0   r1   r2   r)   r'   Zfailr;   r(   )rE   outerinnerr   r   r   test_context_shields_from_outerk   s    rJ   c                     s"   d ddd} t | tI d H  d S )Nr!   c               
      sD   t  2} ttdd |   t I d H  W 5 Q R X W 5 Q R X d S NTrF   )r   rD   r   r$   rG   r   rH   r   r   r   r5   z   s    z:test_move_on_after_moves_on_even_if_shielded.<locals>.taskr.   r4   r   r   r   ,test_move_on_after_moves_on_even_if_shieldedx   s    rM   c                     s"   d ddd} t | tI d H  d S )Nr!   c                     sZ   t tF t 2} ttdd |   t I d H  W 5 Q R X W 5 Q R X W 5 Q R X d S rK   )	r'   r(   r	   r   rD   r
   r$   rG   r   rL   r   r   r   r5      s    z4test_fail_after_fails_even_if_shielded.<locals>.taskr.   r4   r   r   r   &test_fail_after_fails_even_if_shielded   s    
rN   c               	      s   d ddd} t t t| tI d H  W 5 Q R X tt d  tdI d H  W 5 Q R X d ddd}t t t|tI d H  W 5 Q R X t	d tdI d H  W 5 Q R X d S )Nr!   c                	      s.   t t t  tdI d H  W 5 Q R X 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 5 Q R X 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
   )rO   rP   r   r   r   	test_fail   s    
rQ   c                     s   t d} tdft| ft| ffD ]0\}}tjtdd ||I d H  W 5 Q R X qtdft| ft| ftdft| ft	| ffD ]6\}}tjtdd || W 5 Q R X W 5 Q R X qxd S )Nnanz8^(deadline|`seconds`) must (not )*be (non-negative|NaN)$match)
rB   r   r   r'   r(   
ValueErrorr
   r   r   r   )rR   Zfunvalcmr   r   r   test_timeouts_raise_value_error   s.    
rY   )
mock_clockr   c              	      s(  t d}|jdkst| d t }|}|jd ks<t|j|d ksNt|jdks\t|d |_|j|d ksxt|jdkstd|_|j|d kst|jdkstW 5 Q R X t d}|jdkstd|_|jdkst| d t }|(}|j|d kst||kstW 5 Q R X d S )N         FT)	r   relative_deadliner   jumpr   r#   is_relativedeadliner;   )rZ   rcsr   csr   r   r   test_timeout_deadline_on_entry   s.    


rd   c              	      s  t d}| d t }d}tjt|d |j|d ks@tW 5 Q R X | d tjt|d |j|d ksvtW 5 Q R X tjt|d d|_W 5 Q R X |jdkst|j	rtt
d}d}tjt|d |jstW 5 Q R X tjt|d d|_W 5 Q R X d S )	Nr[   r\   zC^unentered relative cancel scope does not have an absolute deadlinerT            zG^unentered non-relative cancel scope does not have a relative deadline$)r   r_   r   r#   r'   ZwarnsDeprecationWarningra   r   r`   r   r(   r7   r^   )rZ   rc   r   Z	match_strr   r   r   test_invalid_access_unentered   s(    


ri   znot implemented)reasonc                     s(   t d} | jsttd}|js$td S )Nr[   )r   ra   r   r
   r^   )Z
my_fail_atZmy_fail_afterr   r   r    test_fail_access_before_entering  s    
rk   ),r   typingr   r   r   r   r   r'   r0    r   Z_core._tests.tutilr   Z	_timeoutsr	   r
   r   r   r   r   r   r   Ztestingr   r   rB   r    r$   r*   r/   r8   r9   markZparametrizerJ   rM   rN   rQ   rY   Z	MockClockrd   ri   Zxfailrk   r   r   r   r   <module>   s<   (
!"