B
    £ä˜\F  ã               @   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oÊejdkoÊe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 disabledZCPythonzNot CPython implementationZPyPy)é   )é   é	   zpypy3 5.8 has buggy ssl modulec              C   s\   t js
dS d } z6yt   t j¡} |  d¡ W n t jk
r@   dS X W d | d k	rV|  ¡  X dS )NF)z::1r   T)ÚsocketZhas_ipv6ZAF_INET6ZbindÚerrorÚclose)Zsock© r   ú0lib/python3.7/site-packages/tornado/test/util.pyÚ_detect_ipv6*   s    

r   zipv6 support not presentc              C   sT   t ƒ \} }|  d¡ t ¡ }| d|f¡ |  ¡ \}}| ¡  |  ¡  |j|d fS )z´Returns 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   Zsetblockingr   ZconnectZacceptr
   )Zserver_socketZportZclient_socketZconnZclient_addrr   r   r   Úrefusing_port>   s    


r   c             C   s&   t | f|Ž}i }tt |¡||ƒ |S )z¿Execute ``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   y
| 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   s    zsubTest.<locals>.<lambda>)ÚsubTestÚAttributeErrorÚ
contextlibÚcontextmanager)ZtestÚargsÚkwargsr   r   r   r   r   a   s
    
r   c            	   c   s*   t  ¡  t  dt¡ dV  W dQ R X dS )z/Context manager to ignore deprecation warnings.ÚignoreN)ÚwarningsÚcatch_warningsÚsimplefilterÚDeprecationWarningr   r   r   r   Úignore_deprecationm   s    
r$   )r   ÚosÚplatformr   Úsysr   ÚtypingZunittestr    Ztornado.testingr   ZskipIfÚnameZskipIfNonUnixÚenvironZskipOnTravisZskipIfNoNetworkZpython_implementationZskipNotCPythonÚversion_infoZpypy_version_infoZskipPypy3V58r   ZskipIfNoIPv6r   r   r   r   r$   r   r   r   r   Ú<module>   s6   
