U
    gz%                     @   s.  d dl Z d dlZd dlZd dlmZmZ d dlZd dlZd dlm	Z	m
Z
 ddlm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 ed	Zdd
ddZdd
ddZdd
ddZdd
ddZej !ddd
ddZ"dd
ddZ#dd
ddZ$dd
ddZ%dd
ddZ&dS )    N)AnyTypeVar)MatcherRaisesGroup   )_core)!create_asyncio_future_in_new_loop'ignore_coroutine_never_awaited_warnings)ConflictDetectorNoPublicConstructorcoroutine_or_errorfinalfixup_module_metadatageneric_functionis_main_threadsignal_raisewait_all_tasks_blockedTreturnc               
      s\   g  t td d fdd} ttj| }zttj W 5 ttj| X  tjgksXtd S )N)signum_r   c                    s     |  d S N)append)r   r   record 9/tmp/pip-unpacked-wheel-ks04xdmi/trio/_tests/test_util.pyhandler"   s    z"test_signal_raise.<locals>.handler)intobjectsignalSIGFPEr   AssertionError)r   oldr   r   r   test_signal_raise   s    r&   c                     s   t d t d}   |  td W 5 Q R X W 5 Q R X tjtjdd&     W 5 Q R X W 5 Q R X W 5 Q R X d d fdd}tttjd< t 4 I d H }|	| |	| W 5 Q I d H R X W 5 Q R X d S )Nul1ul2ok)matchr   c                	      s      t  I d H  W 5 Q R X d S r   r   r   r'   r   r   wait_with_ul1:   s    z,test_ConflictDetector.<locals>.wait_with_ul1)
r
   printpytestraisesr   ZBusyResourceErrorr   r   open_nurseryZ
start_soon)r(   r,   Znurseryr   r+   r   test_ConflictDetector-   s    
r1   c                  C   s  dd l } dd l} | jjdks t| jjdks0t| jjjdksBt| jj	jdksTt| j
jjdksft| jjjjdkszt| jjjjdkst| jjdkst| jjdkst| jjjjdkst| jjjjdkst| jjd	kst| jjjd
kst| jjjd
kstd S )Nr   trioztrio.abcztrio.lowlevelztrio.testing	Cancelledsend_allzSendStream.send_allztrio.to_threadrun_sync)r2   trio.testingr3   
__module__r$   r0   abcZStreamZlowlevelZwait_task_rescheduledtestingZ	trio_testZ
ParkingLot__init__r4   __name____qualname__Z
SendStream	to_threadr5   )r2   r   r   r    test_module_metadata_is_fixed_upD   s     r>   c                     s.   t  s
td ddd} tj| I d H  d S )Nr   c                   S   s   t  r
td S r   )r   r$   r   r   r   r   not_main_thread_   s    z,test_is_main_thread.<locals>.not_main_thread)r   r$   r2   r=   r5   )r?   r   r   r   test_is_main_thread\   s    
r@   z(ignore:.*@coroutine.*:DeprecationWarningc               
      s  G dd d t   d ddd} tt}t|   W 5 Q R X dt|jksXtdd lt	j
dk rjtdfd	d
}tt}t|  W 5 Q R X dt|jksttt}tt  W 5 Q R X dt|jksttt}tt W 5 Q R X dt|jksttt}t   W 5 Q R X dt|jksLttt}t fdd W 5 Q R X dt|jksttt}ttdddgg W 5 Q R X dt|jkstttddd}tt}t|dg W 5 Q R X d}|t|jkst~W 5 Q R X d S )Nc                   @   s   e Zd ZdZdS )z)test_coroutine_or_error.<locals>.DeferredzJust kiddingN)r;   r7   r<   __doc__r   r   r   r   Deferredh   s   rB   r   c                      s   d S r   r   r   r   r   r   fm   s    z"test_coroutine_or_error.<locals>.fzexpecting an async functionr   )      c                   3   s     dE d H  d S )N   )sleepr   )asyncior   r   generator_based_corox   s    z5test_coroutine_or_error.<locals>.generator_based_cororH   Ztwistedc                      s     S r   r   r   )rB   r   r   <lambda>       z)test_coroutine_or_error.<locals>.<lambda>rF   r   rD   zappears to be synchronous)r   r   c                 S  s
   d V  d S r   r   )r   r   r   r   	async_gen   s    z*test_coroutine_or_error.<locals>.async_genz5expected an async function but got an async generator)r	   r.   r/   	TypeErrorr   strvaluer$   rH   sysversion_info	coroutiner   r   lenr!   )rC   excinforI   rL   msgr   )rB   rH   r   test_coroutine_or_errorf   sD    

rV   c                  C   s   t ttddd} | | t   kr4| ttf ks:n t| d| t d  krZdks`n t| jdksnt| jdks|t| jdkst| jtkstd S )N)argr   c                 S   s   | S )Look, a docstring!r   )rW   r   r   r   	test_func   s    z(test_generic_function.<locals>.test_func*   rX   rY   )	r   r   r    rN   r$   rA   r<   r;   r7   )rY   r   r   r   test_generic_function   s    &&r[   c               	   C   s<   t G dd d} tt G dd d| }W 5 Q R X dS )zTest that subclassing a @final-annotated class is not allowed.

    This checks both runtime results, and verifies that type checkers detect
    the error statically through the type-ignore comment.
    c                   @   s   e Zd ZdS )z(test_final_decorator.<locals>.FinalClassNr;   r7   r<   r   r   r   r   
FinalClass   s   r]   c                   @   s   e Zd ZdS )z&test_final_decorator.<locals>.SubClassNr\   r   r   r   r   SubClass   s   r^   N)r   r.   r/   rM   )r]   r^   r   r   r   test_final_decorator   s    r_   c               	   C   sN   G dd dt d} tt | dd W 5 Q R X t| jddd| sJtdS )zLThe NoPublicConstructor metaclass prevents calling the constructor directly.c                   @   s   e Zd ZeeddddZdS )z:test_no_public_constructor_metaclass.<locals>.SpecialClassN)abr   c                 S   s   |dkst |dkst dS )z*Check arguments can be passed to __init__.   Q	@N)r$   )selfr`   ra   r   r   r   r:      s    zCtest_no_public_constructor_metaclass.<locals>.SpecialClass.__init__)r;   r7   r<   r    floatr:   r   r   r   r   SpecialClass   s   rf   )	metaclassrb   rc   )ra   N)r   r.   r/   rM   
isinstance_creater$   )rf   r   r   r   $test_no_public_constructor_metaclass   s    rj   c                  C   s  t d} dd | _d| j_d| j_t| jt|  | jjdksDt| jjdksTtt d}dd |_d|j_d|j_t  |_	d|j	_t  |_
d|j
_d	|j
_d
d |_d|j_d |j_|j_tdddd dd d|_|j|j_tdt| |jjdkst|jjdkst|jjdks0t|j	jdksBt|jjdksTt|jjdksft|jjdksxt|j
jdkst|j
jdkstt|j
drt|jjjdkst|jjjdkst|jjjdkst|   |  |  |   d S )NZnot_trioc                   S   s   d S r   r   r   r   r   r   rJ      rK   z,test_fixup_module_metadata.<locals>.<lambda>	some_funcztrio._somemodule_implc                   S   s   d S r   r   r   r   r   r   rJ      rK   Z_something_elsenot_funclikeZ	only_namec                   S   s   d S r   r   r   r   r   r   rJ      rK   _private	SomeClassr   c                 S   s   d S r   r   rd   r   r   r   rJ      rK   c                 S   s   d S r   r   ro   r   r   r   rJ      rK   )r:   methodztrio.somemoduleonly_has_namer<   rp   zSomeClass.method)types
ModuleTyperk   r;   r<   r   varsr$   SimpleNamespacerl   rq   r7   rm   typern   	recursionhasattrrp   )Znon_trio_modulemodr   r   r   test_fixup_module_metadata   sZ    






	
rz   )'r"   rP   rr   typingr   r   r.   r2   r6   r   r    r   Z_core._tests.tutilr   r	   Z_utilr
   r   r   r   r   r   r   r   r9   r   r   r&   r1   r>   r@   markfilterwarningsrV   r[   r_   rj   rz   r   r   r   r   <module>   s*   (


<