B
    ÐH/\k  ã               @   sd   d dl mZ d dlmZ e ¡  d dlZd dlZd dlmZ G dd„ deej	ƒZ
edkr`e ¡  dS )é    )ÚPopen)ÚmonkeyN)ÚSubscriberCleanupMixinc               @   sP   e Zd 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 )Ú
TestMonkeyNc             C   s(   dd l }ddlm } |  |j|j¡ d S )Nr   )Útime)r   ÚgeventÚassertIsZsleep)Úselfr   Zgtime© r
   ú8lib/python3.7/site-packages/gevent/tests/test__monkey.pyÚ	test_time   s    zTestMonkey.test_timec             C   sÊ   ydd l }W n tk
r(   dd l}Y nX dd l}ddlm } |  |j|j¡ |  |j|j¡ |  t	 
dd¡¡ tjd dkrÆddlm} ddlm} |  |j|j¡ |  t	 
dd¡¡ |  |j|¡ d S )	Nr   )ÚthreadÚ	threadingÚEventé   )r   )r   Ú_Event)r   ÚImportErrorÚ_threadr   r   r   Ústart_new_threadZ_start_new_threadÚ
assertTruer   Úis_object_patchedÚsysÚversion_infoZgevent.eventr   Z_sleepr   )r	   r   r   ZgthreadZ
gthreadingZGEventr
   r
   r   Útest_thread   s    zTestMonkey.test_threadc             C   s(   dd l }ddlm } |  |j|j¡ d S )Nr   )Úsocket)r   r   r   Zcreate_connection)r	   r   Zgevent_socketr
   r
   r   Útest_socket(   s    zTestMonkey.test_socketc             C   s€   dd l }dd l}ddlm } x^dD ]V}t||ƒr"t||ƒ}|  dt|ƒ¡ |  ||j¡ |  	||j
¡ |  |t||ƒ¡ q"W d S )Nr   )Úos)ÚforkÚforkptyzbuilt-in)r   Útypesr   ÚhasattrÚgetattrÚassertNotInÚreprZassertNotIsInstanceÚBuiltinFunctionTypeÚassertIsInstanceÚFunctionTyper   )r	   r   r   ZgosÚnameÚattrr
   r
   r   Útest_os-   s    


zTestMonkey.test_osc             C   sV   |   tj¡ xDtjD ]:}|   t |¡¡ x$tj| D ]}|   t ||¡¡ q4W qW d S )N)r   r   ÚsavedZis_module_patchedr   )r	   ÚmodnameZobjnamer
   r
   r   Ú
test_saved9   s
    zTestMonkey.test_savedc             C   sD   |   dttƒ¡ |  tt dd¡¡ t ¡  |  tt dd¡¡ d S )Nr   Ú
subprocessr   )r"   r#   r   r   r   Zget_originalZpatch_subprocess)r	   r
   r
   r   Útest_patch_subprocess_twiceA   s    z&TestMonkey.test_patch_subprocess_twicec       
   	      s^  dd l }ddlm} i }x"tj ¡ D ]\}}| ¡ ||< q$W ddlm‰  g }ˆ j	 
|j
¡ ‡ fdd„}ˆ j	 
|¡ |jdd~}tjdd	d
 |  t|ƒd¡ |  dt|d jƒ¡ |  dt|d jƒ¡ |d d …= tjdd tjd |d< |  |¡ W d Q R X dtjkr&d|kr&tjd |d< |  |tj¡ x,tjd  ¡ D ]\}}|  dt|ƒ¡ qDW |  |d ˆ j¡ |  dd	i|d j¡ | ˆ j|d ¡ |  |d ˆ j¡ | ˆ j|d ¡ |  |d ˆ j¡ | ˆ j|d ¡ |  |d ˆ j¡ | ˆ j|d ¡ |  |d ˆ j¡ | ˆ j |d ¡ x,|D ]$}	|  t!|	ˆ jƒoP|	j"dk¡ q2W d S )Nr   )Úverify)Úeventsc                s    t | ˆ jƒr| jdkrˆ j‚d S )NÚssl)Ú
isinstanceÚGeventWillPatchModuleEventÚmodule_nameZ
DoNotPatch)Zevent)r0   r
   r   ÚvetoS   s    z9TestMonkey.test_patch_twice_warnings_events.<locals>.vetoT)ÚrecordFé*   )r   Úextra_kwargr   ÚSIGCHLDéÿÿÿÿzmore than once)r   Z_gevent_saved_patch_allZloggingr   r   r8   é   éþÿÿÿr1   )#ÚwarningsZzope.interfacer/   r   r*   ÚitemsÚcopyr   r0   ZsubscribersÚappendÚcatch_warningsÚ	patch_allZassertGreaterEqualÚlenZassertInÚstrÚmessageZassertFalseZassertEqualr"   r%   ZGeventWillPatchAllEventZpatch_all_kwargsZverifyObjectZIGeventWillPatchAllEventr3   ZIGeventWillPatchModuleEventZGeventDidPatchModuleEventZ!GeventDidPatchBuiltinModulesEventZ"IGeventDidPatchBuiltinModulesEventZGeventDidPatchAllEventZIGeventDidPatchAllEventr2   r4   )
r	   r=   r/   Z
orig_savedÚkÚvZ
all_eventsr5   Zissued_warningsÚer
   )r0   r   Ú test_patch_twice_warnings_eventsG   sL    

z+TestMonkey.test_patch_twice_warnings_eventsc             C   sN   ydd l }W n tk
r$   d }Y nX t|dƒs:t d¡‚|  |j|j¡ d S )Nr   ÚSimpleQueuezNeeds SimpleQueue)Úqueuer   r    ÚunittestZSkipTestr   rJ   Z_PySimpleQueue)r	   rK   r
   r
   r   Útest_patch_queue‰   s    


zTestMonkey.test_patch_queue)Ú__name__Ú
__module__Ú__qualname__ZmaxDiffr   r   r   r)   r,   r.   rI   rM   r
   r
   r
   r   r   
   s   Br   Ú__main__)r-   r   r   r   rB   r   rL   Zgevent.testing.testcaser   ZTestCaser   rN   Úmainr
   r
   r
   r   Ú<module>   s    