o
    )ªZhF  ã                   @   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p5e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oeejdkoee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 } z/zt   t j¡} |  d¡ W n t jy+   Y W | d ur)|  ¡  dS dS w W | d ur5|  ¡  dS | d ur@|  ¡  w w )NF)z::1r   T)ÚsocketÚhas_ipv6ÚAF_INET6ÚbindÚerrorÚclose)Úsock© r   úH/var/www/html/lang_env/lib/python3.10/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w ||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   s   € zsubTest.<locals>.<lambda>)ÚsubTestÚAttributeErrorÚ
contextlibÚcontextmanager)ÚtestÚargsÚkwargsr%   r   r   r   r%   a   s   
ÿr%   c                   c   sB    t  ¡  t  dt¡ dV  W d  ƒ dS 1 sw   Y  dS )z/Context manager to ignore deprecation warnings.ÚignoreN)ÚwarningsÚcatch_warningsÚsimplefilterÚDeprecationWarningr   r   r   r   Úignore_deprecationm   s
   €
"þr1   )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(   r1   r   r   r   r   Ú<module>   sD    ÿ
ÿÿÿü