U
    
W[                     @   s   d Z ddlmZmZ ddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ e	ddZe	ddZe	ddZe	ddZG dd deZG dd deZG dd deZdS )z(
Tests for L{twisted.internet.default}.
    )divisionabsolute_importN)SynchronousTestCase)Platform)requireModule)default)_getInstallFunctioninstall)	NoReactor)IReactorCoreposixotherZlinux2ntZwin32darwinc                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	PollReactorTestsz
    Tests for the cases of L{twisted.internet.default._getInstallFunction}
    in which it picks the poll(2) or epoll(7)-based reactors.
    c                 C   s,   t tdr| |jd n| |jd dS )zz
        Assert the given function will install the poll() reactor, or select()
        if poll() is unavailable.
        Zpollztwisted.internet.pollreactortwisted.internet.selectreactorN)hasattrselectassertEqual
__module__selfr	    r   D/usr/lib/python3/dist-packages/twisted/internet/test/test_default.pyassertIsPoll   s    
  zPollReactorTests.assertIsPollc                 C   s   t t}| | dS )z
        L{_getInstallFunction} chooses the poll reactor on arbitrary Unix
        platforms, falling back to select(2) if it is unavailable.
        N)r   unixr   r   r   r   r   	test_unix,   s    zPollReactorTests.test_unixc                 C   s2   t t}tddkr | | n| |jd dS )zu
        L{_getInstallFunction} chooses the epoll reactor on Linux, or poll if
        epoll is unavailable.
        ztwisted.internet.epollreactorN)r   linuxr   r   r   r   r   r   r   r   
test_linux5   s     zPollReactorTests.test_linuxN)__name__r   __qualname____doc__r   r   r   r   r   r   r   r      s   	r   c                   @   s    e Zd ZdZdd Zdd ZdS )SelectReactorTestsz
    Tests for the cases of L{twisted.internet.default._getInstallFunction}
    in which it picks the select(2)-based reactor.
    c                 C   s   t t}| |jd dS )zM
        L{_getInstallFunction} chooses the select reactor on macOS.
        r   N)r   osxr   r   r   r   r   r   test_osxH   s
     zSelectReactorTests.test_osxc                 C   s   t t}| |jd dS )zO
        L{_getInstallFunction} chooses the select reactor on Windows.
        r   N)r   windowsr   r   r   r   r   r   test_windowsQ   s
     zSelectReactorTests.test_windowsN)r   r   r    r!   r$   r&   r   r   r   r   r"   C   s   	r"   c                   @   s    e Zd ZdZdd Zdd ZdS )InstallationTestsz7
    Tests for actual installation of the reactor.
    c              	   C   s*   t   t  | dtj W 5 Q R X dS )z0
        L{install} installs a reactor.
        ztwisted.internet.reactorN)r
   r	   ZassertInsysmodules)r   r   r   r   test_install`   s    zInstallationTests.test_installc              	      s^   g   fdd}|  td| t 0 ddlm} | t| |  dg W 5 Q R X dS )zr
        Importing L{twisted.internet.reactor} installs the default reactor if
        none is installed.
        c                      s     d t S )NT)appendr	   r   Z	installedr   r   	installero   s    
z1InstallationTests.test_reactor.<locals>.installerr	   r   )reactorTN)	Zpatchr   r
   twisted.internetr.   Z
assertTruer   Z
providedByr   )r   r-   r.   r   r,   r   test_reactori   s    zInstallationTests.test_reactorN)r   r   r    r!   r*   r0   r   r   r   r   r'   [   s   	r'   )r!   Z
__future__r   r   r   r(   Ztwisted.trial.unittestr   Ztwisted.python.runtimer   Ztwisted.python.reflectr   r/   r   Ztwisted.internet.defaultr   r	   Ztwisted.internet.test.test_mainr
   Ztwisted.internet.interfacesr   r   r   r%   r#   r   r"   r'   r   r   r   r   <module>   s    



*