B
    18\                 @   s`   d dl Z d dlZd dlmZ ddlmZ G dd de jZG dd dejZ	G d	d
 d
e	Z
dS )    N)mock   )utilsc               @   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 )N)loop_factoryloop)selfr    r	   b/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_asyncio/test_runners.py__init__
   s    zTestPolicy.__init__c             C   s   t d S )N)RuntimeError)r   r	   r	   r
   get_event_loop   s    zTestPolicy.get_event_loopc             C   s   |   S )N)r   )r   r	   r	   r
   new_event_loop   s    zTestPolicy.new_event_loopc             C   s   |d k	r|| _ d S )N)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)
asyncioBaseEventLoopr   Mock_process_events	_selectorselectreturn_valuer   r   )r   r   r	   )r   r
   new_loop   s    


zBaseTest.new_loopc                s"   t    t| j}t| d S )N)supersetUpr   r   r   set_event_loop_policy)r   policy)	__class__r	   r
   r   +   s    

zBaseTest.setUpc                sH   t  }|jd k	r0| |j  | |jj t d  t   d S )N)	r   get_event_loop_policyr   
assertTrue	is_closedr   r    r   tearDown)r   r!   )r"   r	   r
   r&   1   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
   main>   s    z.RunTests.test_asyncio_run_return.<locals>.mainr)   )assertEqualr   run)r   r+   r	   r	   r
   test_asyncio_run_return=   s    z RunTests.test_asyncio_run_returnc          	   C   s0   dd }|  td t|  W d Q R X d S )Nc                  s   t dI d H  tdd S )Nr   spam)r   r*   
ValueErrorr	   r	   r	   r
   r+   E   s    z.RunTests.test_asyncio_run_raises.<locals>.mainr/   )assertRaisesRegexr0   r   r-   )r   r+   r	   r	   r
   test_asyncio_run_raisesD   s    z RunTests.test_asyncio_run_raisesc             C   sT   xNddd hD ]>}| j |d( | td t| W d Q R X W d Q R X qW d S )Nr   c               S   s   d S )Nr	   r	   r	   r	   r
   <lambda>M       z5RunTests.test_asyncio_run_only_coro.<locals>.<lambda>)objza coroutine was expected)subTestr1   r0   r   r-   )r   or	   r	   r
   test_asyncio_run_only_coroL   s
    z#RunTests.test_asyncio_run_only_coroc                s0    fdd}t |d t j|ddd d S )Nc                s   t  } | |  d S )N)r   r   assertIs	get_debug)expectedr   )r   r	   r
   r+   T   s    z-RunTests.test_asyncio_run_debug.<locals>.mainFT)debug)r   r-   )r   r+   r	   )r   r
   test_asyncio_run_debugS   s    zRunTests.test_asyncio_run_debugc          	      s4    fdd |  td t   W d Q R X d S )Nc                 s$     } zt |  W d |   X d S )N)r   r-   close)coro)r+   r	   r
   r+   \   s    z9RunTests.test_asyncio_run_from_running_loop.<locals>.mainzcannot be called from a running)r1   r   r   r-   )r   r	   )r+   r
   "test_asyncio_run_from_running_loop[   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 )Ng?)r   r*   r	   r	   r	   r
   leftoverj   s    zARunTests.test_asyncio_run_cancels_hanging_tasks.<locals>.leftoverc                  s   t   dS )N{   )r   create_taskr	   )rA   lo_taskr	   r
   r+   m   s    z=RunTests.test_asyncio_run_cancels_hanging_tasks.<locals>.mainrB   )r,   r   r-   r$   done)r   r+   r	   )rA   rD   r
   &test_asyncio_run_cancels_hanging_tasksg   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                  s8   yt dI d H  W n t jk
r2   dd  Y nX d S )Ng?r   r   )r   r*   CancelledErrorr	   r	   r	   r
   rA   y   s    zHRunTests.test_asyncio_run_reports_hanging_tasks_errors.<locals>.leftoverc                 s   t  }  | _t  dS )NrB   )r   get_running_loopcall_exception_handlerrC   )r   )call_exc_handler_mockrA   rD   r	   r
   r+      s    zDRunTests.test_asyncio_run_reports_hanging_tasks_errors.<locals>.mainrB   zasyncio.run.*shutdown)messagetask	exception)r   r   r,   r   r-   r$   rE   assert_called_with
test_utilsMockPatternMockInstanceOfZeroDivisionError)r   r+   r	   )rJ   rA   rD   r
   -test_asyncio_run_reports_hanging_tasks_errorsu   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 Q R X |   | 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   rT   c               S  s    xdV  t dI d H  qW d S )Nr   )r   r*   r	   r	   r	   r
   fidget   s    zPRunTests.test_asyncio_run_closes_gens_after_hanging_tasks_errors.<locals>.fidgetc           	      sZ     y0x*2 y3 d H } W q t k
s(X q   Y  W W n tjk
rT   dd  Y nX d S )Nr   r   )StopAsyncIterationr   rG   )Zthe_meaning_of_life)rU   spinnerr	   r
   spin   s    zNRunTests.test_asyncio_run_closes_gens_after_hanging_tasks_errors.<locals>.spinc                 s&   t  } t | _t   d S )N)r   rH   r   r   rI   rC   )r   )rT   lazyboyrX   r	   r
   r+      s    
zNRunTests.test_asyncio_run_closes_gens_after_hanging_tasks_errors.<locals>.main)
	ExceptionassertRaisesr   r-   r$   rE   assertIsNoneag_frameassertFalse
ag_running)r   r+   r	   )rT   rU   rY   rX   rW   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   r.   r2   r8   r=   r@   rF   rS   r`   r	   r	   r	   r
   r(   ;   s   r(   )r   unittestr    r   rO   AbstractEventLoopPolicyr   TestCaser   r(   r	   r	   r	   r
   <module>   s   