U
    lufF                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 eejdkpjejdkdZedejkdZedejkd	Zee d
kdZee dkoejdkoejdk dZdd Zee  dZdd Zdd Zdd Ze jdd ZdS )    N)bind_unused_portposixcygwinznon-unix platformZTRAVISz!timing tests unreliable on travisZ
NO_NETWORKznetwork access disabledCPythonzNot CPython implementationPyPy)   )   	   zpypy3 5.8 has buggy ssl modulec                  C   sb   t js
dS d } z<zt  t j} | d W n t jk
rF   Y W 
dS X W 5 | d k	r\|   X dS )NF)z::1r   T)sockethas_ipv6closeAF_INET6binderror)sock r   5/tmp/pip-unpacked-wheel-bmg6zs32/tornado/test/util.py_detect_ipv6*   s    
r   zipv6 support not presentc                  C   sT   t  \} }| d t }|d|f |  \}}|  |   |j|d fS )zReturns a local port number that will refuse all connections.

    Return value is (cleanup_func, port); the cleanup function
    must be called to free the port to be reused.
    Tz	127.0.0.1   )r   setblockingr
   connectacceptr   )Zserver_socketportZclient_socketconnclient_addrr   r   r   refusing_port>   s    


r   c                 C   s&   t | f|}i }tt||| |S )zExecute ``s`` in a given context and return the result namespace.

    Used to define functions for tests in particular python
    versions that would be syntax errors in older versions.
    )dictexectextwrapdedent)Zcaller_globalsZcaller_localssZglobal_namespaceZlocal_namespacer   r   r   	exec_testR   s    	r!   c                 O   s8   z
| j }W n" tk
r,   tdd }Y nX |||S )zqCompatibility shim for unittest.TestCase.subTest.

    Usage: ``with tornado.test.util.subTest(self, x=x):``
    c                     s   d V S )Nr   )akwr   r   r   <lambda>i       zsubTest.<locals>.<lambda>)subTestAttributeError
contextlibcontextmanager)testargskwargsr&   r   r   r   r&   a   s
    
r&   c                	   c   s*   t   t dt dV  W 5 Q R X dS )z/Context manager to ignore deprecation warnings.ignoreN)warningscatch_warningssimplefilterDeprecationWarningr   r   r   r   ignore_deprecationm   s    
r2   )r(   osplatformr
   sysr   typingZunittestr.   Ztornado.testingr   ZskipIfnameZskipIfNonUnixenvironZskipOnTravisZskipIfNoNetworkpython_implementationZskipNotCPythonversion_infopypy_version_infoZskipPypy3V58r   ZskipIfNoIPv6r   r!   r&   r)   r2   r   r   r   r   <module>   sH     
 