a
    ze                     @   sx   d dl Z d dlZd dlmZ d dlmZ dd ZG dd de jZG dd	 d	ej	Z
G d
d de
Zedkrte  dS )    N)mock)utilsc                   C   s   t d  d S N)asyncioset_event_loop_policy r   r   4/usr/lib/python3.9/test/test_asyncio/test_runners.pytearDownModule   s    r	   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )

TestPolicyc                 C   s   || _ d | _d S r   )loop_factoryloop)selfr   r   r   r   __init__   s    zTestPolicy.__init__c                 C   s   t d S r   )RuntimeErrorr   r   r   r   get_event_loop   s    zTestPolicy.get_event_loopc                 C   s   |   S r   )r   r   r   r   r   new_event_loop   s    zTestPolicy.new_event_loopc                 C   s   |d ur|| _ d S r   r   )r   r   r   r   r   set_event_loop   s    zTestPolicy.set_event_loopN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r
      s   r
   c                       s0   e Zd Zdd Z fddZ fddZ  ZS )BaseTestc                    sB   t   t  _t  _d jj_d _ fdd}| _	 S )Nr   Fc                      s
   d _ d S NT)shutdown_ag_runr   r   r   r   shutdown_asyncgens)   s    z-BaseTest.new_loop.<locals>.shutdown_asyncgens)
r   ZBaseEventLoopr   MockZ_process_events	_selectorselectZreturn_valuer   r   )r   r   r   r   r   new_loop"   s    


zBaseTest.new_loopc                    s"   t    t| j}t| d S r   )supersetUpr
   r   r   r   r   Zpolicy	__class__r   r   r!   /   s    

zBaseTest.setUpc                    sH   t  }|jd ur0| |j  | |jj t d  t   d S r   )	r   Zget_event_loop_policyr   
assertTrueZ	is_closedr   r   r    tearDownr"   r#   r   r   r&   5   s    

zBaseTest.tearDown)r   r   r   r   r!   r&   __classcell__r   r   r#   r   r       s   r   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )RunTestsc                 C   s    dd }|  t| d d S )Nc                      s   t dI d H  dS )Nr   *   r   sleepr   r   r   r   mainB   s    z.RunTests.test_asyncio_run_return.<locals>.mainr)   )assertEqualr   runr   r,   r   r   r   test_asyncio_run_returnA   s    z RunTests.test_asyncio_run_returnc                 C   sD   dd }|  td t|  W d    n1 s60    Y  d S )Nc                      s   t dI d H  tdd S )Nr   spam)r   r+   
ValueErrorr   r   r   r   r,   I   s    z.RunTests.test_asyncio_run_raises.<locals>.mainr1   )assertRaisesRegexr2   r   r.   r/   r   r   r   test_asyncio_run_raisesH   s    z RunTests.test_asyncio_run_raisesc              
   C   sx   ddd hD ]f}| j |dF | td t| W d    n1 sJ0    Y  W d    q1 sh0    Y  qd S )N   c                   S   s   d S r   r   r   r   r   r   <lambda>Q       z5RunTests.test_asyncio_run_only_coro.<locals>.<lambda>)objza coroutine was expected)ZsubTestr3   r2   r   r.   )r   or   r   r   test_asyncio_run_only_coroP   s    z#RunTests.test_asyncio_run_only_coroc                    s    fdd}t |d t j|ddd tddd 0 t |d t j|ddd W d    n1 sr0    Y  d S )	Nc                    s   t  } | |  d S r   )r   r   ZassertIsZ	get_debug)Zexpectedr   r   r   r   r,   X   s    z-RunTests.test_asyncio_run_debug.<locals>.mainFT)debugz!asyncio.coroutines._is_debug_modec                   S   s   dS r   r   r   r   r   r   r6   ^   r7   z1RunTests.test_asyncio_run_debug.<locals>.<lambda>)r   r.   r   Zpatchr/   r   r   r   test_asyncio_run_debugW   s    zRunTests.test_asyncio_run_debugc                    sH    fdd |  td t   W d    n1 s:0    Y  d S )Nc                     s,     } zt |  W |   n
|   0 d S r   )r   r.   close)coror,   r   r   r,   c   s    z9RunTests.test_asyncio_run_from_running_loop.<locals>.mainzcannot be called from a running)r3   r   r   r.   r   r   r?   r   "test_asyncio_run_from_running_loopb   s
    z+RunTests.test_asyncio_run_from_running_loopc                    s@   d dd   fdd}|  t| d |   d S )Nc                      s   t dI d H  d S )N皙?r*   r   r   r   r   leftoverq   s    zARunTests.test_asyncio_run_cancels_hanging_tasks.<locals>.leftoverc                      s   t   dS N{   )r   create_taskr   rB   lo_taskr   r   r,   t   s    z=RunTests.test_asyncio_run_cancels_hanging_tasks.<locals>.mainrD   )r-   r   r.   r%   doner/   r   rF   r   &test_asyncio_run_cancels_hanging_tasksn   s
    z/RunTests.test_asyncio_run_cancels_hanging_tasksc                    sh   d t   dd  fdd}| t| d |    t	dt
td d S )Nc                      s6   zt dI d H  W n t jy0   dd  Y n0 d S )NrA   r5   r   )r   r+   CancelledErrorr   r   r   r   rB      s    zHRunTests.test_asyncio_run_reports_hanging_tasks_errors.<locals>.leftoverc                     s   t  }  | _t  dS rC   )r   get_running_loopcall_exception_handlerrE   r   Zcall_exc_handler_mockrB   rG   r   r   r,      s    zDRunTests.test_asyncio_run_reports_hanging_tasks_errors.<locals>.mainrD   zasyncio.run.*shutdown)messageZtask	exception)r   r   r-   r   r.   r%   rH   Zassert_called_with
test_utilsZMockPatternZMockInstanceOfZeroDivisionErrorr/   r   rM   r   -test_asyncio_run_reports_hanging_tasks_errors|   s    z6RunTests.test_asyncio_run_reports_hanging_tasks_errorsc                    s   d d G dd dt  dd fdd fdd}|   t|  W d    n1 sj0    Y  |   | j | j	 d S )	Nc                   @   s   e Zd ZdS )zSRunTests.test_asyncio_run_closes_gens_after_hanging_tasks_errors.<locals>.FancyExitN)r   r   r   r   r   r   r   	FancyExit   s   rS   c                   S  s   dV  t dI d H  q d S )Nr5   r*   r   r   r   r   fidget   s    zPRunTests.test_asyncio_run_closes_gens_after_hanging_tasks_errors.<locals>.fidgetc                     s@     z2 z3 d H W } q6 W n t jy:   dd  Y n0 d S )Nr5   r   )r   rJ   )Zthe_meaning_of_life)rT   spinnerr   r   spin   s    zNRunTests.test_asyncio_run_closes_gens_after_hanging_tasks_errors.<locals>.spinc                     s&   t  } t | _t   d S r   )r   rK   r   r   rL   rE   r   )rS   lazyboyrV   r   r   r,      s    
zNRunTests.test_asyncio_run_closes_gens_after_hanging_tasks_errors.<locals>.main)
	ExceptionZassertRaisesr   r.   r%   rH   ZassertIsNoneag_frameZassertFalse
ag_runningr/   r   )rS   rT   rW   rV   rU   r   7test_asyncio_run_closes_gens_after_hanging_tasks_errors   s    	*z@RunTests.test_asyncio_run_closes_gens_after_hanging_tasks_errorsN)r   r   r   r0   r4   r:   r<   r@   rI   rR   r[   r   r   r   r   r(   ?   s   r(   __main__)r   Zunittestr   Ztest.test_asyncior   rP   r	   ZAbstractEventLoopPolicyr
   ZTestCaser   r(   r   r,   r   r   r   r   <module>   s   ~