o
    u3b¡  ã                   @   s*  d dl m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m	Z	m
Z
 d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZ G d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deeƒZ G dd„ deƒZ!e"dkr“e #¡  dS dS )é    )ÚfuturesN)ÚFutureÚrun_on_executorÚ"future_set_result_unless_cancelled)Úutf8Ú
to_unicode)Úgen)ÚIOStream)Ú	TCPServer)ÚAsyncTestCaseÚbind_unused_portÚgen_testc                   @   s   e Zd Zdd„ ZdS )ÚMiscFutureTestc                 C   sz   t ƒ }t|dƒ |  | ¡ d¡ |  | ¡ ¡ t ƒ }| ¡  | ¡ }t|dƒ |  | ¡ |¡ |s;|  | ¡ d¡ d S d S ©Né*   )r   r   ÚassertEqualÚresultÚassertFalseÚ	cancelledÚcancel)ÚselfÚfutÚis_cancelled© r   ú>/usr/lib/python3/dist-packages/tornado/test/concurrent_test.pyÚ'test_future_set_result_unless_cancelled#   s   

ÿz6MiscFutureTest.test_future_set_result_unless_cancelledN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   "   s    r   c                   @   ó   e Zd Zejdd„ ƒZdS )Ú	CapServerc                 c   sP   � |  d¡V }t|ƒ}|| ¡ kr| d¡ n| td| ¡  ƒ¡ | ¡  d S )Nó   
s   error	already capitalized
zok	%s)Ú
read_untilr   ÚupperÚwriter   Úclose)r   ÚstreamÚaddressÚdatar   r   r   Úhandle_stream7   s   €zCapServer.handle_streamN)r   r   r   r   Ú	coroutiner)   r   r   r   r   r    6   ó    r    c                   @   s   e Zd ZdS )ÚCapErrorN)r   r   r   r   r   r   r   r,   C   s    r,   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚBaseCapClientc                 C   s
   || _ d S ©N©Úport)r   r0   r   r   r   Ú__init__H   s   
zBaseCapClient.__init__c                 C   s@   t  dt|ƒ¡}|d u rtdƒ‚| ¡ \}}|dkr|S t|ƒ‚)Nz
(.*)	(.*)
zdid not matchÚok)ÚreÚmatchr   Ú	ExceptionÚgroupsr,   )r   r(   ÚmÚstatusÚmessager   r   r   Úprocess_responseK   s   zBaseCapClient.process_responseN)r   r   r   r1   r:   r   r   r   r   r-   G   s    r-   c                   @   r   )ÚGeneratorCapClientc                 c   s~   � t  d¡ tt ¡ ƒ}t  d¡ | d| jf¡V  | t|d ƒ¡ t  d¡ | d¡V }t  d¡ | 	¡  t
 |  |¡¡‚)NÚ
capitalizeÚ
connectingz	127.0.0.1Ú
Úreadingr!   Ú	returning)ÚloggingÚdebugr	   ÚsocketÚconnectr0   r$   r   r"   r%   r   ÚReturnr:   )r   Úrequest_datar&   r(   r   r   r   r<   W   s   €



zGeneratorCapClient.capitalizeN)r   r   r   r   r*   r<   r   r   r   r   r;   V   r+   r;   c                       sl   e Zd ZdZ‡ fdd„Z‡ fdd„Zdejfdd„Zdejfd	d
„Z	dejfdd„Z
dejfdd„Z‡  ZS )ÚClientTestMixinNc                    s<   t ƒ  ¡  tƒ | _tƒ \}}| j |g¡ | j|d�| _d S )Nr/   )ÚsuperÚsetUpr    Úserverr   Úadd_socketsÚclient_classÚclient)r   Úsockr0   ©Ú	__class__r   r   rI   h   s
   

zClientTestMixin.setUpc                    s   | j  ¡  tƒ  ¡  d S r.   )rJ   ÚstoprH   ÚtearDown©r   rO   r   r   rR   o   s   
zClientTestMixin.tearDownr   c                 C   s8   | j  d¡}| j || j¡ |  ¡  |  | ¡ d¡ d S ©NÚhelloÚHELLO)rM   r<   Úio_loopÚ
add_futurerQ   Úwaitr   r   ©r   Úfuturer   r   r   Útest_futures   ó   zClientTestMixin.test_futurec                 C   s8   | j  d¡}| j || j¡ |  ¡  |  td|j¡ d S )NrV   úalready capitalized)	rM   r<   rW   rX   rQ   rY   ÚassertRaisesRegexr,   r   rZ   r   r   r   Útest_future_errory   r]   z!ClientTestMixin.test_future_errorc                    ó"   t j‡ fdd„ƒ}ˆ j |¡ d S )Nc                  3   s    � ˆ j  d¡V } ˆ  | d¡ d S rT   )rM   r<   r   )r   rS   r   r   Úf€   s   €z)ClientTestMixin.test_generator.<locals>.f©r   r*   rW   Úrun_sync©r   rb   r   rS   r   Útest_generator   ó   zClientTestMixin.test_generatorc                    ra   )Nc                   3   sB   � ˆ   td¡� ˆ j d¡V  W d   ƒ d S 1 sw   Y  d S )Nr^   rV   )r_   r,   rM   r<   r   rS   r   r   rb   ˆ   s   €"ÿz/ClientTestMixin.test_generator_error.<locals>.frc   re   r   rS   r   Útest_generator_error‡   rg   z$ClientTestMixin.test_generator_error)r   r   r   rL   rI   rR   ÚtypingÚAnyr\   r`   rf   rh   Ú__classcell__r   r   rO   r   rG   e   s    rG   c                   @   s   e Zd ZeZdS )ÚGeneratorClientTestN)r   r   r   r;   rL   r   r   r   r   rl   �   s    rl   c                   @   s<   e Zd Zedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZd	S )
ÚRunOnExecutorTestc                 c   ó2   � G dd„ dt ƒ}|ƒ }| ¡ V }|  |d¡ d S )Nc                   @   s    e Zd Zdd„ Zedd„ ƒZdS )z1RunOnExecutorTest.test_no_calling.<locals>.Objectc                 S   ó   t j d¡| _d S ©Né   ©r   ÚthreadÚThreadPoolExecutorÚexecutorrS   r   r   r   r1   ˜   ó   z:RunOnExecutorTest.test_no_calling.<locals>.Object.__init__c                 S   ó   dS r   r   rS   r   r   r   rb   ›   ó   z3RunOnExecutorTest.test_no_calling.<locals>.Object.fN©r   r   r   r1   r   rb   r   r   r   r   ÚObject—   s    rz   r   ©Úobjectrb   r   ©r   rz   ÚoÚanswerr   r   r   Útest_no_calling•   ó
   €
z!RunOnExecutorTest.test_no_callingc                 c   rn   )Nc                   @   ó"   e Zd Zdd„ Zeƒ dd„ ƒZdS )z8RunOnExecutorTest.test_call_with_no_args.<locals>.Objectc                 S   ro   rp   rr   rS   r   r   r   r1   ¦   rv   zARunOnExecutorTest.test_call_with_no_args.<locals>.Object.__init__c                 S   rw   r   r   rS   r   r   r   rb   ©   rx   z:RunOnExecutorTest.test_call_with_no_args.<locals>.Object.fNry   r   r   r   r   rz   ¥   ó    rz   r   r{   r}   r   r   r   Útest_call_with_no_args£   r�   z(RunOnExecutorTest.test_call_with_no_argsc                 c   rn   )Nc                   @   s&   e Zd Zdd„ Zedd�dd„ ƒZdS )z9RunOnExecutorTest.test_call_with_executor.<locals>.Objectc                 S   ro   rp   )r   rs   rt   Ú_Object__executorrS   r   r   r   r1   ´   rv   zBRunOnExecutorTest.test_call_with_executor.<locals>.Object.__init__r…   )ru   c                 S   rw   r   r   rS   r   r   r   rb   ·   rx   z;RunOnExecutorTest.test_call_with_executor.<locals>.Object.fNry   r   r   r   r   rz   ³   s    rz   r   r{   r}   r   r   r   Útest_call_with_executor±   r�   z)RunOnExecutorTest.test_call_with_executorc                 #   s<   � G dd„ dt ƒ}|ƒ ‰ ‡ fdd„}|ƒ V }|  |d¡ d S )Nc                   @   r‚   )z2RunOnExecutorTest.test_async_await.<locals>.Objectc                 S   ro   rp   rr   rS   r   r   r   r1   Â   rv   z;RunOnExecutorTest.test_async_await.<locals>.Object.__init__c                 S   rw   r   r   rS   r   r   r   rb   Å   rx   z4RunOnExecutorTest.test_async_await.<locals>.Object.fNry   r   r   r   r   rz   Á   rƒ   rz   c                  “   s   �ˆ   ¡ I d H } | S r.   )rb   )r   ©r~   r   r   rb   Ë   s   €z-RunOnExecutorTest.test_async_await.<locals>.fr   )r|   r   )r   rz   rb   r   r   r‡   r   Útest_async_await¿   s   €z"RunOnExecutorTest.test_async_awaitN)r   r   r   r   r€   r„   r†   rˆ   r   r   r   r   rm   ”   s    


rm   Ú__main__)$Ú
concurrentr   rA   r3   rC   ri   ÚunittestÚtornado.concurrentr   r   r   Útornado.escaper   r   Útornador   Útornado.iostreamr	   Útornado.tcpserverr
   Útornado.testingr   r   r   r   r    r5   r,   r|   r-   r;   rG   rl   rm   r   Úmainr   r   r   r   Ú<module>   s.   +?ÿ