a
    ŠxdF  ã                   @   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v d¡Ze dejv 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 disabledÚCPythonzNot CPython implementationÚPyPy)é   )é   é	   zpypy3 5.8 has buggy ssl modulec                  C   s~   t js
dS d } zXzt   t j¡} |  d¡ W n( t jyR   Y W | d urN|  ¡  dS 0 W | d urz|  ¡  n| d urx|  ¡  0 dS )NF)z::1r   T)ÚsocketÚhas_ipv6ÚAF_INET6ÚbindÚerrorÚclose)Úsock© r   úI/var/www/html/Ranjet/env/lib/python3.9/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   Úsetblockingr
   ÚconnectÚacceptr   )Zserver_socketÚportZclient_socketÚconnÚclient_addrr   r   r   Úrefusing_port>   s    


r   c                 C   s*   t | fi |¤Ž}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   s:   z
| j }W n  ty*   t dd„ ¡}Y n0 ||i |¤Ž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 d  ƒ n1 s00    Y  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>   sB   ÿ
ÿÿÿü