o
    ‡eñ  ã                   @   s\   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 dS )é    )ÚmonkeyN)ÚSubscriberCleanupMixinc                       st   e Zd ZdZ‡ fdd„Z‡ f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d„ Zdd„ Z‡  ZS )Ú
TestMonkeyNc                    sP   t t| ƒ ¡  g | _|  | jj¡ i  | _}tj 	¡ D ]
\}}| 
¡ ||< qd S ©N)Úsuperr   ÚsetUpÚ
all_eventsÚaddSubscriberÚappendÚ
orig_savedr   ÚsavedÚitemsÚcopy)Úselfr   ÚkÚv©Ú	__class__© úID:\Projects\ConvertPro\env\Lib\site-packages\gevent/tests/test__monkey.pyr      s   
ÿzTestMonkey.setUpc                    s"   | j t_| ` | `tt| ƒ ¡  d S r   )r   r   r   r   r   r   ÚtearDown)r   r   r   r   r      s   zTestMonkey.tearDownc                 C   ó(   dd l }ddlm } |  |j|j¡ d S )Nr   )Útime)r   ÚgeventÚassertIsÚsleep)r   r   Zgtimer   r   r   Ú	test_time   ó   zTestMonkey.test_timec                 C   sÌ   zdd l }W n ty   dd l}Y nw dd l}ddlm } |  |j|j¡ |  |j|j¡ |  t	 
dd¡¡ tjd dkrdddlm} ddlm} |  |j|j¡ |  t	 
dd¡¡ |  |j|¡ d S d S )	Nr   )ÚthreadÚ	threadingÚEventé   )r   )r    Ú_Event)r   ÚImportErrorÚ_threadr   r   r   Ústart_new_threadÚ_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   r   )Nr   )Úsocket)r,   r   r   Úcreate_connection)r   r,   Zgevent_socketr   r   r   Útest_socket6   r   zTestMonkey.test_socketc                 C   s|   dd l }dd l}ddlm } dD ]+}t||ƒr;t||ƒ}|  dt|ƒ¡ |  ||j¡ |  	||j
¡ |  |t||ƒ¡ qd S )Nr   ©Úos)ZforkZforkptyzbuilt-in)r0   Útypesr   ÚhasattrÚgetattrÚassertNotInÚreprZassertNotIsInstanceÚBuiltinFunctionTypeÚassertIsInstanceÚFunctionTyper   )r   r0   r1   ZgosÚnameÚattrr   r   r   Útest_os;   s   

€úzTestMonkey.test_osc                 C   sP   |   tj¡ tj ¡ D ]\}}|   t |¡¡ |D ]}|   t ||¡¡ qqd S r   )r'   r   r   r   Zis_module_patchedr(   )r   ÚmodnameÚobjectsZobjnamer   r   r   Ú
test_savedG   s   ÿýzTestMonkey.test_savedc                 C   sP   t  dd¡}|  dt|ƒ¡ |  |t  dd¡¡ t  ¡  |  |t  dd¡¡ d S )NÚ
subprocessÚPopenr   )r   Zget_originalr4   r5   r   Zpatch_subprocess)r   r@   r   r   r   Útest_patch_subprocess_twiceO   s
   z&TestMonkey.test_patch_subprocess_twicec                 C   s8  dd l }| j}|jddT}tjddd |  t|ƒd¡ |  dt|d j	ƒ¡ |  |g ¡ |d d …= tjdd	 |  t|ƒd¡ |  dt|d j	ƒ¡ |  |g ¡ tj
d
 | jd
< W d   ƒ n1 sdw   Y  dtj
v r{d| jvr{tj
d | jd< |  | jtj
¡ tj
d  ¡ D ]\}}|  dt|ƒ||f¡ qŠd S )Nr   T)ÚrecordFé*   )r0   Úextra_kwargé   zmore than oncer/   Z'_gevent_saved_patch_all_module_settingsÚloggingr   r   )Úwarningsr   Úcatch_warningsr   Ú	patch_allÚassertEqualÚlenZassertInÚstrÚmessager   r   r   r4   )r   rG   r   Zissued_warningsr   r   r   r   r   Ú test_patch_twice_warnings_eventsV   s,   
ÿñÿz+TestMonkey.test_patch_twice_warnings_eventsc                    s>  ddl m‰  ddlm} | j}‡ fdd„}|  |¡ i t_tjdddd |  	|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 ¡ |D ]}|  t|ˆ jƒoš|jdk¡ qŒd S )Nr   ©Úevents)Úverifyc                    s$   t | ˆ jƒr| jdkrˆ j‚d S d S )NÚssl)Ú
isinstanceÚGeventWillPatchModuleEventÚmodule_nameZ
DoNotPatch)ÚeventrO   r   r   Úveto~   s   ÿz*TestMonkey.test_patch_events.<locals>.vetoFrC   )r   ÚselectrD   rD   rE   r!   éþÿÿÿéÿÿÿÿrR   )r   rP   Zgevent.testingrQ   r   r	   r   r   rI   r7   ZGeventWillPatchAllEventrJ   Zpatch_all_kwargsZverifyObjectZIGeventWillPatchAllEventrT   ZIGeventWillPatchModuleEventZGeventDidPatchModuleEventZ!GeventDidPatchBuiltinModulesEventZ"IGeventDidPatchBuiltinModulesEventZGeventDidPatchAllEventZIGeventDidPatchAllEventZassertFalserS   rU   )r   rQ   r   rW   Úer   rO   r   Útest_patch_eventsy   s.   
ÿÿzTestMonkey.test_patch_eventsc                 C   sL   zdd l }W n ty   d }Y nw t|dƒst d¡‚|  |j|j¡ d S )Nr   ÚSimpleQueuezNeeds SimpleQueue)Úqueuer#   r2   ÚunittestZSkipTestr   r]   Ú_PySimpleQueue)r   r^   r   r   r   Útest_patch_queueš   s   ü

zTestMonkey.test_patch_queue)Ú__name__Ú
__module__Ú__qualname__ZmaxDiffr   r   r   r+   r.   r;   r>   rA   rN   r\   ra   Ú__classcell__r   r   r   r   r      s    
#!r   Ú__main__)r   r   rI   r)   r_   Zgevent.testing.testcaser   ZTestCaser   rb   Úmainr   r   r   r   Ú<module>   s      ÿ