o
    Qœ_{"  ã                   @   s<  d dl mZmZmZmZ d dlmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZmZmZ d dlmZ d dlZG dd„ de	ƒZG d	d
„ d
eƒZi 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dd„ ZedƒZedƒ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#dS )!é    )ÚHTTPHeadersÚHTTPMessageDelegateÚHTTPServerConnectionDelegateÚResponseStartLine)ÚHostMatchesÚPathMatchesÚReversibleRouterÚRouterÚRuleÚ
RuleRouter)ÚAsyncHTTPTestCase)ÚApplicationÚ	HTTPErrorÚRequestHandler)ÚWSGIContainerNc                   @   ó   e Zd Zdd„ ZdS )ÚBasicRouterc                 K   s   G dd„ dt ƒ}||jƒS )Nc                   @   ó   e Zd Zdd„ Zdd„ ZdS )z1BasicRouter.find_handler.<locals>.MessageDelegatec                 S   ó
   || _ d S ©N©Ú
connection©Úselfr   © r   ú;/usr/lib/python3/dist-packages/tornado/test/routing_test.pyÚ__init__%   ó   
z:BasicRouter.find_handler.<locals>.MessageDelegate.__init__c                 S   s.   | j  tdddƒtddiƒd¡ | j  ¡  d S ©NúHTTP/1.1éÈ   ÚOKúContent-LengthÚ2ó   OK)r   Úwrite_headersr   r   Úfinish©r   r   r   r   r&   (   s   

ýz8BasicRouter.find_handler.<locals>.MessageDelegate.finishN©Ú__name__Ú
__module__Ú__qualname__r   r&   r   r   r   r   ÚMessageDelegate$   ó    r,   )r   r   )r   ÚrequestÚkwargsr,   r   r   r   Úfind_handler#   s   
zBasicRouter.find_handlerN)r)   r*   r+   r0   r   r   r   r   r   "   ó    r   c                   @   r   )ÚBasicRouterTestCasec                 C   s   t ƒ S r   )r   r'   r   r   r   Úget_app4   s   zBasicRouterTestCase.get_appc                 C   ó   |   d¡}|  |jd¡ d S )Nz/any_requestr$   ©ÚfetchÚassertEqualÚbody©r   Úresponser   r   r   Útest_basic_router7   ó   
z%BasicRouterTestCase.test_basic_routerN)r)   r*   r+   r3   r;   r   r   r   r   r2   3   r-   r2   c                   @   r   )ÚGetResourcec                 C   s"   |t vrtdƒ‚|  t | ¡ d S )Né”  )Ú	resourcesr   r&   ©r   Úpathr   r   r   Úget@   s   zGetResource.getN©r)   r*   r+   rB   r   r   r   r   r=   ?   r1   r=   c                   @   r   )ÚPostResourcec                 C   s   | j jt|< d S r   )r.   r8   r?   r@   r   r   r   ÚpostH   ó   zPostResource.postN)r)   r*   r+   rE   r   r   r   r   rD   G   r1   rD   c                   @   r   )ÚHTTPMethodRouterc                 C   r   r   )Úapp)r   rH   r   r   r   r   M   r   zHTTPMethodRouter.__init__c                 K   s(   |j dkrtnt}| jj|||jgd�S )NÚGET)Ú	path_args)Úmethodr=   rD   rH   Úget_handler_delegaterA   )r   r.   r/   Úhandlerr   r   r   r0   P   s   zHTTPMethodRouter.find_handlerN)r)   r*   r+   r   r0   r   r   r   r   rG   L   r-   rG   c                   @   r   )ÚHTTPMethodRouterTestCasec                 C   s
   t tƒ ƒS r   )rG   r   r'   r   r   r   r3   V   r   z HTTPMethodRouterTestCase.get_appc                 C   s`   | j dddd�}|  |jd¡ |   d¡}|  |jd¡ |   d¡}|  |jd¡ |  |jd¡ d S )	Nz/post_resourceÚPOSTÚdata)rK   r8   r    z/get_resourcer>   s   data)r6   r7   Úcoder8   r9   r   r   r   Útest_http_method_routerY   s   

z0HTTPMethodRouterTestCase.test_http_method_routerN)r)   r*   r+   r3   rR   r   r   r   r   rN   U   r-   rN   c                    s   G ‡ fdd„dt ƒ}|S )Nc                       ó   e Zd Z‡ fdd„ZdS )z#_get_named_handler.<locals>.Handlerc                    sD   | j j d¡d ur|  | j jd d ¡ |  ˆ d |  ˆ ¡ ¡ d S )NÚapp_namez: )ÚapplicationÚsettingsrB   Úwriter&   Úreverse_url©r   Úargsr/   ©Úhandler_namer   r   rB   g   s   z'_get_named_handler.<locals>.Handler.getNrC   r   r[   r   r   ÚHandlerf   ó    r]   )r   )r\   r]   r   r[   r   Ú_get_named_handlere   s   r_   Úfirst_handlerÚsecond_handlerc                       s4   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS )	ÚCustomRouterc                    s   t ƒ  ¡  i | _d S r   )Úsuperr   Úroutesr'   ©Ú	__class__r   r   r   u   s   

zCustomRouter.__init__c                 C   s   | j  |¡ d S r   )rd   Úupdate)r   rd   r   r   r   Ú
add_routesy   rF   zCustomRouter.add_routesc                 K   s,   |j | jv r| j|j  \}}| ||¡S d S r   )rA   rd   rL   )r   r.   r/   rH   rM   r   r   r   r0   |   s   þzCustomRouter.find_handlerc                 G   s   d| }|| j v r|S d S )Nú/)rd   )r   ÚnamerZ   Úhandler_pathr   r   r   rX   �   s   zCustomRouter.reverse_url)r)   r*   r+   r   rh   r0   rX   Ú__classcell__r   r   re   r   rb   t   s
    rb   c                   @   r   )ÚCustomRouterTestCasec                    sP   t ƒ ‰ G ‡ fdd„dtƒ}|dd�}|dd�}ˆ  |tf|tf|tfdœ¡ ˆ S )Nc                       rS   )z7CustomRouterTestCase.get_app.<locals>.CustomApplicationc                    s   ˆ j |g|¢R Ž S r   )rX   )r   rj   rZ   ©Úrouterr   r   rX   ‹   s   zCCustomRouterTestCase.get_app.<locals>.CustomApplication.reverse_urlN)r)   r*   r+   rX   r   rn   r   r   ÚCustomApplicationŠ   r^   rp   Úapp1)rT   Úapp2)ú/first_handlerú/second_handlerú/first_handler_second_app)rb   r   rh   ÚFirstHandlerÚSecondHandler)r   rp   rq   rr   r   rn   r   r3   ‡   s   

ýÿzCustomRouterTestCase.get_appc                 C   sL   |   d¡}|  |jd¡ |   d¡}|  |jd¡ |   d¡}|  |jd¡ d S )Nrs   s#   app1: first_handler: /first_handlerrt   s%   app2: second_handler: /second_handlerru   s#   app2: first_handler: /first_handlerr5   r9   r   r   r   Útest_custom_router›   s   


z'CustomRouterTestCase.test_custom_routerN)r)   r*   r+   r3   rx   r   r   r   r   rm   †   s    rm   c                   @   r   )ÚConnectionDelegatec                 C   s   G dd„ dt ƒ}||ƒS )Nc                   @   r   )z9ConnectionDelegate.start_request.<locals>.MessageDelegatec                 S   r   r   r   r   r   r   r   r   §   r   zBConnectionDelegate.start_request.<locals>.MessageDelegate.__init__c                 S   sD   d}| j  tdddƒtdtt|ƒƒiƒ¡ | j  |¡ | j  ¡  d S )Nr$   r   r    r!   r"   )r   r%   r   r   ÚstrÚlenrW   r&   )r   Úresponse_bodyr   r   r   r&   ª   s   
þz@ConnectionDelegate.start_request.<locals>.MessageDelegate.finishNr(   r   r   r   r   r,   ¦   r-   r,   )r   )r   Úserver_connÚrequest_connr,   r   r   r   Ústart_request¥   s   z ConnectionDelegate.start_requestN)r)   r*   r+   r   r   r   r   r   ry   ¤   r1   ry   c                   @   r   )ÚRuleRouterTestc              
   C   s‚   t ƒ }dd„ }tƒ }| d|tdƒfi¡ | dtdƒtdƒdi d	fgfttd
ƒ|ƒttdƒtdd�ttdƒ|ƒdt	ƒ fg¡ |S )Nc                 S   s8   | j  tdddƒtddiƒ¡ | j  d¡ | j  ¡  d S r   )r   r%   r   r   rW   r&   )r.   r   r   r   Úrequest_callableº   s   

þz0RuleRouterTest.get_app.<locals>.request_callableú/nested_handlerÚnested_handlerz.*úwww.example.comrs   z'tornado.test.routing_test.SecondHandlerra   z
/.*handlerr`   )rj   ú/request_callableú/connection_delegate)
r   rb   rh   r_   Úadd_handlersr   r   r
   rv   ry   )r   rH   r�   ro   r   r   r   r3   ·   s.   ÿüÿþñþzRuleRouterTest.get_appc                 C   s´   |   d¡}|  |jd¡ | j dddid�}|  |jd¡ |   d¡}|  |jd¡ |   d	¡}|  |jd
¡ |   d¡}|  |jd¡ |   d¡}|  |jd¡ |   d¡}|  |jd
¡ d S )Nrs   s   first_handler: /first_handlerÚHostr„   )Úheaderss   second_handler: /first_handlerr‚   s   nested_handler: /nested_handlerz/nested_not_found_handlerr>   r†   r$   r…   ú/404)r6   r7   r8   rQ   r9   r   r   r   Útest_rule_based_routerÞ   s   





z%RuleRouterTest.test_rule_based_routerN)r)   r*   r+   r3   r‹   r   r   r   r   r€   ¶   s    'r€   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚWSGIContainerTestCasec                 C   sD   t | jƒ}G dd„ dtƒ}ttdƒtd|i dfgƒftdƒ|fgƒS )Nc                   @   r   )z.WSGIContainerTestCase.get_app.<locals>.Handlerc                 _   s   |   |  d¡¡ d S )NÚtornado)r&   rX   rY   r   r   r   rB   ú   s   z2WSGIContainerTestCase.get_app.<locals>.Handler.getNrC   r   r   r   r   r]   ù   r1   r]   z
/tornado.*ú/tornado/testr�   ú/wsgi)r   Úwsgi_appr   r   r   r   )r   r�   r]   r   r   r   r3   ö   s   
þ
ûÿzWSGIContainerTestCase.get_appc                 C   s   |dg ƒ dgS )Nz200 OKó   WSGIr   )r   ÚenvironÚstart_responser   r   r   r�     s   
zWSGIContainerTestCase.wsgi_appc                 C   s4   |   d¡}|  |jd¡ |   d¡}|  |jd¡ d S )NrŽ   s   /tornado/testr�   r‘   r5   r9   r   r   r   Útest_wsgi_container  s   

z)WSGIContainerTestCase.test_wsgi_containerc                 C   r4   )NrŠ   r>   )r6   r7   rQ   r9   r   r   r   Útest_delegate_not_found  r<   z-WSGIContainerTestCase.test_delegate_not_foundN)r)   r*   r+   r3   r�   r”   r•   r   r   r   r   rŒ   õ   s
    rŒ   )$Útornado.httputilr   r   r   r   Útornado.routingr   r   r   r	   r
   r   Útornado.testingr   Útornado.webr   r   r   Útornado.wsgir   Útypingr   r2   r?   r=   rD   rG   rN   r_   rv   rw   rb   rm   ry   r€   rŒ   r   r   r   r   Ú<module>   s*    		?