o
    ¯bˆ  ã                   @   sL   d Z ddgZddlZddlZddlmZ G dd„ deƒZG dd„ deƒZdS )z/
Testing helpers related to the module system.
Ú	NoReactorÚAlternateReactoré    N)ÚSetAsideModulec                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	r   zc
    Context manager that uninstalls the reactor, if any, and then restores it
    afterwards.
    c                 C   s   t  | d¡ d S ©Nztwisted.internet.reactor)r   Ú__init__©Úself© r	   úE/usr/lib/python3/dist-packages/twisted/internet/test/modulehelpers.pyr      s   zNoReactor.__init__c                 C   s"   t  | ¡ d| jv rtj`d S d S r   )r   Ú	__enter__ÚmodulesÚtwistedÚinternetÚreactorr   r	   r	   r
   r      s   


ÿzNoReactor.__enter__c                 C   sT   t  | |||¡ | j dd ¡}|d ur|tj_d S ztj`W d S  ty)   Y d S w r   )r   Ú__exit__r   Úgetr   r   r   ÚAttributeError)r   ÚexcTypeÚexcValueÚ	tracebackr   r	   r	   r
   r      s   ÿzNoReactor.__exit__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r	   r	   r	   r
   r      s
    c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )r   zd
    A context manager which temporarily installs a different object as the
    global reactor.
    c                 C   s   t  | ¡ || _dS )zN
        @param reactor: Any object to install as the global reactor.
        N)r   r   Ú	alternate)r   r   r	   r	   r
   r   3   s   

zAlternateReactor.__init__c                 C   s$   t  | ¡ | jtj_| jtjd< d S r   )r   r   r   r   r   r   Úsysr   r   r	   r	   r
   r   :   s   

zAlternateReactor.__enter__N)r   r   r   r   r   r   r	   r	   r	   r
   r   -   s    )	r   Ú__all__r   Útwisted.internetr   Útwisted.test.test_twistedr   r   r   r	   r	   r	   r
   Ú<module>   s   