§
    ‹Ÿjýì ã                   ó  — d dl Z d dlmZ d dl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 d dlmZ d dlmZ d d	lmZ d d
lmZmZ d dlmZ d dlmZ d dlmZmZmZm Z  d dl!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: d dl;Z;d dl<Z<d dl=Z=d dl>Z>d dl?Z@d dlAZAd dlBmCZC d dlDZDd dlEZEd dlFZFd dlGZGd dlHZHd dlIZId dlJZJd dlKZLd„ ZM G d„ de¦  «        ZN G d„ deN¦  «        ZO G d„ de(¦  «        ZP G d„ de(¦  «        ZQ G d„ deJjR        ¦  «        ZS G d„ deJjR        ¦  «        ZT G d„ d eN¦  «        ZU G d!„ d"eN¦  «        ZV G d#„ d$e(¦  «        ZW G d%„ d&eN¦  «        ZX G d'„ d(e(¦  «        ZY G d)„ d*eN¦  «        ZZ G d+„ d,e(¦  «        Z[ G d-„ d.eN¦  «        Z\ G d/„ d0e(¦  «        Z] G d1„ d2e(¦  «        Z^ G d3„ d4e(¦  «        Z_ G d5„ d6e(¦  «        Z` G d7„ d8e(¦  «        Za G d9„ d:e(¦  «        Zb G d;„ d<e(¦  «        Z* G d=„ d>e(¦  «        Zc G d?„ d@e(¦  «        Zd G dA„ dBe(¦  «        Ze G dC„ dDe(¦  «        Zf G dE„ dFe(¦  «        Zg G dG„ dHeN¦  «        Zh G dI„ dJeN¦  «        Zi G dK„ dLeN¦  «        Zj G dM„ dNeN¦  «        Zk G dO„ dPeN¦  «        Zl G dQ„ dReN¦  «        Zm G dS„ dTeN¦  «        Zn G dU„ dVeN¦  «        Zo G dW„ dXeN¦  «        Zp G dY„ dZeN¦  «        Zq G d[„ d\eN¦  «        Zr G d]„ d^eO¦  «        Zs G d_„ d`eO¦  «        Zt G da„ dbeO¦  «        Zu G dc„ ddeO¦  «        Zv G de„ dfeO¦  «        Zw G dg„ dheO¦  «        Zx G di„ djeN¦  «        Zy G dk„ dleO¦  «        Zz G dm„ dneN¦  «        Z{ G do„ dpeO¦  «        Z| G dq„ dre}¦  «        Z~ G ds„ dteO¦  «        Z G du„ dveO¦  «        Z€ G dw„ dxeO¦  «        Z� G dy„ dzeO¦  «        Z‚ G d{„ d|eO¦  «        Zƒ G d}„ d~eN¦  «        Z„ G d„ d€eO¦  «        Z… G d�„ d‚eO¦  «        Z† G dƒ„ d„eO¦  «        Z‡ G d…„ d†eO¦  «        Zˆ G d‡„ dˆeO¦  «        Z‰ G d‰„ dŠeN¦  «        ZŠ G d‹„ dŒeN¦  «        Z‹ G d�„ dŽeN¦  «        ZŒ G d�„ d�eN¦  «        Z� G d‘„ d’eN¦  «        ZŽe7 G d“„ d”e(¦  «        ¦   «         Z� G d•„ d–¦  «        Z� G d—„ d˜e�eN¦  «        Z‘ G d™„ dše�eN¦  «        Z’ G d›„ dœeO¦  «        Z“ G d�„ džeO¦  «        Z” G dŸ„ d eJjR        ¦  «        Z• G d¡„ d¢eO¦  «        Z– G d£„ d¤eO¦  «        Z— G d¥„ d¦eO¦  «        Z˜ G d§„ d¨eO¦  «        Z™ G d©„ dªeN¦  «        Zš G d«„ d¬eN¦  «        Z› G d­„ d®eO¦  «        Zœ G d¯„ d°eJjR        ¦  «        Z� G d±„ d²e¦  «        Zž G d³„ d´eJjR        ¦  «        ZŸ G dµ„ d¶eN¦  «        Z  G d·„ d¸eN¦  «        Z¡dS )¹é    N)ÚFuture)Úgen)Újson_decodeÚutf8Ú
to_unicodeÚrecursive_unicodeÚ
native_strÚto_basestring)ÚHTTPClientError)Úformat_timestamp)ÚIOStream)Úlocale)ÚEvent)Úapp_logÚgen_log©ÚSimpleAsyncHTTPClient©Ú
DictLoader)ÚAsyncHTTPTestCaseÚAsyncTestCaseÚ	ExpectLogÚgen_test)Úignore_deprecation)Ú
ObjectDictÚunicode_type)ÚApplicationÚRequestHandlerÚStaticFileHandlerÚRedirectHandlerÚ	HTTPErrorÚMissingArgumentErrorÚErrorHandlerÚauthenticatedÚurlÚ_create_signature_v1Úcreate_signed_valueÚdecode_signed_valueÚget_signature_key_versionÚUIModuleÚFinishÚstream_request_bodyÚremoveslashÚaddslashÚGZipContentEncoding)ÚBytesIOc                  ót   — t          j        j        t           j                             t          ¦  «        g| ¢R Ž S ©N)ÚosÚpathÚjoinÚdirnameÚ__file__)Úas    úb/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/tornado/test/web_test.pyÚrelpathr:   ?   s*   € ÝŒ7Œ<�œŸš­Ñ1Ô1Ð6°AÐ6Ð6Ð6Ð6ó    c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚWebTestCasezÂBase class for web tests that also supports WSGI mode.

    Override get_handlers and get_app_kwargs instead of get_app.
    This class is deprecated since WSGI mode is no longer supported.
    c                 ó|   — t          |                      ¦   «         fi |                      ¦   «         ¤Ž| _        | j        S r2   )r   Úget_handlersÚget_app_kwargsÚapp©Úselfs    r9   Úget_appzWebTestCase.get_appJ   s8   € Ý˜t×0Ò0Ñ2Ô2ÐLÐL°d×6IÒ6IÑ6KÔ6KÐLÐLˆŒØŒxˆr;   c                 ó   — t          ¦   «         ‚r2   ©ÚNotImplementedErrorrB   s    r9   r?   zWebTestCase.get_handlersN   s   € Ý!Ñ#Ô#Ð#r;   c                 ó   — i S r2   © rB   s    r9   r@   zWebTestCase.get_app_kwargsQ   ó   € Øˆ	r;   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rD   r?   r@   rI   r;   r9   r=   r=   C   sK   € € € € € ðð ðð ð ð$ð $ð $ðð ð ð ð r;   r=   c                   ó   — e Zd ZdZdZd„ ZdS )ÚSimpleHandlerTestCasez�Simplified base class for tests that work with a single handler class.

    To use, define a nested class named ``Handler``.
    Nc                 ó   — d| j         fgS )Nú/©ÚHandlerrB   s    r9   r?   z"SimpleHandlerTestCase.get_handlers]   s   € Ø�d”lÐ#Ð$Ð$r;   )rK   rL   rM   rN   rT   r?   rI   r;   r9   rP   rP   U   s4   € € € € € ðð ð
 €Gð%ð %ð %ð %ð %r;   rP   c                   ó   — e Zd Zd„ ZdS )ÚHelloHandlerc                 ó0   — |                       d¦  «         d S ©NÚhello©ÚwriterB   s    r9   ÚgetzHelloHandler.getb   s   € Ø�
Š
�7ÑÔÐÐÐr;   N©rK   rL   rM   r\   rI   r;   r9   rV   rV   a   s#   € € € € € ðð ð ð ð r;   rV   c                   ó$   — e Zd Zdd„Zd„ Zdd„ZdS )ÚCookieTestRequestHandlerÚ
0123456789Nc                 óª   — i | _         |€%t          t          |¬¦  «        ¬¦  «        | _        d S t          t          ||¬¦  «        ¬¦  «        | _        d S )N)Úcookie_secret)Úsettings©rb   Úkey_version)Ú_cookiesr   ÚdictÚapplication)rC   rb   re   s      r9   Ú__init__z!CookieTestRequestHandler.__init__h   si   € àˆŒØÐÝ)Ý¨MÐ:Ñ:Ô:ð ñ  ô  ˆDÔÐÐõ  *Ý¨MÀ{ÐSÑSÔSð ñ  ô  ˆDÔÐÐr;   c                 ó6   — | j                              |¦  «        S r2   )rf   r\   )rC   Únames     r9   Ú
get_cookiez#CookieTestRequestHandler.get_cookiet   s   € ØŒ}× Ò  Ñ&Ô&Ð&r;   c                 ó   — || j         |<   d S r2   )rf   )rC   rk   ÚvalueÚexpires_dayss       r9   Ú
set_cookiez#CookieTestRequestHandler.set_cookiew   s   € Ø#ˆŒ�dÑÐÐr;   )r`   Nr2   )rK   rL   rM   ri   rl   rp   rI   r;   r9   r_   r_   f   sK   € € € € € ð
ð 
ð 
ð 
ð'ð 'ð 'ð$ð $ð $ð $ð $ð $r;   r_   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚSecureCookieV1Testc                 ó¨   — t          ¦   «         }|                     ddd¬¦  «         |                      |                     dd¬¦  «        d¦  «         d S )NÚfooó   baré   ©Úversion©Úmin_version©r_   Úset_signed_cookieÚassertEqualÚget_signed_cookie©rC   Úhandlers     r9   Útest_round_tripz"SecureCookieV1Test.test_round_trip}   óW   € Ý*Ñ,Ô,ˆØ×!Ò! %¨¸Ð!Ñ;Ô;Ð;Ø×Ò˜×2Ò2°5ÀaÐ2ÑHÔHÈ&ÑQÔQÐQÐQÐQr;   c           	      ó<  — t          ¦   «         }|                     dt          j        d¦  «        d¬¦  «         |j        d         }t          j        d|¦  «        }|                      |¦  «         |€J ‚|                     d¦  «        }|                     d¦  «        }|  	                    t          |j        j        d         dd|¦  «        |¦  «         |  	                    t          |j        j        d         dd	d
|z   ¦  «        |¦  «         t          dt          |¦  «        › dt          |¦  «        › �¦  «        |j        d<   t          t           d¦  «        5  |                      |                     dd¬¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nrt   s   d76df8e7aefcrv   rw   s   12345678\|([0-9]+)\|([0-9a-f]+)é   rb   Ú12345678Ú1234s   5678z	1234|5678ú|zCookie timestamp in futurery   )r_   r|   ÚbinasciiÚa2b_hexrf   ÚreÚmatchÚassertIsNotNoneÚgroupr}   r&   rh   rc   r   r
   r   r   ÚassertIsNoner~   )rC   r€   Úcookier‹   Ú	timestampÚsigs         r9   Ú&test_cookie_tampering_future_timestampz9SecureCookieV1Test.test_cookie_tampering_future_timestamp‚   s  € Ý*Ñ,Ô,ˆà×!Ò! %­Ô)9¸/Ñ)JÔ)JÐTUÐ!ÑVÔVÐVØÔ! %Ô(ˆÝ”Ð<¸fÑEÔEˆØ×Ò˜UÑ#Ô#Ð#ØÐ Ð Ð Ø—K’K ‘N”Nˆ	Ø�kŠk˜!‰nŒnˆØ×ÒÝ ØÔ#Ô,¨_Ô=ØØØñ	ô ð ñ	
ô 	
ð 	
ð 	×ÒÝ ØÔ#Ô,¨_Ô=ØØØ˜)Ñ#ñ	ô ð ñ	
ô 	
ð 	
õ #'ØG� iÑ0Ô0ÐGÐGµ=ÀÑ3EÔ3EÐGÐGñ#
ô #
ˆÔ˜Ñõ •wÐ <Ñ=Ô=ð 	Oð 	OØ×Ò˜g×7Ò7¸È1Ð7ÑMÔMÑNÔNÐNð	Oð 	Oð 	Oñ 	Oô 	Oð 	Oð 	Oð 	Oð 	Oð 	Oð 	Oð 	Oøøøð 	Oð 	Oð 	Oð 	Oð 	Oð 	Os   Å+FÆFÆFc                 ó¨   — t          ¦   «         }|                     ddd¬¦  «         |                      |                     dd¬¦  «        d¦  «         d S )Nrt   ó   érv   rw   ry   r{   r   s     r9   Útest_arbitrary_bytesz'SecureCookieV1Test.test_arbitrary_bytes©   sY   € õ +Ñ,Ô,ˆØ×!Ò! %¨¸!Ð!Ñ<Ô<Ð<Ø×Ò˜×2Ò2°5ÀaÐ2ÑHÔHÈ'ÑRÔRÐRÐRÐRr;   N)rK   rL   rM   r�   r’   r•   rI   r;   r9   rr   rr   |   sM   € € € € € ðRð Rð Rð
%Oð %Oð %OðNSð Sð Sð Sð Sr;   rr   c                   ó6   — e Zd ZdddœZd„ Zd„ Zd„ Zd„ Zd„ Zd	S )
ÚSecureCookieV2TestÚajklasdf0ojaisdfÚaslkjasaolwkjsdf)r   rv   c                 ó¨   — t          ¦   «         }|                     ddd¬¦  «         |                      |                     dd¬¦  «        d¦  «         d S )Nrt   ru   r„   rw   ry   r{   r   s     r9   r�   z"SecureCookieV2Test.test_round_tripµ   r‚   r;   c                 ó°   — t          | j        d¬¦  «        }|                     dd¦  «         |                      |                     d¦  «        d¦  «         d S )Nr   rd   rt   ru   ©r_   ÚKEY_VERSIONSr|   r}   r~   r   s     r9   Útest_key_version_roundtripz-SecureCookieV2Test.test_key_version_roundtripº   ó`   € Ý*ØÔ+¸ð
ñ 
ô 
ˆð 	×!Ò! %¨Ñ0Ô0Ð0Ø×Ò˜×2Ò2°5Ñ9Ô9¸6ÑBÔBÐBÐBÐBr;   c                 ó°   — t          | j        d¬¦  «        }|                     dd¦  «         |                      |                     d¦  «        d¦  «         d S )Nrv   rd   rt   ru   rœ   r   s     r9   Ú,test_key_version_roundtrip_differing_versionz?SecureCookieV2Test.test_key_version_roundtrip_differing_versionÁ   rŸ   r;   c                 óô   — t          | j        d¬¦  «        }|                     dd¦  «         t          | j        d¬¦  «        }|j        |_        |                      |                     d¦  «        d¦  «         d S ©Nr   rd   rt   ru   rv   )r_   r�   r|   rf   r}   r~   )rC   r€   Únew_handlers      r9   Ú"test_key_version_increment_versionz5SecureCookieV2Test.test_key_version_increment_versionÈ   s‰   € Ý*ØÔ+¸ð
ñ 
ô 
ˆð 	×!Ò! %¨Ñ0Ô0Ð0Ý.ØÔ+¸ð
ñ 
ô 
ˆð  'Ô/ˆÔØ×Ò˜×6Ò6°uÑ=Ô=¸vÑFÔFÐFÐFÐFr;   c                 óF  — t          | j        d¬¦  «        }|                     dd¦  «         | j                             ¦   «         }|                     d¦  «         t          |d¬¦  «        }|j        |_        |                      |                     d¦  «        d ¦  «         d S r£   )r_   r�   r|   ÚcopyÚpoprf   r}   r~   )rC   r€   Únew_key_versionsr¤   s       r9   Ú#test_key_version_invalidate_versionz6SecureCookieV2Test.test_key_version_invalidate_versionÓ   s¯   € Ý*ØÔ+¸ð
ñ 
ô 
ˆð 	×!Ò! %¨Ñ0Ô0Ð0ØÔ,×1Ò1Ñ3Ô3ÐØ×Ò˜QÑÔÐÝ.Ø*¸ð
ñ 
ô 
ˆð  'Ô/ˆÔØ×Ò˜×6Ò6°uÑ=Ô=¸tÑDÔDÐDÐDÐDr;   N)	rK   rL   rM   r�   r�   rž   r¡   r¥   rª   rI   r;   r9   r—   r—   ²   s~   € € € € € Ø)Ð.@ÐAÐA€LðRð Rð Rð
Cð Cð CðCð Cð Cð	Gð 	Gð 	GðEð Eð Eð Eð Er;   r—   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚFinalReturnTestNc                 ól   ‡— | Š G ˆfd„dt           ¦  «        } G ˆfd„dt           ¦  «        }d|fd|fgS )Nc                   óX   •— e Zd Zej        ˆ fd„¦   «         Zej        ˆ fd„¦   «         ZdS )ú3FinalReturnTest.get_handlers.<locals>.FinishHandlerc              3   óP   •K  — |                       ¦   «         ‰_        ‰j        V — d S r2   )ÚfinishÚfinal_return©rC   Útests    €r9   r\   z7FinalReturnTest.get_handlers.<locals>.FinishHandler.getè   s,   øè è € à$(§K¢K¡M¤M�Ô!ØÔ'Ð'Ð'Ð'Ð'Ð'r;   c              3   ó¨   •K  — |                       d¦  «         |                      ¦   «         V — |                      d¦  «        ‰_        ‰j        V — d S )Nzhello,Úworld)r[   Úflushr±   r²   r³   s    €r9   Úpostz8FinalReturnTest.get_handlers.<locals>.FinishHandler.postí   sV   øè è € à—
’
˜8Ñ$Ô$Ð$Ø—j’j‘l”lÐ"Ð"Ð"Ø$(§K¢K°Ñ$8Ô$8�Ô!ØÔ'Ð'Ð'Ð'Ð'Ð'r;   N)rK   rL   rM   r   Ú	coroutiner\   r¸   ©r´   s   €r9   ÚFinishHandlerr¯   ç   sa   ø€ € € € € ØŒ]ð(ð (ð (ð (ñ Œ]ð(ð Œ]ð(ð (ð (ð (ñ Œ]ð(ð (ð (r;   r»   c                   ó:   •— e Zd Zd„ Zej        ˆ fd„¦   «         ZdS )ú3FinalReturnTest.get_handlers.<locals>.RenderHandlerc                 ó$   — t          ddi¦  «        S )Núfoo.htmlÚhir   ©rC   r4   s     r9   Úcreate_template_loaderzJFinalReturnTest.get_handlers.<locals>.RenderHandler.create_template_loaderõ   s   € Ý! :¨tÐ"4Ñ5Ô5Ð5r;   c                 ó<   •— |                       d¦  «        ‰_        d S ©Nr¿   )Úrenderr²   r³   s    €r9   r\   z7FinalReturnTest.get_handlers.<locals>.RenderHandler.getø   s   ø€ à$(§K¢K°
Ñ$;Ô$;�Ô!Ð!Ð!r;   N)rK   rL   rM   rÂ   r   r¹   r\   rº   s   €r9   ÚRenderHandlerr½   ô   sK   ø€ € € € € ð6ð 6ð 6ð Œ]ð<ð <ð <ð <ñ Œ]ð<ð <ð <r;   rÆ   ú/finishú/render©r   )rC   r»   rÆ   r´   s      @r9   r?   zFinalReturnTest.get_handlersä   s‡   ø€ Øˆð	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(�Nñ 	(ô 	(ð 	(ð	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<�Nñ 	<ô 	<ð 	<ð ˜MÐ*¨Y¸Ð,FÐGÐGr;   c                 ó"   — t          d¬¦  «        S )Nr¬   )Útemplate_path©rg   rB   s    r9   r@   zFinalReturnTest.get_app_kwargsþ   s   € ÝÐ"3Ð4Ñ4Ô4Ð4r;   c                 óH  — |                       |                      d¦  «        ¦  «        }|                      |j        d¦  «         |                      | j        t          ¦  «         |                      | j                             ¦   «         ¦  «         |                       |                      d¦  «        dd¬¦  «        }|                      |j        d¦  «         |                      | j        t          ¦  «         |                      | j                             ¦   «         ¦  «         d S )NrÇ   éÈ   ÚPOSTr;   ©ÚmethodÚbody)	ÚfetchÚget_urlr}   ÚcodeÚassertIsInstancer²   r   Ú
assertTrueÚdone©rC   Úresponses     r9   Ú test_finish_method_return_futurez0FinalReturnTest.test_finish_method_return_future  sì   € Ø—:’:˜dŸlšl¨9Ñ5Ô5Ñ6Ô6ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜dÔ/µÑ8Ô8Ð8Ø�Š˜Ô)×.Ò.Ñ0Ô0Ñ1Ô1Ð1à—:’:˜dŸlšl¨9Ñ5Ô5¸fÈ3�:ÑOÔOˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜dÔ/µÑ8Ô8Ð8Ø�Š˜Ô)×.Ò.Ñ0Ô0Ñ1Ô1Ð1Ð1Ð1r;   c                 óÌ   — |                       |                      d¦  «        ¦  «        }|                      |j        d¦  «         |                      | j        t          ¦  «         d S )NrÈ   rÎ   )rÓ   rÔ   r}   rÕ   rÖ   r²   r   rÙ   s     r9   Ú test_render_method_return_futurez0FinalReturnTest.test_render_method_return_future  sV   € Ø—:’:˜dŸlšl¨9Ñ5Ô5Ñ6Ô6ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜dÔ/µÑ8Ô8Ð8Ð8Ð8r;   )rK   rL   rM   r²   r?   r@   rÛ   rÝ   rI   r;   r9   r¬   r¬   á   sX   € € € € € Ø€LðHð Hð Hð45ð 5ð 5ð	2ð 	2ð 	2ð9ð 9ð 9ð 9ð 9r;   r¬   c                   óP   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ ZdS )Ú
CookieTestc                 ó¾  —  G d„ dt           ¦  «        } G d„ dt           ¦  «        } G d„ dt           ¦  «        } G d„ dt           ¦  «        } G d	„ d
t           ¦  «        } G d„ dt           ¦  «        } G d„ dt           ¦  «        } G d„ dt           ¦  «        } G d„ dt           ¦  «        }	 G d„ dt           ¦  «        }
d|fd|fd|fd|fd|fd|fd|fd|fd|	fd|
fg
S )Nc                   ó   — e Zd Zd„ ZdS )ú1CookieTest.get_handlers.<locals>.SetCookieHandlerc                 óŠ   — |                       dd¦  «         |                       dd¦  «         |                       dd¦  «         d S )NÚstrÚasdfÚunicodeÚqwerÚbytess   zxcv©rp   rB   s    r9   r\   z5CookieTest.get_handlers.<locals>.SetCookieHandler.get  sF   € ð —’  vÑ.Ô.Ð.Ø—’ 	¨6Ñ2Ô2Ð2Ø—’ ¨Ñ1Ô1Ð1Ð1Ð1r;   Nr]   rI   r;   r9   ÚSetCookieHandlerrâ     s#   € € € € € ð2ð 2ð 2ð 2ð 2r;   rê   c                   ó   — e Zd Zd„ ZdS )ú1CookieTest.get_handlers.<locals>.GetCookieHandlerc                 ód   — |                       dd¦  «        }|€J ‚|                      |¦  «         d S )Nrt   Údefault)rl   r[   )rC   r�   s     r9   r\   z5CookieTest.get_handlers.<locals>.GetCookieHandler.get  s9   € ØŸš¨°	Ñ:Ô:�ØÐ)Ð)Ð)Ø—
’
˜6Ñ"Ô"Ð"Ð"Ð"r;   Nr]   rI   r;   r9   ÚGetCookieHandlerrì     s#   € € € € € ð#ð #ð #ð #ð #r;   rï   c                   ó   — e Zd Zd„ ZdS )ú7CookieTest.get_handlers.<locals>.SetCookieDomainHandlerc                 ó8   — |                       dddd¬¦  «         d S )NÚunicode_argsÚblahzfoo.comú/foo)Údomainr4   ré   rB   s    r9   r\   z;CookieTest.get_handlers.<locals>.SetCookieDomainHandler.get#  s$   € ð —’ °¸yÈv�ÑVÔVÐVÐVÐVr;   Nr]   rI   r;   r9   ÚSetCookieDomainHandlerrñ   "  s(   € € € € € ðWð Wð Wð Wð Wr;   r÷   c                   ó   — e Zd Zd„ ZdS )ú<CookieTest.get_handlers.<locals>.SetCookieSpecialCharHandlerc                 óŠ   — |                       dd¦  «         |                       dd¦  «         |                       dd¦  «         d S )NÚequalsúa=bÚ	semicolonúa;bÚquoteúa"bré   rB   s    r9   r\   z@CookieTest.get_handlers.<locals>.SetCookieSpecialCharHandler.get*  sD   € Ø—’ ¨%Ñ0Ô0Ð0Ø—’ ¨UÑ3Ô3Ð3Ø—’ ¨Ñ/Ô/Ð/Ð/Ð/r;   Nr]   rI   r;   r9   ÚSetCookieSpecialCharHandlerrù   (  s#   € € € € € ð0ð 0ð 0ð 0ð 0r;   r  c                   ó   — e Zd Zd„ ZdS )ú>CookieTest.get_handlers.<locals>.SetCookieForbiddenCharHandlerc           	      ó¬  — t          t          t          t          d¦  «        ¦  «        ¦  «        t          d¦  «        dgz   D �]}	 |                      d|z   d¦  «         |                      d|z  ¦  «         nN# t          j        j        $ r7}dt          |¦  «        vr|                      d|›d	|›d
�¦  «         Y d }~nd }~ww xY w	 |                      ddd|z   dz   ¬¦  «         |                      d|z  ¦  «         nN# t          j        j        $ r7}dt          |¦  «        vr|                      d|›d|›d
�¦  «         Y d }~nd }~ww xY w	 |                      ddd|z   ¬¦  «         |                      d|z  ¦  «         nN# t          j        j        $ r7}dt          |¦  «        vr|                      d|›d|›d
�¦  «         Y d }~nd }~ww xY w	 |                      ddd|z   ¬¦  «         |                      d|z  ¦  «         �ŒÃ# t          j        j        $ r8}dt          |¦  «        vr|                      d|›d|›d
�¦  «         Y d }~�Œ
d }~ww xY wd S )Né    é   ú;rt   Úbarz2Didn't get expected exception for char %r in name
zInvalid cookie attribute namezunexpected exception for char z
 in name: ú
Úexamplez.com©rö   z4Didn't get expected exception for char %r in domain
zInvalid cookie attribute domainz in domain: rR   ©r4   z2Didn't get expected exception for char %r in path
zInvalid cookie attribute pathz
 in path: r8   )Úsamesitez6Didn't get expected exception for char %r in samesite
z!Invalid cookie attribute samesitez in samesite: )
ÚlistÚmapÚchrÚrangerp   r[   ÚhttpÚcookiesÚCookieErrorrä   )rC   ÚcharÚes      r9   r\   zBCookieTest.get_handlers.<locals>.SetCookieForbiddenCharHandler.get0  sù  € õ !¥¥S­%°©+¬+Ñ!6Ô!6Ñ7Ô7½3¸t¹9¼9ÀcÐ:JÑJð 1ñ 1�Dð
ØŸš¨°©°eÑ<Ô<Ð<ØŸ
š
ØQÐTXÑXñô ð ð øõ  œ<Ô3ð ð ð Ø:Å#ÀaÁ&Ä&ÐHÐHØ ŸJšJ˜Jà#' 4 4¨¨¨ð!,ñô ð øøøøøøøøøðøøøðØŸš¨¨u¸YÈÑ=MÐPVÑ=V˜ÑWÔWÐWØŸ
š
ØSØ"ñ#ñô ð ð øõ  œ<Ô3ð ð ð Ø<ÅCÈÁFÄFÐJÐJØ ŸJšJ˜Jà#' 4 4¨¨¨ð!,ñô ð øøøøøøøøøðøøøð
ØŸš¨¨u¸3À¹:˜ÑFÔFÐFØŸ
š
ØQÐTXÑXñô ð ð øõ  œ<Ô3ð ð ð Ø:Å#ÀaÁ&Ä&ÐHÐHØ ŸJšJ˜Jà#' 4 4¨¨¨ð!,ñô ð øøøøøøøøøðøøøðØŸš¨¨u¸sÀT¹z˜ÑJÔJÐJØŸ
š
ØUØ"ñ#ñô ð ñ øõ  œ<Ô3ð ð ð Ø>ÅcÈ!ÁfÄfÐLÐLØ ŸJšJ˜Jà#' 4 4¨¨¨ð!,ñô ð øøøøùøøøøðøøøðY1ð 1s`   Á1A8Á8CÂ-B>Â>CÃ6C>Ã>E	Ä-EÅE	Å3FÆGÆ-GÇGÇ3HÈIÈ-IÉINr]   rI   r;   r9   ÚSetCookieForbiddenCharHandlerr  /  s#   € € € € € ð4ð 4ð 4ð 4ð 4r;   r  c                   ó   — e Zd Zd„ ZdS )ú:CookieTest.get_handlers.<locals>.SetCookieOverwriteHandlerc                 ó’   — |                       ddd¬¦  «         |                       ddd¬¦  «         |                       dd¦  «         d S )Nr8   Úbzexample.comr  ÚcÚdr  ré   rB   s    r9   r\   z>CookieTest.get_handlers.<locals>.SetCookieOverwriteHandler.getg  sN   € Ø—’  S°�Ñ?Ô?Ð?Ø—’  S°�Ñ?Ô?Ð?ð —’  SÑ)Ô)Ð)Ð)Ð)r;   Nr]   rI   r;   r9   ÚSetCookieOverwriteHandlerr  f  s#   € € € € € ð*ð *ð *ð *ð *r;   r  c                   ó   — e Zd Zd„ ZdS )ú7CookieTest.get_handlers.<locals>.SetCookieMaxAgeHandlerc                 ó6   — |                       ddd¬¦  «         d S )Nrt   r  é
   )Úmax_ageré   rB   s    r9   r\   z;CookieTest.get_handlers.<locals>.SetCookieMaxAgeHandler.geto  s    € Ø—’  u°b�Ñ9Ô9Ð9Ð9Ð9r;   Nr]   rI   r;   r9   ÚSetCookieMaxAgeHandlerr   n  s#   € € € € € ð:ð :ð :ð :ð :r;   r$  c                   ó   — e Zd Zd„ ZdS )ú<CookieTest.get_handlers.<locals>.SetCookieExpiresDaysHandlerc                 ó6   — |                       ddd¬¦  «         d S )Nrt   r  r"  )ro   ré   rB   s    r9   r\   z@CookieTest.get_handlers.<locals>.SetCookieExpiresDaysHandler.gets  s    € Ø—’  u¸2�Ñ>Ô>Ð>Ð>Ð>r;   Nr]   rI   r;   r9   ÚSetCookieExpiresDaysHandlerr&  r  s#   € € € € € ð?ð ?ð ?ð ?ð ?r;   r(  c                   ó   — e Zd Zd„ ZdS )ú4CookieTest.get_handlers.<locals>.SetCookieFalsyFlagsc                 óÆ   — |                       ddd¬¦  «         |                       ddd¬¦  «         |                       ddd¬¦  «         |                       d	dd¬¦  «         d S )
Nr8   Ú1T)Úsecurer  Fr  )Úhttponlyr  ré   rB   s    r9   r\   z8CookieTest.get_handlers.<locals>.SetCookieFalsyFlags.getw  sh   € Ø—’  S°�Ñ6Ô6Ð6Ø—’  S°�Ñ7Ô7Ð7Ø—’  S°4�Ñ8Ô8Ð8Ø—’  S°5�Ñ9Ô9Ð9Ð9Ð9r;   Nr]   rI   r;   r9   ÚSetCookieFalsyFlagsr*  v  s#   € € € € € ð:ð :ð :ð :ð :r;   r/  c                   ó   — e Zd Zd„ ZdS )ú8CookieTest.get_handlers.<locals>.SetCookieDeprecatedArgsc                 ó8   — |                       dddd¬¦  «         d S )Nr8   r  Trõ   )ÚHttpOnlyÚpATHré   rB   s    r9   r\   z<CookieTest.get_handlers.<locals>.SetCookieDeprecatedArgs.get~  s"   € à—’  S°4¸f�ÑEÔEÐEÐEÐEr;   Nr]   rI   r;   r9   ÚSetCookieDeprecatedArgsr1  }  s(   € € € € € ðFð Fð Fð Fð Fr;   r5  ú/setú/getú/set_domainú/special_charú/forbidden_charú/set_overwriteú/set_max_ageú/set_expires_daysú/set_falsy_flagsú/set_deprecatedrÉ   )rC   rê   rï   r÷   r  r  r  r$  r(  r/  r5  s              r9   r?   zCookieTest.get_handlers  s  € ð	2ð 	2ð 	2ð 	2ð 	2�~ñ 	2ô 	2ð 	2ð	#ð 	#ð 	#ð 	#ð 	#�~ñ 	#ô 	#ð 	#ð	Wð 	Wð 	Wð 	Wð 	W¥^ñ 	Wô 	Wð 	Wð	0ð 	0ð 	0ð 	0ð 	0­.ñ 	0ô 	0ð 	0ð5	ð 5	ð 5	ð 5	ð 5	­Nñ 5	ô 5	ð 5	ðn	*ð 	*ð 	*ð 	*ð 	*­ñ 	*ô 	*ð 	*ð	:ð 	:ð 	:ð 	:ð 	:¥^ñ 	:ô 	:ð 	:ð	?ð 	?ð 	?ð 	?ð 	?­.ñ 	?ô 	?ð 	?ð	:ð 	:ð 	:ð 	:ð 	:¥.ñ 	:ô 	:ð 	:ð	Fð 	Fð 	Fð 	Fð 	F¥nñ 	Fô 	Fð 	Fð Ð%Ð&ØÐ%Ð&ØÐ2Ð3ØÐ9Ð:ØÐ =Ð>ØÐ8Ð9ØÐ3Ð4Ø Ð"=Ð>ØÐ!4Ð5ØÐ 7Ð8ð
ð 	
r;   c                 óª   — |                       d¦  «        }|                      t          |j                             d¦  «        ¦  «        g d¢¦  «         d S )Nr6  ú
Set-Cookie)zbytes=zxcv; Path=/zstr=asdf; Path=/zunicode=qwer; Path=/)rÓ   r}   ÚsortedÚheadersÚget_listrÙ   s     r9   Útest_set_cookiezCookieTest.test_set_cookie�  sZ   € Ø—:’:˜fÑ%Ô%ˆØ×ÒÝ�8Ô#×,Ò,¨\Ñ:Ô:Ñ;Ô;ØNÐNÐNñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 ó>  — |                       dddi¬¦  «        }|                      |j        d¦  «         |                       dddi¬¦  «        }|                      |j        d¦  «         |                       dddi¬¦  «        }|                      |j        d¦  «         d S )	Nr7  ÚCookieúfoo=bar©rC  ru   z	foo="bar"z/=exception;ó   default©rÓ   r}   rÒ   rÙ   s     r9   Útest_get_cookiezCookieTest.test_get_cookie–  sž   € Ø—:’:˜f¨x¸Ð.C�:ÑDÔDˆØ×Ò˜œ¨Ñ/Ô/Ð/à—:’:˜f¨x¸Ð.E�:ÑFÔFˆØ×Ò˜œ¨Ñ/Ô/Ð/à—:’:˜f¨x¸Ð.H�:ÑIÔIˆØ×Ò˜œ¨
Ñ3Ô3Ð3Ð3Ð3r;   c                 óŽ   — |                       d¦  «        }|                      |j                             d¦  «        dg¦  «         d S )Nr8  rA  z,unicode_args=blah; Domain=foo.com; Path=/foo©rÓ   r}   rC  rD  rÙ   s     r9   Útest_set_cookie_domainz!CookieTest.test_set_cookie_domain   sO   € Ø—:’:˜mÑ,Ô,ˆØ×ÒØÔ×%Ò% lÑ3Ô3Ø;Ð<ñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 ó>  — |                       d¦  «        }t          |j                             d¦  «        ¦  «        }|                      t          |¦  «        d¦  «         |                      |d         d¦  «         |                      |d         d¦  «         |                      |d         d	|d         ¦  «         g d
¢}|D ][\  }}t          j        d|¦  «         |                       dd|i¬¦  «        }|                      |j	        t          |¦  «        ¦  «         Œ\d S )Nr9  rA  é   r   zequals="a=b"; Path=/rv   zquote="a\"b"; Path=/r„   )zsemicolon="a;b"; Path=/zsemicolon="a\073b"; Path=/))zfoo=a=brü   )z	foo="a=b"rü   )z	foo="a;b"z"a)z
foo=a\073bza\073b)zfoo="a\073b"rþ   )z
foo="a\"b"r   z	trying %rr7  rG  rI  )rÓ   rB  rC  rD  r}   ÚlenÚassertInÚloggingÚdebugrÒ   r   )rC   rÚ   rC  ÚdataÚheaderÚexpecteds         r9   Útest_cookie_special_charz#CookieTest.test_cookie_special_char§  s(  € Ø—:’:˜oÑ.Ô.ˆÝ˜Ô)×2Ò2°<Ñ@Ô@ÑAÔAˆØ×Ò�˜W™œ qÑ)Ô)Ð)Ø×Ò˜ œÐ%;Ñ<Ô<Ð<Ø×Ò˜ œÐ%<Ñ=Ô=Ð=à�ŠØ�AŒJØFØ�AŒJñ	
ô 	
ð 	
ð
ð 
ð 
ˆð !%ð 	<ð 	<ÑˆF�HÝŒM˜+ vÑ.Ô.Ð.Ø—z’z &°8¸VÐ2D�zÑEÔEˆHØ×Ò˜Xœ]­D°©N¬NÑ;Ô;Ð;Ð;ð	<ð 	<r;   c                 óÄ   — |                       d¦  «        }|                      |j        d¦  «         d| _        |                      t          |j        ¦  «        d¦  «         d S )Nr:  rÎ   i'  Ú )rÓ   r}   rÕ   ÚmaxDiffÚassertMultiLineEqualr   rÒ   rÙ   s     r9   Útest_set_cookie_forbidden_charz)CookieTest.test_set_cookie_forbidden_charÁ  sY   € Ø—:’:Ð/Ñ0Ô0ˆØ×Ò˜œ¨Ñ,Ô,Ð,ØˆŒØ×!Ò!¥*¨X¬]Ñ";Ô";¸RÑ@Ô@Ð@Ð@Ð@r;   c                 ó®   — |                       d¦  «        }|j                             d¦  «        }|                      t	          |¦  «        ddg¦  «         d S )Nr;  rA  za=e; Path=/zc=d; Domain=example.com; Path=/©rÓ   rC  rD  r}   rB  ©rC   rÚ   rC  s      r9   Útest_set_cookie_overwritez$CookieTest.test_set_cookie_overwriteÇ  s]   € Ø—:’:Ð.Ñ/Ô/ˆØÔ"×+Ò+¨LÑ9Ô9ˆØ×ÒÝ�7‰OŒO˜mÐ-NÐOñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 ó¬   — |                       d¦  «        }|j                             d¦  «        }|                      t	          |¦  «        dg¦  «         d S )Nr<  rA  zfoo=bar; Max-Age=10; Path=/r`  ra  s      r9   Útest_set_cookie_max_agez"CookieTest.test_set_cookie_max_ageÎ  sO   € Ø—:’:˜nÑ-Ô-ˆØÔ"×+Ò+¨LÑ9Ô9ˆØ×Ò� ™œÐ+HÐ*IÑJÔJÐJÐJÐJr;   c                 óX  — |                       d¦  «        }|j                             d¦  «        }|                      |¦  «         |€J ‚t	          j        d|¦  «        }|                      |¦  «         |€J ‚t          j                             t          j        j	        ¦  «        t          j
        d¬¦  «        z   }t          j                             |                     ¦   «         d         ¦  «        }|                      t!          ||z
                       ¦   «         ¦  «        d¦  «         d S )Nr=  rA  z(foo=bar; expires=(?P<expires>.+); Path=/r"  ©ÚdaysÚexpires)rÓ   rC  r\   rŒ   rŠ   r‹   ÚdatetimeÚnowÚtimezoneÚutcÚ	timedeltaÚemailÚutilsÚparsedate_to_datetimeÚ	groupdictÚ
assertLessÚabsÚtotal_seconds©rC   rÚ   rW  r‹   rh  Úheader_expiress         r9   Útest_set_cookie_expires_daysz'CookieTest.test_set_cookie_expires_daysÓ  s  € Ø—:’:Ð1Ñ2Ô2ˆØÔ!×%Ò% lÑ3Ô3ˆØ×Ò˜VÑ$Ô$Ð$ØÐ!Ð!Ð!Ý”ÐCÀVÑLÔLˆØ×Ò˜UÑ#Ô#Ð#ØÐ Ð Ð åÔ#×'Ò'­Ô(9Ô(=Ñ>Ô>ÅÔASØðB
ñ B
ô B
ñ 
ˆõ œ×:Ò:¸5¿?º?Ñ;LÔ;LÈYÔ;WÑXÔXˆØ�Š�˜W ~Ñ5×DÒDÑFÔFÑGÔGÈÑLÔLÐLÐLÐLr;   c                 ó^  — |                       d¦  «        }t          |j                             d¦  «        ¦  «        }|                      |d         d¦  «         |                      |d         d¦  «         |                      |d         d¦  «         |                      |d	         d
¦  «         d S )Nr>  rA  r   za=1; Path=/; Securerv   zb=1; Path=/r„   zc=1; HttpOnly; Path=/rQ  zd=1; Path=/)rÓ   rB  rC  rD  r}   ra  s      r9   Útest_set_cookie_false_flagsz&CookieTest.test_set_cookie_false_flagsâ  s¢   € Ø—:’:Ð0Ñ1Ô1ˆÝ˜Ô)×2Ò2°<Ñ@Ô@ÑAÔAˆØ×Ò˜ œÐ%:Ñ;Ô;Ð;Ø×Ò˜ œ ]Ñ3Ô3Ð3Ø×Ò˜ œÐ%<Ñ=Ô=Ð=Ø×Ò˜ œ ]Ñ3Ô3Ð3Ð3Ð3r;   c                 óÜ   — t          ¦   «         5  |                      d¦  «        }d d d ¦  «         n# 1 swxY w Y   |j                             d¦  «        }|                      |d¦  «         d S )Nr?  rA  za=b; HttpOnly; Path=/foo)r   rÓ   rC  r\   r}   )rC   rÚ   rW  s      r9   Útest_set_cookie_deprecatedz%CookieTest.test_set_cookie_deprecatedê  s¨   € ÝÑ!Ô!ð 	5ð 	5Ø—z’zÐ"3Ñ4Ô4ˆHð	5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5àÔ!×%Ò% lÑ3Ô3ˆØ×Ò˜Ð!;Ñ<Ô<Ð<Ð<Ð<s   �1±5¸5N)rK   rL   rM   r?   rE  rL  rO  rY  r^  rb  rd  rw  ry  r{  rI   r;   r9   rß   rß     sÆ   € € € € € ðz
ð z
ð z
ðx
ð 
ð 
ð4ð 4ð 4ð
ð 
ð 
ð<ð <ð <ð4Að Að Að
ð 
ð 
ðKð Kð Kð
Mð Mð Mð4ð 4ð 4ð=ð =ð =ð =ð =r;   rß   c                   ó0   — e Zd Zd„ Zd„ Zed„ ¦   «         ZdS )ÚAuthRedirectRequestHandlerc                 ó   — || _         d S r2   ©Ú	login_url)rC   r€  s     r9   Ú
initializez%AuthRedirectRequestHandler.initializeò  s   € Ø"ˆŒˆˆr;   c                 ó   — | j         S r2   r  rB   s    r9   Úget_login_urlz(AuthRedirectRequestHandler.get_login_urlõ  s
   € ØŒ~Ðr;   c                 ó0   — |                       d¦  «         d S )Néô  )Ú
send_errorrB   s    r9   r\   zAuthRedirectRequestHandler.getø  s   € ð 	�Š˜ÑÔÐÐÐr;   N)rK   rL   rM   r�  rƒ  r$   r\   rI   r;   r9   r}  r}  ñ  sM   € € € € € ð#ð #ð #ðð ð ð ðð ñ „]ðð ð r;   r}  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚAuthRedirectTestc                 ób   — dt           t          d¬¦  «        fdt           t          d¬¦  «        fgS )Nú	/relativez/loginr  ú	/absolutezhttp://example.com/login)r}  rg   rB   s    r9   r?   zAuthRedirectTest.get_handlersÿ  s<   € àÕ4µdÀXÐ6NÑ6NÔ6NÐOàÝ*ÝÐ9Ð:Ñ:Ô:ðð
ð 	
r;   c                 óÒ   — |                       |                      d¦  «        d¬¦  «        }|                      |j        d¦  «         |                      |j        d         d¦  «         d S )NrŠ  F©Úfollow_redirectsé.  ÚLocationz/login?next=%2Frelative)rÓ   rÔ   r}   rÕ   rC  rÙ   s     r9   Útest_relative_auth_redirectz,AuthRedirectTest.test_relative_auth_redirect	  s`   € Ø—:’:˜dŸlšl¨;Ñ7Ô7È%�:ÑPÔPˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜Ô)¨*Ô5Ð7PÑQÔQÐQÐQÐQr;   c                 ó  — |                       |                      d¦  «        d¬¦  «        }|                      |j        d¦  «         |                      t          j        d|j        d         ¦  «        |j        d         ¦  «         d S )Nr‹  Fr�  r�  zIhttp://example.com/login\?next=http%3A%2F%2F127.0.0.1%3A[0-9]+%2Fabsoluter�  )rÓ   rÔ   r}   rÕ   r×   rŠ   r‹   rC  rÙ   s     r9   Útest_absolute_auth_redirectz,AuthRedirectTest.test_absolute_auth_redirect  s…   € Ø—:’:˜dŸlšl¨;Ñ7Ô7È%�:ÑPÔPˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø�ŠÝŒHØ\ØÔ  Ô,ñô ð Ô˜ZÔ(ñ	
ô 	
ð 	
ð 	
ð 	
r;   N)rK   rL   rM   r?   r‘  r“  rI   r;   r9   rˆ  rˆ  þ  sD   € € € € € ð
ð 
ð 
ðRð Rð Rð
	
ð 	
ð 	
ð 	
ð 	
r;   rˆ  c                   ó:   — e Zd Zd„ Zej        d„ ¦   «         Zd„ ZdS )ÚConnectionCloseHandlerc                 ó   — || _         d S r2   rº   r³   s     r9   r�  z!ConnectionCloseHandler.initialize  s   € ØˆŒ	ˆ	ˆ	r;   c              #   ó|   K  — | j                              ¦   «          | j         j                             ¦   «         V — d S r2   )r´   Úon_handler_waitingÚcleanup_eventÚwaitrB   s    r9   r\   zConnectionCloseHandler.get  s=   è è € àŒ	×$Ò$Ñ&Ô&Ð&ØŒiÔ%×*Ò*Ñ,Ô,Ð,Ð,Ð,Ð,Ð,r;   c                 ó8   — | j                              ¦   «          d S r2   )r´   Úon_connection_closerB   s    r9   rœ  z*ConnectionCloseHandler.on_connection_close#  s   € ØŒ	×%Ò%Ñ'Ô'Ð'Ð'Ð'r;   N)rK   rL   rM   r�  r   r¹   r\   rœ  rI   r;   r9   r•  r•    sO   € € € € € ðð ð ð 	„]ð-ð -ñ „]ð-ð(ð (ð (ð (ð (r;   r•  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚConnectionCloseTestc                 óZ   — t          ¦   «         | _        dt          t          | ¬¦  «        fgS )NrR   rº   )r   r™  r•  rg   rB   s    r9   r?   z ConnectionCloseTest.get_handlers(  s'   € Ý"™WœWˆÔØÕ,­d¸¨o©o¬oÐ>Ð?Ð?r;   c                 ó˜  — t          j         t           j        t           j        d¦  «        }|                     d|                      ¦   «         f¦  «         t          |¦  «        | _        | j                             d¦  «         |                      ¦   «          | j	         
                    ¦   «          | j                             d„ ¦  «         d S )Nr   ú	127.0.0.1s   GET / HTTP/1.0

c                  ó*   — t          j        d¦  «        S ©Nr   )r   ÚsleeprI   r;   r9   ú<lambda>z;ConnectionCloseTest.test_connection_close.<locals>.<lambda>4  s   € ¥c¤i°¡l¤l€ r;   )ÚsocketÚAF_INETÚSOCK_STREAMÚconnectÚget_http_portr   Ústreamr[   rš  r™  ÚsetÚio_loopÚrun_sync)rC   Úss     r9   Útest_connection_closez)ConnectionCloseTest.test_connection_close,  s£   € ÝŒM�&œ.­&Ô*<¸aÑ@Ô@ˆØ	�	Š	�; × 2Ò 2Ñ 4Ô 4Ð5Ñ6Ô6Ð6Ý˜q‘k”kˆŒØŒ×ÒÐ3Ñ4Ô4Ð4Ø�	Š	‰ŒˆàÔ×ÒÑ Ô Ð ØŒ×ÒÐ2Ð2Ñ3Ô3Ð3Ð3Ð3r;   c                 ó`   — t          j        d¦  «         | j                             ¦   «          d S )Nzhandler waiting)rT  rU  r«  ÚcloserB   s    r9   r˜  z&ConnectionCloseTest.on_handler_waiting6  s-   € ÝŒÐ'Ñ(Ô(Ð(ØŒ×ÒÑÔÐÐÐr;   c                 óV   — t          j        d¦  «         |                      ¦   «          d S )Nzconnection closed)rT  rU  ÚstoprB   s    r9   rœ  z'ConnectionCloseTest.on_connection_close:  s$   € ÝŒÐ)Ñ*Ô*Ð*Ø�	Š	‰Œˆˆˆr;   N)rK   rL   rM   r?   r°  r˜  rœ  rI   r;   r9   rž  rž  '  sS   € € € € € ð@ð @ð @ð4ð 4ð 4ðð ð ðð ð ð ð r;   rž  c                   ó   — e Zd Zd„ ZdS )ÚEchoHandlerc           	      ó¼  — | j         j        D ]Î}t          |¦  «        t          urt	          dt          |¦  «        z  ¦  «        ‚| j         j        |         D ]7}t          |¦  «        t
          urt	          dt          |¦  «        z  ¦  «        ‚Œ8|                      |¦  «        D ]7}t          |¦  «        t          urt	          dt          |¦  «        z  ¦  «        ‚Œ8ŒÏ|D ]7}t          |¦  «        t          urt	          dt          |¦  «        z  ¦  «        ‚Œ8|                      t          | j         j
        |t          | j         j        ¦  «        ¬¦  «        ¦  «         d S )Nzincorrect type for key: %rzincorrect type for value: %rzincorrect type for path arg: %r©r4   Ú	path_argsÚargs)ÚrequestÚ	argumentsÚtyperä   Ú	Exceptionrè   Úget_argumentsr   r[   rg   r4   r   )rC   r¹  ÚkeyÚbvalueÚsvalueÚargs         r9   r\   zEchoHandler.get@  su  € ð
 ”<Ô)ð 	Sð 	SˆCÝ�C‰yŒy¥Ð#Ð#ÝÐ <½tÀC¹y¼yÑ HÑIÔIÐIØœ,Ô0°Ô5ð Sð S�Ý˜‘<”<¥uÐ,Ð,Ý#Ð$BÅTÈ&Á\Ä\Ñ$QÑRÔRÐRð -à×,Ò,¨SÑ1Ô1ð Sð S�Ý˜‘<”<¥|Ð3Ð3Ý#Ð$BÅTÈ&Á\Ä\Ñ$QÑRÔRÐRð 4ðSð ð 	Oð 	OˆCÝ�C‰yŒy¥Ð,Ð,ÝÐ AÅDÈÁIÄIÑ MÑNÔNÐNð -à�
Š
ÝØ”\Ô&Ø#Ý& t¤|Ô'=Ñ>Ô>ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r;   Nr]   rI   r;   r9   r¶  r¶  ?  s#   € € € € € ð
ð 
ð 
ð 
ð 
r;   r¶  c                   ó2   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚRequestEncodingTestc                 ó&   — dt           fdt           fgS )Nz/group/(.*)z/slashes/([^/]*)/([^/]*))r¶  rB   s    r9   r?   z RequestEncodingTest.get_handlers[  s   € Ø¥Ð,Ð/IÍ;Ð.WÐXÐXr;   c                 óP   — t          |                      |¦  «        j        ¦  «        S r2   )r   rÓ   rÒ   rÁ   s     r9   Ú
fetch_jsonzRequestEncodingTest.fetch_json^  s   € Ý˜4Ÿ:š: dÑ+Ô+Ô0Ñ1Ô1Ð1r;   c           	      óô   — |                       |                      d¦  «        t          ddgi ¬¦  «        ¦  «         |                       |                      d¦  «        t          ddgddgi¬¦  «        ¦  «         d S )Nz
/group/%3Fú?r¸  z/group/%3F?%3F=%3F©r}   rÈ  rg   rB   s    r9   Útest_group_question_markz,RequestEncodingTest.test_group_question_marka  s‹   € à×ÒØ�OŠO˜LÑ)Ô)Ý�l¨s¨e¸"Ð=Ñ=Ô=ñ	
ô 	
ð 	
ð 	×ÒØ�OŠOÐ0Ñ1Ô1Ý�l¨s¨e¸3ÀÀ¸,ÐGÑGÔGñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 óh   — |                       |                      d¦  «        ddgddgidœ¦  «         d S )Nz/group/%C3%A9?arg=%C3%A9z/group/%C3%A9õ   Ã©rÃ  r¸  ©r}   rÈ  rB   s    r9   Útest_group_encodingz'RequestEncodingTest.test_group_encodingl  sP   € à×ÒØ�OŠOÐ6Ñ7Ô7à'Ø&˜ZØ  
Ð+ðð ñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 óò   — |                       |                      d¦  «        t          dddgi ¬¦  «        ¦  «         |                       |                      d¦  «        t          dddgi ¬¦  «        ¦  «         d S )Nz/slashes/foo/barrt   r  r¸  z/slashes/a%2Fb/c%2Fdza/bzc/drË  rB   s    r9   Útest_slashesz RequestEncodingTest.test_slashesw  sŽ   € ð 	×ÒØ�OŠOÐ.Ñ/Ô/ÝÐ(°U¸E°NÈÐLÑLÔLñ	
ô 	
ð 	
ð 	×ÒØ�OŠOÐ2Ñ3Ô3ÝÐ,¸À¸ÈRÐPÑPÔPñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 óŒ   — t          t          d¦  «        5  |                      d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nz.*Invalid unicodez/group/?arg=%25%e9)r   r   rÓ   rB   s    r9   Ú
test_errorzRequestEncodingTest.test_errorƒ  sŒ   € õ •wÐ 3Ñ4Ô4ð 	-ð 	-Ø�JŠJÐ+Ñ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ó   –9¹=Á =N)	rK   rL   rM   r?   rÈ  rÌ  rÐ  rÒ  rÔ  rI   r;   r9   rÅ  rÅ  Z  sq   € € € € € ðYð Yð Yð2ð 2ð 2ð	
ð 	
ð 	
ð	
ð 	
ð 	
ð

ð 

ð 

ð-ð -ð -ð -ð -r;   rÅ  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚTypeCheckHandlerc                 ó®  — i | _         |                      d|                      ¦   «         t          ¦  «         |                      d|                      d¦  «        t
          ¦  «         |                      dt          | j                             ¦   «         ¦  «        d         t          ¦  «         |                      dt          | j         
                    ¦   «         ¦  «        d         j        t          ¦  «         t          | j                             ¦   «         ¦  «        dgk    r)t          d| j                             ¦   «         z  ¦  «        ‚|                      d	|                      d¦  «        t          ¦  «         |                      d
|                      d¦  «        t          ¦  «         |                      d| j        t          ¦  «         |                      d|                      ¦   «         t          ¦  «         |                      d|                      dd¦  «        t          ¦  «         |                      d|                      ¦   «         t          ¦  «         d S )NÚstatusÚargumentrt   Ú
cookie_keyr   Úcookie_valuerå   z%unexpected values for cookie keys: %rr~   rl   Ú
xsrf_tokenÚxsrf_form_htmlÚreverse_urlÚ	typecheckÚrequest_summary)ÚerrorsÚ
check_typeÚ
get_statusÚintÚget_argumentr   r  r  Úkeysrä   Úvaluesrn   r¾  r~   rè   rl   rÝ  rÞ  rß  Ú_request_summaryrB   s    r9   ÚpreparezTypeCheckHandler.prepare‹  sÔ  € ØˆŒà�Š˜ $§/¢/Ñ"3Ô"3µSÑ9Ô9Ð9ð 	�Š˜
 D×$5Ò$5°eÑ$<Ô$<½lÑKÔKÐKØ�Š˜¥d¨4¬<×+<Ò+<Ñ+>Ô+>Ñ&?Ô&?ÀÔ&BÅCÑHÔHÐHØ�Š˜­¨T¬\×-@Ò-@Ñ-BÔ-BÑ(CÔ(CÀAÔ(FÔ(LÍcÑRÔRÐRõ �”×!Ò!Ñ#Ô#Ñ$Ô$¨¨Ò0Ð0ÝØ7¸$¼,×:KÒ:KÑ:MÔ:MÑMñô ð ð 	�ŠÐ+¨T×-CÒ-CÀFÑ-KÔ-KÍUÑSÔSÐSØ�Š˜ d§o¢o°fÑ&=Ô&=½sÑCÔCÐCà�Š˜ d¤oµuÑ=Ô=Ð=Ø�ŠÐ(¨$×*=Ò*=Ñ*?Ô*?ÅÑEÔEÐEà�Š˜ t×'7Ò'7¸ÀUÑ'KÔ'KÍSÑQÔQÐQà�ŠÐ)¨4×+@Ò+@Ñ+BÔ+BÅCÑHÔHÐHÐHÐHr;   c                 ór   — |                       d|t          ¦  «         |                      | j        ¦  «         d S ©NÚpath_component©rã  r   r[   râ  ©rC   rí  s     r9   r\   zTypeCheckHandler.get¦  s5   € ð 	�ŠÐ(¨.½,ÑGÔGÐGØ�
Š
�4”;ÑÔÐÐÐr;   c                 ór   — |                       d|t          ¦  «         |                      | j        ¦  «         d S rì  rî  rï  s     r9   r¸   zTypeCheckHandler.post¬  s3   € Ø�ŠÐ(¨.½,ÑGÔGÐGØ�
Š
�4”;ÑÔÐÐÐr;   c                 óT   — t          |¦  «        }||k    rd|› d|› �| j        |<   d S d S )Nz	expected z, got )r½  râ  )rC   rk   ÚobjÚexpected_typeÚactual_types        r9   rã  zTypeCheckHandler.check_type°  sB   € Ý˜3‘i”iˆØ˜KÒ'Ð'Ø N¨MÐ NÐ NÀÐ NÐ NˆDŒK˜ÑÐÐð (Ð'r;   N)rK   rL   rM   rê  r\   r¸   rã  rI   r;   r9   r×  r×  Š  sX   € € € € € ðIð Ið Ið6 ð  ð  ð ð  ð  ðOð Oð Oð Oð Or;   r×  c                   ó   — e Zd Zdd„Zd„ ZdS )ÚDecodeArgHandlerNc                 óü   — t          |¦  «        t          urt          dt          |¦  «        z  ¦  «        ‚d| j        j        v r8|                     t          | j        j        d         d         ¦  «        ¦  «        S |S )Nzunexpected type for value: %rÚencodingr   )r½  rè   r¾  r»  r¼  Údecoder   )rC   rn   rk   s      r9   Údecode_argumentz DecodeArgHandler.decode_argument·  sk   € Ý�‰;Œ;�eÐ#Ð#ÝÐ;½dÀ5¹k¼kÑIÑJÔJÐJà˜œÔ/Ð/Ð/Ø—<’<¥
¨4¬<Ô+AÀ*Ô+MÈaÔ+PÑ QÔ QÑRÔRÐRàˆLr;   c                 ó†   — d„ }|                        ||¦  «         ||                      d¦  «        ¦  «        dœ¦  «         d S )Nc                 óÆ   — t          | ¦  «        t          u r#dt          t          j        | ¦  «        ¦  «        gS t          | ¦  «        t
          u rd| gS t          d¦  «        ‚)Nrè   ræ   zunknown type)r½  rè   r	   rˆ   Úb2a_hexr   r¾  )r¯  s    r9   Údescribez&DecodeArgHandler.get.<locals>.describeÁ  sZ   € Ý�A‰wŒw�%ÐÐØ¥­HÔ,<¸QÑ,?Ô,?Ñ!@Ô!@ÐAÐAÝ�a‘”�LÐ(Ð(Ø! 1�~Ð%Ý˜NÑ+Ô+Ð+r;   rt   ©r4   Úquery)r[   ræ  )rC   rÃ  rþ  s      r9   r\   zDecodeArgHandler.getÀ  sS   € ð	,ð 	,ð 	,ð 	�
Š
˜H˜H S™MœM°H°H¸T×=NÒ=NÈuÑ=UÔ=UÑ4VÔ4VÐWÐWÑXÔXÐXÐXÐXr;   r2   )rK   rL   rM   rú  r\   rI   r;   r9   rö  rö  ¶  s<   € € € € € ðð ð ð ðYð Yð Yð Yð Yr;   rö  c                   ó   — e Zd Zd„ ZdS )ÚLinkifyHandlerc                 ó4   — |                       dd¬¦  «         d S )Núlinkify.htmlzhttp://example.com)Úmessage©rÅ   rB   s    r9   r\   zLinkifyHandler.getÌ  s   € Ø�Š�NÐ,@ˆÑAÔAÐAÐAÐAr;   Nr]   rI   r;   r9   r  r  Ë  s(   € € € € € ðBð Bð Bð Bð Br;   r  c                   ó   — e Zd Zd„ ZdS )ÚUIModuleResourceHandlerc                 ó8   — |                       dddg¬¦  «         d S )Nú	page.htmlrv   r„   )Úentriesr  rB   s    r9   r\   zUIModuleResourceHandler.getÑ  s"   € Ø�Š�K¨!¨Q¨ˆÑ0Ô0Ð0Ð0Ð0r;   Nr]   rI   r;   r9   r  r  Ð  s#   € € € € € ð1ð 1ð 1ð 1ð 1r;   r  c                   ó   — e Zd Zd„ ZdS )ÚOptionalPathHandlerc                 ó4   — |                       d|i¦  «         d S )Nr4   rZ   rÁ   s     r9   r\   zOptionalPathHandler.getÖ  s   € Ø�
Š
�F˜D�>Ñ"Ô"Ð"Ð"Ð"r;   Nr]   rI   r;   r9   r  r  Õ  s#   € € € € € ð#ð #ð #ð #ð #r;   r  c                   ó   — e Zd Zd„ ZdS )ÚMultiHeaderHandlerc                 ó¶   — |                       dd¦  «         |                       dd¦  «         |                      dd¦  «         |                      dd¦  «         d S )	Núx-overwriter,  zX-Overwriter„   úx-multirQ  zX-MultiÚ4)Ú
set_headerÚ
add_headerrB   s    r9   r\   zMultiHeaderHandler.getÛ  sX   € Ø�Š˜ sÑ+Ô+Ð+Ø�Š˜ qÑ)Ô)Ð)Ø�Š˜	 1Ñ%Ô%Ð%Ø�Š˜	 3Ñ'Ô'Ð'Ð'Ð'r;   Nr]   rI   r;   r9   r  r  Ú  s#   € € € € € ð(ð (ð (ð (ð (r;   r  c                   ó   — e Zd Zd„ ZdS )r    c           
      óv  — |                       dd ¦  «        �F|                      dt          t          |                       d¦  «        ¦  «        ¦  «        ¬¦  «         d S |                       dd ¦  «        �9|                      dt          |                       d¦  «        ¦  «        ¬¦  «         d S t	          d¦  «        ‚)NÚ	permanentrR   )r  rÙ  )rÙ  z(didn't get permanent or status arguments)ræ  ÚredirectÚboolrå  r¾  rB   s    r9   r\   zRedirectHandler.getã  s©   € Ø×Ò˜[¨$Ñ/Ô/Ð;Ø�MŠM˜#­­c°$×2CÒ2CÀKÑ2PÔ2PÑ.QÔ.QÑ)RÔ)RˆMÑSÔSÐSÐSÐSØ×Ò˜x¨Ñ.Ô.Ð:Ø�MŠM˜#¥c¨$×*;Ò*;¸HÑ*EÔ*EÑ&FÔ&FˆMÑGÔGÐGÐGÐGåÐFÑGÔGÐGr;   Nr]   rI   r;   r9   r    r    â  s(   € € € € € ðHð Hð Hð Hð Hr;   r    c                   ó.   — e Zd Zej        d„ ¦   «         ZdS )ÚEmptyFlushCallbackHandlerc              #   ó  K  — |                       ¦   «         V — |                       ¦   «         V — |                      d¦  «         |                       ¦   «         V — |                       ¦   «         V — |                      d¦  «         d S )NÚoÚk)r·   r[   r±   rB   s    r9   r\   zEmptyFlushCallbackHandler.getí  s   è è € ð
 �jŠj‰lŒlÐÐÐØ�jŠj‰lŒlÐÐÐØ�
Š
�3‰ŒˆØ�jŠj‰lŒlÐÐÐØ�jŠj‰lŒlÐÐÐØ�Š�CÑÔÐÐÐr;   N)rK   rL   rM   r   r¹   r\   rI   r;   r9   r  r  ì  s/   € € € € € Ø„]ð	ð 	ñ „]ð	ð 	ð 	r;   r  c                   ó   — e Zd Zd„ ZdS )ÚHeaderInjectionHandlerc                 óÎ   — 	 |                       dd¦  «         t          d¦  «        ‚# t          $ r3}dt          |¦  «        v r|                      d¦  «         n‚ Y d }~d S d }~ww xY w)NúX-Foozfoo
X-Bar: bazúDidn't get expected exceptionúUnsafe header valueó   ok)r  r¾  Ú
ValueErrorrä   r±   ©rC   r  s     r9   r\   zHeaderInjectionHandler.getû  s‡   € ð	Ø�OŠO˜GÐ%8Ñ9Ô9Ð9ÝÐ;Ñ<Ô<Ð<øÝð 	ð 	ð 	Ø$­¨A©¬Ð.Ð.Ø—’˜EÑ"Ô"Ð"Ð"àð #Ð"Ð"Ð"Ð"Ð"øøøøð	øøøs   ‚%' §
A$±(AÁA$Nr]   rI   r;   r9   r"  r"  ú  s#   € € € € € ðð ð ð ð r;   r"  c                   ó   — e Zd Zd„ ZdS )ÚSetHeaderHandlerc                 ó°  — d„ t          dd¦  «        D ¦   «         }|                     t          d¦  «        ¦  «         |                     d¦  «         |D ]V}	 |                      dd|z   dz   ¦  «         t          d	¦  «        ‚# t          $ r}d
t          |¦  «        vr‚ Y d }~ŒOd }~ww xY w|                      dd¦  «         |                      d¦  «         d S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS rI   )r  )Ú.0r  s     r9   ú
<listcomp>z(SetHeaderHandler.get.<locals>.<listcomp>	  s   € Ð8Ð8Ð8 A�˜Q™œÐ8Ð8Ð8r;   r   r  r  ú	r$  rt   r  r%  r&  r[  r'  )	r  Úappendr  Úremover  r¾  r(  rä   r±   )rC   Úillegal_charsr  r  s       r9   r\   zSetHeaderHandler.get  sý   € à8Ð8­¨q°$©¬Ð8Ñ8Ô8ˆØ×Ò�S ™YœYÑ'Ô'Ð'Ø×Ò˜TÑ"Ô"Ð"Ø!ð 	ð 	ˆDðØ—’ ¨°©¸Ñ)=Ñ>Ô>Ð>ÝÐ ?Ñ@Ô@Ð@øÝð ð ð Ø(µ°A±´Ð6Ð6Øð 7Ð6Ð6Ð6Ð6øøøøðøøøð
 	�Š˜ Ñ$Ô$Ð$à�Š�EÑÔÐÐÐs   Á+BÂ
B(ÂB#Â#B(Nr]   rI   r;   r9   r+  r+    s#   € € € € € ðð ð ð ð r;   r+  c                   ó   — e Zd Zd„ ZdS )ÚGetArgumentHandlerc                 óÚ   — |                       dd ¦  «        dk    r| j        }n)|                       dd ¦  «        dk    r| j        }n| j         }|                       |dd¦  «        ¦  «         d S )NÚsourcer   rÒ   rt   rî   )ræ  Úget_query_argumentÚget_body_argumentr±   ©rC   rÑ   s     r9   rê  zGetArgumentHandler.prepare  sx   € Ø×Ò˜X tÑ,Ô,°Ò7Ð7ØÔ,ˆFˆFØ×Ò˜x¨Ñ.Ô.°&Ò8Ð8ØÔ+ˆFˆFàÔ&ˆFØ�Š�F�F˜5 )Ñ,Ô,Ñ-Ô-Ð-Ð-Ð-r;   N©rK   rL   rM   rê  rI   r;   r9   r5  r5    s#   € € € € € ð.ð .ð .ð .ð .r;   r5  c                   ó   — e Zd Zd„ ZdS )ÚGetArgumentsHandlerc           	      óÂ   — |                       t          |                      d¦  «        |                      d¦  «        |                      d¦  «        ¬¦  «        ¦  «         d S )Nrt   ©rî   r   rÒ   )r±   rg   r¿  Úget_query_argumentsÚget_body_argumentsrB   s    r9   rê  zGetArgumentsHandler.prepare&  sg   € Ø�ŠÝØ×*Ò*¨5Ñ1Ô1Ø×.Ò.¨uÑ5Ô5Ø×,Ò,¨UÑ3Ô3ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r;   Nr;  rI   r;   r9   r=  r=  %  s#   € € € € € ð
ð 
ð 
ð 
ð 
r;   r=  c                   ó    ‡ — e Zd ZdZd„ Zˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )ÚWSGISafeWebTestzWebTest.COOKIE_SECRETc                 óV   — t          ddddœ¦  «        }t          |d| j        ¬¦  «        S )Nz{% module linkify(message) %}zv<html><head></head><body>
{% for e in entries %}
{% module Template("entry.html", entry=e) %}
{% end %}
</body></html>aY  {{ set_resources(embedded_css=".entry { margin-bottom: 1em; }",
                 embedded_javascript="js_embed()",
                 css_files=["/base.css", "/foo.css"],
                 javascript_files="/common.js",
                 html_head="<meta>",
                 html_body='<script src="/analytics.js"/>') }}
<div class="entry">...</div>)r  r
  z
entry.htmlÚxhtml_escape)Útemplate_loaderÚ
autoescaperb   )r   rg   ÚCOOKIE_SECRET)rC   Úloaders     r9   r@   zWSGISafeWebTest.get_app_kwargs4  sM   € Ýà ?ðð ðð ñ
ô 
ˆõ& Ø"Ø%ØÔ,ð
ñ 
ô 
ð 	
r;   c                 ó„   •— t          ¦   «                              ¦   «          t          j                             ¦   «          d S r2   ©ÚsuperÚtearDownr   Ú_template_loadersÚclear©rC   Ú	__class__s    €r9   rM  zWSGISafeWebTest.tearDownN  ó4   ø€ Ý‰Œ×ÒÑÔÐÝÔ(×.Ò.Ñ0Ô0Ð0Ð0Ð0r;   c                 ó~  — t          dt          d¬¦  «        t          dt          d¬¦  «        t          dt          ¦  «        t          dt          ¦  «        t          dt          ¦  «        t          d	t
          ¦  «        t          d
t          ¦  «        t          dt          ¦  «        t          dt          ddi¦  «        t          dt          dddœ¦  «        t          dt          ddi¦  «        t          dt          ¦  «        t          dt          ¦  «        t          dt          ¦  «        t          dt          ¦  «        g}|S )Nz/typecheck/(.*)rà  )rk   z/decode_arg/(.*)Ú
decode_argz/decode_arg_kw/(?P<arg>.*)ú/linkifyú/uimodule_resourcesz/optional_path/(.+)?ú/multi_headerz	/redirectú/web_redirect_permanentr%   ú/web_redirect_newpathú/web_redirectF)r%   r  ú//web_redirect_double_slashú/header_injectionú/get_argumentz/get_argumentsú/set_header)r%   r×  rö  r  r  r  r  r    ÚWebRedirectHandlerr"  r5  r=  r+  )rC   Úurlss     r9   r?   zWSGISafeWebTest.get_handlersR  s#  € åÐ!Õ#3¸+ÐFÑFÔFÝÐ"Õ$4¸<ÐHÑHÔHÝÐ,Õ.>Ñ?Ô?Ý�
�NÑ+Ô+ÝÐ%Õ'>Ñ?Ô?ÝÐ&Õ(;Ñ<Ô<Ý�Õ!3Ñ4Ô4Ý��_Ñ-Ô-ÝØ)Ý"ØÐ/Ð0ñô õ
 ØÝ"Ø/¸eÐDÐDñô õ
 Ø-Ý"ØÐ/Ð0ñô õ
 Ð#Õ%;Ñ<Ô<Ý�Õ!3Ñ4Ô4ÝÐ Õ"5Ñ6Ô6Ý�Õ/Ñ0Ô0ð7
ˆð: ˆr;   c                 ól   —  | j         |i |¤Ž}|                     ¦   «          t          |j        ¦  «        S r2   )rÓ   Úrethrowr   rÒ   )rC   rº  ÚkwargsrÚ   s       r9   rÈ  zWSGISafeWebTest.fetch_jsonr  s:   € Ø�4”:˜tÐ. vÐ.Ð.ˆØ×ÒÑÔÐÝ˜8œ=Ñ)Ô)Ð)r;   c                 ó  — t          t          | j        dd¦  «        ¦  «        }|                      ddd|z   i¬¦  «        }t	          |j        ¦  «        }|                      |i ¦  «         |                      dddd|z   id¬	¦  «        }d S )
Nrå   rç   z/typecheck/asdf?foo=barrG  zasdf=rI  rÏ   rH  ©rÑ   rC  rÒ   )r   r'   rH  rÓ   r   rÒ   r}   )rC   rÜ  rÚ   rV  s       r9   Ú
test_typeszWSGISafeWebTest.test_typesw  s¥   € Ý!Ý Ô 2°F¸FÑCÔCñ
ô 
ˆð —:’:Ø%°¸'ÀLÑ:PÐ/Qð ñ 
ô 
ˆõ ˜8œ=Ñ)Ô)ˆØ×Ò˜˜rÑ"Ô"Ð"à—:’:Ø%ØØ˜w¨Ñ5Ð6Øð	 ñ 
ô 
ˆˆˆr;   c                 ó€  — g d¢}|D ]\}|                       |¦  «        }|                     ¦   «          t          |j        ¦  «        }|                      |ddgddgdœ¦  «         Œ]|                       d¦  «        }|                     ¦   «          t          |j        ¦  «        }|                      |ddgddgdœ¦  «         d S )N)z,/decode_arg/%C3%A9?foo=%C3%A9&encoding=utf-8z'/decode_arg/%E9?foo=%E9&encoding=latin1z*/decode_arg_kw/%E9?foo=%E9&encoding=latin1ræ   rÎ  rÿ  z/decode_arg/%C3%A9?foo=%C3%A9rè   Úc3a9©rÓ   rb  r   rÒ   r}   ©rC   r`  Úreq_urlrÚ   rV  s        r9   Útest_decode_argumentz$WSGISafeWebTest.test_decode_argumentˆ  sî   € ð
ð 
ð 
ˆð
 ð 	ð 	ˆGØ—z’z 'Ñ*Ô*ˆHØ×ÒÑÔÐÝ˜xœ}Ñ-Ô-ˆDØ×ÒØØ# XÐ.¸)ÀXÐ9NÐOÐOñô ð ð ð
 —:’:Ð=Ñ>Ô>ˆØ×ÒÑÔÐÝ˜8œ=Ñ)Ô)ˆØ×Ò˜¨°&Ð(9ÀWÈfÐDUÐVÐVÑWÔWÐWÐWÐWr;   c                 ó"  — t          t          d¦  «        5  |                      d¦  «        }|                      |j        d¦  «         |                      d¦  «        }|                      |j        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nz.*Invalid unicode.*z/typecheck/invalid%FFé�  z/typecheck/invalid?foo=%FF©r   r   rÓ   r}   rÕ   rÙ   s     r9   Ú$test_decode_argument_invalid_unicodez4WSGISafeWebTest.test_decode_argument_invalid_unicode�  sË   € å•wÐ 5Ñ6Ô6ð 	1ð 	1Ø—z’zÐ"9Ñ:Ô:ˆHØ×Ò˜Xœ]¨CÑ0Ô0Ð0Ø—z’zÐ">Ñ?Ô?ˆHØ×Ò˜Xœ]¨CÑ0Ô0Ð0ð		1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1ð 	1ð 	1s   –A!BÂBÂBc                 óÌ   — ddg}|D ]\}|                       |¦  «        }|                     ¦   «          t          |j        ¦  «        }|                      |ddgddgdœ¦  «         Œ]d S )Nz6/decode_arg/1%20%2B%201?foo=1%20%2B%201&encoding=utf-8z0/decode_arg/1%20+%201?foo=1+%2B+1&encoding=utf-8ræ   ú1 + 1rÿ  ri  rj  s        r9   Útest_decode_argument_plusz)WSGISafeWebTest.test_decode_argument_plus¥  s”   € ð EØ>ð
ˆð ð 	ð 	ˆGØ—z’z 'Ñ*Ô*ˆHØ×ÒÑÔÐÝ˜xœ}Ñ-Ô-ˆDØ×ÒØØ# WÐ-¸ÀGÐ8LÐMÐMñô ð ð ð		ð 	r;   c                 óÜ  — |                       | j                             dd¦  «        d¦  «         |                       | j                             dd¦  «        d¦  «         |                       | j                             dd¦  «        d¦  «         |                       | j                             dd¦  «        d	¦  «         |                       | j                             dd
¦  «        d¦  «         d S )NrT  rt   z/decode_arg/fooé*   z/decode_arg/42r”   z/decode_arg/%E9rÎ  z/decode_arg/%C3%A9rr  z/decode_arg/1%20%2B%201)r}   rA   rß  rB   s    r9   Útest_reverse_urlz WSGISafeWebTest.test_reverse_url´  sé   € Ø×Ò˜œ×-Ò-¨l¸EÑBÔBÐDUÑVÔVÐVØ×Ò˜œ×-Ò-¨l¸BÑ?Ô?ÐAQÑRÔRÐRØ×Ò˜œ×-Ò-¨l¸GÑDÔDÐFWÑXÔXÐXØ×ÒØŒH× Ò  ¨xÑ8Ô8Ð:Nñ	
ô 	
ð 	
ð 	×ÒØŒH× Ò  ¨wÑ7Ô7Ð9Rñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )NrU  s3   <a href="http://example.com">http://example.com</a>rK  rÙ   s     r9   Útest_uimodule_unescapedz'WSGISafeWebTest.test_uimodule_unescaped¿  s=   € Ø—:’:˜jÑ)Ô)ˆØ×ÒØŒMÐQñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )NrV  s¿  <html><head><link href="/base.css" type="text/css" rel="stylesheet"/><link href="/foo.css" type="text/css" rel="stylesheet"/>
<style type="text/css">
.entry { margin-bottom: 1em; }
</style>
<meta>
</head><body>


<div class="entry">...</div>


<div class="entry">...</div>

<script src="/common.js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
js_embed()
//]]>
</script>
<script src="/analytics.js"/>
</body></html>rK  rÙ   s     r9   Útest_uimodule_resourcesz'WSGISafeWebTest.test_uimodule_resourcesÅ  s@   € Ø—:’:Ð3Ñ4Ô4ˆØ×ÒØŒMðñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 ó²   — |                       |                      d¦  «        ddi¦  «         |                       |                      d¦  «        dd i¦  «         d S )Nz/optional_path/foor4   rt   z/optional_path/rÏ  rB   s    r9   Útest_optional_pathz"WSGISafeWebTest.test_optional_pathá  sV   € Ø×Ò˜ŸšÐ)=Ñ>Ô>ÀÈÀÑPÔPÐPØ×Ò˜ŸšÐ):Ñ;Ô;¸fÀd¸^ÑLÔLÐLÐLÐLr;   c                 óÒ   — |                       d¦  «        }|                      |j        d         d¦  «         |                      |j                             d¦  «        ddg¦  «         d S )NrW  r  Ú2r  Ú3r  rN  rÙ   s     r9   Útest_multi_headerz!WSGISafeWebTest.test_multi_headerå  sb   € Ø—:’:˜oÑ.Ô.ˆØ×Ò˜Ô)¨-Ô8¸#Ñ>Ô>Ð>Ø×Ò˜Ô)×2Ò2°9Ñ=Ô=ÀÀS¸zÑJÔJÐJÐJÐJr;   c                 ó2  — |                       dd¬¦  «        }|                      |j        d¦  «         |                       dd¬¦  «        }|                      |j        d¦  «         |                       dd¬¦  «        }|                      |j        d¦  «         d S )	Nz/redirect?permanent=1Fr�  é-  z/redirect?permanent=0r�  z/redirect?status=307i3  ©rÓ   r}   rÕ   rÙ   s     r9   Útest_redirectzWSGISafeWebTest.test_redirectê  s’   € Ø—:’:Ð5È�:ÑNÔNˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø—:’:Ð5È�:ÑNÔNˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø—:’:Ð4Àu�:ÑMÔMˆØ×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   c                 óR  — |                       dd¬¦  «        }|                      |j        d¦  «         |                      |j        d         d¦  «         |                       dd¬¦  «        }|                      |j        d¦  «         |                      |j        d         d¦  «         d S )	NrX  Fr�  r‚  r�  rY  rZ  r�  ©rÓ   r}   rÕ   rC  rÙ   s     r9   Útest_web_redirectz!WSGISafeWebTest.test_web_redirectò  s¡   € Ø—:’:Ð7È%�:ÑPÔPˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜Ô)¨*Ô5Ð7NÑOÔOÐOØ—:’:˜oÀ�:ÑFÔFˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜Ô)¨*Ô5Ð7NÑOÔOÐOÐOÐOr;   c                 ó¬   — |                       dd¬¦  «        }|                      |j        d¦  «         |                      |j        d         d¦  «         d S )Nr[  Fr�  r‚  r�  rY  r†  rÙ   s     r9   Útest_web_redirect_double_slashz.WSGISafeWebTest.test_web_redirect_double_slashú  sU   € Ø—:’:Ð;Èe�:ÑTÔTˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜Ô)¨*Ô5Ð7NÑOÔOÐOÐOÐOr;   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )Nr\  r'  rK  rÙ   s     r9   Útest_header_injectionz%WSGISafeWebTest.test_header_injectionÿ  s2   € Ø—:’:Ð1Ñ2Ô2ˆØ×Ò˜œ¨Ñ.Ô.Ð.Ð.Ð.r;   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )Nr^  r'  rK  rÙ   s     r9   Útest_set_headerzWSGISafeWebTest.test_set_header  s1   € Ø—:’:˜mÑ,Ô,ˆØ×Ò˜œ¨Ñ.Ô.Ð.Ð.Ð.r;   c                 óŽ  — |                       d¦  «        }|                      |j        d¦  «         |                       d¦  «        }|                      |j        d¦  «         |                       d¦  «        }|                      |j        d¦  «         t          j                             t          d¬¦  «        ¦  «        }|                       dd	|¬
¦  «        }|                      |j        d¦  «         |                       dd	|¬
¦  «        }|                      t          |j        ¦  «        t          ddgdgdg¬¦  «        ¦  «         d S )Nz/get_argument?foo=barru   z/get_argument?foo=r;   r]  rJ  rY   ©rt   rÏ   rÐ   ó   helloz/get_arguments?foo=barr  r?  )rÓ   r}   rÒ   ÚurllibÚparseÚ	urlencoderg   r   )rC   rÚ   rÒ   s      r9   Útest_get_argumentz!WSGISafeWebTest.test_get_argument  s3  € Ø—:’:Ð5Ñ6Ô6ˆØ×Ò˜œ¨Ñ/Ô/Ð/Ø—:’:Ð2Ñ3Ô3ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø—:’:˜oÑ.Ô.ˆØ×Ò˜œ¨
Ñ3Ô3Ð3õ Œ|×%Ò%¥d¨wÐ&7Ñ&7Ô&7Ñ8Ô8ˆØ—:’:Ð5¸fÈ4�:ÑPÔPˆØ×Ò˜œ¨Ñ1Ô1Ð1à—:’:Ð6¸vÈD�:ÑQÔQˆØ×ÒÝ˜œÑ&Ô&Ý˜% Ð)°%°À¸yÐIÑIÔIñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 ó’  — t           j                             t          d¬¦  «        ¦  «        }|                      dd|¬¦  «        }|                      |j        d¦  «         |                      dd|¬¦  «        }|                      |j        d¦  «         |                      d	d|¬¦  «        }|                      |j        d
¦  «         d S )NrY   r�  z"/get_argument?source=query&foo=barrÏ   rÐ   ru   z/get_argument?source=query&foo=r;   z/get_argument?source=queryrJ  ©r‘  r’  r“  rg   rÓ   r}   rÒ   ©rC   rÒ   rÚ   s      r9   Útest_get_query_argumentsz(WSGISafeWebTest.test_get_query_arguments  sÍ   € õ Œ|×%Ò%¥d¨wÐ&7Ñ&7Ô&7Ñ8Ô8ˆØ—:’:Ø0¸Àdð ñ 
ô 
ˆð 	×Ò˜œ¨Ñ/Ô/Ð/Ø—:’:Ø-°fÀ4ð ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ø—:’:Ð:À6ÐPT�:ÑUÔUˆØ×Ò˜œ¨
Ñ3Ô3Ð3Ð3Ð3r;   c                 óB  — t           j                             t          d¬¦  «        ¦  «        }|                      dd|¬¦  «        }|                      |j        d¦  «         t           j                             t          d¬¦  «        ¦  «        }|                      dd|¬¦  «        }|                      |j        d¦  «         t           j                             t          ¦   «         ¦  «        }|                      dd|¬¦  «        }|                      |j        d	¦  «         d S )
Nr  r�  z#/get_argument?source=body&foo=hellorÏ   rÐ   ru   r[  r;   rJ  r–  r—  s      r9   Útest_get_body_argumentsz'WSGISafeWebTest.test_get_body_arguments*  s  € ÝŒ|×%Ò%¥d¨u o¡o¤oÑ6Ô6ˆØ—:’:Ø1¸&Àtð ñ 
ô 
ˆð 	×Ò˜œ¨Ñ/Ô/Ð/åŒ|×%Ò%¥d¨r l¡l¤lÑ3Ô3ˆØ—:’:Ø1¸&Àtð ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,åŒ|×%Ò%¥d¡f¤fÑ-Ô-ˆØ—:’:Ø1¸&Àtð ñ 
ô 
ˆð 	×Ò˜œ¨
Ñ3Ô3Ð3Ð3Ð3r;   c                 óì   — |                       d¦  «        }|                      d|j                             dd¦  «        ¦  «         |                      d|j                             dd¦  «        ¦  «         d S )Nr]  úAccept-EncodingÚVaryr[  ÚgzipúContent-Encoding)rÓ   ÚassertNotInrC  r\   rÙ   s     r9   Útest_no_gzipzWSGISafeWebTest.test_no_gzip=  sm   € Ø—:’:˜oÑ.Ô.ˆØ×ÒÐ*¨HÔ,<×,@Ò,@ÀÈÑ,LÔ,LÑMÔMÐMØ×Ò˜ Ô!1×!5Ò!5Ð6HÈ"Ñ!MÔ!MÑNÔNÐNÐNÐNr;   )rK   rL   rM   rH  r@   rM  r?   rÈ  rf  rl  rp  rs  rv  rx  rz  r|  r€  r„  r‡  r‰  r‹  r�  r”  r˜  rš  r¡  Ú__classcell__©rQ  s   @r9   rC  rC  1  s�  ø€ € € € € Ø+€Mð
ð 
ð 
ð41ð 1ð 1ð 1ð 1ðð ð ð@*ð *ð *ð

ð 
ð 
ð"Xð Xð Xð*1ð 1ð 1ðð ð ð	
ð 	
ð 	
ð
ð 
ð 
ð
ð 
ð 
ð8Mð Mð MðKð Kð Kð
-ð -ð -ðPð Pð PðPð Pð Pð
/ð /ð /ð/ð /ð /ð
ð 
ð 
ð(4ð 4ð 4ð4ð 4ð 4ð&Oð Oð Oð Oð Oð Oð Or;   rC  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚNonWSGIWebTestsc                 ó   — dt           fgS )Nú/empty_flush)r  rB   s    r9   r?   zNonWSGIWebTests.get_handlersD  s   € ØÕ!:Ð;Ð<Ð<r;   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )Nr§  r'  rK  rÙ   s     r9   Útest_empty_flushz NonWSGIWebTests.test_empty_flushG  s1   € Ø—:’:˜nÑ-Ô-ˆØ×Ò˜œ¨Ñ.Ô.Ð.Ð.Ð.r;   N)rK   rL   rM   r?   r©  rI   r;   r9   r¥  r¥  C  s2   € € € € € ð=ð =ð =ð/ð /ð /ð /ð /r;   r¥  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚErrorResponseTestc                 óÒ   —  G d„ dt           ¦  «        } G d„ dt           ¦  «        } G d„ dt           ¦  «        }t          d|¦  «        t          d|¦  «        t          d	|¦  «        gS )
Nc                   ó   — e Zd Zd„ ZdS )ú6ErrorResponseTest.get_handlers.<locals>.DefaultHandlerc                 óš   — |                       dd ¦  «        r/t          t          |                       d¦  «        ¦  «        ¦  «        ‚ddz   d S ©NrÙ  rv   r   )ræ  r!   rå  rB   s    r9   r\   z:ErrorResponseTest.get_handlers.<locals>.DefaultHandler.getO  sL   € Ø×$Ò$ X¨tÑ4Ô4ð FÝ#¥C¨×(9Ò(9¸(Ñ(CÔ(CÑ$DÔ$DÑEÔEÐEØ�A‘���r;   Nr]   rI   r;   r9   ÚDefaultHandlerr®  N  s#   € € € € € ðð ð ð ð r;   r±  c                   ó   — e Zd Zd„ Zd„ ZdS )ú9ErrorResponseTest.get_handlers.<locals>.WriteErrorHandlerc                 óª   — |                       dd ¦  «        r7|                      t          |                       d¦  «        ¦  «        ¦  «         d S ddz   d S r°  )ræ  r†  rå  rB   s    r9   r\   z=ErrorResponseTest.get_handlers.<locals>.WriteErrorHandler.getU  sU   € Ø×$Ò$ X¨tÑ4Ô4ð Ø—O’O¥C¨×(9Ò(9¸(Ñ(CÔ(CÑ$DÔ$DÑEÔEÐEÐEÐEà˜‘E�E�E�Er;   c                 óÀ   — |                       dd¦  «         d|v r+|                      d|d         d         j        z  ¦  «         d S |                      d|z  ¦  «         d S )NúContent-Typeú
text/plainÚexc_infozException: %sr   z
Status: %d)r  r[   rK   ©rC   Ústatus_coderc  s      r9   Úwrite_errorzEErrorResponseTest.get_handlers.<locals>.WriteErrorHandler.write_error[  sh   € Ø—’ °Ñ=Ô=Ð=Ø Ð'Ð'Ø—J’J˜°¸
Ô1CÀAÔ1FÔ1OÑOÑPÔPÐPÐPÐPà—J’J˜|¨kÑ9Ñ:Ô:Ð:Ð:Ð:r;   N©rK   rL   rM   r\   r»  rI   r;   r9   ÚWriteErrorHandlerr³  T  s2   € € € € € ðð ð ð;ð ;ð ;ð ;ð ;r;   r½  c                   ó   — e Zd Zd„ Zd„ ZdS )ú?ErrorResponseTest.get_handlers.<locals>.FailedWriteErrorHandlerc                 ó   — ddz   d S ©Nrv   r   rI   rB   s    r9   r\   zCErrorResponseTest.get_handlers.<locals>.FailedWriteErrorHandler.getc  s   € Ø�A‘���r;   c                 ó    — t          d¦  «        ‚)Nzexception in write_error©r¾  r¹  s      r9   r»  zKErrorResponseTest.get_handlers.<locals>.FailedWriteErrorHandler.write_errorf  s   € ÝÐ :Ñ;Ô;Ð;r;   Nr¼  rI   r;   r9   ÚFailedWriteErrorHandlerr¿  b  s2   € € € € € ðð ð ð<ð <ð <ð <ð <r;   rÄ  ú/defaultú/write_errorú/failed_write_error)r   r%   )rC   r±  r½  rÄ  s       r9   r?   zErrorResponseTest.get_handlersM  s¶   € ð	ð 	ð 	ð 	ð 	�^ñ 	ô 	ð 	ð	;ð 	;ð 	;ð 	;ð 	;¥ñ 	;ô 	;ð 	;ð	<ð 	<ð 	<ð 	<ð 	<¥nñ 	<ô 	<ð 	<õ �
˜NÑ+Ô+Ý�Ð 1Ñ2Ô2ÝÐ%Ð'>Ñ?Ô?ð
ð 	
r;   c                 ó$  — t          t          d¦  «        5  |                      d¦  «        }|                      |j        d¦  «         |                      d|j        ¦  «         |                      d¦  «        }|                      |j        d¦  «         |                      d|j        ¦  «         |                      d¦  «        }|                      |j        d	¦  «         |                      d
|j        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NúUncaught exceptionrÅ  r…  s   500: Internal Server Errorz/default?status=503é÷  s   503: Service Unavailablez/default?status=435i³  s   435: Unknown)r   r   rÓ   r}   rÕ   rS  rÒ   rÙ   s     r9   Útest_defaultzErrorResponseTest.test_defaulto  s8  € Ý•wÐ 4Ñ5Ô5ð 	:ð 	:Ø—z’z *Ñ-Ô-ˆHØ×Ò˜Xœ]¨CÑ0Ô0Ð0Ø�MŠMÐ7¸¼ÑGÔGÐGà—z’zÐ"7Ñ8Ô8ˆHØ×Ò˜Xœ]¨CÑ0Ô0Ð0Ø�MŠMÐ5°x´}ÑEÔEÐEà—z’zÐ"7Ñ8Ô8ˆHØ×Ò˜Xœ]¨CÑ0Ô0Ð0Ø�MŠM˜/¨8¬=Ñ9Ô9Ð9ð	:ð 	:ð 	:ñ 	:ô 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:øøøð 	:ð 	:ð 	:ð 	:ð 	:ð 	:s   –C"DÄD	ÄD	c                 óŽ  — t          t          d¦  «        5  |                      d¦  «        }|                      |j        d¦  «         |                      d|j        ¦  «         |                      d¦  «        }|                      |j        d¦  «         |                      d|j        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NrÉ  rÆ  r…  s   Exception: ZeroDivisionErrorz/write_error?status=503rÊ  s   Status: 503©r   r   rÓ   r}   rÕ   rÒ   rÙ   s     r9   Útest_write_errorz"ErrorResponseTest.test_write_error}  sû   € Ý•wÐ 4Ñ5Ô5ð 	<ð 	<Ø—z’z .Ñ1Ô1ˆHØ×Ò˜Xœ]¨CÑ0Ô0Ð0Ø×ÒÐ<¸h¼mÑLÔLÐLà—z’zÐ";Ñ<Ô<ˆHØ×Ò˜Xœ]¨CÑ0Ô0Ð0Ø×Ò˜^¨X¬]Ñ;Ô;Ð;ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<ð 	<ð 	<s   –BB:Â:B>ÃB>c                 óø   — t          t          d¦  «        5  |                      d¦  «        }|                      |j        d¦  «         |                      d|j        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NrÉ  rÇ  r…  r;   rÍ  rÙ   s     r9   Útest_failed_write_errorz)ErrorResponseTest.test_failed_write_error‡  s¹   € Ý•wÐ 4Ñ5Ô5ð 	1ð 	1Ø—z’zÐ"7Ñ8Ô8ˆHØ×Ò˜Xœ]¨CÑ0Ô0Ð0Ø×Ò˜S (¤-Ñ0Ô0Ð0ð	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1ð 	1ð 	1s   –AA/Á/A3Á6A3N)rK   rL   rM   r?   rË  rÎ  rÐ  rI   r;   r9   r«  r«  L  sQ   € € € € € ð 
ð  
ð  
ðD:ð :ð :ð<ð <ð <ð1ð 1ð 1ð 1ð 1r;   r«  c                   ó�  — e Zd ZdZej                             ej                             e¦  «        d¦  «        Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&d „ Z'd!„ Z(d"„ Z)d#„ Z*d$„ Z+d%„ Z, e-j.        ej/        d&k    d'¦  «        d(„ ¦   «         Z0d)S )*ÚStaticFileTests€   63a36e950e134b5217e33c763e88840c10a07d80e6057d92b9ac97508de7fb1fa6f0e9b7531e169657165ea764e8963399cb6d921ffe6078425aaafe54c04563Ústaticc                 ó®   —  G d„ dt           ¦  «        } G d„ d|¦  «        } G d„ dt           ¦  «        }d|fd|fd	|fd
t          t          d¬¦  «        fgS )Nc                   ó   — e Zd Zd„ ZdS )ú5StaticFileTest.get_handlers.<locals>.StaticUrlHandlerc                 ó    — t          |                      dd¦  «        ¦  «        }|                      |                      ||¬¦  «        ¦  «         d S )NÚinclude_versionr,  )rØ  )rå  ræ  r[   Ú
static_url)rC   r4   Úwith_vs      r9   r\   z9StaticFileTest.get_handlers.<locals>.StaticUrlHandler.get™  sH   € Ý˜T×.Ò.Ð/@À#ÑFÔFÑGÔG�Ø—
’
˜4Ÿ?š?¨4À˜?ÑHÔHÑIÔIÐIÐIÐIr;   Nr]   rI   r;   r9   ÚStaticUrlHandlerrÖ  ˜  s(   € € € € € ðJð Jð Jð Jð Jr;   rÛ  c                   ó   — e Zd ZdZdS )ú=StaticFileTest.get_handlers.<locals>.AbsoluteStaticUrlHandlerTN)rK   rL   rM   Úinclude_hostrI   r;   r9   ÚAbsoluteStaticUrlHandlerrÝ  �  s   € € € € € ØˆLˆLˆLr;   rß  c                   ó   — e Zd Zd„ ZdS )ú=StaticFileTest.get_handlers.<locals>.OverrideStaticUrlHandlerc                 ó  — t          |                      d¦  «        ¦  «        }| | _        |                      |¦  «        }|                      ||¬¦  «        }||k    r"|                      t          d¦  «        ¦  «        S | j        j        dz   }t          |¦  «        }| 	                    |d|¦  «        }| 	                    |d|¦  «        }|r|dk    o|dk    }	n|dk    o|dk    }	|                      t          |	¦  «        ¦  «         d S )NrÞ  )rÞ  Fz://r   éÿÿÿÿ)
r  ræ  rÞ  rÙ  r[   rä   r»  ÚprotocolrR  Úfind)
rC   r4   Ú
do_includeÚregular_urlÚoverride_urlrä  Úprotocol_lengthÚcheck_regularÚcheck_overrideÚresults
             r9   r\   zAStaticFileTest.get_handlers.<locals>.OverrideStaticUrlHandler.get¡  s	  € Ý! $×"3Ò"3°NÑ"CÔ"CÑDÔD�
Ø(2 N�Ô!à"Ÿošo¨dÑ3Ô3�Ø#Ÿš¨tÀ*˜ÑMÔM�Ø ;Ò.Ð.ØŸ:š:¥c¨%¡j¤jÑ1Ô1Ð1àœ<Ô0°5Ñ8�Ý"% h¡-¤-�Ø +× 0Ò 0°¸1¸oÑ NÔ N�Ø!-×!2Ò!2°8¸QÀÑ!PÔ!P�àð IØ+¨qÒ0ÐH°]ÀbÒ5H�F�Fà+¨rÒ1ÐH°mÀqÒ6H�FØ—
’
�3˜v™;œ;Ñ'Ô'Ð'Ð'Ð'r;   Nr]   rI   r;   r9   ÚOverrideStaticUrlHandlerrá     s#   € € € € € ð(ð (ð (ð (ð (r;   rí  ú/static_url/(.*)z/abs_static_url/(.*)z/override_static_url/(.*)z/root_static/(.*)rR   r  )r   r   rg   )rC   rÛ  rß  rí  s       r9   r?   zStaticFileTest.get_handlers—  sÃ   € ð	Jð 	Jð 	Jð 	Jð 	J�~ñ 	Jô 	Jð 	Jð
	 ð 	 ð 	 ð 	 ð 	 Ð'7ñ 	 ô 	 ð 	 ð	(ð 	(ð 	(ð 	(ð 	(¥~ñ 	(ô 	(ð 	(ð,  Ð!1Ð2Ø#Ð%=Ð>Ø(Ð*BÐCØ Õ"3µT¸s°^±^´^ÐDð	
ð 	
r;   c                 ó<   — t          t          d¦  «        ¬¦  «        S )NrÓ  )Ústatic_path©rg   r:   rB   s    r9   r@   zStaticFileTest.get_app_kwargs¼  s   € Ý¥¨Ñ 1Ô 1Ð2Ñ2Ô2Ð2r;   c                 ó"  — |                       d¦  «        }|                      d|j        ¦  «         |                       d¦  «        }|                      d|j        ¦  «         |                      |j                             d¦  «        d¦  «         d S )Nú/robots.txtó   Disallow: /ú/static/robots.txtr¶  r·  )rÓ   rS  rÒ   r}   rC  r\   rÙ   s     r9   Útest_static_filesz StaticFileTest.test_static_files¿  s~   € Ø—:’:˜mÑ,Ô,ˆØ�Š�n h¤mÑ4Ô4Ð4à—:’:Ð2Ñ3Ô3ˆØ�Š�n h¤mÑ4Ô4Ð4Ø×Ò˜Ô)×-Ò-¨nÑ=Ô=¸|ÑLÔLÐLÐLÐLr;   c                 óÒ   — |                       d¦  «        }|                      d|j        ¦  «         |                      d|j        ¦  «         |                      d|j        ¦  «         d S )Nz/robots.txt?v=12345rô  zCache-ControlÚExpires)rÓ   rS  rÒ   rC  rÙ   s     r9   Útest_static_files_cacheablez*StaticFileTest.test_static_files_cacheableÇ  s`   € ð —:’:Ð3Ñ4Ô4ˆØ�Š�n h¤mÑ4Ô4Ð4Ø�Š�o xÔ'7Ñ8Ô8Ð8Ø�Š�i Ô!1Ñ2Ô2Ð2Ð2Ð2r;   c                 óœ  — |                       d¦  «        }|                      |j                             d¦  «        d¦  «         |                       d¦  «        }|                      |j                             d¦  «        d¦  «         |                       d¦  «        }|                      |j                             d¦  «        ddh¦  «         d S )	Nz/static/sample.xml.gzr¶  zapplication/gzipz/static/sample.xml.bz2zapplication/octet-streamz/static/sample.xmlztext/xmlzapplication/xml)rÓ   r}   rC  r\   rS  rÙ   s     r9   Útest_static_compressed_filesz+StaticFileTest.test_static_compressed_filesÐ  sÍ   € Ø—:’:Ð5Ñ6Ô6ˆØ×Ò˜Ô)×-Ò-¨nÑ=Ô=Ð?QÑRÔRÐRØ—:’:Ð6Ñ7Ô7ˆØ×ÒØÔ× Ò  Ñ0Ô0Ð2Lñ	
ô 	
ð 	
ð —:’:Ð2Ñ3Ô3ˆØ�ŠØÔ× Ò  Ñ0Ô0°:Ð?PÐ2Qñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 óv   — |                       d¦  «        }|                      |j        d| j        z   ¦  «         d S )Nz/static_url/robots.txts   /static/robots.txt?v=)rÓ   r}   rÒ   Úrobots_txt_hashrÙ   s     r9   Útest_static_urlzStaticFileTest.test_static_urlÝ  s;   € Ø—:’:Ð6Ñ7Ô7ˆØ×Ò˜œÐ(@À4ÔCWÑ(WÑXÔXÐXÐXÐXr;   c                 ó¼   — |                       d¦  «        }|                      |j        t          |                      d¦  «        ¦  «        dz   | j        z   ¦  «         d S )Nz/abs_static_url/robots.txtrR   s   static/robots.txt?v=)rÓ   r}   rÒ   r   rÔ   rý  rÙ   s     r9   Útest_absolute_static_urlz'StaticFileTest.test_absolute_static_urlá  s`   € Ø—:’:Ð:Ñ;Ô;ˆØ×ÒØŒMÝ�$—,’,˜sÑ#Ô#Ñ$Ô$Ð'>Ñ>ÀÔAUÑUñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )Nz(/static_url/robots.txt?include_version=0s   /static/robots.txtrK  rÙ   s     r9   Útest_relative_version_exclusionz.StaticFileTest.test_relative_version_exclusionè  s3   € Ø—:’:ÐHÑIÔIˆØ×Ò˜œÐ(=Ñ>Ô>Ð>Ð>Ð>r;   c                 ó¬   — |                       d¦  «        }|                      |j        t          |                      d¦  «        dz   ¦  «        ¦  «         d S )Nz,/abs_static_url/robots.txt?include_version=0rR   ústatic/robots.txt)rÓ   r}   rÒ   r   rÔ   rÙ   s     r9   Útest_absolute_version_exclusionz.StaticFileTest.test_absolute_version_exclusionì  sL   € Ø—:’:ÐLÑMÔMˆØ×Ò˜œ­¨T¯\ª\¸#Ñ->Ô->ÐATÑ-TÑ(UÔ(UÑVÔVÐVÐVÐVr;   c                 óZ   — |                       d¦  «         |                       d¦  «         d S )NFT)Ú_trigger_include_host_checkrB   s    r9   Útest_include_host_overridez)StaticFileTest.test_include_host_overrideð  s0   € Ø×(Ò(¨Ñ/Ô/Ð/Ø×(Ò(¨Ñ.Ô.Ð.Ð.Ð.r;   c                 ó¾   — d}|                       |t          |¦  «        z  ¦  «        }|                      |j        t	          t          d¦  «        ¦  «        ¦  «         d S )Nz//override_static_url/robots.txt?include_host=%sT)rÓ   rå  r}   rÒ   r   rä   )rC   rÞ  r4   rÚ   s       r9   r  z*StaticFileTest._trigger_include_host_checkô  sO   € Ø@ˆØ—:’:˜d¥S¨Ñ%6Ô%6Ñ6Ñ7Ô7ˆØ×Ò˜œ­­S°©Y¬Y©¬Ñ8Ô8Ð8Ð8Ð8r;   c                 ó   —  | j         |ddi|¤Ž} | j         |ddi|¤Ž}t          ¦   «         }t          j        |j        |j        ¦  «        D ],}|                     d¦  «        r|                     |¦  «         Œ-|D ]‚}|                      |j                             |¦  «        |j                             |¦  «        |›d|j                             |¦  «        ›d|j                             |¦  «        ›d�¦  «         Œƒ|S )zŸPerforms a GET and HEAD request and returns the GET response.

        Fails if any ``Content-*`` headers returned by the two requests
        differ.
        rÑ   ÚHEADÚGETzContent-z differs between GET (z) and HEAD (ú))	rÓ   r¬  Ú	itertoolsÚchainrC  Ú
startswithÚaddr}   r\   )rC   rº  rc  Úhead_responseÚget_responseÚcontent_headersÚhs          r9   Úget_and_headzStaticFileTest.get_and_headù  s(  € ð #˜œ
 DÐB°ÐB¸6ÐBÐBˆØ!�t”z 4Ð@°Ð@¸Ð@Ð@ˆÝ™%œ%ˆÝ” Ô!6¸Ô8LÑMÔMð 	'ð 	'ˆAØ�|Š|˜JÑ'Ô'ð 'Ø×#Ò# AÑ&Ô&Ð&øØ ð 	ð 	ˆAØ×ÒØÔ%×)Ò)¨!Ñ,Ô,ØÔ$×(Ò(¨Ñ+Ô+à�1�1�mÔ+×/Ò/°Ñ2Ô2Ð2Ð2°LÔ4H×4LÒ4LÈQÑ4OÔ4OÐ4OÐ4OðQñô ð ð ð Ðr;   c                 óä   — |                       d¦  «        }|                       dd|j        d         i¬¦  «        }|                      |j        d¦  «         |                      d|j        ¦  «         d S )Nrõ  úIf-Modified-SinceúLast-ModifiedrI  é0  úContent-Length)r  rC  r}   rÕ   r   ©rC   Ú	response1Ú	response2s      r9   Ú!test_static_304_if_modified_sincez0StaticFileTest.test_static_304_if_modified_since  s}   € Ø×%Ò%Ð&:Ñ;Ô;ˆ	Ø×%Ò%Ø Ø(¨)Ô*;¸OÔ*LÐMð &ñ 
ô 
ˆ	ð 	×Ò˜œ¨Ñ-Ô-Ð-Ø×ÒÐ)¨9Ô+<Ñ=Ô=Ð=Ð=Ð=r;   c                 ó®   — |                       d¦  «        }|                       dd|j        d         i¬¦  «        }|                      |j        d¦  «         d S )Nrõ  úIf-None-MatchÚEtagrI  r  ©r  rC  r}   rÕ   r  s      r9   Útest_static_304_if_none_matchz,StaticFileTest.test_static_304_if_none_match  sb   € Ø×%Ò%Ð&:Ñ;Ô;ˆ	Ø×%Ò%Ø ¨?¸IÔ<MÈfÔ<UÐ*Vð &ñ 
ô 
ˆ	ð 	×Ò˜œ¨Ñ-Ô-Ð-Ð-Ð-r;   c                 ó°   — |                       d¦  «        }|                       dd|j        d         dœ¬¦  «        }|                      |j        d¦  «         d S )Nrõ  z
"MISMATCH"r  )r!  r  rI  rÎ   r#  r  s      r9   Ú!test_static_304_etag_modified_bugz0StaticFileTest.test_static_304_etag_modified_bug  sk   € Ø×%Ò%Ð&:Ñ;Ô;ˆ	Ø×%Ò%Ø à!-Ø%.Ô%6°Ô%Gðð ð &ñ 
ô 
ˆ	ð 	×Ò˜œ¨Ñ-Ô-Ð-Ð-Ð-r;   c                 ón   — |                       dddi¬¦  «        }|                      |j        d¦  «         d S )Nrõ  r  z!nv@l!drI  rÎ   ©r  r}   rÕ   rÙ   s     r9   Ú)test_static_304_if_modified_since_invalidz8StaticFileTest.test_static_304_if_modified_since_invalid)  sG   € Ø×$Ò$Ø Ø(¨)Ð4ð %ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   c                 ón   — |                       dddi¬¦  «        }|                      |j        d¦  «         d S )Nrõ  r  zFri, 01 Jan 1960 00:00:00 GMTrI  rÎ   r(  rÙ   s     r9   Ú'test_static_if_modified_since_pre_epochz6StaticFileTest.test_static_if_modified_since_pre_epoch0  sJ   € ð ×$Ò$Ø Ø(Ð*IÐJð %ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   c                 ól  — t          j        t          d¦  «        ¦  «        }|                      ddt	          |j        dz
  ¦  «        i¬¦  «        }|                      |j        d¦  «         |                      ddt	          |j        dz   ¦  «        i¬¦  «        }|                      |j        d¦  «         d S )Nr  rõ  r  rv   rI  rÎ   r  )r3   Ústatr:   r  r   Úst_mtimer}   rÕ   )rC   r-  rÚ   s      r9   Ú'test_static_if_modified_since_time_zonez6StaticFileTest.test_static_if_modified_since_time_zone:  sÀ   € õ
 Œw•wÐ2Ñ3Ô3Ñ4Ô4ˆà×$Ò$Ø Ø(Õ*:¸4¼=È1Ñ;LÑ*MÔ*MÐNð %ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ø×$Ò$Ø Ø(Õ*:¸4¼=È1Ñ;LÑ*MÔ*MÐNð %ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   c                 ó¼   — |                       d¦  «        }|                      t          |j                             d¦  «        ¦  «        d| j        z   dz   ¦  «         d S )Nrõ  r"  ó   ")r  r}   r   rC  r\   rý  rÙ   s     r9   Útest_static_etagzStaticFileTest.test_static_etagL  sc   € Ø×$Ò$Ð%9Ñ:Ô:ˆØ×ÒÝ�Ô!×%Ò% fÑ-Ô-Ñ.Ô.°°tÔ7KÑ0KÈdÑ0Rñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 óè  — |                       dddi¬¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      t	          |j                             d¦  «        ¦  «        d| j        z   dz   ¦  «         |                      |j                             d	¦  «        d
¦  «         |                      |j                             d¦  «        d¦  «         d S )Nrõ  ÚRangez	bytes=0-9rI  éÎ   s
   User-agentr"  r1  r  Ú10úContent-Rangezbytes 0-9/26)r  r}   rÕ   rÒ   r   rC  r\   rý  rÙ   s     r9   Útest_static_with_rangez%StaticFileTest.test_static_with_rangeR  sò   € Ø×$Ò$Ø ¨7°KÐ*@ð %ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜œ¨Ñ6Ô6Ð6Ø×ÒÝ�Ô!×%Ò% fÑ-Ô-Ñ.Ô.°°tÔ7KÑ0KÈdÑ0Rñ	
ô 	
ð 	
ð 	×Ò˜Ô)×-Ò-Ð.>Ñ?Ô?ÀÑFÔFÐFØ×Ò˜Ô)×-Ò-¨oÑ>Ô>ÀÑOÔOÐOÐOÐOr;   c                 ó4  — |                       dddi¬¦  «        }|                      |j        d¦  «         t          j                             | j        d¦  «        }t          |d¬¦  «        5 }|                      |j        t          | 
                    ¦   «         ¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |j                             d	¦  «        d
¦  «         |                      |j                             d¦  «        ¦  «         d S )Nrõ  r4  zbytes=0-rI  rÎ   ú
robots.txtúutf-8©rø  r  Ú26r7  ©r  r}   rÕ   r3   r4   r5   Ú
static_dirÚopenrÒ   r   ÚreadrC  r\   rŽ   ©rC   rÚ   Úrobots_file_pathÚfs       r9   Ú test_static_with_range_full_filez/StaticFileTest.test_static_with_range_full_file^  s7  € Ø×$Ò$Ø ¨7°JÐ*?ð %ñ 
ô 
ˆð
 	×Ò˜œ¨Ñ,Ô,Ð,Ýœ7Ÿ<š<¨¬¸ÑFÔFÐÝÐ"¨WÐ5Ñ5Ô5ð 	<¸Ø×Ò˜Xœ]­D°·²±´©N¬NÑ;Ô;Ð;ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<à×Ò˜Ô)×-Ò-Ð.>Ñ?Ô?ÀÑFÔFÐFØ×Ò˜(Ô*×.Ò.¨Ñ?Ô?Ñ@Ô@Ð@Ð@Ð@ó   Á+;B2Â2B6Â9B6c                 ó4  — |                       dddi¬¦  «        }|                      |j        d¦  «         t          j                             | j        d¦  «        }t          |d¬¦  «        5 }|                      |j        t          | 
                    ¦   «         ¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |j                             d	¦  «        d
¦  «         |                      |j                             d¦  «        ¦  «         d S )Nrõ  r4  zbytes=0-10000000rI  rÎ   r:  r;  r<  r  r=  r7  r>  rB  s       r9   Ú$test_static_with_range_full_past_endz3StaticFileTest.test_static_with_range_full_past_endk  s8  € Ø×$Ò$Ø ¨7Ð4FÐ*Gð %ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ýœ7Ÿ<š<¨¬¸ÑFÔFÐÝÐ"¨WÐ5Ñ5Ô5ð 	<¸Ø×Ò˜Xœ]­D°·²±´©N¬NÑ;Ô;Ð;ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<à×Ò˜Ô)×-Ò-Ð.>Ñ?Ô?ÀÑFÔFÐFØ×Ò˜(Ô*×.Ò.¨Ñ?Ô?Ñ@Ô@Ð@Ð@Ð@rF  c           	      óF  — |                       dddi¬¦  «        }|                      |j        d¦  «         t          j                             | j        d¦  «        }t          |d¬¦  «        5 }|                      |j        t          | 
                    ¦   «         d	d …         ¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |j                             d
¦  «        d¦  «         |                      |j                             d¦  «        d¦  «         d S )Nrõ  r4  zbytes=1-10000000rI  r5  r:  r;  r<  rv   r  Ú25r7  zbytes 1-25/26)r  r}   rÕ   r3   r4   r5   r?  r@  rÒ   r   rA  rC  r\   rB  s       r9   Ú'test_static_with_range_partial_past_endz6StaticFileTest.test_static_with_range_partial_past_endv  sT  € Ø×$Ò$Ø ¨7Ð4FÐ*Gð %ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ýœ7Ÿ<š<¨¬¸ÑFÔFÐÝÐ"¨WÐ5Ñ5Ô5ð 	@¸Ø×Ò˜Xœ]­D°·²±´¸!¸"¸"´Ñ,>Ô,>Ñ?Ô?Ð?ð	@ð 	@ð 	@ñ 	@ô 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@øøøð 	@ð 	@ð 	@ð 	@à×Ò˜Ô)×-Ò-Ð.>Ñ?Ô?ÀÑFÔFÐFØ×Ò˜Ô)×-Ò-¨oÑ>Ô>ÀÑPÔPÐPÐPÐPs   Á+AB:Â:B>ÃB>c                 ó&  — |                       dddi¬¦  «        }|                      |j        d¦  «         |                      |j                             d¦  «        d¦  «         |                      |j                             d¦  «        d	¦  «         d S )
Nrõ  r4  z	bytes=22-rI  ó   : /
r  r  r7  úbytes 22-25/26©r  r}   rÒ   rC  r\   rÙ   s     r9   Útest_static_with_range_end_edgez.StaticFileTest.test_static_with_range_end_edge�  s–   € Ø×$Ò$Ø ¨7°KÐ*@ð %ñ 
ô 
ˆð 	×Ò˜œ¨Ñ1Ô1Ð1Ø×Ò˜Ô)×-Ò-Ð.>Ñ?Ô?ÀÑEÔEÐEØ×Ò˜Ô)×-Ò-¨oÑ>Ô>Ð@PÑQÔQÐQÐQÐQr;   c                 ó&  — |                       dddi¬¦  «        }|                      |j        d¦  «         |                      |j                             d¦  «        d¦  «         |                      |j                             d¦  «        d	¦  «         d S )
Nrõ  r4  zbytes=-4rI  rM  r  r  r7  rN  rO  rÙ   s     r9   Útest_static_with_range_neg_endz-StaticFileTest.test_static_with_range_neg_end‰  s–   € Ø×$Ò$Ø ¨7°JÐ*?ð %ñ 
ô 
ˆð 	×Ò˜œ¨Ñ1Ô1Ð1Ø×Ò˜Ô)×-Ò-Ð.>Ñ?Ô?ÀÑEÔEÐEØ×Ò˜Ô)×-Ò-¨oÑ>Ô>Ð@PÑQÔQÐQÐQÐQr;   c                 ó4  — |                       dddi¬¦  «        }|                      |j        d¦  «         t          j                             | j        d¦  «        }t          |d¬¦  «        5 }|                      |j        t          | 
                    ¦   «         ¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |j                             d	¦  «        d
¦  «         |                      |j                             d¦  «        ¦  «         d S )Nrõ  r4  zbytes=-1000000rI  rÎ   r:  r;  r<  r  r=  r7  r>  rB  s       r9   Ú%test_static_with_range_neg_past_startz4StaticFileTest.test_static_with_range_neg_past_start‘  s8  € Ø×$Ò$Ø ¨7Ð4DÐ*Eð %ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ýœ7Ÿ<š<¨¬¸ÑFÔFÐÝÐ"¨WÐ5Ñ5Ô5ð 	<¸Ø×Ò˜Xœ]­D°·²±´©N¬NÑ;Ô;Ð;ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<à×Ò˜Ô)×-Ò-Ð.>Ñ?Ô?ÀÑFÔFÐFØ×Ò˜(Ô*×.Ò.¨Ñ?Ô?Ñ@Ô@Ð@Ð@Ð@rF  c                 ón   — |                       dddi¬¦  «        }|                      |j        d¦  «         d S )Nrõ  r4  rå   rI  rÎ   r(  rÙ   s     r9   Útest_static_invalid_rangez(StaticFileTest.test_static_invalid_rangeœ  s>   € Ø×$Ò$Ð%9ÀGÈVÐCTÐ$ÑUÔUˆØ×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   c                 óÊ   — |                       dddi¬¦  «        }|                      |j                             d¦  «        d¦  «         |                      |j        d¦  «         d S )Nrõ  r4  zbytes=-0rI  r7  ú
bytes */26é   )r  r}   rC  r\   rÕ   rÙ   s     r9   Ú+test_static_unsatisfiable_range_zero_suffixz:StaticFileTest.test_static_unsatisfiable_range_zero_suffix   sm   € Ø×$Ò$Ø ¨7°JÐ*?ð %ñ 
ô 
ˆð 	×Ò˜Ô)×-Ò-¨oÑ>Ô>ÀÑMÔMÐMØ×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   c                 óÊ   — |                       dddi¬¦  «        }|                      |j        d¦  «         |                      |j                             d¦  «        d¦  «         d S )Nrõ  r4  zbytes=26rI  rY  r7  rX  ©r  r}   rÕ   rC  r\   rÙ   s     r9   Ú-test_static_unsatisfiable_range_invalid_startz<StaticFileTest.test_static_unsatisfiable_range_invalid_start§  sm   € Ø×$Ò$Ø ¨7°JÐ*?ð %ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜Ô)×-Ò-¨oÑ>Ô>ÀÑMÔMÐMÐMÐMr;   c                 óÊ   — |                       dddi¬¦  «        }|                      |j        d¦  «         |                      |j                             d¦  «        d¦  «         d S )Nrõ  r4  z
bytes=10-3rI  rY  r7  rX  r\  rÙ   s     r9   Ú3test_static_unsatisfiable_range_end_less_than_startzBStaticFileTest.test_static_unsatisfiable_range_end_less_than_start®  sm   € Ø×$Ò$Ø ¨7°LÐ*Að %ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜Ô)×-Ò-¨oÑ>Ô>ÀÑMÔMÐMÐMÐMr;   c                 óT  — |                       dd¬¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d         d¦  «         |                      t          |j        d         ¦  «        d	| j        z   d	z   ¦  «         d S )
Nrõ  r  ©rÑ   rÎ   r;   r  r=  r"  r1  ©rÓ   r}   rÕ   rÒ   rC  r   rý  rÙ   s     r9   Útest_static_headzStaticFileTest.test_static_headµ  s«   € Ø—:’:Ð2¸6�:ÑBÔBˆØ×Ò˜œ¨Ñ,Ô,Ð,à×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜Ô)Ð*:Ô;¸TÑBÔBÐBØ×ÒÝ�Ô! &Ô)Ñ*Ô*¨D°4Ô3GÑ,GÈ$Ñ,Nñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 óZ  — |                       ddddi¬¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d         d	¦  «         |                      t          |j        d
         ¦  «        d| j        z   dz   ¦  «         d S )Nrõ  r  r4  ú	bytes=1-4)rÑ   rC  r5  r;   r  r  r"  r1  rb  rÙ   s     r9   Útest_static_head_rangez%StaticFileTest.test_static_head_range¿  s»   € Ø—:’:Ø ¨¸'À;Ð9Oð ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜Ô)Ð*:Ô;¸SÑAÔAÐAØ×ÒÝ�Ô! &Ô)Ñ*Ô*¨D°4Ô3GÑ,GÈ$Ñ,Nñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 ód  — |                       ddd| j        z   dz   dœ¬¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      d|j        ¦  «         |                      t          |j        d	         ¦  «        d| j        z   dz   ¦  «         d S )
Nrõ  re  r1  )r4  r!  rI  r  r;   r  r"  )r  rý  r}   rÕ   rÒ   r   rC  r   rÙ   s     r9   Útest_static_range_if_none_matchz.StaticFileTest.test_static_range_if_none_matchÊ  sÌ   € Ø×$Ò$Ø à$Ø!%¨Ô(<Ñ!<¸tÑ!Cðð ð %ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜œ¨Ñ,Ô,Ð,Ø×ÒÐ)¨8Ô+;Ñ<Ô<Ð<Ø×ÒÝ�Ô! &Ô)Ñ*Ô*¨D°4Ô3GÑ,GÈ$Ñ,Nñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )Nz/static/blargé”  r(  rÙ   s     r9   Útest_static_404zStaticFileTest.test_static_404Ù  s3   € Ø×$Ò$ _Ñ5Ô5ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   c                 ó  — | j                              ¦   «          t          ¦   «         | _         t          t          d¦  «        5  |                      d¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      |j        d¦  «         d S )Nz.*not in root static directoryz/static/../static_foo.txté“  )Úhttp_clientr²  r   r   r   r  r}   rÕ   rÙ   s     r9   Útest_path_traversal_protectionz-StaticFileTest.test_path_traversal_protectionÝ  sÒ   € ð 	Ô×ÒÑ Ô Ð Ý0Ñ2Ô2ˆÔÝ•wÐ @ÑAÔAð 	Fð 	FØ×(Ò(Ð)DÑEÔEˆHð	Fð 	Fð 	Fñ 	Fô 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Føøøð 	Fð 	Fð 	Fð 	Fð 	×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,s   ÁA$Á$A(Á+A(Úposixznon-posix OSc                 ód  — t           j                             t           j                             t           j                             t
          ¦  «        ¦  «        d¦  «        }|                      dt          j         	                    |¦  «        z   ¦  «        }|  
                    |j        d¦  «         d S )Nr  z/root_staticrÎ   )r3   r4   r5   r6   Úabspathr7   r  r‘  r’  rÿ   r}   rÕ   )rC   r4   rÚ   s      r9   Útest_root_static_pathz$StaticFileTest.test_root_static_pathê  sƒ   € õ Œw�|Š|ÝŒG�OŠO�BœGŸOšO­HÑ5Ô5Ñ6Ô6Ð8Kñ
ô 
ˆð ×$Ò$ ^µf´l×6HÒ6HÈÑ6NÔ6NÑ%NÑOÔOˆØ×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   N)1rK   rL   rM   rý  r3   r4   r5   r6   r7   r?  r?   r@   rö  rù  rû  rþ  r   r  r  r  r  r  r  r$  r&  r)  r+  r/  r2  r8  rE  rH  rK  rP  rR  rT  rV  rZ  r]  r_  rc  rf  rh  rk  ro  ÚunittestÚskipIfrk   rs  rI   r;   r9   rÒ  rÒ  Ž  s§  € € € € € ð	Lð ð ”—’˜bœgŸošo¨hÑ7Ô7¸ÑBÔB€Jð#
ð #
ð #
ðJ3ð 3ð 3ðMð Mð Mð3ð 3ð 3ð
ð 
ð 
ðYð Yð Yð
ð 
ð 
ð?ð ?ð ?ðWð Wð Wð/ð /ð /ð9ð 9ð 9ð
ð ð ð*>ð >ð >ð.ð .ð .ð	.ð 	.ð 	.ð-ð -ð -ð-ð -ð -ð-ð -ð -ð$
ð 
ð 
ð
Pð 
Pð 
PðAð Að Að	Að 	Að 	Að	Qð 	Qð 	QðRð Rð RðRð Rð Rð	Að 	Að 	Að-ð -ð -ð-ð -ð -ðNð Nð NðNð Nð Nð
ð 
ð 
ð	
ð 	
ð 	
ð
ð 
ð 
ð-ð -ð -ð-ð -ð -ð €X„_�R”W Ò'¨Ñ8Ô8ð	-ð 	-ñ 9Ô8ð	-ð 	-ð 	-r;   rÒ  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚStaticDefaultFilenameTestc                 óZ   — t          t          d¦  «        t          d¬¦  «        ¬¦  «        S ©NrÓ  ú
index.html©Údefault_filename)rð  Ústatic_handler_argsrñ  rB   s    r9   r@   z(StaticDefaultFilenameTest.get_app_kwargsø  ó2   € ÝÝ Ñ)Ô)Ý $°lÐ CÑ CÔ Cð
ñ 
ô 
ð 	
r;   c                 ó   — g S r2   rI   rB   s    r9   r?   z&StaticDefaultFilenameTest.get_handlersþ  rJ   r;   c                 ó    — |                       dd¬¦  «        }|                      |j        d¦  «         |                      d|j        ¦  «         d S )Nú/static/dir/Fr�  rÎ   s   this is the index
©rÓ   r}   rÕ   rÒ   rÙ   s     r9   Útest_static_default_filenamez6StaticDefaultFilenameTest.test_static_default_filename  sN   € Ø—:’:˜n¸u�:ÑEÔEˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×ÒÐ/°´Ñ?Ô?Ð?Ð?Ð?r;   c                 óÐ   — |                       dd¬¦  «        }|                      |j        d¦  «         |                      |j        d                              d¦  «        ¦  «         d S )Nú/static/dirFr�  r‚  r�  r�  )rÓ   r}   rÕ   r×   rC  ÚendswithrÙ   s     r9   Útest_static_default_redirectz6StaticDefaultFilenameTest.test_static_default_redirect  s]   € Ø—:’:˜m¸e�:ÑDÔDˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø�Š˜Ô(¨Ô4×=Ò=¸nÑMÔMÑNÔNÐNÐNÐNr;   N)rK   rL   rM   r@   r?   rƒ  r‡  rI   r;   r9   rw  rw  ÷  sX   € € € € € ð
ð 
ð 
ðð ð ð@ð @ð @ð
Oð Oð Oð Oð Or;   rw  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚStaticDefaultFilenameRootTestc                 ó–   — t          t          j                             t	          d¦  «        ¦  «        t          d¬¦  «        d¬¦  «        S )NrÓ  rz  r{  rR   )rð  r}  Ústatic_url_prefix)rg   r3   r4   rr  r:   rB   s    r9   r@   z,StaticDefaultFilenameRootTest.get_app_kwargs  sC   € ÝÝœŸš­°Ñ(9Ô(9Ñ:Ô:Ý $°lÐ CÑ CÔ CØ!ð
ñ 
ô 
ð 	
r;   c                 ó   — g S r2   rI   rB   s    r9   r?   z*StaticDefaultFilenameRootTest.get_handlers  rJ   r;   c                 ó   — t          ¦   «         S r2   r   rB   s    r9   Úget_http_clientz-StaticDefaultFilenameRootTest.get_http_client  s   € õ %Ñ&Ô&Ð&r;   c                 óª  — t           j                             t          ¦  «        }t           j                             |¦  «        \  }}t           j        dk    r|                      ||¦  «         n|}t          t          d¦  «        5  |  	                    d|› d�d¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      |j
        d¦  «         d S )Nrp  z/.*cannot redirect path with two initial slashesz//evil.com/../r…  Fr�  rm  )r3   r4   r6   r7   Ú
splitdriverk   r}   r   r   rÓ   rÕ   )rC   Útest_dirÚdriveÚtailrÚ   s        r9   Útest_no_open_redirectz3StaticDefaultFilenameRootTest.test_no_open_redirect  s
  € õ ”7—?’?¥8Ñ,Ô,ˆÝ”g×(Ò(¨Ñ2Ô2‰ˆˆtÝŒ7�gÒÐØ×Ò˜T 8Ñ,Ô,Ð,Ð,àˆHÝ•wÐ QÑRÔRð 	ð 	Ø—z’zØ6 Ð6Ð6Ð6Ø!&ð "ñ ô ˆHð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð
 	×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,s   ÂB-Â-B1Â4B1N)rK   rL   rM   r@   r?   rŽ  r”  rI   r;   r9   r‰  r‰    sP   € € € € € ð
ð 
ð 
ðð ð ð'ð 'ð 'ð
-ð -ð -ð -ð -r;   r‰  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚStaticFileWithPathTestc                 óZ   — t          t          d¦  «        t          d¬¦  «        ¬¦  «        S ry  rñ  rB   s    r9   r@   z%StaticFileWithPathTest.get_app_kwargs2  r~  r;   c                 ó6   — dt           dt          d¦  «        ifgS )Nz	/foo/(.*)r4   z
templates/)r   r:   rB   s    r9   r?   z#StaticFileWithPathTest.get_handlers8  s    € ØÕ/°&½'À,Ñ:OÔ:OÐ1PÐQÐRÐRr;   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )Nz/foo/utf8.htmls   HÃ©llo
rK  rÙ   s     r9   Ú
test_servez!StaticFileWithPathTest.test_serve;  s3   € Ø—:’:Ð.Ñ/Ô/ˆØ×Ò˜œÐ(9Ñ:Ô:Ð:Ð:Ð:r;   N)rK   rL   rM   r@   r?   rš  rI   r;   r9   r–  r–  1  sD   € € € € € ð
ð 
ð 
ðSð Sð Sð;ð ;ð ;ð ;ð ;r;   r–  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚCustomStaticFileTestc                 óf   —  G d„ dt           ¦  «        } G d„ dt          ¦  «        }|| _        d|fgS )Nc                   ó€   — e Zd Zed„ ¦   «         Zd„ Zed„ ¦   «         Zd„ Zed
d„¦   «         Zd„ Z	d„ Z
ed	„ ¦   «         ZdS )ú>CustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandlerc                 ó´   — |                       ||¦  «        }|                     d¦  «        }|d |…         }||dz   d …         }d                     |||¦  «        S )Nú.rv   z/static/{}.{}.{})Úget_versionÚrindexÚformat)Úclsrc   r4   Úversion_hashÚextension_indexÚbefore_versionÚafter_versions          r9   Úmake_static_urlzNCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.make_static_urlC  sl   € à"Ÿš¨x¸Ñ>Ô>�Ø"&§+¢+¨cÑ"2Ô"2�Ø!%Ð&6 Ð&6Ô!7�Ø $ o¸Ñ&9Ð%<Ð%<Ô =�Ø)×0Ò0Ø"Ø Ø!ñô ð r;   c                 ó†   — |                      d¦  «        }|                      dd|¦  «        }|d |…         › ||d …         › �S )Nr¡  r   )r£  )rC   Úurl_pathr§  Úversion_indexs       r9   Úparse_url_pathzMCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.parse_url_pathO  sM   € Ø"*§/¢/°#Ñ"6Ô"6�Ø (§¢°°Q¸Ñ HÔ H�Ø" > M >Ô2ÐP°H¸_Ð=MÐ=MÔ4NÐPÐPÐPr;   c                 ó   — d|z   S )NzCustomStaticFileTest:rI   ©r¥  rc   r4   s      r9   Úget_absolute_pathzPCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_absolute_pathT  s   € à.°Ñ5Ð5r;   c                 ó   — |S r2   rI   )rC   ÚrootÚabsolute_paths      r9   Úvalidate_absolute_pathzUCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.validate_absolute_pathX  s   € Ø$Ð$r;   Nc                 óB   — |€|�J ‚|dk    rdS t          d|z  ¦  «        ‚)NúCustomStaticFileTest:foo.txtru   úunexpected path %rrÃ  )rC   r4   ÚstartÚends       r9   Úget_contentzJCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_content[  s4   € à�}¨¨¨¨ØÐ9Ò9Ð9Ø!˜6ÝÐ 4°tÑ ;Ñ<Ô<Ð<r;   c                 óJ   — | j         dk    rdS t          d| j         z  ¦  «        ‚)Nr·  rQ  r¸  )r´  r¾  rB   s    r9   Úget_content_sizezOCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_content_sizeb  s-   € ØÔ%Ð)GÒGÐGØ˜1ÝÐ 4°tÔ7IÑ IÑJÔJÐJr;   c                 ó   — d S r2   rI   rB   s    r9   Úget_modified_timezPCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_modified_timeg  s   € Ø�tr;   c                 ó   — dS )NÚ42rI   r°  s      r9   r¢  zJCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_versionj  s   € à�tr;   ©NN)rK   rL   rM   Úclassmethodrª  r®  r±  rµ  r»  r½  r¿  r¢  rI   r;   r9   ÚMyStaticFileHandlerrŸ  B  sÅ   € € € € € Øð	ð 	ñ Œ[ð	ðQð Qð Qð
 ð6ð 6ñ Œ[ð6ð%ð %ð %ð ð=ð =ð =ñ Œ[ð=ðKð Kð Kð
ð ð ð ðð ñ Œ[ðð ð r;   rÄ  c                   ó   — e Zd Zd„ ZdS )ú;CustomStaticFileTest.get_handlers.<locals>.StaticUrlHandlerc                 óV   — |                       |                      |¦  «        ¦  «         d S r2   )r[   rÙ  rÁ   s     r9   r\   z?CustomStaticFileTest.get_handlers.<locals>.StaticUrlHandler.geto  s&   € Ø—
’
˜4Ÿ?š?¨4Ñ0Ô0Ñ1Ô1Ð1Ð1Ð1r;   Nr]   rI   r;   r9   rÛ  rÆ  n  s#   € € € € € ð2ð 2ð 2ð 2ð 2r;   rÛ  rî  )r   r   Ústatic_handler_class)rC   rÄ  rÛ  s      r9   r?   z!CustomStaticFileTest.get_handlersA  sq   € ð*	ð *	ð *	ð *	ð *	Õ"3ñ *	ô *	ð *	ðX	2ð 	2ð 	2ð 	2ð 	2�~ñ 	2ô 	2ð 	2ð %8ˆÔ!à#Ð%5Ð6Ð7Ð7r;   c                 ó.   — t          d| j        ¬¦  «        S )NÚdummy)rð  rÈ  )rg   rÈ  rB   s    r9   r@   z#CustomStaticFileTest.get_app_kwargsv  s   € Ý ¸dÔ>WÐXÑXÔXÐXr;   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )Nz/static/foo.42.txtru   rK  rÙ   s     r9   rš  zCustomStaticFileTest.test_servey  s2   € Ø—:’:Ð2Ñ3Ô3ˆØ×Ò˜œ¨Ñ/Ô/Ð/Ð/Ð/r;   c                 óÆ   — t          t          dd¬¦  «        5  |                      d¦  «        }|                      |j        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NzCould not open static fileF)Úrequiredz/static_url/foo.txts   /static/foo.42.txt)r   r   rÓ   r}   rÒ   rÙ   s     r9   rþ  z$CustomStaticFileTest.test_static_url}  s»   € Ý•wÐ <ÀuÐMÑMÔMð 	Cð 	CØ—z’zÐ"7Ñ8Ô8ˆHØ×Ò˜Xœ]Ð,AÑBÔBÐBð	Cð 	Cð 	Cñ 	Cô 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cøøøð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cs   ˜1AÁAÁAN)rK   rL   rM   r?   r@   rš  rþ  rI   r;   r9   rœ  rœ  @  sY   € € € € € ð38ð 38ð 38ðjYð Yð Yð0ð 0ð 0ðCð Cð Cð Cð Cr;   rœ  c                   ó6   — e Zd Z G d„ de¦  «        Zd„ Zd„ ZdS )ÚHostMatchingTestc                   ó   — e Zd Zd„ Zd„ ZdS )úHostMatchingTest.Handlerc                 ó   — || _         d S r2   )Úreply)rC   rÓ  s     r9   r�  z#HostMatchingTest.Handler.initialize…  s   € ØˆDŒJˆJˆJr;   c                 ó:   — |                       | j        ¦  «         d S r2   )r[   rÓ  rB   s    r9   r\   zHostMatchingTest.Handler.getˆ  s   € Ø�JŠJ�t”zÑ"Ô"Ð"Ð"Ð"r;   N)rK   rL   rM   r�  r\   rI   r;   r9   rT   rÑ  „  s2   € € € € € ð	ð 	ð 	ð	#ð 	#ð 	#ð 	#ð 	#r;   rT   c                 ó&   — dt           j        ddifgS )Nrõ   rÓ  Úwildcard)rÏ  rT   rB   s    r9   r?   zHostMatchingTest.get_handlers‹  s   € ØÕ)Ô1°G¸ZÐ3HÐIÐJÐJr;   c                 ó  — | j                              ddt          j        ddifg¦  «         | j                              ddt          j        ddifg¦  «         | j                              ddt          j        dd	ifg¦  «         | j                              d
dt          j        ddifg¦  «         |                      d¦  «        }|                      |j        d¦  «         |                      d¦  «        }|                      |j        d¦  «         |                      d¦  «        }|                      |j        d¦  «         |                      dddi¬¦  «        }|                      |j        d¦  «         |                      dddi¬¦  «        }|                      |j        d¦  «         |                      dddi¬¦  «        }|                      |j        d¦  «         |                      dddi¬¦  «        }|                      |j        d¦  «         d S )Núwww.example.comrõ   rÓ  ú[0]úwww\.example\.comú/barú[1]ú/bazú[2]zwww.e.*e.comz[3]s   wildcardrj  ÚHostrI  ó   [0]ó   [1]ó   [2]zwww.exe.coms   [3])rA   Úadd_handlersrÏ  rT   rÓ   r}   rÒ   rÕ   rÙ   s     r9   Útest_host_matchingz#HostMatchingTest.test_host_matchingŽ  s  € ØŒ×ÒØ Õ)9Ô)AÀGÈUÐCSÐ TÐUñ	
ô 	
ð 	
ð 	Œ×ÒØ  FÕ,<Ô,DÀwÐPUÐFVÐ#WÐ"Xñ	
ô 	
ð 	
ð 	Œ×ÒØ Õ)9Ô)AÀGÈUÐCSÐ TÐUñ	
ô 	
ð 	
ð 	Œ×ÒØ˜fÕ&6Ô&>ÀÈ%Ð@PÐQÐRñ	
ô 	
ð 	
ð —:’:˜fÑ%Ô%ˆØ×Ò˜œ¨Ñ4Ô4Ð4Ø—:’:˜fÑ%Ô%ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø—:’:˜fÑ%Ô%ˆØ×Ò˜œ¨Ñ,Ô,Ð,à—:’:˜f¨vÐ7HÐ.I�:ÑJÔJˆØ×Ò˜œ¨Ñ/Ô/Ð/Ø—:’:˜f¨vÐ7HÐ.I�:ÑJÔJˆØ×Ò˜œ¨Ñ/Ô/Ð/Ø—:’:˜f¨vÐ7HÐ.I�:ÑJÔJˆØ×Ò˜œ¨Ñ/Ô/Ð/Ø—:’:˜f¨v°}Ð.E�:ÑFÔFˆØ×Ò˜œ¨Ñ/Ô/Ð/Ð/Ð/r;   N)rK   rL   rM   r   rT   r?   rä  rI   r;   r9   rÏ  rÏ  ƒ  s_   € € € € € ð#ð #ð #ð #ð #�.ñ #ô #ð #ðKð Kð Kð0ð 0ð 0ð 0ð 0r;   rÏ  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚDefaultHostMatchingTestc                 ó   — g S r2   rI   rB   s    r9   r?   z$DefaultHostMatchingTest.get_handlers®  rJ   r;   c                 ó
   — ddiS )NÚdefault_hostrØ  rI   rB   s    r9   r@   z&DefaultHostMatchingTest.get_app_kwargs±  s   € ØÐ 1Ð2Ð2r;   c                 ó  — | j                              ddt          j        ddifg¦  «         | j                              ddt          j        ddifg¦  «         | j                              dd	t          j        dd
ifg¦  «         |                      d¦  «        }|                      |j        d¦  «         |                      d¦  «        }|                      |j        d¦  «         |                      d	¦  «        }|                      |j        d¦  «         |                      dddi¬¦  «        }|                      |j        d¦  «         d| j         _        |                      d	¦  «        }|                      |j        d¦  «         d S )NrØ  rõ   rÓ  rÙ  rÚ  rÛ  rÜ  zwww.test.comrÝ  rÞ  rà  rá  rj  z	X-Real-Ipr¡  rI  râ  )	rA   rã  rÏ  rT   rÓ   r}   rÒ   rÕ   ré  rÙ   s     r9   Útest_default_host_matchingz2DefaultHostMatchingTest.test_default_host_matching´  s…  € ØŒ×ÒØ Õ)9Ô)AÀGÈUÐCSÐ TÐUñ	
ô 	
ð 	
ð 	Œ×ÒØ  FÕ,<Ô,DÀwÐPUÐFVÐ#WÐ"Xñ	
ô 	
ð 	
ð 	Œ×ÒØ˜fÕ&6Ô&>ÀÈ%Ð@PÐQÐRñ	
ô 	
ð 	
ð —:’:˜fÑ%Ô%ˆØ×Ò˜œ¨Ñ/Ô/Ð/Ø—:’:˜fÑ%Ô%ˆØ×Ò˜œ¨Ñ/Ô/Ð/Ø—:’:˜fÑ%Ô%ˆØ×Ò˜œ¨Ñ,Ô,Ð,à—:’:˜f¨{¸KÐ.H�:ÑIÔIˆØ×Ò˜œ¨Ñ,Ô,Ð,à .ˆŒÔà—:’:˜fÑ%Ô%ˆØ×Ò˜œ¨Ñ/Ô/Ð/Ð/Ð/r;   N)rK   rL   rM   r?   r@   rë  rI   r;   r9   ræ  ræ  ­  sA   € € € € € ðð ð ð3ð 3ð 3ð0ð 0ð 0ð 0ð 0r;   ræ  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚNamedURLSpecGroupsTestc                 ó8   —  G d„ dt           ¦  «        }d|fd|fgS )Nc                   ó   — e Zd Zd„ ZdS )ú8NamedURLSpecGroupsTest.get_handlers.<locals>.EchoHandlerc                 ó0   — |                       |¦  «         d S r2   rZ   rÁ   s     r9   r\   z<NamedURLSpecGroupsTest.get_handlers.<locals>.EchoHandler.getÒ  s   € Ø—
’
˜4Ñ Ô Ð Ð Ð r;   Nr]   rI   r;   r9   r¶  rð  Ñ  s#   € € € € € ð!ð !ð !ð !ð !r;   r¶  z/str/(?P<path>.*)z/unicode/(?P<path>.*)rÉ   )rC   r¶  s     r9   r?   z#NamedURLSpecGroupsTest.get_handlersÐ  sH   € ð	!ð 	!ð 	!ð 	!ð 	!�.ñ 	!ô 	!ð 	!ð
 ! +Ð.Ø$ kÐ2ð
ð 	
r;   c                 óÆ   — |                       d¦  «        }|                      |j        d¦  «         |                       d¦  «        }|                      |j        d¦  «         d S )Nz/str/foos   fooz/unicode/barru   rK  rÙ   s     r9   Útest_named_urlspec_groupsz0NamedURLSpecGroupsTest.test_named_urlspec_groupsÚ  sZ   € Ø—:’:˜jÑ)Ô)ˆØ×Ò˜œ¨Ñ/Ô/Ð/à—:’:˜nÑ-Ô-ˆØ×Ò˜œ¨Ñ/Ô/Ð/Ð/Ð/r;   N)rK   rL   rM   r?   ró  rI   r;   r9   rí  rí  Ï  s2   € € € € € ð
ð 
ð 
ð0ð 0ð 0ð 0ð 0r;   rí  c                   ó0   — e Zd Z G d„ de¦  «        Zd„ ZdS )ÚClearHeaderTestc                   ó   — e Zd Zd„ ZdS )úClearHeaderTest.Handlerc                 ó²   — |                       dd¦  «         |                       dd¦  «         |                      d¦  «         |                      d¦  «         d S )NÚh1rt   Úh2r  Únonexistent)r  Úclear_headerrB   s    r9   r\   zClearHeaderTest.Handler.getä  sX   € Ø�OŠO˜D %Ñ(Ô(Ð(Ø�OŠO˜D %Ñ(Ô(Ð(Ø×Ò˜dÑ#Ô#Ð#Ø×Ò˜mÑ,Ô,Ð,Ð,Ð,r;   Nr]   rI   r;   r9   rT   r÷  ã  s#   € € € € € ð	-ð 	-ð 	-ð 	-ð 	-r;   rT   c                 ó¨   — |                       d¦  «        }|                      d|j        ¦  «         |                      |j        d         d¦  «         d S )NrR   rù  rú  r  ©rÓ   r   rC  r}   rÙ   s     r9   Útest_clear_headerz!ClearHeaderTest.test_clear_headerê  sN   € Ø—:’:˜c‘?”?ˆØ×Ò˜˜xÔ/Ñ0Ô0Ð0Ø×Ò˜Ô)¨$Ô/°Ñ7Ô7Ð7Ð7Ð7r;   N)rK   rL   rM   r   rT   rÿ  rI   r;   r9   rõ  rõ  â  sM   € € € € € ð-ð -ð -ð -ð -�.ñ -ô -ð -ð8ð 8ð 8ð 8ð 8r;   rõ  c                   ó0   — e Zd Z G d„ de¦  «        Zd„ ZdS )ÚHeader204Testc                   ó   — e Zd Zd„ ZdS )úHeader204Test.Handlerc                 óX   — |                       d¦  «         |                      ¦   «          d S )NéÌ   )Ú
set_statusr±   rB   s    r9   r\   zHeader204Test.Handler.getò  s%   € Ø�OŠO˜CÑ Ô Ð Ø�KŠK‰MŒMˆMˆMˆMr;   Nr]   rI   r;   r9   rT   r  ñ  s#   € € € € € ð	ð 	ð 	ð 	ð 	r;   rT   c                 óÒ   — |                       d¦  «        }|                      |j        d¦  «         |                      d|j        ¦  «         |                      d|j        ¦  «         d S )NrR   r  r  úTransfer-Encoding)rÓ   r}   rÕ   r   rC  rÙ   s     r9   Útest_204_headerszHeader204Test.test_204_headersö  sc   € Ø—:’:˜c‘?”?ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×ÒÐ)¨8Ô+;Ñ<Ô<Ð<Ø×ÒÐ,¨hÔ.>Ñ?Ô?Ð?Ð?Ð?r;   N)rK   rL   rM   r   rT   r	  rI   r;   r9   r  r  ð  sR   € € € € € ðð ð ð ð �.ñ ô ð ð
@ð @ð @ð @ð @r;   r  c                   ó0   — e Zd Z G d„ de¦  «        Zd„ ZdS )ÚHeader304Testc                   ó   — e Zd Zd„ ZdS )úHeader304Test.Handlerc                 ó\   — |                       dd¦  «         |                      d¦  «         d S )NúContent-LanguageÚen_USrY   )r  r[   rB   s    r9   r\   zHeader304Test.Handler.getÿ  s/   € Ø�OŠOÐ.°Ñ8Ô8Ð8Ø�JŠJ�wÑÔÐÐÐr;   Nr]   rI   r;   r9   rT   r  þ  s#   € € € € € ð	 ð 	 ð 	 ð 	 ð 	 r;   rT   c                 óÔ  — |                       d¦  «        }|                      |j        d         d¦  «         |                      |j        d         d¦  «         |                       dd|j        d         i¬¦  «        }|                      |j        d	¦  «         |                      d|j        ¦  «         |                      d|j        ¦  «         |                      d
|j        ¦  «         d S )NrR   r  Ú5r  r  r!  r"  rI  r  r  )rÓ   r}   rC  rÕ   r   r  s      r9   Útest_304_headerszHeader304Test.test_304_headers  sç   € Ø—J’J˜s‘O”Oˆ	Ø×Ò˜Ô*Ð+;Ô<¸cÑBÔBÐBØ×Ò˜Ô*Ð+=Ô>ÀÑHÔHÐHà—J’JØ˜/¨9Ô+<¸VÔ+DÐEð ñ 
ô 
ˆ	ð 	×Ò˜œ¨Ñ-Ô-Ð-Ø×ÒÐ)¨9Ô+<Ñ=Ô=Ð=Ø×ÒÐ+¨YÔ->Ñ?Ô?Ð?à×ÒÐ,¨iÔ.?Ñ@Ô@Ð@Ð@Ð@r;   N)rK   rL   rM   r   rT   r  rI   r;   r9   r  r  ý  sR   € € € € € ð ð  ð  ð  ð  �.ñ  ô  ð  ð
Að Að Að Að Ar;   r  c                   óB   — e Zd Z G d„ de¦  «        Zd„ Zd„ Zd„ Zd„ ZdS )ÚStatusReasonTestc                   ó   — e Zd Zd„ ZdS )úStatusReasonTest.Handlerc                 óÒ   — | j         j                             dg ¦  «        }t          t	          |                      d¦  «        ¦  «        |rt          |d         ¦  «        nd ¬¦  «        ‚)NÚreasonrÕ   r   ©r  )r»  r¼  r\   r!   rå  ræ  r   )rC   r  s     r9   r\   zStatusReasonTest.Handler.get  se   € Ø”\Ô+×/Ò/°¸"Ñ=Ô=ˆFÝÝ�D×%Ò% fÑ-Ô-Ñ.Ô.Ø06Ð@•z &¨¤)Ñ,Ô,Ð,¸Dðñ ô ð r;   Nr]   rI   r;   r9   rT   r    s#   € € € € € ð	ð 	ð 	ð 	ð 	r;   rT   c                 ó   — t          ¦   «         S r2   r   rB   s    r9   rŽ  z StatusReasonTest.get_http_client  ó   € å$Ñ&Ô&Ð&r;   c                 ó^  — |                       d¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                       d¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                       d¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                       d	¦  «        }|                      |j        d¦  «         |                      |j        d
¦  «         d S )Nz
/?code=304r  zNot Modifiedz/?code=304&reason=FooÚFooz/?code=682&reason=Baréª  ÚBarz
/?code=682ÚUnknown)rÓ   r}   rÕ   r  rÙ   s     r9   Útest_statuszStatusReasonTest.test_status  s  € Ø—:’:˜lÑ+Ô+ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜œ¨.Ñ9Ô9Ð9Ø—:’:Ð5Ñ6Ô6ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜œ¨%Ñ0Ô0Ð0Ø—:’:Ð5Ñ6Ô6ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜œ¨%Ñ0Ô0Ð0Ø—:’:˜lÑ+Ô+ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜œ¨)Ñ4Ô4Ð4Ð4Ð4r;   c                 óÒ   — |                       d¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      d|j        ¦  «         d S )Nz./?code=200&reason=OK%0D%0AX-Injection:injectedrÎ   r!  zX-Injection)rÓ   r}   rÕ   r  r   rC  rÙ   s     r9   r‹  z&StatusReasonTest.test_header_injection-  sc   € Ø—:’:ÐNÑOÔOˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜œ¨)Ñ4Ô4Ð4Ø×Ò˜¨Ô(8Ñ9Ô9Ð9Ð9Ð9r;   c                 ó  — |                       d¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      d|j        ¦  «         |                      d|j        ¦  «         d S )Nz+/?code=400&reason=<script>alert(1)</script>rn  r!  s   scripts   Unknown)rÓ   r}   rÕ   r  r   rÒ   rS  rÙ   s     r9   Útest_reason_xssz StatusReasonTest.test_reason_xss3  sx   € Ø—:’:ÐKÑLÔLˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜œ¨)Ñ4Ô4Ð4Ø×Ò˜ H¤MÑ2Ô2Ð2Ø�Š�j (¤-Ñ0Ô0Ð0Ð0Ð0r;   N)	rK   rL   rM   r   rT   rŽ  r"  r‹  r%  rI   r;   r9   r  r    sz   € € € € € ðð ð ð ð �.ñ ô ð ð'ð 'ð 'ð5ð 5ð 5ð:ð :ð :ð1ð 1ð 1ð 1ð 1r;   r  c                   ó0   — e Zd Z G d„ de¦  «        Zd„ ZdS )ÚDateHeaderTestc                   ó   — e Zd Zd„ ZdS )úDateHeaderTest.Handlerc                 ó0   — |                       d¦  «         d S rX   rZ   rB   s    r9   r\   zDateHeaderTest.Handler.get=  ó   € Ø�JŠJ�wÑÔÐÐÐr;   Nr]   rI   r;   r9   rT   r)  <  s#   € € € € € ð	 ð 	 ð 	 ð 	 ð 	 r;   rT   c                 ó4  — |                       d¦  «        }t          j                             |j        d         ¦  «        }|                      |t          j                             t          j        j	        ¦  «        z
  t          j
        d¬¦  «        ¦  «         d S )NrR   ÚDater„   )Úseconds)rÓ   rn  ro  rp  rC  rr  ri  rj  rk  rl  rm  )rC   rÚ   Úheader_dates      r9   Útest_date_headerzDateHeaderTest.test_date_header@  s~   € Ø—:’:˜c‘?”?ˆÝ”k×7Ò7¸Ô8HÈÔ8PÑQÔQˆØ�ŠØ�(Ô+×/Ò/µÔ0AÔ0EÑFÔFÑFÝÔ qÐ)Ñ)Ô)ñ	
ô 	
ð 	
ð 	
ð 	
r;   N)rK   rL   rM   r   rT   r0  rI   r;   r9   r'  r'  ;  sM   € € € € € ð ð  ð  ð  ð  �.ñ  ô  ð  ð
ð 
ð 
ð 
ð 
r;   r'  c                   óB   — e Zd Z G d„ de¦  «        Zd„ Zd„ Zd„ Zd„ ZdS )ÚRaiseWithReasonTestc                   ó   — e Zd Zd„ ZdS )úRaiseWithReasonTest.Handlerc                 ó$   — t          dd¬¦  «        ‚)Nr  r  r  ©r!   rB   s    r9   r\   zRaiseWithReasonTest.Handler.getK  s   € Ý˜C¨Ð.Ñ.Ô.Ð.r;   Nr]   rI   r;   r9   rT   r4  J  s#   € € € € € ð	/ð 	/ð 	/ð 	/ð 	/r;   rT   c                 ó   — t          ¦   «         S r2   r   rB   s    r9   rŽ  z#RaiseWithReasonTest.get_http_clientN  r  r;   c                 óÒ   — |                       d¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      d|j        ¦  «         d S )NrR   r  r  s   682: Foo)rÓ   r}   rÕ   r  rS  rÒ   rÙ   s     r9   Útest_raise_with_reasonz*RaiseWithReasonTest.test_raise_with_reasonR  s]   € Ø—:’:˜c‘?”?ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜œ¨%Ñ0Ô0Ð0Ø�Š�k 8¤=Ñ1Ô1Ð1Ð1Ð1r;   c                 ój   — |                       t          t          dd¬¦  «        ¦  «        d¦  «         d S )Nr  r  r  zHTTP 682: Foo©r}   rä   r!   rB   s    r9   Útest_httperror_strz&RaiseWithReasonTest.test_httperror_strX  s3   € Ø×Ò��Y s°5Ð9Ñ9Ô9Ñ:Ô:¸OÑLÔLÐLÐLÐLr;   c                 óf   — |                       t          t          d¦  «        ¦  «        d¦  «         d S )Nr  zHTTP 682: Unknownr;  rB   s    r9   Ú test_httperror_str_from_httputilz4RaiseWithReasonTest.test_httperror_str_from_httputil[  s-   € Ø×Ò��Y s™^œ^Ñ,Ô,Ð.AÑBÔBÐBÐBÐBr;   N)	rK   rL   rM   r   rT   rŽ  r9  r<  r>  rI   r;   r9   r2  r2  I  s‚   € € € € € ð/ð /ð /ð /ð /�.ñ /ô /ð /ð'ð 'ð 'ð2ð 2ð 2ðMð Mð MðCð Cð Cð Cð Cr;   r2  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚErrorHandlerXSRFTestc                 ó4   — dt           t          d¬¦  «        fgS )Nú/erroré¡  ©rº  )r#   rg   rB   s    r9   r?   z!ErrorHandlerXSRFTest.get_handlers`  s   € ð �<­¸#Ð)>Ñ)>Ô)>Ð?Ð@Ð@r;   c                 ó"   — t          d¬¦  «        S ©NT)Úxsrf_cookiesrÌ   rB   s    r9   r@   z#ErrorHandlerXSRFTest.get_app_kwargsf  ó   € Ý Ð&Ñ&Ô&Ð&r;   c                 ól   — |                       ddd¬¦  «        }|                      |j        d¦  «         d S )NrB  rÏ   r[  rÐ   rC  rƒ  rÙ   s     r9   Útest_error_xsrfz$ErrorHandlerXSRFTest.test_error_xsrfi  s7   € Ø—:’:˜h¨v¸B�:Ñ?Ô?ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   c                 ól   — |                       ddd¬¦  «        }|                      |j        d¦  «         d S )Nz/404rÏ   r[  rÐ   rj  rƒ  rÙ   s     r9   Útest_404_xsrfz"ErrorHandlerXSRFTest.test_404_xsrfm  s7   € Ø—:’:˜f¨V¸"�:Ñ=Ô=ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   N)rK   rL   rM   r?   r@   rJ  rL  rI   r;   r9   r@  r@  _  sS   € € € € € ðAð Að Að'ð 'ð 'ð-ð -ð -ð-ð -ð -ð -ð -r;   r@  c                   óT   — e Zd Z G d„ de¦  «        Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )ÚGzipTestCasec                   ó   — e Zd Zd„ ZdS )úGzipTestCase.Handlerc                 ó¬   — |                       d¦  «        D ]}|                      d|¦  «         Œ|                      ddt          j        z  z   ¦  «         d S )NÚvaryr�  zhello worldú!)r¿  r  r[   r/   Ú
MIN_LENGTH)rC   Úvs     r9   r\   zGzipTestCase.Handler.gett  s\   € Ø×'Ò'¨Ñ/Ô/ð +ð +�Ø—’ ¨Ñ*Ô*Ð*Ð*à�JŠJ�}¨Õ.AÔ.LÑ(LÑMÑNÔNÐNÐNÐNr;   Nr]   rI   r;   r9   rT   rP  s  s(   € € € € € ð	Oð 	Oð 	Oð 	Oð 	Or;   rT   c                 ó¤   — t          dt          j                             t          j                             t
          ¦  «        d¦  «        ¬¦  «        S )NTrÓ  )rž  rð  )rg   r3   r4   r5   r6   r7   rB   s    r9   r@   zGzipTestCase.get_app_kwargsz  s<   € ÝØ¥2¤7§<¢<µ´·²ÅÑ0IÔ0IÈ8Ñ#TÔ#Tð
ñ 
ô 
ð 	
r;   c                 ó”   — |                       |j                             d|j                             d¦  «        ¦  «        d¦  «         d S )NrŸ  zX-Consumed-Content-Encodingrž  )r}   rC  r\   rÙ   s     r9   Úassert_compressedzGzipTestCase.assert_compressed  sX   € ð 	×ÒØÔ× Ò Ø" HÔ$4×$8Ò$8Ð9VÑ$WÔ$Wñô ð ñ		
ô 	
ð 	
ð 	
ð 	
r;   c                 óœ   — |                       d¦  «        }|                      |¦  «         |                      |j        d         d¦  «         d S )NrR   r�  rœ  ©rÓ   rX  r}   rC  rÙ   s     r9   Ú	test_gzipzGzipTestCase.test_gzip‰  sJ   € Ø—:’:˜c‘?”?ˆØ×Ò˜xÑ(Ô(Ð(Ø×Ò˜Ô)¨&Ô1Ð3DÑEÔEÐEÐEÐEr;   c                 óœ   — |                       d¦  «        }|                      |¦  «         |                      |j        d         d¦  «         d S )Nró  r�  rœ  rZ  rÙ   s     r9   Útest_gzip_staticzGzipTestCase.test_gzip_staticŽ  sN   € ð —:’:˜mÑ,Ô,ˆØ×Ò˜xÑ(Ô(Ð(Ø×Ò˜Ô)¨&Ô1Ð3DÑEÔEÐEÐEÐEr;   c                 ó¬   — |                       dd¬¦  «        }|                      d|j        ¦  «         |                      |j        d         d¦  «         d S )NrR   F)Úuse_gziprŸ  r�  rœ  rþ  rÙ   s     r9   Útest_gzip_not_requestedz$GzipTestCase.test_gzip_not_requested•  sV   € Ø—:’:˜c¨E�:Ñ2Ô2ˆØ×ÒÐ+¨XÔ-=Ñ>Ô>Ð>Ø×Ò˜Ô)¨&Ô1Ð3DÑEÔEÐEÐEÐEr;   c                 óÚ   — |                       d¦  «        }|                      |¦  «         |                      d„ |j        d                              d¦  «        D ¦   «         ddg¦  «         d S )Nz/?vary=Accept-Languagec                 ó6   — g | ]}|                      ¦   «         ‘ŒS rI   ©Ústrip©r.  r¯  s     r9   r/  z:GzipTestCase.test_vary_already_present.<locals>.<listcomp>ž  ó    € ÐDÐDÐD˜1ˆQ�WŠW‰YŒYÐDÐDÐDr;   r�  ú,úAccept-Languagerœ  ©rÓ   rX  r}   rC  ÚsplitrÙ   s     r9   Útest_vary_already_presentz&GzipTestCase.test_vary_already_presentš  sz   € Ø—:’:Ð6Ñ7Ô7ˆØ×Ò˜xÑ(Ô(Ð(Ø×ÒØDÐD Ô 0°Ô 8× >Ò >¸sÑ CÔ CÐDÑDÔDØÐ 1Ð2ñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 óÚ   — |                       d¦  «        }|                      |¦  «         |                      d„ |j        d                              d¦  «        D ¦   «         g d¢¦  «         d S )Nz"/?vary=Accept-Language&vary=Cookiec                 ó6   — g | ]}|                      ¦   «         ‘ŒS rI   rc  re  s     r9   r/  zCGzipTestCase.test_vary_already_present_multiple.<locals>.<listcomp>§  rf  r;   r�  rg  )rh  rG  rœ  ri  rÙ   s     r9   Ú"test_vary_already_present_multiplez/GzipTestCase.test_vary_already_present_multiple¢  sz   € à—:’:ÐBÑCÔCˆØ×Ò˜xÑ(Ô(Ð(Ø×ÒØDÐD Ô 0°Ô 8× >Ò >¸sÑ CÔ CÐDÑDÔDØ<Ð<Ð<ñ	
ô 	
ð 	
ð 	
ð 	
r;   N)rK   rL   rM   r   rT   r@   rX  r[  r]  r`  rk  rn  rI   r;   r9   rN  rN  r  s¸   € € € € € ðOð Oð Oð Oð O�.ñ Oô Oð Oð
ð 
ð 
ð

ð 
ð 
ðFð Fð Fð
Fð Fð FðFð Fð Fð

ð 
ð 
ð
ð 
ð 
ð 
ð 
r;   rN  c                   ó<   — e Zd Z G d„ de¦  «        Zd„ Zd„ Zd„ ZdS )ÚPathArgsInPrepareTestc                   ó   — e Zd Zd„ Zd„ ZdS )úPathArgsInPrepareTest.Handlerc                 ób   — |                       t          | j        | j        ¬¦  «        ¦  «         d S )N©rº  rc  )r[   rg   r¹  Úpath_kwargsrB   s    r9   rê  z%PathArgsInPrepareTest.Handler.prepare®  s,   € Ø�JŠJ•t ¤¸Ô8HÐIÑIÔIÑJÔJÐJÐJÐJr;   c                 ó>   — |dk    sJ ‚|                       ¦   «          d S )Nrt   ©r±   rÁ   s     r9   r\   z!PathArgsInPrepareTest.Handler.get±  s    € Ø˜5’=�=�=�=Ø�KŠK‰MŒMˆMˆMˆMr;   N©rK   rL   rM   rê  r\   rI   r;   r9   rT   rr  ­  s5   € € € € € ð	Kð 	Kð 	Kð	ð 	ð 	ð 	ð 	r;   rT   c                 ó&   — d| j         fd| j         fgS )Nz	/pos/(.*)z/kw/(?P<path>.*)rS   rB   s    r9   r?   z"PathArgsInPrepareTest.get_handlersµ  s   € Ø˜dœlÐ+Ð.@À$Ä,Ð-OÐPÐPr;   c                 ó´   — |                       d¦  «        }|                     ¦   «          t          |j        ¦  «        }|                      |dgi dœ¦  «         d S )Nz/pos/foort   rt  ri  ©rC   rÚ   rV  s      r9   Útest_poszPathArgsInPrepareTest.test_pos¸  sZ   € Ø—:’:˜jÑ)Ô)ˆØ×ÒÑÔÐÝ˜8œ=Ñ)Ô)ˆØ×Ò˜¨¨¸2Ð>Ð>Ñ?Ô?Ð?Ð?Ð?r;   c                 ó¶   — |                       d¦  «        }|                     ¦   «          t          |j        ¦  «        }|                      |g ddidœ¦  «         d S )Nz/kw/foor4   rt   rt  ri  r{  s      r9   Útest_kwzPathArgsInPrepareTest.test_kw¾  s\   € Ø—:’:˜iÑ(Ô(ˆØ×ÒÑÔÐÝ˜8œ=Ñ)Ô)ˆØ×Ò˜¨°v¸u°oÐFÐFÑGÔGÐGÐGÐGr;   N)rK   rL   rM   r   rT   r?   r|  r~  rI   r;   r9   rp  rp  ¬  sv   € € € € € ðð ð ð ð �.ñ ô ð ðQð Qð Qð@ð @ð @ðHð Hð Hð Hð Hr;   rp  c                   ó0   — e Zd Z G d„ de¦  «        Zd„ ZdS )ÚClearAllCookiesTestc                   ó   — e Zd Zd„ ZdS )úClearAllCookiesTest.Handlerc                 óX   — |                       ¦   «          |                      d¦  «         d S ©NÚok)Úclear_all_cookiesr[   rB   s    r9   r\   zClearAllCookiesTest.Handler.getÇ  s,   € Ø×"Ò"Ñ$Ô$Ð$Ø�JŠJ�tÑÔÐÐÐr;   Nr]   rI   r;   r9   rT   r‚  Æ  s#   € € € € € ð	ð 	ð 	ð 	ð 	r;   rT   c                 ó>  — |                       dddi¬¦  «        }t          |j                             d¦  «        ¦  «        }|                      |d                              d¦  «        ¦  «         |                      |d                              d	¦  «        ¦  «         d S )
NrR   rG  zfoo=bar; baz=xyzzyrI  rA  r   zbaz="";rv   zfoo="";)rÓ   rB  rC  rD  r×   r  )rC   rÚ   Úset_cookiess      r9   Útest_clear_all_cookiesz*ClearAllCookiesTest.test_clear_all_cookiesË  s‰   € Ø—:’:˜c¨HÐ6JÐ+K�:ÑLÔLˆÝ˜XÔ-×6Ò6°|ÑDÔDÑEÔEˆà�Š˜ Aœ×1Ò1°)Ñ<Ô<Ñ=Ô=Ð=Ø�Š˜ Aœ×1Ò1°)Ñ<Ô<Ñ=Ô=Ð=Ð=Ð=r;   N)rK   rL   rM   r   rT   r‰  rI   r;   r9   r€  r€  Å  sM   € € € € € ðð ð ð ð �.ñ ô ð ð
>ð >ð >ð >ð >r;   r€  c                   ó   — e Zd ZdS )ÚPermissionErrorN©rK   rL   rM   rI   r;   r9   r‹  r‹  Ó  s   € € € € € Ø€Dr;   r‹  c                   ó<   — e Zd Z G d„ de¦  «        Zd„ Zd„ Zd„ ZdS )ÚExceptionHandlerTestc                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )úExceptionHandlerTest.Handlerc                 ó    — |                       d¦  «        }|dk    rt          dd¦  «        ‚|dk    rddz   d S |dk    rt          d	¦  «        ‚d S )
NÚexcr  éš  zno longer hereÚzerorv   r   Ú
permissionznot allowed)ræ  r!   r‹  )rC   r’  s     r9   r\   z ExceptionHandlerTest.Handler.getÙ  sf   € Ø×#Ò# EÑ*Ô*ˆCØ�fŠ}ˆ}Ý Ð%5Ñ6Ô6Ð6Ø˜’�Ø�A‘���Ø˜Ò$Ð$Ý% mÑ4Ô4Ð4ð %Ð$r;   c                 óÎ   — d|v rM|d         \  }}}t          |t          ¦  «        r,|                      d¦  «         |                      d¦  «         d S t	          j        | |fi |¤Ž d S )Nr¸  rm  r‹  )Ú
isinstancer‹  r  r[   r   r»  )rC   rº  rc  Útyprn   Útbs         r9   r»  z(ExceptionHandlerTest.Handler.write_errorâ  sz   € Ø˜VÐ#Ð#Ø!'¨
Ô!3‘��U˜BÝ˜e¥_Ñ5Ô5ð Ø—O’O CÑ(Ô(Ð(Ø—J’JÐ0Ñ1Ô1Ð1Ø�FÝÔ& t¨[ÐCÐC¸FÐCÐCÐCÐCÐCr;   c                 ó¢   — t          |t          ¦  «        r"t          j        d|j        d         ¦  «         d S t          j        | |||¦  «         d S )Nz&custom logging for PermissionError: %sr   )r—  r‹  r   Úwarningrº  r   Úlog_exception©rC   r˜  rn   r™  s       r9   rœ  z*ExceptionHandlerTest.Handler.log_exceptionë  sR   € Ý˜%¥Ñ1Ô1ð CÝ”Ð HÈ%Ì*ÐUVÌ-ÑXÔXÐXÐXÐXåÔ,¨T°3¸¸rÑBÔBÐBÐBÐBr;   N)rK   rL   rM   r\   r»  rœ  rI   r;   r9   rT   r�  Ø  sI   € € € € € ð	5ð 	5ð 	5ð	Dð 	Dð 	Dð	Cð 	Cð 	Cð 	Cð 	Cr;   rT   c                 óÂ   — t          t          d¦  «        5  |                      d¦  «        }|                      |j        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nz.*no longer herez
/?exc=httpr“  ro  rÙ   s     r9   Útest_http_errorz$ExceptionHandlerTest.test_http_errorñ  s¢   € õ •wÐ 2Ñ3Ô3ð 	1ð 	1Ø—z’z ,Ñ/Ô/ˆHØ×Ò˜Xœ]¨CÑ0Ô0Ð0ð	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ó   –1AÁAÁAc                 óÂ   — t          t          d¦  «        5  |                      d¦  «        }|                      |j        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NrÉ  z
/?exc=zeror…  ©r   r   rÓ   r}   rÕ   rÙ   s     r9   Útest_unknown_errorz'ExceptionHandlerTest.test_unknown_errorø  s    € å•wÐ 4Ñ5Ô5ð 	1ð 	1Ø—z’z ,Ñ/Ô/ˆHØ×Ò˜Xœ]¨CÑ0Ô0Ð0ð	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1ð 	1ð 	1r   c                 óÂ   — t          t          d¦  «        5  |                      d¦  «        }|                      |j        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nz/custom logging for PermissionError: not allowedz/?exc=permissionrm  r¢  rÙ   s     r9   Útest_known_errorz%ExceptionHandlerTest.test_known_errorþ  s£   € õ •wÐ QÑRÔRð 	1ð 	1Ø—z’zÐ"4Ñ5Ô5ˆHØ×Ò˜Xœ]¨CÑ0Ô0Ð0ð	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1ð 	1ð 	1r   N)rK   rL   rM   r   rT   rŸ  r£  r¥  rI   r;   r9   rŽ  rŽ  ×  ss   € € € € € ðCð Cð Cð Cð C�.ñ Cô Cð Cð21ð 1ð 1ð1ð 1ð 1ð1ð 1ð 1ð 1ð 1r;   rŽ  c                   ó0   — e Zd Z G d„ de¦  «        Zd„ ZdS )ÚBuggyLoggingTestc                   ó   — e Zd Zd„ Zd„ ZdS )úBuggyLoggingTest.Handlerc                 ó   — ddz   d S rÁ  rI   rB   s    r9   r\   zBuggyLoggingTest.Handler.get  ó   € Ø�‰EˆEˆEˆEr;   c                 ó   — ddz   d S rÁ  rI   r�  s       r9   rœ  z&BuggyLoggingTest.Handler.log_exception  r«  r;   N)rK   rL   rM   r\   rœ  rI   r;   r9   rT   r©    s2   € € € € € ð	ð 	ð 	ð	ð 	ð 	ð 	ð 	r;   rT   c                 óŒ   — t          t          d¦  «        5  |                      d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nz.*rR   )r   r   rÓ   rB   s    r9   Útest_buggy_log_exceptionz)BuggyLoggingTest.test_buggy_log_exception  s‡   € õ •w Ñ%Ô%ð 	ð 	Ø�JŠJ�s‰OŒOˆOð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	rÕ  N)rK   rL   rM   r   rT   r®  rI   r;   r9   r§  r§    sM   € € € € € ðð ð ð ð �.ñ ô ð ðð ð ð ð r;   r§  c                   óJ   ‡ — e Zd ZdZ G d„ de¦  «        Zd„ Zˆ fd„Zd„ Zˆ xZ	S )ÚUIMethodUIModuleTestz`Test that UI methods and modules are created correctly and
    associated with the handler.
    c                   ó   — e Zd Zd„ Zd„ ZdS )úUIMethodUIModuleTest.Handlerc                 ó0   — |                       d¦  «         d S rÄ   r  rB   s    r9   r\   z UIMethodUIModuleTest.Handler.get  s   € Ø�KŠK˜
Ñ#Ô#Ð#Ð#Ð#r;   c                 ó,   — |                       d¦  «        S )Nrn   )ræ  rB   s    r9   rn   z"UIMethodUIModuleTest.Handler.value  s   € Ø×$Ò$ WÑ-Ô-Ð-r;   N)rK   rL   rM   r\   rn   rI   r;   r9   rT   r²    s2   € € € € € ð	$ð 	$ð 	$ð	.ð 	.ð 	.ð 	.ð 	.r;   rT   c                 ó|   — d„ } G d„ dt           ¦  «        }t          ddi¦  «        }t          |d|id|i¬¦  «        S )Nc                 ó8   — d|› d|                       ¦   «         › d�S )NzIn my_ui_method(z) with handler value r¡  )rn   )r€   Úxs     r9   Úmy_ui_methodz9UIMethodUIModuleTest.get_app_kwargs.<locals>.my_ui_method"  s#   € ØP aÐPÐP¸g¿mºm¹o¼oÐPÐPÐPÐPr;   c                   ó   — e Zd Zd„ ZdS )ú5UIMethodUIModuleTest.get_app_kwargs.<locals>.MyModulec                 ó–   — d                      |t          j        t          j        | j        ¦  «                             ¦   «         ¦  «        S )Nz&In MyModule({}) with handler value {}.)r¤  ÚtypingÚcastr°  rT   r€   rn   )rC   r·  s     r9   rÅ   z<UIMethodUIModuleTest.get_app_kwargs.<locals>.MyModule.render&  s>   € Ø?×FÒFØÝ”KÕ 4Ô <¸d¼lÑKÔK×QÒQÑSÔSñô ð r;   N©rK   rL   rM   rÅ   rI   r;   r9   ÚMyModulerº  %  s#   € € € € € ðð ð ð ð r;   r¿  r¿   z1{{ my_ui_method(42) }} {% module MyModule(123) %}r¸  )rF  Ú
ui_methodsÚ
ui_modules©r*   r   rg   )rC   r¸  r¿  rI  s       r9   r@   z#UIMethodUIModuleTest.get_app_kwargs!  s„   € ð	Qð 	Qð 	Qð	ð 	ð 	ð 	ð 	•xñ 	ô 	ð 	õ ØÐLÐMñ
ô 
ˆõ Ø"Ø&¨Ð5Ø" HÐ-ð
ñ 
ô 
ð 	
r;   c                 ó„   •— t          ¦   «                              ¦   «          t          j                             ¦   «          d S r2   rK  rP  s    €r9   rM  zUIMethodUIModuleTest.tearDown5  s4   ø€ Ý‰Œ×ÒÑÔÐåÔ(×.Ò.Ñ0Ô0Ð0Ð0Ð0r;   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )Nz/?value=asdfsV   In my_ui_method(42) with handler value asdf. In MyModule(123) with handler value asdf.rK  rÙ   s     r9   Útest_ui_methodz#UIMethodUIModuleTest.test_ui_method:  s?   € Ø—:’:˜nÑ-Ô-ˆØ×ÒØŒMð9ñ	
ô 	
ð 	
ð 	
ð 	
r;   )
rK   rL   rM   rN   r   rT   r@   rM  rÅ  r¢  r£  s   @r9   r°  r°    sŠ   ø€ € € € € ðð ð.ð .ð .ð .ð .�.ñ .ô .ð .ð
ð 
ð 
ð(1ð 1ð 1ð 1ð 1ð

ð 
ð 
ð 
ð 
ð 
ð 
r;   r°  c                   ó0   — e Zd Z G d„ de¦  «        Zd„ ZdS )ÚGetArgumentErrorTestc                   ó   — e Zd Zd„ ZdS )úGetArgumentErrorTest.Handlerc                 óÐ   — 	 |                       d¦  «         |                      i ¦  «         d S # t          $ r-}|                      |j        |j        dœ¦  «         Y d }~d S d }~ww xY w)Nrt   ©Úarg_nameÚlog_message)ræ  r[   r"   rÌ  rÍ  r)  s     r9   r\   z GetArgumentErrorTest.Handler.getE  s‚   € ðSØ×!Ò! %Ñ(Ô(Ð(Ø—
’
˜2‘”���øÝ'ð Sð Sð SØ—
’
¨¬
À1Ä=ÐQÐQÑRÔRÐRÐRÐRÐRÐRÐRÐRøøøøðSøøøs   ‚*. ®
A%¸"A Á A%Nr]   rI   r;   r9   rT   rÉ  D  s(   € € € € € ð	Sð 	Sð 	Sð 	Sð 	Sr;   rT   c                 ó†   — |                       d¦  «        }|                      t          |j        ¦  «        dddœ¦  «         d S )NrR   rt   zMissing argument foorË  )rÓ   r}   r   rÒ   rÙ   s     r9   Útest_catch_errorz%GetArgumentErrorTest.test_catch_errorL  sL   € Ø—:’:˜c‘?”?ˆØ×ÒÝ˜œÑ&Ô&ØÐ/EÐFÐFñ	
ô 	
ð 	
ð 	
ð 	
r;   N)rK   rL   rM   r   rT   rÏ  rI   r;   r9   rÇ  rÇ  C  sU   € € € € € ðSð Sð Sð Sð S�.ñ Sô Sð Sð
ð 
ð 
ð 
ð 
r;   rÇ  c                   ó0   — e Zd Z G d„ de¦  «        Zd„ ZdS )ÚSetLazyPropertiesTestc                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )úSetLazyPropertiesTest.Handlerc                 óF   — d| _         t          j        d¦  «        | _        d S )NÚBenr  )Úcurrent_userr   r\   rB   s    r9   rê  z%SetLazyPropertiesTest.Handler.prepareV  s   € Ø %ˆDÔÝ œ* WÑ-Ô-ˆDŒKˆKˆKr;   c                 ó   — t          ¦   «         ‚r2   rF   rB   s    r9   Úget_user_localez-SetLazyPropertiesTest.Handler.get_user_localeZ  ó   € Ý%Ñ'Ô'Ð'r;   c                 ó   — t          ¦   «         ‚r2   rF   rB   s    r9   Úget_current_userz.SetLazyPropertiesTest.Handler.get_current_user]  rÙ  r;   c                 ó\   — |                       d| j        › d| j        j        › d�¦  «         d S )NzHello z (r  )r[   rÖ  r   rÕ   rB   s    r9   r\   z!SetLazyPropertiesTest.Handler.get`  s6   € Ø�JŠJÐH Ô 1ÐHÐH°T´[Ô5EÐHÐHÐHÑIÔIÐIÐIÐIr;   N)rK   rL   rM   rê  rØ  rÛ  r\   rI   r;   r9   rT   rÓ  U  sU   € € € € € ð	.ð 	.ð 	.ð	(ð 	(ð 	(ð	(ð 	(ð 	(ð	Jð 	Jð 	Jð 	Jð 	Jr;   rT   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )NrR   s   Hello Ben (en_US)rK  rÙ   s     r9   Útest_set_propertiesz)SetLazyPropertiesTest.test_set_propertiesc  s2   € ð —:’:˜c‘?”?ˆØ×Ò˜œÐ(<Ñ=Ô=Ð=Ð=Ð=r;   N)rK   rL   rM   r   rT   rÞ  rI   r;   r9   rÑ  rÑ  T  sU   € € € € € ðJð Jð Jð Jð J�.ñ Jô Jð Jð>ð >ð >ð >ð >r;   rÑ  c                   ón   ‡ — e Zd Zd„ Zˆ fd„Zd„ Z ej        d¦  «        d„ ¦   «         Zd„ Z	d„ Z
d„ Zˆ xZS )	ÚGetCurrentUserTestc                 óž   —  G d„ dt           ¦  «        } G d„ dt           ¦  «        }t          ddddd	œ¦  «        }t          |||d
œ¬¦  «        S )Nc                   ó   — e Zd Zd„ ZdS )ú<GetCurrentUserTest.get_app_kwargs.<locals>.WithoutUserModulec                 ó   — dS )Nr[  rI   rB   s    r9   rÅ   zCGetCurrentUserTest.get_app_kwargs.<locals>.WithoutUserModule.renderm  s   € Ø�rr;   Nr¾  rI   r;   r9   ÚWithoutUserModulerã  l  s#   € € € € € ðð ð ð ð r;   rå  c                   ó   — e Zd Zd„ ZdS )ú9GetCurrentUserTest.get_app_kwargs.<locals>.WithUserModulec                 ó*   — t          | j        ¦  «        S r2   )rä   rÖ  rB   s    r9   rÅ   z@GetCurrentUserTest.get_app_kwargs.<locals>.WithUserModule.renderq  s   € Ý˜4Ô,Ñ-Ô-Ð-r;   Nr¾  rI   r;   r9   ÚWithUserModulerç  p  s#   € € € € € ð.ð .ð .ð .ð .r;   ré  r[  z{{ current_user }}z {% module WithoutUserModule() %}z{% module WithUserModule() %})úwithout_user.htmlúwith_user.htmlúwithout_user_module.htmlúwith_user_module.html)ré  rå  )rF  rÁ  rÂ  )rC   rå  ré  rI  s       r9   r@   z!GetCurrentUserTest.get_app_kwargsk  s©   € ð	ð 	ð 	ð 	ð 	¥ñ 	ô 	ð 	ð	.ð 	.ð 	.ð 	.ð 	.�Xñ 	.ô 	.ð 	.õ à%'Ø"6Ø,NØ)Hð	ð ñ
ô 
ˆõ Ø"à"0Ø%6ðð ð
ñ 
ô 
ð 	
r;   c                 ó„   •— t          ¦   «                              ¦   «          t          j                             ¦   «          d S r2   rK  rP  s    €r9   rM  zGetCurrentUserTest.tearDown„  rR  r;   c                 óÐ   —  G d„ dt           ¦  «        } G d„ d|¦  «        } G d„ d|¦  «        } G d„ d|¦  «        } G d	„ d
|¦  «        } G d„ d|¦  «        }d|fd|fd|fd|fgS )Nc                   ó   — e Zd Zd„ Zd„ ZdS )ú;GetCurrentUserTest.get_handlers.<locals>.CurrentUserHandlerc                 ó   — d| _         d S )NF©Úhas_loaded_current_userrB   s    r9   rê  zCGetCurrentUserTest.get_handlers.<locals>.CurrentUserHandler.prepareŠ  s   € Ø/4�Ô,Ð,Ð,r;   c                 ó   — d| _         dS )NTr[  ró  rB   s    r9   rÛ  zLGetCurrentUserTest.get_handlers.<locals>.CurrentUserHandler.get_current_user�  s   € Ø/3�Ô,Ø�rr;   N)rK   rL   rM   rê  rÛ  rI   r;   r9   ÚCurrentUserHandlerrñ  ‰  s2   € € € € € ð5ð 5ð 5ðð ð ð ð r;   rö  c                   ó   — e Zd Zd„ ZdS )ú;GetCurrentUserTest.get_handlers.<locals>.WithoutUserHandlerc                 ó~   — |                       d¦  «         |                      t          | j        ¦  «        ¦  «         d S )Nrê  ©Úrender_stringr±   rä   rô  rB   s    r9   r\   z?GetCurrentUserTest.get_handlers.<locals>.WithoutUserHandler.get’  s:   € Ø×"Ò"Ð#6Ñ7Ô7Ð7Ø—’�C Ô <Ñ=Ô=Ñ>Ô>Ð>Ð>Ð>r;   Nr]   rI   r;   r9   ÚWithoutUserHandlerrø  ‘  ó#   € € € € € ð?ð ?ð ?ð ?ð ?r;   rü  c                   ó   — e Zd Zd„ ZdS )ú8GetCurrentUserTest.get_handlers.<locals>.WithUserHandlerc                 ó~   — |                       d¦  «         |                      t          | j        ¦  «        ¦  «         d S )Nrë  rú  rB   s    r9   r\   z<GetCurrentUserTest.get_handlers.<locals>.WithUserHandler.get—  s:   € Ø×"Ò"Ð#3Ñ4Ô4Ð4Ø—’�C Ô <Ñ=Ô=Ñ>Ô>Ð>Ð>Ð>r;   Nr]   rI   r;   r9   ÚWithUserHandlerrÿ  –  rý  r;   r  c                   ó   — e Zd Zd„ ZdS )úAGetCurrentUserTest.get_handlers.<locals>.CurrentUserModuleHandlerc                 ó   — | j         S r2   )ÚuirB   s    r9   Úget_template_namespacezXGetCurrentUserTest.get_handlers.<locals>.CurrentUserModuleHandler.get_template_namespaceœ  s   € ð ”w�r;   N)rK   rL   rM   r  rI   r;   r9   ÚCurrentUserModuleHandlerr  ›  s#   € € € € € ðð ð ð ð r;   r  c                   ó   — e Zd Zd„ ZdS )úAGetCurrentUserTest.get_handlers.<locals>.WithoutUserModuleHandlerc                 ó~   — |                       d¦  «         |                      t          | j        ¦  «        ¦  «         d S )Nrì  rú  rB   s    r9   r\   zEGetCurrentUserTest.get_handlers.<locals>.WithoutUserModuleHandler.get£  s:   € Ø×"Ò"Ð#=Ñ>Ô>Ð>Ø—’�C Ô <Ñ=Ô=Ñ>Ô>Ð>Ð>Ð>r;   Nr]   rI   r;   r9   ÚWithoutUserModuleHandlerr	  ¢  rý  r;   r  c                   ó   — e Zd Zd„ ZdS )ú>GetCurrentUserTest.get_handlers.<locals>.WithUserModuleHandlerc                 ó~   — |                       d¦  «         |                      t          | j        ¦  «        ¦  «         d S )Nrí  rú  rB   s    r9   r\   zBGetCurrentUserTest.get_handlers.<locals>.WithUserModuleHandler.get¨  s:   € Ø×"Ò"Ð#:Ñ;Ô;Ð;Ø—’�C Ô <Ñ=Ô=Ñ>Ô>Ð>Ð>Ð>r;   Nr]   rI   r;   r9   ÚWithUserModuleHandlerr  §  rý  r;   r  ú/without_userú
/with_userú/without_user_moduleú/with_user_modulerÉ   )rC   rö  rü  r  r  r  r  s          r9   r?   zGetCurrentUserTest.get_handlersˆ  s2  € ð	ð 	ð 	ð 	ð 	¥ñ 	ô 	ð 	ð	?ð 	?ð 	?ð 	?ð 	?Ð!3ñ 	?ô 	?ð 	?ð
	?ð 	?ð 	?ð 	?ð 	?Ð0ñ 	?ô 	?ð 	?ð
	ð 	ð 	ð 	ð 	Ð'9ñ 	ô 	ð 	ð	?ð 	?ð 	?ð 	?ð 	?Ð'?ñ 	?ô 	?ð 	?ð
	?ð 	?ð 	?ð 	?ð 	?Ð$<ñ 	?ô 	?ð 	?ð Ð0Ð1Ø˜?Ð+Ø#Ð%=Ð>Ø Ð"7Ð8ð	
ð 	
r;   z	needs fixc                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )Nr  ó   FalserK  rÙ   s     r9   Útest_get_current_user_is_lazyz0GetCurrentUserTest.test_get_current_user_is_lazy³  s3   € ð —:’:˜oÑ.Ô.ˆØ×Ò˜œ¨Ñ1Ô1Ð1Ð1Ð1r;   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )Nr  ó   TruerK  rÙ   s     r9   Útest_get_current_user_worksz.GetCurrentUserTest.test_get_current_user_works¹  s1   € Ø—:’:˜lÑ+Ô+ˆØ×Ò˜œ¨Ñ0Ô0Ð0Ð0Ð0r;   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )Nr  r  rK  rÙ   s     r9   Ú,test_get_current_user_from_ui_module_is_lazyz?GetCurrentUserTest.test_get_current_user_from_ui_module_is_lazy½  s2   € Ø—:’:Ð4Ñ5Ô5ˆØ×Ò˜œ¨Ñ1Ô1Ð1Ð1Ð1r;   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )Nr  r  rK  rÙ   s     r9   Ú*test_get_current_user_from_ui_module_worksz=GetCurrentUserTest.test_get_current_user_from_ui_module_worksÁ  s2   € Ø—:’:Ð1Ñ2Ô2ˆØ×Ò˜œ¨Ñ0Ô0Ð0Ð0Ð0r;   )rK   rL   rM   r@   rM  r?   rt  Úskipr  r  r  r  r¢  r£  s   @r9   rà  rà  j  s¬   ø€ € € € € ð
ð 
ð 
ð21ð 1ð 1ð 1ð 1ð)
ð )
ð )
ðV €X„]�;ÑÔð2ð 2ñ  Ôð2ð
1ð 1ð 1ð2ð 2ð 2ð1ð 1ð 1ð 1ð 1ð 1ð 1r;   rà  c                   ó0   — e Zd Z G d„ de¦  «        Zd„ ZdS )ÚUnimplementedHTTPMethodsTestc                   ó   — e Zd ZdS )ú$UnimplementedHTTPMethodsTest.HandlerNrŒ  rI   r;   r9   rT   r"  Ç  s   € € € € € Øˆr;   rT   c                 óä   — dD ]4}|                       d|¬¦  «        }|                      |j        d¦  «         Œ5dD ]5}|                       d|d¬¦  «        }|                      |j        d¦  «         Œ6d S )N)r  r  ÚDELETEÚOPTIONSrR   ra  é•  ©rÏ   ÚPUTr;   rÐ   rƒ  )rC   rÑ   rÚ   s      r9   Ú#test_unimplemented_standard_methodsz@UnimplementedHTTPMethodsTest.test_unimplemented_standard_methodsÊ  sŒ   € Ø:ð 	1ð 	1ˆFØ—z’z #¨f�zÑ5Ô5ˆHØ×Ò˜Xœ]¨CÑ0Ô0Ð0Ð0Ø%ð 	1ð 	1ˆFØ—z’z #¨f¸3�zÑ?Ô?ˆHØ×Ò˜Xœ]¨CÑ0Ô0Ð0Ð0ð	1ð 	1r;   N)rK   rL   rM   r   rT   r)  rI   r;   r9   r   r   Æ  sM   € € € € € ðð ð ð ð �.ñ ô ð ð1ð 1ð 1ð 1ð 1r;   r   c                   ó6   — e Zd Z G d„ de¦  «        Zd„ Zd„ ZdS )Ú#UnimplementedNonStandardMethodsTestc                   ó   — e Zd Zd„ ZdS )ú+UnimplementedNonStandardMethodsTest.Handlerc                 ó0   — |                       d¦  «         d S ©NÚotherrZ   rB   s    r9   r0  z1UnimplementedNonStandardMethodsTest.Handler.otherÕ  s   € ð �JŠJ�wÑÔÐÐÐr;   N)rK   rL   rM   r0  rI   r;   r9   rT   r-  Ô  s#   € € € € € ð	 ð 	 ð 	 ð 	 ð 	 r;   rT   c                 ól   — |                       ddd¬¦  «        }|                      |j        d¦  «         d S )NrR   ÚPATCHr;   rÐ   r&  rƒ  rÙ   s     r9   Útest_unimplemented_patchz<UnimplementedNonStandardMethodsTest.test_unimplemented_patchÚ  s9   € ð —:’:˜c¨'¸�:Ñ<Ô<ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   c                 ól   — |                       ddd¬¦  «        }|                      |j        d¦  «         d S )NrR   ÚOTHERT©rÑ   Úallow_nonstandard_methodsr&  rƒ  rÙ   s     r9   Útest_unimplemented_otherz<UnimplementedNonStandardMethodsTest.test_unimplemented_otherà  s7   € Ø—:’:˜c¨'ÈT�:ÑRÔRˆØ×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   N)rK   rL   rM   r   rT   r3  r8  rI   r;   r9   r+  r+  Ó  s\   € € € € € ð ð  ð  ð  ð  �.ñ  ô  ð  ð-ð -ð -ð-ð -ð -ð -ð -r;   r+  c                   ó0   — e Zd Z G d„ de¦  «        Zd„ ZdS )ÚAllHTTPMethodsTestc                   ó(   — e Zd Zd„ ZexZxZxZxZZdS )úAllHTTPMethodsTest.Handlerc                 ó`   — | j         j        €J ‚|                      | j         j        ¦  «         d S r2   )r»  rÑ   r[   rB   s    r9   rÑ   z!AllHTTPMethodsTest.Handler.methodç  s0   € Ø”<Ô&Ð2Ð2Ð2Ø�JŠJ�t”|Ô*Ñ+Ô+Ð+Ð+Ð+r;   N)	rK   rL   rM   rÑ   r\   ÚdeleteÚoptionsr¸   ÚputrI   r;   r9   rT   r<  æ  s8   € € € € € ð	,ð 	,ð 	,ð /5Ð4ˆÐ4ˆfÐ4�wÐ4 ¨¨¨r;   rT   c                 ó|  — |                       dd¬¦  «        }|                      |j        d¦  «         dD ]A}|                       d|¬¦  «        }|                      |j        t          |¦  «        ¦  «         ŒBdD ]B}|                       d|d¬¦  «        }|                      |j        t          |¦  «        ¦  «         ŒCd S )NrR   r  ra  r;   )r  r$  r%  r'  rÐ   )rÓ   r}   rÒ   r   )rC   rÚ   rÑ   s      r9   Útest_standard_methodsz(AllHTTPMethodsTest.test_standard_methodsí  sÅ   € Ø—:’:˜c¨&�:Ñ1Ô1ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø2ð 	:ð 	:ˆFØ—z’z #¨f�zÑ5Ô5ˆHØ×Ò˜Xœ]­D°©L¬LÑ9Ô9Ð9Ð9Ø%ð 	:ð 	:ˆFØ—z’z #¨f¸3�zÑ?Ô?ˆHØ×Ò˜Xœ]­D°©L¬LÑ9Ô9Ð9Ð9ð	:ð 	:r;   N)rK   rL   rM   r   rT   rB  rI   r;   r9   r:  r:  å  sM   € € € € € ð5ð 5ð 5ð 5ð 5�.ñ 5ô 5ð 5ð:ð :ð :ð :ð :r;   r:  c                   ó6   — e Zd Z G d„ de¦  «        Zd„ Zd„ ZdS )ÚPatchMethodTestc                   ó.   — e Zd Zej        dz   Zd„ Zd„ ZdS )úPatchMethodTest.Handler)r5  c                 ó0   — |                       d¦  «         d S )NÚpatchrZ   rB   s    r9   rH  zPatchMethodTest.Handler.patchþ  r+  r;   c                 ó0   — |                       d¦  «         d S r/  rZ   rB   s    r9   r0  zPatchMethodTest.Handler.other	  r+  r;   N)rK   rL   rM   r   ÚSUPPORTED_METHODSrH  r0  rI   r;   r9   rT   rF  ù  sF   € € € € € Ø*Ô<ð @
ñ 
Ðð	 ð 	 ð 	 ð	 ð 	 ð 	 ð 	 ð 	 r;   rT   c                 ól   — |                       ddd¬¦  «        }|                      |j        d¦  «         d S )NrR   r2  r;   rÐ   s   patchrK  rÙ   s     r9   Ú
test_patchzPatchMethodTest.test_patch	  s7   € Ø—:’:˜c¨'¸�:Ñ<Ô<ˆØ×Ò˜œ¨Ñ1Ô1Ð1Ð1Ð1r;   c                 ól   — |                       ddd¬¦  «        }|                      |j        d¦  «         d S )NrR   r5  Tr6  s   otherrK  rÙ   s     r9   Ú
test_otherzPatchMethodTest.test_other	  s7   € Ø—:’:˜c¨'ÈT�:ÑRÔRˆØ×Ò˜œ¨Ñ1Ô1Ð1Ð1Ð1r;   N)rK   rL   rM   r   rT   rL  rN  rI   r;   r9   rD  rD  ø  s\   € € € € € ð	 ð 	 ð 	 ð 	 ð 	 �.ñ 	 ô 	 ð 	 ð2ð 2ð 2ð2ð 2ð 2ð 2ð 2r;   rD  c                   ó0   — e Zd Z G d„ de¦  «        Zd„ ZdS )ÚFinishInPrepareTestc                   ó   — e Zd Zd„ Zd„ ZdS )úFinishInPrepareTest.Handlerc                 ó0   — |                       d¦  «         d S )NrØ   rw  rB   s    r9   rê  z#FinishInPrepareTest.Handler.prepare	  s   € Ø�KŠK˜ÑÔÐÐÐr;   c                 ó    — t          d¦  «        ‚)Nzshould not reach this methodrÃ  rB   s    r9   r\   zFinishInPrepareTest.Handler.get	  s   € õ Ð:Ñ;Ô;Ð;r;   Nrx  rI   r;   r9   rT   rR  	  s2   € € € € € ð	 ð 	 ð 	 ð	<ð 	<ð 	<ð 	<ð 	<r;   rT   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )NrR   s   donerK  rÙ   s     r9   Útest_finish_in_preparez*FinishInPrepareTest.test_finish_in_prepare	  s/   € Ø—:’:˜c‘?”?ˆØ×Ò˜œ¨Ñ0Ô0Ð0Ð0Ð0r;   N)rK   rL   rM   r   rT   rV  rI   r;   r9   rP  rP  	  sM   € € € € € ð<ð <ð <ð <ð <�.ñ <ô <ð <ð1ð 1ð 1ð 1ð 1r;   rP  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚDefault404Testc                 ó   — dt           fgS ©Nrõ   rÉ   rB   s    r9   r?   zDefault404Test.get_handlers	  s   € à�Ð(Ð)Ð)r;   c                 óœ   — |                       d¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         d S )NrR   rj  sE   <html><title>404: Not Found</title><body>404: Not Found</body></html>r‚  rÙ   s     r9   Útest_404zDefault404Test.test_404"	  sU   € Ø—:’:˜c‘?”?ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×ÒØŒMð2ñ	
ô 	
ð 	
ð 	
ð 	
r;   N)rK   rL   rM   r?   r\  rI   r;   r9   rX  rX  	  s2   € € € € € ð*ð *ð *ð
ð 
ð 
ð 
ð 
r;   rX  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚCustom404Testc                 ó   — dt           fgS rZ  rÉ   rB   s    r9   r?   zCustom404Test.get_handlers-	  ó   € Ø�Ð(Ð)Ð)r;   c                 óH   —  G d„ dt           ¦  «        }t          |¬¦  «        S )Nc                   ó   — e Zd Zd„ ZdS )ú6Custom404Test.get_app_kwargs.<locals>.Custom404Handlerc                 óZ   — |                       d¦  «         |                      d¦  «         d S )Nrj  zcustom 404 response)r  r[   rB   s    r9   r\   z:Custom404Test.get_app_kwargs.<locals>.Custom404Handler.get2	  s-   € Ø—’ Ñ$Ô$Ð$Ø—
’
Ð0Ñ1Ô1Ð1Ð1Ð1r;   Nr]   rI   r;   r9   ÚCustom404Handlerrc  1	  s#   € € € € € ð2ð 2ð 2ð 2ð 2r;   re  )Údefault_handler_class)r   rg   )rC   re  s     r9   r@   zCustom404Test.get_app_kwargs0	  s@   € ð	2ð 	2ð 	2ð 	2ð 	2�~ñ 	2ô 	2ð 	2õ
 Ð*:Ð;Ñ;Ô;Ð;r;   c                 óœ   — |                       d¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         d S )NrR   rj  s   custom 404 responser‚  rÙ   s     r9   r\  zCustom404Test.test_4048	  sH   € Ø—:’:˜c‘?”?ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜œÐ(>Ñ?Ô?Ð?Ð?Ð?r;   N)rK   rL   rM   r?   r@   r\  rI   r;   r9   r^  r^  ,	  sF   € € € € € ð*ð *ð *ð<ð <ð <ð@ð @ð @ð @ð @r;   r^  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚDefaultHandlerArgumentsTestc                 ó   — dt           fgS rZ  rÉ   rB   s    r9   r?   z(DefaultHandlerArgumentsTest.get_handlers?	  r`  r;   c                 óJ   — t          t          t          d¬¦  «        ¬¦  «        S )Nrm  rD  )rf  Údefault_handler_args)rg   r#   rB   s    r9   r@   z*DefaultHandlerArgumentsTest.get_app_kwargsB	  s*   € ÝÝ".Ý!%°#Ð!6Ñ!6Ô!6ð
ñ 
ô 
ð 	
r;   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )NrR   rm  rƒ  rÙ   s     r9   Útest_403z$DefaultHandlerArgumentsTest.test_403H	  s/   € Ø—:’:˜c‘?”?ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   N)rK   rL   rM   r?   r@   rn  rI   r;   r9   ri  ri  >	  sA   € € € € € ð*ð *ð *ð
ð 
ð 
ð-ð -ð -ð -ð -r;   ri  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚHandlerByNameTestc                 ó6   — dt           fdt          dd¦  «        gS )Nú/hello1)ú/hello2ú"tornado.test.web_test.HelloHandlerú/hello3rt  )rV   r%   rB   s    r9   r?   zHandlerByNameTest.get_handlersN	  s'   € ð �Ð%Ø=Ý�	Ð?Ñ@Ô@ð
ð 	
r;   c                 ó&  — |                       d¦  «        }|                      |j        d¦  «         |                       d¦  «        }|                      |j        d¦  «         |                       d¦  «        }|                      |j        d¦  «         d S )Nrr  r�  rs  ru  rK  ©rC   Úresps     r9   Útest_handler_by_namez&HandlerByNameTest.test_handler_by_nameV	  sƒ   € Ø�zŠz˜)Ñ$Ô$ˆØ×Ò˜œ HÑ-Ô-Ð-Ø�zŠz˜)Ñ$Ô$ˆØ×Ò˜œ HÑ-Ô-Ð-Ø�zŠz˜)Ñ$Ô$ˆØ×Ò˜œ HÑ-Ô-Ð-Ð-Ð-r;   N)rK   rL   rM   r?   ry  rI   r;   r9   rp  rp  M	  s2   € € € € € ð
ð 
ð 
ð.ð .ð .ð .ð .r;   rp  c                   ór   — e Zd Zd„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	dS )ÚStreamingRequestBodyTestc                 ó  — t            G d„ dt          ¦  «        ¦   «         }t            G d„ dt          ¦  «        ¦   «         }t            G d„ dt          ¦  «        ¦   «         }d|t          | ¬¦  «        fd	|fd
|t          | ¬¦  «        fgS )Nc                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )úCStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandlerc                 ó   — || _         d S r2   rº   r³   s     r9   r�  zNStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.initializec	  ó   € Ø �”	�	�	r;   c                 óD   — | j         j                             d ¦  «         d S r2   )r´   ÚpreparedÚ
set_resultrB   s    r9   rê  zKStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.preparef	  s!   € Ø”	Ô"×-Ò-¨dÑ3Ô3Ð3Ð3Ð3r;   c                 óD   — | j         j                             |¦  «         d S r2   )r´   rV  rƒ  ©rC   rV  s     r9   Údata_receivedzQStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.data_receivedi	  s    € Ø”	”×)Ò)¨$Ñ/Ô/Ð/Ð/Ð/r;   c                 ón   — | j         j                             d ¦  «         |                      i ¦  «         d S r2   )r´   Úfinishedrƒ  r[   rB   s    r9   r\   zGStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.getl	  s.   € Ø”	Ô"×-Ò-¨dÑ3Ô3Ð3Ø—
’
˜2‘”���r;   N)rK   rL   rM   r�  rê  r†  r\   rI   r;   r9   ÚStreamingBodyHandlerr~  a	  sP   € € € € € ð!ð !ð !ð4ð 4ð 4ð0ð 0ð 0ðð ð ð ð r;   r‰  c                   ó   — e Zd Zd„ ZdS )úAStreamingRequestBodyTest.get_handlers.<locals>.EarlyReturnHandlerc                 ó    — t          d¦  «        ‚)Né‘  r6  rB   s    r9   rê  zIStreamingRequestBodyTest.get_handlers.<locals>.EarlyReturnHandler.preparer	  s   € õ   ‘n”nÐ$r;   Nr;  rI   r;   r9   ÚEarlyReturnHandlerr‹  p	  s#   € € € € € ð%ð %ð %ð %ð %r;   rŽ  c                   ó$   ‡ — e Zd Zd„ Zˆ fd„Zˆ xZS )úDStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandlerc                 ó   — || _         d S r2   rº   r³   s     r9   r�  zOStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandler.initializey	  r€  r;   c                 ó†   •— t          ¦   «                              ¦   «          | j        j                             d ¦  «         d S r2   )rL  rœ  r´   Úclose_futurerƒ  rP  s    €r9   rœ  zXStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandler.on_connection_close|	  s8   ø€ Ý‘”×+Ò+Ñ-Ô-Ð-Ø”	Ô&×1Ò1°$Ñ7Ô7Ð7Ð7Ð7r;   )rK   rL   rM   r�  rœ  r¢  r£  s   @r9   ÚCloseDetectionHandlerr�  w	  sG   ø€ € € € € ð!ð !ð !ð8ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8r;   r”  z/stream_bodyrº   z/early_returnz/close_detection)r,   r   rg   )rC   r‰  rŽ  r”  s       r9   r?   z%StreamingRequestBodyTest.get_handlers`	  sà   € Ý	ð	ð 	ð 	ð 	ð 	¥>ñ 	ô 	ñ 
Ô	ð	õ 
ð	%ð 	%ð 	%ð 	%ð 	%¥ñ 	%ô 	%ñ 
Ô	ð	%õ 
ð	8ð 	8ð 	8ð 	8ð 	8¥Nñ 	8ô 	8ñ 
Ô	ð	8ð Ð1µ4¸T°?±?´?ÐCØÐ0Ð1ØÐ!6½À$¸¹¼ÐHð
ð 	
r;   c                 óX  — t          j         t           j        t           j        d¦  «        }|                     d|                      ¦   «         f¦  «         t          |¦  «        }|                     d|z   dz   ¦  «         |r|                     d¦  «         |                     d¦  «         |S )Nr   r¡  s   GET s    HTTP/1.1
Host: 127.0.0.1
s   Connection: close
s   Transfer-Encoding: chunked

)r¦  r§  r¨  r©  rª  r   r[   )rC   r%   Úconnection_closer¯  r«  s        r9   r©  z StreamingRequestBodyTest.connect†	  s—   € åŒM�&œ.­&Ô*<¸aÑ@Ô@ˆØ	�	Š	�; × 2Ò 2Ñ 4Ô 4Ð5Ñ6Ô6Ð6Ý˜!‘”ˆØ�Š�W˜s‘]Ð%HÑHÑIÔIÐIØð 	3Ø�LŠLÐ1Ñ2Ô2Ð2Ø�ŠÐ:Ñ;Ô;Ð;Øˆr;   c              #   ó’  K  — t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        |                      dd¬¦  «        }| j        V — |                     d¦  «         | j        V —}|                      |d¦  «         t          ¦   «         | _        |                     d¦  «         | j        V —}|                      |d¦  «         |                     d¦  «         | j        V — |                     ¦   «         V —}|                      | 	                    d	¦  «        ¦  «         | 
                    ¦   «          d S )
Ns   /stream_bodyT©r–  ó	   4
asdf
s   asdfs	   4
qwer
s   qwers   0

s   {})r   r‚  rV  rˆ  r©  r[   r}   Úread_until_closer×   r†  r²  ©rC   r«  rV  s      r9   Útest_streaming_bodyz,StreamingRequestBodyTest.test_streaming_body‘	  s#  è è € å™œˆŒÝ‘H”HˆŒ	Ý™œˆŒà—’˜oÀ�ÑEÔEˆØŒmÐÐÐØ�ŠÐ%Ñ&Ô&Ð&à”YˆˆˆØ×Ò˜˜wÑ'Ô'Ð'Ý‘H”HˆŒ	Ø�ŠÐ%Ñ&Ô&Ð&Ø”YˆˆˆØ×Ò˜˜wÑ'Ô'Ð'Ø�Š�\Ñ"Ô"Ð"ØŒmÐÐÐØ×,Ò,Ñ.Ô.Ð.Ð.ˆà�Š˜Ÿš eÑ,Ô,Ñ-Ô-Ð-Ø�Š‰Œˆˆˆr;   c              #   ó´   K  — |                       dd¬¦  «        }|                     ¦   «         V —}|                      |                     d¦  «        ¦  «         d S )Nó   /early_returnFr˜  ó   HTTP/1.1 401)r©  rš  r×   r  r›  s      r9   Útest_early_returnz*StreamingRequestBodyTest.test_early_return¨	  sW   è è € à—’Ð.À�ÑGÔGˆØ×,Ò,Ñ.Ô.Ð.Ð.ˆØ�Š˜Ÿš¨Ñ8Ô8Ñ9Ô9Ð9Ð9Ð9r;   c              #   óÞ   K  — |                       dd¬¦  «        }|                     d¦  «         |                     ¦   «         V —}|                      |                     d¦  «        ¦  «         d S )Nrž  Fr˜  r™  rŸ  )r©  r[   rš  r×   r  r›  s      r9   Útest_early_return_with_dataz4StreamingRequestBodyTest.test_early_return_with_data®	  sj   è è € à—’Ð.À�ÑGÔGˆØ�ŠÐ%Ñ&Ô&Ð&Ø×,Ò,Ñ.Ô.Ð.Ð.ˆØ�Š˜Ÿš¨Ñ8Ô8Ñ9Ô9Ð9Ð9Ð9r;   c              #   ó˜   K  — t          ¦   «         | _        |                      dd¬¦  «        }|                     ¦   «          | j        V — d S )Ns   /close_detectionFr˜  )r   r“  r©  r²  )rC   r«  s     r9   Útest_close_during_uploadz1StreamingRequestBodyTest.test_close_during_uploadµ	  sJ   è è € å"™HœHˆÔØ—’Ð1ÀE�ÑJÔJˆØ�Š‰ŒˆØÔÐÐÐÐÐr;   N)
rK   rL   rM   r?   r©  r   rœ  r   r¢  r¤  rI   r;   r9   r{  r{  _	  sŸ   € € € € € ð$
ð $
ð $
ðL	ð 	ð 	ð ðð ñ „Xðð, ð:ð :ñ „Xð:ð
 ð:ð :ñ „Xð:ð ð ð  ñ „Xð ð  ð  r;   r{  c                   ót   — e Zd Zd„ Zej        d„ ¦   «         Zej        d„ ¦   «         Z	ej        d„ ¦   «         Z
dS )ÚBaseFlowControlHandlerc                 ó0   — || _         d | _        g | _        d S r2   )r´   rÑ   Úmethodsr³   s     r9   r�  z!BaseFlowControlHandler.initializeÃ	  s   € ØˆŒ	ØˆŒØˆŒˆˆr;   c              #   óÔ   K  — | j         �%| j                             d|› d| j         › �¦  «         || _         | j                             |¦  «         	 d V — d | _         d S # d | _         w xY w)Nzentered method z
 while in )rÑ   r´   Úfailr¨  r1  r:  s     r9   Ú	in_methodz BaseFlowControlHandler.in_methodÈ	  s~   è è € àŒ;Ð"ØŒI�NŠNÐL¨VÐLÐL¸t¼{ÐLÐLÑMÔMÐMØˆŒØŒ×Ò˜FÑ#Ô#Ð#ð	ØˆEˆEˆEàˆDŒKˆKˆKø˜$ˆDŒKÐÐÐÐs   ÁA Á	A'c              #   óZ   K  — | j                              d¦  «         t          j        V — d S )Nrê  )r¨  r1  r   ÚmomentrB   s    r9   rê  zBaseFlowControlHandler.prepareÓ	  s2   è è € ð 	Œ×Ò˜IÑ&Ô&Ð&ÝŒjÐÐÐÐÐr;   c              #   óÐ   K  — |                       d¦  «        5  t          j        V — d d d ¦  «         n# 1 swxY w Y   |                      t	          | j        ¬¦  «        ¦  «         d S )Nr¸   ©r¨  )r«  r   r­  r[   rg   r¨  rB   s    r9   r¸   zBaseFlowControlHandler.postÚ	  s    è è € à�^Š^˜FÑ#Ô#ð 	ð 	Ý”*ÐÐÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à�
Š
•4 ¤Ð-Ñ-Ô-Ñ.Ô.Ð.Ð.Ð.s   ˜3³7º7N)rK   rL   rM   r�  Ú
contextlibÚcontextmanagerr«  r   r¹   rê  r¸   rI   r;   r9   r¦  r¦  Á	  s|   € € € € € ðð ð ð
 Ôðð ñ Ôðð 	„]ðð ñ „]ðð 	„]ð/ð /ñ „]ð/ð /ð /r;   r¦  c                   ó\   — e Zd Zd„ Zd„ Zdej        fd„Zdej        fd„Zdej        fd„Z	dS )Ú#BaseStreamingRequestFlowControlTestc                 ó$   — t          dd¬¦  «        S )Nr"  T)Ú
chunk_sizeÚdecompress_requestrÌ   rB   s    r9   Úget_httpserver_optionsz:BaseStreamingRequestFlowControlTest.get_httpserver_optionsâ	  s   € õ ˜r°dÐ;Ñ;Ô;Ð;r;   c                 ó   — t          ¦   «         S r2   r   rB   s    r9   rŽ  z3BaseStreamingRequestFlowControlTest.get_http_clientç	  r  r;   rC   c                 óÎ   — |                       ddd¬¦  «        }|                     ¦   «          |                      t          |j        ¦  «        t          g d¢¬¦  «        ¦  «         d S )NrR   ÚabcdefghijklmnopqrstuvwxyzrÏ   )rÒ   rÑ   ©rê  r†  r†  r†  r¸   r¯  )rÓ   rb  r}   r   rÒ   rg   rÙ   s     r9   Útest_flow_control_fixed_bodyz@BaseStreamingRequestFlowControlTest.test_flow_control_fixed_bodyì	  s|   € Ø—:’:˜cÐ(DÈV�:ÑTÔTˆØ×ÒÑÔÐØ×ÒÝ˜œÑ&Ô&Ýðð ð ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 ó  ‡— g d¢Št           j        ˆfd„¦   «         }|                      d|d¬¦  «        }|                     ¦   «          |                      t          |j        ¦  «        t          g d¢¬¦  «        ¦  «         d S )N)s   abcds   efghs   ijklc              3   ó0   •K  — ‰D ]} | |¦  «        V — Œd S r2   rI   )r[   ÚiÚchunkss     €r9   Úbody_producerzYBaseStreamingRequestFlowControlTest.test_flow_control_chunked_body.<locals>.body_producerÿ	  s3   øè è € àð ð �Ø�e˜A‘h”h����ðð r;   rR   rÏ   )rÁ  rÑ   r»  r¯  )r   r¹   rÓ   rb  r}   r   rÒ   rg   )rC   rÁ  rÚ   rÀ  s      @r9   Útest_flow_control_chunked_bodyzBBaseStreamingRequestFlowControlTest.test_flow_control_chunked_bodyü	  s®   ø€ Ø,Ð,Ð,ˆå	Œð	ð 	ð 	ð 	ñ 
Œð	ð —:’:˜c°Àv�:ÑNÔNˆØ×ÒÑÔÐØ×ÒÝ˜œÑ&Ô&Ýðð ð ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 ó–  — t          ¦   «         }t          j        d|¬¦  «        }|                     d¦  «         |                     ¦   «          |                     ¦   «         }|                      d|dddi¬¦  «        }|                     ¦   «          |                      t          |j
        ¦  «        t          g d	¢¬
¦  «        ¦  «         d S )NÚw)ÚmodeÚfileobjs   abcdefghijklmnopqrstuvwxyzrR   rÏ   rŸ  rž  )rÒ   rÑ   rC  r»  r¯  )r0   rž  ÚGzipFiler[   r²  ÚgetvaluerÓ   rb  r}   r   rÒ   rg   )rC   ÚbytesioÚ	gzip_fileÚcompressed_bodyrÚ   s        r9   Ú!test_flow_control_compressed_bodyzEBaseStreamingRequestFlowControlTest.test_flow_control_compressed_body
  sà   € Ý‘)”)ˆÝ”M s°GÐ<Ñ<Ô<ˆ	Ø�ŠÐ5Ñ6Ô6Ð6Ø�ŠÑÔÐØ!×*Ò*Ñ,Ô,ˆØ—:’:ØØ ØØ'¨Ð0ð	 ñ 
ô 
ˆð 	×ÒÑÔÐØ×ÒÝ˜œÑ&Ô&Ýðð ð ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r;   N)
rK   rL   rM   r·  rŽ  r¼  ÚAnyr¼  rÂ  rÌ  rI   r;   r9   r³  r³  á	  s‰   € € € € € ð<ð <ð <ð
'ð 'ð 'ð

¨6¬:ð 
ð 
ð 
ð 
ð 
¨V¬Zð 
ð 
ð 
ð 
ð.
°´
ð 
ð 
ð 
ð 
ð 
ð 
r;   r³  c                   ó   — e Zd Zd„ ZdS )Ú(DecoratedStreamingRequestFlowControlTestc                 óP   —  G d„ dt           ¦  «        }d|t          | ¬¦  «        fgS )Nc                   ó.   — e Zd Zej        d„ ¦   «         ZdS )úZDecoratedStreamingRequestFlowControlTest.get_handlers.<locals>.DecoratedFlowControlHandlerc              3   ó‚   K  — |                       d¦  «        5  t          j        V — d d d ¦  «         d S # 1 swxY w Y   d S )Nr†  )r«  r   r­  r…  s     r9   r†  zhDecoratedStreamingRequestFlowControlTest.get_handlers.<locals>.DecoratedFlowControlHandler.data_received3
  sŠ   è è € à—^’^ OÑ4Ô4ð %ð %Ýœ*Ð$Ð$Ð$ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð %ð %s   ˜4´8»8N)rK   rL   rM   r   r¹   r†  rI   r;   r9   ÚDecoratedFlowControlHandlerrÒ  2
  s/   € € € € € ØŒ]ð%ð %ñ Œ]ð%ð %ð %r;   rÔ  rR   rº   ©r¦  rg   )rC   rÔ  s     r9   r?   z5DecoratedStreamingRequestFlowControlTest.get_handlers1
  sH   € ð	%ð 	%ð 	%ð 	%ð 	%Õ*@ñ 	%ô 	%ð 	%ð Ð1µ4¸T°?±?´?ÐCÐDÐDr;   N©rK   rL   rM   r?   rI   r;   r9   rÏ  rÏ  .
  s(   € € € € € ðEð Eð Eð Eð Er;   rÏ  c                   ó   — e Zd Zd„ ZdS )Ú%NativeStreamingRequestFlowControlTestc                 óP   —  G d„ dt           ¦  «        }d|t          | ¬¦  «        fgS )Nc                   ó   — e Zd Zd„ ZdS )úTNativeStreamingRequestFlowControlTest.get_handlers.<locals>.NativeFlowControlHandlerc              “   ó¤   K  — |                       d¦  «        5  dd l}|                     d¦  «        ƒ d {V —† d d d ¦  «         d S # 1 swxY w Y   d S )Nr†  r   )r«  Úasyncior¤  )rC   rV  rÝ  s      r9   r†  zbNativeStreamingRequestFlowControlTest.get_handlers.<locals>.NativeFlowControlHandler.data_received@
  s©   è è € Ø—^’^ OÑ4Ô4ð +ð +Ø"�N�N�Nà!Ÿ-š-¨Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +ð +ð +s   ˜ AÁA	ÁA	N)rK   rL   rM   r†  rI   r;   r9   ÚNativeFlowControlHandlerrÛ  ?
  s#   € € € € € ð+ð +ð +ð +ð +r;   rÞ  rR   rº   rÕ  )rC   rÞ  s     r9   r?   z2NativeStreamingRequestFlowControlTest.get_handlers>
  sH   € ð	+ð 	+ð 	+ð 	+ð 	+Õ'=ñ 	+ô 	+ð 	+ð Ð.µ¸$°±´Ð@ÐAÐAr;   NrÖ  rI   r;   r9   rØ  rØ  ;
  s(   € € € € € ðBð Bð Bð Bð Br;   rØ  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚIncorrectContentLengthTestc                 óz   ‡— | Šd | _          G ˆfd„dt          ¦  «        } G ˆfd„dt          ¦  «        }d|fd|fgS )Nc                   ó   •— e Zd Zˆ fd„ZdS )ú8IncorrectContentLengthTest.get_handlers.<locals>.TooHighc                 ó”   •— |                       dd¦  «         	 |                      d¦  «         d S # t          $ r}|‰_        ‚ d }~ww xY w)Nr  rÁ  r…  ©r  r±   r¾  Úserver_error©rC   r  r´   s     €r9   r\   z<IncorrectContentLengthTest.get_handlers.<locals>.TooHigh.getP
  s_   ø€ Ø—’Ð 0°$Ñ7Ô7Ð7ðØ—K’K Ñ%Ô%Ð%Ð%Ð%øÝ ð ð ð Ø()�DÔ%Øøøøøðøøøó   ™0 °
AºAÁANr]   rº   s   €r9   ÚTooHighrã  O
  ó.   ø€ € € € € ðð ð ð ð ð ð r;   ré  c                   ó   •— e Zd Zˆ fd„ZdS )ú7IncorrectContentLengthTest.get_handlers.<locals>.TooLowc                 ó”   •— |                       dd¦  «         	 |                      d¦  «         d S # t          $ r}|‰_        ‚ d }~ww xY w)Nr  r~  rY   rå  rç  s     €r9   r\   z;IncorrectContentLengthTest.get_handlers.<locals>.TooLow.getY
  s_   ø€ Ø—’Ð 0°#Ñ6Ô6Ð6ðØ—K’K Ñ(Ô(Ð(Ð(Ð(øÝ ð ð ð Ø()�DÔ%Øøøøøðøøørè  Nr]   rº   s   €r9   ÚTooLowrì  X
  rê  r;   rî  ú/highú/low)ræ  r   )rC   ré  rî  r´   s      @r9   r?   z'IncorrectContentLengthTest.get_handlersJ
  s�   ø€ ØˆØ ˆÔð	ð 	ð 	ð 	ð 	ð 	ð 	•nñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	ð 	ð 	•^ñ 	ô 	ð 	ð ˜'Ð" V¨VÐ$4Ð5Ð5r;   c                 óœ  — t          t          d¦  «        5  t          t          d¦  «        5  |                      t          ¦  «        5  |                      dd¬¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   |                      t          | j        ¦  «        d¦  «         d S )Nú*(Uncaught exception|Exception in callback)úS(Cannot send error response after headers written|Failed to flush partial response)rï  T©Úraise_errorz0Tried to write 40 bytes less than Content-Length©	r   r   r   ÚassertRaisesr   rÓ   r}   rä   ræ  rB   s    r9   Útest_content_length_too_highz7IncorrectContentLengthTest.test_content_length_too_highc
  s�  € õ •wÐ LÑMÔMð 	:ð 	:ÝÝð5ñô ð :ð :ð
 ×&Ò&¥Ñ7Ô7ð :ð :Ø—J’J˜w°D�JÑ9Ô9Ð9ð:ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :ð:ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :ð	:ð 	:ð 	:ñ 	:ô 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:øøøð 	:ð 	:ð 	:ð 	:ð 	×ÒÝ�Ô!Ñ"Ô"Ð$Vñ	
ô 	
ð 	
ð 	
ð 	
óX   –B¬BÁA+ÁBÁ+A/Á/BÁ2A/Á3BÁ6BÂB	ÂBÂ	B	Â
BÂBÂ Bc                 óœ  — t          t          d¦  «        5  t          t          d¦  «        5  |                      t          ¦  «        5  |                      dd¬¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   |                      t          | j        ¦  «        d¦  «         d S )Nrò  ró  rð  Trô  z,Tried to write more data than Content-Lengthrö  rB   s    r9   Útest_content_length_too_lowz6IncorrectContentLengthTest.test_content_length_too_lows
  s�  € õ •wÐ LÑMÔMð 	9ð 	9ÝÝð5ñô ð 9ð 9ð
 ×&Ò&¥Ñ7Ô7ð 9ð 9Ø—J’J˜v°4�JÑ8Ô8Ð8ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9ð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9ð 	×ÒÝ�Ô!Ñ"Ô"Ð$Rñ	
ô 	
ð 	
ð 	
ð 	
rù  N)rK   rL   rM   r?   rø  rû  rI   r;   r9   rà  rà  I
  sA   € € € € € ð6ð 6ð 6ð2
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r;   rà  c                   ó0   — e Zd Z G d„ de¦  «        Zd„ ZdS )ÚClientCloseTestc                   ó   — e Zd Zd„ ZdS )úClientCloseTest.Handlerc                 óâ   — | j         j                             d¦  «        r:| j         j        j                             ¦   «          |                      d¦  «         d S |                      d¦  «         d S )NzHTTP/1rY   úrequires HTTP/1.x)r»  rx   r  Ú
connectionr«  r²  r[   rB   s    r9   r\   zClientCloseTest.Handler.get†
  sl   € ØŒ|Ô#×.Ò.¨xÑ8Ô8ð 
0ð ”Ô'Ô.×4Ò4Ñ6Ô6Ð6Ø—
’
˜7Ñ#Ô#Ð#Ð#Ð#ð —
’
Ð.Ñ/Ô/Ð/Ð/Ð/r;   Nr]   rI   r;   r9   rT   rÿ  …
  s#   € € € € € ð	0ð 	0ð 	0ð 	0ð 	0r;   rT   c                 ó(  — |                       t          t          j        f¦  «        5  |                      dd¬¦  «        }|j        dk    r|                      d¦  «         |                      |j        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NrR   Trô  s   requires HTTP/1.xr  iW  )	r÷  r   rt  ÚSkipTestrÓ   rÒ   ÚskipTestr}   rÕ   rÙ   s     r9   Útest_client_closez!ClientCloseTest.test_client_close“
  sÐ   € Ø×Ò¥µÔ1BÐCÑDÔDð 	1ð 	1Ø—z’z #°4�zÑ8Ô8ˆHØŒ}Ð 4Ò4Ð4Ø—’Ð1Ñ2Ô2Ð2Ø×Ò˜Xœ]¨CÑ0Ô0Ð0ð		1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1ð 	1ð 	1s   §ABÂBÂBN)rK   rL   rM   r   rT   r  rI   r;   r9   rý  rý  „
  sM   € € € € € ð0ð 0ð 0ð 0ð 0�.ñ 0ô 0ð 0ð1ð 1ð 1ð 1ð 1r;   rý  c                   óf   — e Zd ZdZddddœZd„ Zd„ Zd„ Zd	„ Zd
„ Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚSignedValueTestzIt's a secret to everybodyÚ	asdfbasdfÚ12312312Ú2342342)r   rv   r„   c                 ó0   — |                       ¦   «         dz
  S )Ni 0* )ÚpresentrB   s    r9   ÚpastzSignedValueTest.pastŸ
  s   € Ø�|Š|‰~Œ~ 
Ñ*Ð*r;   c                 ó   — dS )Ni m|MrI   rB   s    r9   r  zSignedValueTest.present¢
  s   € Øˆzr;   c                 ó>  — t          t          j        ddd| j        ¬¦  «        }|                      |d¦  «         t          t          j        ddd| j        ¬¦  «        }|                      |d¦  «         t          t          j        dd| j        ¬¦  «        }|                      ||¦  «         t          t          j        d|d| j        ¬	¦  «        }|                      |d
¦  «         t          t          j        d|d| j        ¬	¦  «        }|                      |d
¦  «         d S )NrÀ  rn   rv   )rx   Úclocks<   dmFsdWU=|1300000000|31c934969f53e48164c50768b40cbd7e2daaaa4fr„   se   2|1:0|10:1300000000|3:key|8:dmFsdWU=|3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e152©r  )rz   r  ó   value)r'   r  ÚSECRETr  r}   r(   )rC   Ú	signed_v1Ú	signed_v2Úsigned_defaultÚ
decoded_v1Ú
decoded_v2s         r9   Útest_known_valuesz!SignedValueTest.test_known_values¥
  sI  € Ý'ÝÔ" E¨7¸AÀTÄ\ð
ñ 
ô 
ˆ	ð 	×ÒØÐVñ	
ô 	
ð 	
õ (ÝÔ" E¨7¸AÀTÄ\ð
ñ 
ô 
ˆ	ð 	×ÒØðPñ	
ô 	
ð 	
õ -ÝÔ" E¨7¸$¼,ð
ñ 
ô 
ˆð 	×Ò˜¨Ñ3Ô3Ð3å(ÝÔ" E¨9À!È4Ì<ð
ñ 
ô 
ˆ
ð 	×Ò˜ XÑ.Ô.Ð.å(ÝÔ" E¨9À!È4Ì<ð
ñ 
ô 
ˆ
ð 	×Ò˜ XÑ.Ô.Ð.Ð.Ð.r;   c                 ój  — t          t          j        dd| j        ¬¦  «        }t          t          j        dd| j        ¬¦  «        }t	          t          j        d|| j        ¬¦  «        }|                      |¦  «         t	          t          j        d|| j        ¬¦  «        }|                      |¦  «         d S )NÚkey1rn   r  Úkey2)r'   r  r  r  r(   rŽ   )rC   Úsigned1Úsigned2Údecoded1Údecoded2s        r9   Útest_name_swapzSignedValueTest.test_name_swapÅ
  sÀ   € Ý%ÝÔ" F¨G¸4¼<ð
ñ 
ô 
ˆõ &ÝÔ" F¨G¸4¼<ð
ñ 
ô 
ˆõ 'ÝÔ" F¨G¸4¼<ð
ñ 
ô 
ˆð 	×Ò˜(Ñ#Ô#Ð#Ý&ÝÔ" F¨G¸4¼<ð
ñ 
ô 
ˆð 	×Ò˜(Ñ#Ô#Ð#Ð#Ð#r;   c                 ó(  — t          t          j        dd| j        ¬¦  «        }t	          t          j        d|| j        ¬¦  «        }|                      |d¦  «         t	          t          j        d|| j        ¬¦  «        }|                      |¦  «         d S )Nr  rn   r  r  )r'   r  r  r  r(   r}   r  rŽ   )rC   ÚsignedÚdecoded_pastÚdecoded_presents       r9   Útest_expiredzSignedValueTest.test_expiredÖ
  sž   € Ý$ÝÔ" F¨G¸4¼9ð
ñ 
ô 
ˆõ +ÝÔ" F¨F¸$¼)ð
ñ 
ô 
ˆð 	×Ò˜ xÑ0Ô0Ð0Ý-ÝÔ" F¨F¸$¼,ð
ñ 
ô 
ˆð 	×Ò˜/Ñ*Ô*Ð*Ð*Ð*r;   c                 ó
  ‡ ‡— dŠˆ ˆfd„}‰                        |d¦  «        ¦  «         ‰                       |d¦  «        ¦  «         ‰                       |d¦  «        ¦  «         ‰                       |d¦  «        ¦  «         d S )NÚ@3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e152c                 óV   •— dt          t          j        d| ‰z   ‰j        ¬¦  «        k    S ©Nr  rÀ  r  ©r(   r  r  r  )ÚprefixrC   r‘   s    €€r9   Úvalidatez8SignedValueTest.test_payload_tampering.<locals>.validateç
  ó4   ø€ ØÕ2ÝÔ&¨¨v¸©|À4Ä<ð ñ  ô  ò ð r;   ú%2|1:0|10:1300000000|3:key|8:dmFsdWU=|z%2|1:1|10:1300000000|3:key|8:dmFsdWU=|z$2|1:0|10:130000000|3:key|8:dmFsdWU=|z&2|1:0|10:1300000000|3:keey|8:dmFsdWU=|©r×   ÚassertFalse)rC   r.  r‘   s   ` @r9   Útest_payload_tamperingz&SignedValueTest.test_payload_tamperingã
  s©   øø€ àPˆð	ð 	ð 	ð 	ð 	ð 	ð
 	�Š˜˜Ð!HÑIÔIÑJÔJÐJà×Ò˜˜Ð"IÑJÔJÑKÔKÐKà×Ò˜˜Ð"HÑIÔIÑJÔJÐJà×Ò˜˜Ð"JÑKÔKÑLÔLÐLÐLÐLr;   c                 ó‚  ‡ ‡— dŠˆˆ fd„}‰                        |d¦  «        ¦  «         ‰                       |d¦  «        ¦  «         ‰                       |d¦  «        ¦  «         ‰                       |d¦  «        ¦  «         ‰                       |d¦  «        ¦  «         ‰                       |d¦  «        ¦  «         d S )	Nr0  c                 óV   •— dt          t          j        d‰| z   ‰j        ¬¦  «        k    S r+  r,  )r‘   r-  rC   s    €€r9   r.  z:SignedValueTest.test_signature_tampering.<locals>.validate÷
  r/  r;   r)  Ú 00000000000000000000000000000000Ú@4d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e152Ú@3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e153Ú?3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e15ÚA3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e1538r1  )rC   r.  r-  s   ` @r9   Útest_signature_tamperingz(SignedValueTest.test_signature_tamperingô
  s  øø€ Ø8ˆð	ð 	ð 	ð 	ð 	ð 	ð
 	�ŠØˆHÐWÑXÔXñ	
ô 	
ð 	
ð 	×Ò˜˜ (Ñ+Ô+Ñ,Ô,Ð,à×ÒØˆHÐWÑXÔXñ	
ô 	
ð 	
ð 	×ÒØˆHÐWÑXÔXñ	
ô 	
ð 	
ð 	×ÒØˆHÐVÑWÔWñ	
ô 	
ð 	
ð 	×ÒØˆHØSñô ñ	
ô 	
ð 	
ð 	
ð 	
r;   c                 ó¾   — d}t          t          j        d|| j        ¬¦  «        }t	          t          j        d|| j        ¬¦  «        }|                      ||¦  «         d S )Nr”   rÀ  r  )r'   r  r  r  r(   r}   ©rC   rn   r$  Údecodeds       r9   Útest_non_asciizSignedValueTest.test_non_ascii  sk   € ØˆÝ$ÝÔ" E¨5¸¼ð
ñ 
ô 
ˆõ &ÝÔ" E¨6¸¼ð
ñ 
ô 
ˆð 	×Ò˜ Ñ(Ô(Ð(Ð(Ð(r;   c                 óÀ   — d}t          t          j        d|| j        d¬¦  «        }t	          t          j        d|| j        ¬¦  «        }|                      ||¦  «         d S ©Nr”   rÀ  r   ©r  re   r  ©r'   r  ÚSECRET_DICTr  r(   r}   r=  s       r9   Ú*test_key_versioning_read_write_default_keyz:SignedValueTest.test_key_versioning_read_write_default_key  ón   € ØˆÝ$ÝÔ'¨°¸T¼\ÐWXð
ñ 
ô 
ˆõ &ÝÔ'¨°¸d¼lð
ñ 
ô 
ˆð 	×Ò˜ Ñ(Ô(Ð(Ð(Ð(r;   c                 óÀ   — d}t          t          j        d|| j        d¬¦  «        }t	          t          j        d|| j        ¬¦  «        }|                      ||¦  «         d S )Nr”   rÀ  rv   rB  r  rC  r=  s       r9   Ú.test_key_versioning_read_write_non_default_keyz>SignedValueTest.test_key_versioning_read_write_non_default_key(  rF  r;   c                 ó  — d}t          t          j        d|| j        d¬¦  «        }t          j                             ¦   «         }|                     d¦  «         t          |d|| j        ¬¦  «        }|                      |¦  «         d S rA  )r'   r  rD  r  r§   r¨   r(   rŽ   )rC   rn   r$  Únewkeysr>  s        r9   Útest_key_versioning_invalid_keyz/SignedValueTest.test_key_versioning_invalid_key2  sƒ   € ØˆÝ$ÝÔ'¨°¸T¼\ÐWXð
ñ 
ô 
ˆõ "Ô-×2Ò2Ñ4Ô4ˆØ�Š�A‰ŒˆÝ% g¨u°fÀDÄLÐQÑQÔQˆØ×Ò˜'Ñ"Ô"Ð"Ð"Ð"r;   c                 óš   — d}t          t          j        d|| j        d¬¦  «        }t	          |¦  «        }|                      d|¦  «         d S )Nr”   rÀ  rv   rB  )r'   r  rD  r  r)   r}   )rC   rn   r$  re   s       r9   Útest_key_version_retrievalz*SignedValueTest.test_key_version_retrieval<  sW   € ØˆÝ$ÝÔ'¨°¸T¼\ÐWXð
ñ 
ô 
ˆõ 0°Ñ7Ô7ˆØ×Ò˜˜KÑ(Ô(Ð(Ð(Ð(r;   N)rK   rL   rM   r  rD  r  r  r  r"  r'  r3  r;  r?  rE  rH  rK  rM  rI   r;   r9   r  r  ›
  sá   € € € € € Ø)€FØ! j°YÐ?Ð?€Kð+ð +ð +ðð ð ð/ð /ð /ð@$ð $ð $ð"+ð +ð +ðMð Mð Mð"
ð 
ð 
ð@)ð )ð )ð)ð )ð )ð)ð )ð )ð#ð #ð #ð)ð )ð )ð )ð )r;   r  c                   ó¤   ‡ — e Zd Z G d„ de¦  «        Zd„ Zˆ fd„Zdd„Zdd„Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )ÚXSRFTestc                   ó   — e Zd Zd„ Zd„ ZdS )úXSRFTest.Handlerc                 ó”   — t          |                      dd¦  «        ¦  «        }|| j        d<   |                      | j        ¦  «         d S )Nrx   r~  Úxsrf_cookie_version)rå  ræ  rc   r[   rÝ  )rC   rx   s     r9   r\   zXSRFTest.Handler.getG  sH   € Ý˜$×+Ò+¨I°sÑ;Ô;Ñ<Ô<ˆGð 4;ˆDŒMÐ/Ñ0Ø�JŠJ�t”Ñ'Ô'Ð'Ð'Ð'r;   c                 ó0   — |                       d¦  «         d S r„  rZ   rB   s    r9   r¸   zXSRFTest.Handler.postN  ó   € Ø�JŠJ�tÑÔÐÐÐr;   N©rK   rL   rM   r\   r¸   rI   r;   r9   rT   rQ  F  s2   € € € € € ð	(ð 	(ð 	(ð	ð 	ð 	ð 	ð 	r;   rT   c                 ó"   — t          d¬¦  «        S rF  rÌ   rB   s    r9   r@   zXSRFTest.get_app_kwargsQ  rH  r;   c                 óz   •— t          ¦   «                              ¦   «          |                      ¦   «         | _        d S r2   ©rL  ÚsetUpÚ	get_tokenrÝ  rP  s    €r9   rZ  zXSRFTest.setUpT  ó)   ø€ Ý‰Œ�Š‰ŒˆØŸ.š.Ñ*Ô*ˆŒˆˆr;   Nc                 óÂ   — |�|                       |¦  «        }nd }|                      |€dnd|z  |¬¦  «        }|                     ¦   «          t          |j        ¦  «        S )NrR   z/?version=%drI  ©Úcookie_headersrÓ   rb  r	   rÒ   )rC   Ú	old_tokenrx   rC  rÚ   s        r9   r[  zXSRFTest.get_tokenX  sp   € ØÐ Ø×)Ò)¨)Ñ4Ô4ˆGˆGàˆGØ—:’:Ø�?ˆCˆC¨¸'Ñ)AÈGð ñ 
ô 
ˆð 	×ÒÑÔÐÝ˜(œ-Ñ(Ô(Ð(r;   c                 ó"   — |€| j         }dd|z   iS )NrG  z_xsrf=©rÝ  ©rC   Útokens     r9   r_  zXSRFTest.cookie_headersc  s   € Øˆ=Ø”OˆEØ˜( UÑ*Ð+Ð+r;   c                 óÆ   — t          t          d¦  «        5  |                      ddd¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      |j        d¦  «         d S ©Nú.*'_xsrf' argument missingrR   rÏ   r;   rÐ   rm  ro  rÙ   s     r9   Útest_xsrf_fail_no_tokenz XSRFTest.test_xsrf_fail_no_tokenh  ó®   € Ý•wÐ <Ñ=Ô=ð 	@ð 	@Ø—z’z #¨f¸3�zÑ?Ô?ˆHð	@ð 	@ð 	@ñ 	@ô 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@øøøð 	@ð 	@ð 	@ð 	@à×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,ó   –;»?Á?c           
      ó&  — t          t          d¦  «        5  |                      ddt          j                             t          | j        ¬¦  «        ¦  «        ¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      |j	        d¦  «         d S ©Nú!.*XSRF cookie does not match POSTrR   rÏ   ©Ú_xsrfrÐ   rm  ©
r   r   rÓ   r‘  r’  r“  rg   rÝ  r}   rÕ   rÙ   s     r9   Útest_xsrf_fail_body_no_cookiez&XSRFTest.test_xsrf_fail_body_no_cookiem  óÆ   € Ý•wÐ CÑDÔDð 	ð 	Ø—z’zØØÝ”\×+Ò+­D°t´Ð,GÑ,GÔ,GÑHÔHð "ñ ô ˆHð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,ó   –A	A+Á+A/Á2A/c                 óB  — t          t          d¦  «        5  |                      dd|                      ¦   «         t          j                             t          d¬¦  «        ¦  «        ¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      |j	        d¦  «         d S )Nz%.*'_xsrf' argument has invalid formatrR   rÏ   ú3|rn  re  rm  )
r   r   rÓ   r_  r‘  r’  r“  rg   r}   rÕ   rÙ   s     r9   Ú&test_xsrf_fail_argument_invalid_formatz/XSRFTest.test_xsrf_fail_argument_invalid_formatv  sÓ   € Ý•wÐ GÑHÔHð 	ð 	Ø—z’zØØØ×+Ò+Ñ-Ô-Ý”\×+Ò+­D°tÐ,<Ñ,<Ô,<Ñ=Ô=ð	 "ñ ô ˆHð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,s   –AA9Á9A=Â A=c                 óP  — t          t          d¦  «        5  |                      dd|                      d¬¦  «        t          j                             t          | j        ¬¦  «        ¦  «        ¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |  	                    |j
        d¦  «         d S )	Nrm  rR   rÏ   ru  ©rd  rn  re  rm  )r   r   rÓ   r_  r‘  r’  r“  rg   rÝ  r}   rÕ   rÙ   s     r9   Ú$test_xsrf_fail_cookie_invalid_formatz-XSRFTest.test_xsrf_fail_cookie_invalid_format€  sÚ   € Ý•wÐ CÑDÔDð 	ð 	Ø—z’zØØØ×+Ò+°$Ð+Ñ7Ô7Ý”\×+Ò+­D°t´Ð,GÑ,GÔ,GÑHÔHð	 "ñ ô ˆHð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,s   –AB Â BÂBc                 óì   — t          t          d¦  «        5  |                      ddd|                      ¦   «         ¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      |j        d¦  «         d S )Nrg  rR   rÏ   r;   ©rÑ   rÒ   rC  rm  )r   r   rÓ   r_  r}   rÕ   rÙ   s     r9   Útest_xsrf_fail_cookie_no_bodyz&XSRFTest.test_xsrf_fail_cookie_no_bodyŠ  sµ   € Ý•wÐ <Ñ=Ô=ð 	ð 	Ø—z’zØ˜F¨°d×6IÒ6IÑ6KÔ6Kð "ñ ô ˆHð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,s   –,AÁAÁAc           	      óì   — |                       ddt          j                             t	          d¬¦  «        ¦  «        |                      d¬¦  «        ¬¦  «        }|                      |j        d¦  «         d S )NrR   rÏ   Údeadbeefrn  rx  r{  rÎ   ©rÓ   r‘  r’  r“  rg   r_  r}   rÕ   rÙ   s     r9   Útest_xsrf_success_short_tokenz&XSRFTest.test_xsrf_success_short_token‘  sr   € Ø—:’:ØØÝ”×'Ò'­°:Ð(>Ñ(>Ô(>Ñ?Ô?Ø×'Ò'¨jÐ'Ñ9Ô9ð	 ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   c           	      óì   — |                       ddt          j                             t	          d¬¦  «        ¦  «        |                      d¬¦  «        ¬¦  «        }|                      |j        d¦  «         d S )NrR   rÏ   Úxoxorn  rx  r{  rÎ   r  rÙ   s     r9   Útest_xsrf_success_non_hex_tokenz(XSRFTest.test_xsrf_success_non_hex_tokenš  sr   € Ø—:’:ØØÝ”×'Ò'­°6Ð(:Ñ(:Ô(:Ñ;Ô;Ø×'Ò'¨fÐ'Ñ5Ô5ð	 ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   c           	      óò   — |                       ddt          j                             t	          | j        ¬¦  «        ¦  «        |                      ¦   «         ¬¦  «        }|                      |j        d¦  «         d S ©NrR   rÏ   rn  r{  rÎ   ©	rÓ   r‘  r’  r“  rg   rÝ  r_  r}   rÕ   rÙ   s     r9   Útest_xsrf_success_post_bodyz$XSRFTest.test_xsrf_success_post_body£  so   € Ø—:’:ØØÝ”×'Ò'­°4´?Ð(CÑ(CÔ(CÑDÔDØ×'Ò'Ñ)Ô)ð	 ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   c                 óø   — |                       dt          j                             t	          | j        ¬¦  «        ¦  «        z   dd|                      ¦   «         ¬¦  «        }|                      |j        d¦  «         d S )Nz/?rn  rÏ   r;   r{  rÎ   r†  rÙ   s     r9   Útest_xsrf_success_query_stringz'XSRFTest.test_xsrf_success_query_string¬  st   € Ø—:’:Ø•6”<×)Ò)­$°T´_Ð*EÑ*EÔ*EÑFÔFÑFØØØ×'Ò'Ñ)Ô)ð	 ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   c                 ó¶   — |                       dddt          d| j        ifi |                      ¦   «         ¤Ž¬¦  «        }|                      |j        d¦  «         d S )NrR   rÏ   r;   zX-Xsrftokenr{  rÎ   )rÓ   rg   rÝ  r_  r}   rÕ   rÙ   s     r9   Útest_xsrf_success_headerz!XSRFTest.test_xsrf_success_headerµ  ss   € Ø—:’:ØØØÝØ ¤Ð0ðð à×%Ò%Ñ'Ô'ðð ð	 ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   c                 óÞ   — d}t          ¦   «         }t          |¦  «        D ])}|                     |                      ¦   «         ¦  «         Œ*|                      t          |¦  «        |¦  «         d S )Nr"  )r¬  r  r  r[  r}   rR  )rC   Ú
NUM_TOKENSÚtokensr¿  s       r9   Útest_distinct_tokenszXSRFTest.test_distinct_tokensÁ  sh   € àˆ
Ý‘”ˆÝ�zÑ"Ô"ð 	)ð 	)ˆAØ�JŠJ�t—~’~Ñ'Ô'Ñ(Ô(Ð(Ð(Ø×Ò�˜V™œ jÑ1Ô1Ð1Ð1Ð1r;   c                 ó˜  — |                       ¦   «         }| j        |fD ]t}|                      ddt          j                             t          |¬¦  «        ¦  «        |                      |¦  «        ¬¦  «        }|                      |j	        d¦  «         Œu| j        |f|| j        ffD ]¤\  }}t          t          d¦  «        5  |                      ddt          j                             t          |¬¦  «        ¦  «        |                      |¦  «        ¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      |j	        d¦  «         Œ¥d S )NrR   rÏ   rn  r{  rÎ   rm  rm  )r[  rÝ  rÓ   r‘  r’  r“  rg   r_  r}   rÕ   r   r   )rC   Útoken2rd  rÚ   Úcookie_tokenÚ
body_tokens         r9   Útest_cross_userzXSRFTest.test_cross_userÉ  s™  € Ø—’Ñ!Ô!ˆà”o vÐ.ð 	1ð 	1ˆEØ—z’zØØÝ”\×+Ò+­D°uÐ,=Ñ,=Ô,=Ñ>Ô>Ø×+Ò+¨EÑ2Ô2ð	 "ñ ô ˆHð ×Ò˜Xœ]¨CÑ0Ô0Ð0Ð0ð Œ_˜fÐ%Ø�T”_Ð%ð)
ð 	1ð 	1Ñ$ˆL˜*õ �7Ð$GÑHÔHð ð ØŸ:š:ØØ!Ýœ×/Ò/µ¸:Ð0FÑ0FÔ0FÑGÔGØ ×/Ò/°Ñ=Ô=ð	 &ñ ô �ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ×Ò˜Xœ]¨CÑ0Ô0Ð0Ð0ð	1ð 	1s   Â?AD#Ä#D'	Ä*D'	c           
      óÆ  — | j         }|h}t          d¦  «        D ]£}|                      |¦  «        }|                     |¦  «         |                      ddt
          j                             t          | j         ¬¦  «        ¦  «        |  	                    |¦  «        ¬¦  «        }|  
                    |j        d¦  «         Œ¤|  
                    t          |¦  «        d¦  «         d S )Né   rR   rÏ   rn  r{  rÎ   é   )rÝ  r  r[  r  rÓ   r‘  r’  r“  rg   r_  r}   rÕ   rR  )rC   rd  Útokens_seenr¿  rÚ   s        r9   Útest_refresh_tokenzXSRFTest.test_refresh_tokenâ  sÚ   € Ø”ˆØ�gˆõ
 �q‘”ð 
	1ð 
	1ˆAØ—N’N 5Ñ)Ô)ˆEà�OŠO˜EÑ"Ô"Ð"Ø—z’zØØÝ”\×+Ò+­D°t´Ð,GÑ,GÔ,GÑHÔHØ×+Ò+¨EÑ2Ô2ð	 "ñ ô ˆHð ×Ò˜Xœ]¨CÑ0Ô0Ð0Ð0Ø×Ò�˜[Ñ)Ô)¨1Ñ-Ô-Ð-Ð-Ð-r;   c           
      óÐ  — |                       |                      d¬¦  «        |                      d¬¦  «        ¦  «         |                      d¬¦  «        }t          d¦  «        D ]-}|                      |                      |d¬¦  «        |¦  «         Œ.|                      |¦  «        }|                       ||¦  «         |                       ||                      |¦  «        ¦  «         ||f||ffD ]w\  }}|                      ddt
          j                             t          |¬¦  «        ¦  «        |  	                    |¦  «        ¬¦  «        }|                      |j
        d¦  «         Œxd S )	Nrv   rw   r–  rR   rÏ   rn  r{  rÎ   )ÚassertNotEqualr[  r  r}   rÓ   r‘  r’  r“  rg   r_  rÕ   )rC   Úv1_tokenr¿  Úv2_tokenr’  r“  rÚ   s          r9   Útest_versioningzXSRFTest.test_versioningö  sm  € à×Ò˜DŸNšN°1˜NÑ5Ô5°t·~²~Èa°~Ñ7PÔ7PÑQÔQÐQð —>’>¨!�>Ñ,Ô,ˆÝ�q‘”ð 	Lð 	LˆAØ×Ò˜TŸ^š^¨H¸a˜^Ñ@Ô@À(ÑKÔKÐKÐKð —>’> (Ñ+Ô+ˆØ×Ò˜H hÑ/Ô/Ð/à×Ò˜H d§n¢n°XÑ&>Ô&>Ñ?Ô?Ð?ð +3°HÐ)=ÀÈ(Ð?SÐ(Tð 	1ð 	1Ñ$ˆL˜*Ø—z’zØØÝ”\×+Ò+­D°zÐ,BÑ,BÔ,BÑCÔCØ×+Ò+¨LÑ9Ô9ð	 "ñ ô ˆHð ×Ò˜Xœ]¨CÑ0Ô0Ð0Ð0ð	1ð 	1r;   rÂ  r2   )rK   rL   rM   r   rT   r@   rZ  r[  r_  rh  rq  rv  ry  r|  r€  rƒ  r‡  r‰  r‹  r�  r”  r™  rž  r¢  r£  s   @r9   rO  rO  E  sk  ø€ € € € € ð	ð 	ð 	ð 	ð 	�.ñ 	ô 	ð 	ð'ð 'ð 'ð+ð +ð +ð +ð +ð	)ð 	)ð 	)ð 	)ð,ð ,ð ,ð ,ð
-ð -ð -ð
-ð -ð -ð-ð -ð -ð-ð -ð -ð-ð -ð -ð-ð -ð -ð-ð -ð -ð-ð -ð -ð-ð -ð -ð
-ð 
-ð 
-ð2ð 2ð 2ð1ð 1ð 1ð2.ð .ð .ð(1ð 1ð 1ð 1ð 1ð 1ð 1r;   rO  c                   ób   ‡ — e Zd Z G d„ de¦  «        Zd„ Zˆ fd„Zdd„Zdd„Zd„ Z	d	„ Z
d
„ Zˆ xZS )ÚXSRFCookieNameTestc                   ó   — e Zd Zd„ Zd„ ZdS )úXSRFCookieNameTest.Handlerc                 ó:   — |                       | j        ¦  «         d S r2   ©r[   rÝ  rB   s    r9   r\   zXSRFCookieNameTest.Handler.get  ó   € Ø�JŠJ�t”Ñ'Ô'Ð'Ð'Ð'r;   c                 ó0   — |                       d¦  «         d S r„  rZ   rB   s    r9   r¸   zXSRFCookieNameTest.Handler.post  rU  r;   NrV  rI   r;   r9   rT   r¢    s2   € € € € € ð	(ð 	(ð 	(ð	ð 	ð 	ð 	ð 	r;   rT   c                 ó*   — t          ddddi¬¦  «        S )NTz__Host-xsrfr-  )rG  Úxsrf_cookie_nameÚxsrf_cookie_kwargsrÌ   rB   s    r9   r@   z!XSRFCookieNameTest.get_app_kwargs  s'   € ÝØØ*Ø (¨$Ð/ð
ñ 
ô 
ð 	
r;   c                 óz   •— t          ¦   «                              ¦   «          |                      ¦   «         | _        d S r2   rY  rP  s    €r9   rZ  zXSRFCookieNameTest.setUp   r\  r;   Nc                 ó´   — |�|                       |¦  «        }nd }|                      d|¬¦  «        }|                     ¦   «          t          |j        ¦  «        S )NrR   rI  r^  )rC   r`  rC  rÚ   s       r9   r[  zXSRFCookieNameTest.get_token$  sY   € ØÐ Ø×)Ò)¨)Ñ4Ô4ˆGˆGàˆGØ—:’:˜c¨7�:Ñ3Ô3ˆØ×ÒÑÔÐÝ˜(œ-Ñ(Ô(Ð(r;   c                 ó"   — |€| j         }dd|z   iS )NrG  z__Host-xsrf=rb  rc  s     r9   r_  z!XSRFCookieNameTest.cookie_headers-  s   € Øˆ=Ø”OˆEØ˜.¨5Ñ0Ð1Ð1r;   c                 óÆ   — t          t          d¦  «        5  |                      ddd¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      |j        d¦  «         d S rf  ro  rÙ   s     r9   rh  z*XSRFCookieNameTest.test_xsrf_fail_no_token2  ri  rj  c           
      ó&  — t          t          d¦  «        5  |                      ddt          j                             t          | j        ¬¦  «        ¦  «        ¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      |j	        d¦  «         d S rl  rp  rÙ   s     r9   rq  z0XSRFCookieNameTest.test_xsrf_fail_body_no_cookie7  rr  rs  c           	      óò   — |                       ddt          j                             t	          | j        ¬¦  «        ¦  «        |                      ¦   «         ¬¦  «        }|                      |j        d¦  «         d S r…  r†  rÙ   s     r9   r‡  z.XSRFCookieNameTest.test_xsrf_success_post_body@  so   € Ø—:’:ØØå”×'Ò'­°4´?Ð(CÑ(CÔ(CÑDÔDØ×'Ò'Ñ)Ô)ð ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r;   r2   )rK   rL   rM   r   rT   r@   rZ  r[  r_  rh  rq  r‡  r¢  r£  s   @r9   r   r     sÆ   ø€ € € € € ðð ð ð ð �.ñ ô ð ð
ð 
ð 
ð+ð +ð +ð +ð +ð)ð )ð )ð )ð2ð 2ð 2ð 2ð
-ð -ð -ð
-ð -ð -ð-ð -ð -ð -ð -ð -ð -r;   r   c                   ó6   — e Zd Z G d„ de¦  «        Zd„ Zd„ ZdS )ÚXSRFCookieKwargsTestc                   ó   — e Zd Zd„ ZdS )úXSRFCookieKwargsTest.Handlerc                 ó:   — |                       | j        ¦  «         d S r2   r¤  rB   s    r9   r\   z XSRFCookieKwargsTest.Handler.getM  r¥  r;   Nr]   rI   r;   r9   rT   r³  L  s#   € € € € € ð	(ð 	(ð 	(ð 	(ð 	(r;   rT   c                 óB   — t          dt          dd¬¦  «        ¬¦  «        S )NTr„   )r.  ro   )rG  r©  rÌ   rB   s    r9   r@   z#XSRFCookieKwargsTest.get_app_kwargsP  s,   € ÝØµ$ÀÐSTÐ2UÑ2UÔ2Uð
ñ 
ô 
ð 	
r;   c                 ó.  — |                       d¦  «        }|                      d|j        d                              ¦   «         ¦  «         |                      d|j        d                              ¦   «         ¦  «         |j                             d¦  «        }|€J ‚t          j        d|¦  «        }|€J ‚t          j                             t          j	        j
        ¦  «        t          j        d¬¦  «        z   }t          j                             |                     ¦   «         d         ¦  «        }|j        €%|                     t          j	        j
        ¬	¦  «        }|                      t'          ||z
                       ¦   «         ¦  «        d
k     ¦  «         d S )NrR   z	httponly;rA  zexpires=z.*; expires=(?P<expires>.+);.*r„   rf  rh  )Útzinfor"  )rÓ   rS  rC  Úlowerr\   rŠ   r‹   ri  rj  rk  rl  rm  rn  ro  rp  rq  r·  Úreplacer×   rs  rt  ru  s         r9   Útest_xsrf_httponlyz'XSRFCookieKwargsTest.test_xsrf_httponlyU  s]  € Ø—:’:˜c‘?”?ˆØ�Š�k 8Ô#3°LÔ#A×#GÒ#GÑ#IÔ#IÑJÔJÐJØ�Š�j (Ô"2°<Ô"@×"FÒ"FÑ"HÔ"HÑIÔIÐIØÔ!×%Ò% lÑ3Ô3ˆØÐ!Ð!Ð!Ý”Ð9¸6ÑBÔBˆØÐ Ð Ð åÔ#×'Ò'­Ô(9Ô(=Ñ>Ô>ÅÔASØðB
ñ B
ô B
ñ 
ˆõ œ×:Ò:¸5¿?º?Ñ;LÔ;LÈYÔ;WÑXÔXˆØÔ Ð(Ø+×3Ò3½8Ô;LÔ;PÐ3ÑQÔQˆNØ�Š�˜W ~Ñ5×DÒDÑFÔFÑGÔGÈ"ÒLÑMÔMÐMÐMÐMr;   N)rK   rL   rM   r   rT   r@   rº  rI   r;   r9   r±  r±  K  sa   € € € € € ð(ð (ð (ð (ð (�.ñ (ô (ð (ð
ð 
ð 
ð
Nð Nð Nð Nð Nr;   r±  c                   ó0   — e Zd Z G d„ de¦  «        Zd„ ZdS )ÚFinishExceptionTestc                   ó   — e Zd Zd„ ZdS )úFinishExceptionTest.Handlerc                 óè   — |                       d¦  «         |                      dd¦  «         |                      dd¦  «        rt          d¦  «        ‚|                      d¦  «         t          ¦   «         ‚)Nr�  úWWW-AuthenticateúBasic realm="something"Úfinish_valuer[  zauthentication required)r  r  ræ  r+   r[   rB   s    r9   r\   zFinishExceptionTest.Handler.geti  sm   € Ø�OŠO˜CÑ Ô Ð Ø�OŠOÐ.Ð0IÑJÔJÐJØ× Ò  °Ñ4Ô4ð ÝÐ6Ñ7Ô7Ð7à—
’
Ð4Ñ5Ô5Ð5Ý‘h”h�r;   Nr]   rI   r;   r9   rT   r¾  h  s#   € € € € € ð	ð 	ð 	ð 	ð 	r;   rT   c                 ó  — dD ]{}|                       |¦  «        }|                      |j        d¦  «         |                      d|j                             d¦  «        ¦  «         |                      d|j        ¦  «         Œ|d S )N)rR   z/?finish_value=1r�  rÁ  rÀ  s   authentication required)rÓ   r}   rÕ   rC  r\   rÒ   )rC   ÚurÚ   s      r9   Útest_finish_exceptionz)FinishExceptionTest.test_finish_exceptionr  s“   € Ø*ð 	Hð 	HˆAØ—z’z !‘}”}ˆHØ×Ò˜Xœ]¨CÑ0Ô0Ð0Ø×ÒØ)¨8Ô+;×+?Ò+?Ð@RÑ+SÔ+Sñô ð ð ×ÒÐ7¸¼ÑGÔGÐGÐGð	Hð 	Hr;   N)rK   rL   rM   r   rT   rÅ  rI   r;   r9   r¼  r¼  g  sR   € € € € € ðð ð ð ð �.ñ ô ð ðHð Hð Hð Hð Hr;   r¼  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚDecoratorTestc                 ó^   —  G d„ dt           ¦  «        } G d„ dt           ¦  «        }d|fd|fgS )Nc                   ó$   — e Zd Zed„ ¦   «         ZdS )ú6DecoratorTest.get_handlers.<locals>.RemoveSlashHandlerc                 ó   — d S r2   rI   rB   s    r9   r\   z:DecoratorTest.get_handlers.<locals>.RemoveSlashHandler.get  ó   € à�r;   N)rK   rL   rM   r-   r\   rI   r;   r9   ÚRemoveSlashHandlerrÊ  ~  s-   € € € € € Øðð ñ Œ[ðð ð r;   rÍ  c                   ó$   — e Zd Zed„ ¦   «         ZdS )ú3DecoratorTest.get_handlers.<locals>.AddSlashHandlerc                 ó   — d S r2   rI   rB   s    r9   r\   z7DecoratorTest.get_handlers.<locals>.AddSlashHandler.get„  rÌ  r;   N)rK   rL   rM   r.   r\   rI   r;   r9   ÚAddSlashHandlerrÏ  ƒ  s-   € € € € € Øðð ñ ŒXðð ð r;   rÑ  ú/removeslash/ú	/addslashrÉ   )rC   rÍ  rÑ  s      r9   r?   zDecoratorTest.get_handlers}  sn   € ð	ð 	ð 	ð 	ð 	¥ñ 	ô 	ð 	ð
	ð 	ð 	ð 	ð 	�nñ 	ô 	ð 	ð
 !Ð"4Ð5¸À_Ð7UÐVÐVr;   c                 óR  — |                       dd¬¦  «        }|                      |j        d¦  «         |                      |j        d         d¦  «         |                       dd¬¦  «        }|                      |j        d¦  «         |                      |j        d         d¦  «         d S )	NrÒ  Fr�  r‚  r�  z/removeslashz/removeslash/?foo=barz/removeslash?foo=barr†  rÙ   s     r9   Útest_removeslashzDecoratorTest.test_removeslashŠ  s    € Ø—:’:˜oÀ�:ÑFÔFˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜Ô)¨*Ô5°~ÑFÔFÐFà—:’:Ð5È�:ÑNÔNˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜Ô)¨*Ô5Ð7MÑNÔNÐNÐNÐNr;   c                 óR  — |                       dd¬¦  «        }|                      |j        d¦  «         |                      |j        d         d¦  «         |                       dd¬¦  «        }|                      |j        d¦  «         |                      |j        d         d¦  «         d S )	NrÓ  Fr�  r‚  r�  z
/addslash/z/addslash?foo=barz/addslash/?foo=barr†  rÙ   s     r9   Útest_addslashzDecoratorTest.test_addslash“  s    € Ø—:’:˜k¸E�:ÑBÔBˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜Ô)¨*Ô5°|ÑDÔDÐDà—:’:Ð1ÀE�:ÑJÔJˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜Ô)¨*Ô5Ð7KÑLÔLÐLÐLÐLr;   N)rK   rL   rM   r?   rÕ  r×  rI   r;   r9   rÇ  rÇ  |  sL   € € € € € ðWð Wð WðOð Oð OðMð Mð Mð Mð Mr;   rÇ  c                   óP   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ ZdS )Ú	CacheTestc                 ó2   —  G d„ dt           ¦  «        }d|fgS )Nc                   ó   — e Zd Zd„ Zd„ ZdS )ú+CacheTest.get_handlers.<locals>.EtagHandlerc                 ó0   — |                       |¦  «         d S r2   rZ   )rC   Úcomputed_etags     r9   r\   z/CacheTest.get_handlers.<locals>.EtagHandler.get   s   € Ø—
’
˜=Ñ)Ô)Ð)Ð)Ð)r;   c                 ó   — | j         d         S r£  )Ú_write_bufferrB   s    r9   Úcompute_etagz8CacheTest.get_handlers.<locals>.EtagHandler.compute_etag£  s   € ØÔ)¨!Ô,Ð,r;   N)rK   rL   rM   r\   rá  rI   r;   r9   ÚEtagHandlerrÜ  Ÿ  s2   € € € € € ð*ð *ð *ð-ð -ð -ð -ð -r;   râ  z
/etag/(.*)rÉ   )rC   râ  s     r9   r?   zCacheTest.get_handlersž  s<   € ð	-ð 	-ð 	-ð 	-ð 	-�.ñ 	-ô 	-ð 	-ð ˜{Ð+Ð,Ð,r;   c                 ó<   — d}d}|                       ||d¦  «         d S )Nú"xyzzy"Ú*r  ©Ú
_test_etag©rC   rÞ  Úetagss      r9   Útest_wildcard_etagzCacheTest.test_wildcard_etag¨  s(   € Ø!ˆØˆØ�Š˜ u¨cÑ2Ô2Ð2Ð2Ð2r;   c                 ó<   — d}d}|                       ||d¦  «         d S )Nrä  r  ræ  rè  s      r9   Útest_strong_etag_matchz CacheTest.test_strong_etag_match­  s(   € Ø!ˆØˆØ�Š˜ u¨cÑ2Ô2Ð2Ð2Ð2r;   c                 ó<   — d}d}|                       ||d¦  «         d S )Nú"xyzzy1"ú"xyzzy1", "xyzzy2"r  ræ  rè  s      r9   Útest_multiple_strong_etag_matchz)CacheTest.test_multiple_strong_etag_match²  s(   € Ø"ˆØ$ˆØ�Š˜ u¨cÑ2Ô2Ð2Ð2Ð2r;   c                 ó<   — d}d}|                       ||d¦  «         d S )Nrä  rî  rÎ   ræ  rè  s      r9   Útest_strong_etag_not_matchz$CacheTest.test_strong_etag_not_match·  s(   € Ø!ˆØˆØ�Š˜ u¨cÑ2Ô2Ð2Ð2Ð2r;   c                 ó<   — d}d}|                       ||d¦  «         d S )Nrä  rï  rÎ   ræ  rè  s      r9   Ú#test_multiple_strong_etag_not_matchz-CacheTest.test_multiple_strong_etag_not_match¼  s(   € Ø!ˆØ$ˆØ�Š˜ u¨cÑ2Ô2Ð2Ð2Ð2r;   c                 ó<   — d}d}|                       ||d¦  «         d S )Nrî  ú
W/"xyzzy1"r  ræ  rè  s      r9   Útest_weak_etag_matchzCacheTest.test_weak_etag_matchÁ  ó(   € Ø"ˆØˆØ�Š˜ u¨cÑ2Ô2Ð2Ð2Ð2r;   c                 ó<   — d}d}|                       ||d¦  «         d S )Nú"xyzzy2"úW/"xyzzy1", W/"xyzzy2"r  ræ  rè  s      r9   Útest_multiple_weak_etag_matchz'CacheTest.test_multiple_weak_etag_matchÆ  ó(   € Ø"ˆØ(ˆØ�Š˜ u¨cÑ2Ô2Ð2Ð2Ð2r;   c                 ó<   — d}d}|                       ||d¦  «         d S )Nrú  rö  rÎ   ræ  rè  s      r9   Útest_weak_etag_not_matchz"CacheTest.test_weak_etag_not_matchË  rø  r;   c                 ó<   — d}d}|                       ||d¦  «         d S )Nz"xyzzy3"rû  rÎ   ræ  rè  s      r9   Ú!test_multiple_weak_etag_not_matchz+CacheTest.test_multiple_weak_etag_not_matchÐ  rý  r;   c                 ót   — |                       d|z   d|i¬¦  «        }|                      |j        |¦  «         d S )Nz/etag/r!  rI  rƒ  )rC   rÞ  ré  rº  rÚ   s        r9   rç  zCacheTest._test_etagÕ  sI   € Ø—:’:Ø�}Ñ$¨ÀÐ.Fð ñ 
ô 
ˆð 	×Ò˜œ¨Ñ4Ô4Ð4Ð4Ð4r;   N)rK   rL   rM   r?   rê  rì  rð  rò  rô  r÷  rü  rÿ  r  rç  rI   r;   r9   rÙ  rÙ  �  s¹   € € € € € ð-ð -ð -ð3ð 3ð 3ð
3ð 3ð 3ð
3ð 3ð 3ð
3ð 3ð 3ð
3ð 3ð 3ð
3ð 3ð 3ð
3ð 3ð 3ð
3ð 3ð 3ð
3ð 3ð 3ð
5ð 5ð 5ð 5ð 5r;   rÙ  c                   ó0   — e Zd Z G d„ de¦  «        Zd„ ZdS )ÚRequestSummaryTestc                   ó   — e Zd Zd„ ZdS )úRequestSummaryTest.Handlerc                 ól   — d | j         _        |                      |                      ¦   «         ¦  «         d S r2   )r»  Ú	remote_ipr±   ré  rB   s    r9   r\   zRequestSummaryTest.Handler.getÞ  s2   € ð &*ˆDŒLÔ"Ø�KŠK˜×-Ò-Ñ/Ô/Ñ0Ô0Ð0Ð0Ð0r;   Nr]   rI   r;   r9   rT   r  Ý  s#   € € € € € ð	1ð 	1ð 	1ð 	1ð 	1r;   rT   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )NrR   s   GET / (None)rK  rw  s     r9   Útest_missing_remote_ipz)RequestSummaryTest.test_missing_remote_ipå  s/   € Ø�zŠz˜#‰ŒˆØ×Ò˜œ OÑ4Ô4Ð4Ð4Ð4r;   N)rK   rL   rM   r   rT   r
  rI   r;   r9   r  r  Ü  sM   € € € € € ð1ð 1ð 1ð 1ð 1�.ñ 1ô 1ð 1ð5ð 5ð 5ð 5ð 5r;   r  c                   ó   — e Zd Zd„ ZdS )ÚHTTPErrorTestc                 óü   — t          dd¬¦  «        }t          j        |¦  «        }|                      ||¦  «         |                      |j        |j        ¦  «         |                      |j        |j        ¦  «         d S )Nrm  zGo awayr  )r!   r§   ÚassertIsNotr}   rº  r  )rC   r  Úe2s      r9   Ú	test_copyzHTTPErrorTest.test_copyë  sq   € Ý�c )Ð,Ñ,Ô,ˆÝŒY�q‰\Œ\ˆØ×Ò˜˜BÑÔÐØ×Ò˜œ¨¬Ñ7Ô7Ð7Ø×Ò˜œ 2¤9Ñ-Ô-Ð-Ð-Ð-r;   N)rK   rL   rM   r  rI   r;   r9   r  r  ê  s#   € € € € € ð.ð .ð .ð .ð .r;   r  c                   ó   — e Zd Zd„ ZdS )ÚApplicationTestc                 óz   — t          g ¦  «        }|                     dd¬¦  «        }|                     ¦   «          d S )Nr   r¡  )Úaddress)r   Úlistenr´  )rC   rA   Úservers      r9   Útest_listenzApplicationTest.test_listenô  s3   € Ý˜"‰oŒoˆØ—’˜A {�Ñ3Ô3ˆØ�Š‰Œˆˆˆr;   N)rK   rL   rM   r  rI   r;   r9   r  r  ó  s#   € € € € € ðð ð ð ð r;   r  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚURLSpecReverseTestc                 óÞ   — |                       dt          dd ¦  «                             ¦   «         ¦  «         |                       dt          dd ¦  «                             ¦   «         ¦  «         d S )Nz/favicon.icoz/favicon\.icoz^/favicon\.ico$©r}   r%   ÚreverserB   s    r9   Útest_reversezURLSpecReverseTest.test_reverseû  sb   € Ø×Ò˜­Ð-=¸tÑ)DÔ)D×)LÒ)LÑ)NÔ)NÑOÔOÐOØ×Ò˜­Ð-?ÀÑ)FÔ)F×)NÒ)NÑ)PÔ)PÑQÔQÐQÐQÐQr;   c                 ó¶   — dg}|D ]R}t          |d ¦  «        }	 |                     ¦   «         }|                      d|›d|›�¦  «         ŒC# t          $ r Y ŒOw xY wd S )Nz^/api/v\d+/foo/(\w+)$z.did not get expected exception when reversing z
. result: )r%   r  rª  r(  )rC   Úpathsr4   Úurl_specrì  s        r9   Útest_non_reversiblez&URLSpecReverseTest.test_non_reversibleÿ  s—   € ð
 *Ð*ˆØð 
	ð 
	ˆDå˜4 ‘”ˆHðØ!×)Ò)Ñ+Ô+�Ø—	’	�	à$( D D¨&¨&ð2ñô ð ð øõ ð ð ð Ø�ðøøøð
	ð 
	s   ™/A	Á	
AÁAc                 óâ   — |                       dt          dd ¦  «                             d¦  «        ¦  «         |                       dt          dd ¦  «                             d¦  «        ¦  «         d S )Nz/api/v1/foo/barz^/api/v1/foo/(\w+)$r  z/api.v1/foo/5/icon.pngz/api\.v1/foo/([0-9]+)/icon\.pngr–  r  rB   s    r9   Útest_reverse_argumentsz)URLSpecReverseTest.test_reverse_arguments  s{   € Ø×ÒØ�sÐ#9¸4Ñ@Ô@×HÒHÈÑOÔOñ	
ô 	
ð 	
ð 	×ÒØ$ÝÐ2°DÑ9Ô9×AÒAÀ!ÑDÔDñ	
ô 	
ð 	
ð 	
ð 	
r;   N)rK   rL   rM   r  r!  r#  rI   r;   r9   r  r  ú  sD   € € € € € ðRð Rð Rðð ð ð$
ð 
ð 
ð 
ð 
r;   r  c                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚRedirectHandlerTestc                 óH   — dt           ddifdt           ddifdt           ddifgS )Nú/srcr%   ú/dstz/src2z/dst2?foo=barz/(.*?)/(.*?)/(.*)z/{1}/{0}/{2})r_  rB   s    r9   r?   z RedirectHandlerTest.get_handlers  s;   € àÕ'¨%°¨Ð9ØÕ(¨5°/Ð*BÐCØ!Õ#5¸¸~Ð7NÐOð
ð 	
r;   c                 ó¬   — |                       dd¬¦  «        }|                      |j        d¦  «         |                      |j        d         d¦  «         d S )Nr'  Fr�  r‚  r�  r(  r†  rÙ   s     r9   Útest_basic_redirectz'RedirectHandlerTest.test_basic_redirect#  sS   € Ø—:’:˜f°u�:Ñ=Ô=ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜Ô)¨*Ô5°vÑ>Ô>Ð>Ð>Ð>r;   c                 ó¬   — |                       dd¬¦  «        }|                      |j        d¦  «         |                      |j        d         d¦  «         d S )Nz/src?foo=barFr�  r‚  r�  z/dst?foo=barr†  rÙ   s     r9   Útest_redirect_with_argumentz/RedirectHandlerTest.test_redirect_with_argument(  sS   € Ø—:’:˜n¸u�:ÑEÔEˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜Ô)¨*Ô5°~ÑFÔFÐFÐFÐFr;   c                 ó¬   — |                       dd¬¦  «        }|                      |j        d¦  «         |                      |j        d         d¦  «         d S )Nz/src2?foo2=bar2Fr�  r‚  r�  z/dst2?foo=bar&foo2=bar2r†  rÙ   s     r9   Ú%test_redirect_with_appending_argumentz9RedirectHandlerTest.test_redirect_with_appending_argument-  sU   € Ø—:’:Ð/À%�:ÑHÔHˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜Ô)¨*Ô5Ð7PÑQÔQÐQÐQÐQr;   c                 ó¬   — |                       dd¬¦  «        }|                      |j        d¦  «         |                      |j        d         d¦  «         d S )Nz/a/b/cFr�  r‚  r�  z/b/a/cr†  rÙ   s     r9   Útest_redirect_patternz)RedirectHandlerTest.test_redirect_pattern2  sS   € Ø—:’:˜h¸�:Ñ?Ô?ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ø×Ò˜Ô)¨*Ô5°xÑ@Ô@Ð@Ð@Ð@r;   N)rK   rL   rM   r?   r*  r,  r.  r0  rI   r;   r9   r%  r%    sj   € € € € € ð
ð 
ð 
ð?ð ?ð ?ð
Gð Gð Gð
Rð Rð Rð
Að Að Að Að Ar;   r%  c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚAcceptLanguageTestz)Test evaluation of Accept-Language headerc                 óÜ   — t          j        t          j                             t          j                             t          ¦  «        d¦  «        d¦  «          G d„ dt          ¦  «        }d|fgS )NÚgettext_translationsÚtornado_testc                   ó   — e Zd Zd„ ZdS )ú>AcceptLanguageTest.get_handlers.<locals>.AcceptLanguageHandlerc                 ó²   — |                       d|                      ¦   «         j                             dd¦  «        ¦  «         |                      d¦  «         d S )Nr  Ú_ú-r;   )r  Úget_browser_localerÕ   r¹  r±   rB   s    r9   r\   zBAcceptLanguageTest.get_handlers.<locals>.AcceptLanguageHandler.getB  sW   € Ø—’Ø&¨×(?Ò(?Ñ(AÔ(AÔ(F×(NÒ(NÈsÐTWÑ(XÔ(Xñô ð ð —’˜CÑ Ô Ð Ð Ð r;   Nr]   rI   r;   r9   ÚAcceptLanguageHandlerr7  A  s#   € € € € € ð!ð !ð !ð !ð !r;   r<  rR   )r   Úload_gettext_translationsr3   r4   r5   r6   r7   r   )rC   r<  s     r9   r?   zAcceptLanguageTest.get_handlers;  s{   € ÝÔ(ÝŒG�LŠL�œŸš­Ñ2Ô2Ð4JÑKÔKØñ	
ô 	
ð 	
ð
	!ð 	!ð 	!ð 	!ð 	!¥Nñ 	!ô 	!ð 	!ð Ð'Ð(ð
ð 	
r;   c                 óî   — |                       dddi¬¦  «        }|                      |j        d         d¦  «         |                       dddi¬¦  «        }|                      |j        d         d¦  «         d S )NrR   rh  zfr-FR;q=0.9rI  r  zfr-FRzfr-FR; q=0.9©rÓ   r}   rC  rÙ   s     r9   Útest_accept_languagez'AcceptLanguageTest.test_accept_languageL  s|   € Ø—:’:˜cÐ,=¸}Ð+M�:ÑNÔNˆØ×Ò˜Ô)Ð*<Ô=¸wÑGÔGÐGà—:’:˜cÐ,=¸~Ð+N�:ÑOÔOˆØ×Ò˜Ô)Ð*<Ô=¸wÑGÔGÐGÐGÐGr;   c                 óz   — |                       dddi¬¦  «        }|                      |j        d         d¦  «         d S )NrR   rh  z	fr-FR;q=0rI  r  úen-USr?  rÙ   s     r9   Útest_accept_language_ignorez.AcceptLanguageTest.test_accept_language_ignoreS  sB   € Ø—:’:˜cÐ,=¸{Ð+K�:ÑLÔLˆØ×Ò˜Ô)Ð*<Ô=¸wÑGÔGÐGÐGÐGr;   c                 óz   — |                       dddi¬¦  «        }|                      |j        d         d¦  «         d S )NrR   rh  z
fr-FR;q=-1rI  r  rB  r?  rÙ   s     r9   Útest_accept_language_invalidz/AcceptLanguageTest.test_accept_language_invalidW  sB   € Ø—:’:˜cÐ,=¸|Ð+L�:ÑMÔMˆØ×Ò˜Ô)Ð*<Ô=¸wÑGÔGÐGÐGÐGr;   N)rK   rL   rM   rN   r?   r@  rC  rE  rI   r;   r9   r2  r2  8  sa   € € € € € Ø3Ð3ð
ð 
ð 
ð"Hð Hð HðHð Hð HðHð Hð Hð Hð Hr;   r2  )¢r  Útornado.concurrentr   Útornador   Útornado.escaper   r   r   r   r	   r
   Útornado.httpclientr   Útornado.httputilr   Útornado.iostreamr   r   Útornado.locksr   Útornado.logr   r   Útornado.simple_httpclientr   Útornado.templater   Útornado.testingr   r   r   r   Útornado.test.utilr   Útornado.utilr   r   Útornado.webr   r   r   r    r_  r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   rˆ   r°  r§   ri  Úemail.utilsrn  rž  Úior0   r  rT  r3   rŠ   r¦  r¼  rt  Úurllib.parser‘  r:   r=   rP   rV   r_   ÚTestCaserr   r—   r¬   rß   r}  rˆ  r•  rž  r¶  rÅ  r×  rö  r  r  r  r  r  r"  r+  r5  r=  rC  r¥  r«  rÒ  rw  r‰  r–  rœ  rÏ  ræ  rí  rõ  r  r  r  r'  r2  r@  rN  rp  r€  r¾  r‹  rŽ  r§  r°  rÇ  rÑ  rà  r   r+  r:  rD  rP  rX  r^  ri  rp  r{  r¦  r³  rÏ  rØ  rà  rý  r  rO  r   r±  r¼  rÇ  rÙ  r  r  r  r  r%  r2  rI   r;   r9   ú<module>rX     sÖ  ðØ €€€à %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð /Ð .Ð .Ð .Ð .Ð .Ø -Ð -Ð -Ð -Ð -Ð -Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð, €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð ð7ð 7ð 7ðð ð ð ð Ð#ñ ô ð ð$	%ð 	%ð 	%ð 	%ð 	%˜Kñ 	%ô 	%ð 	%ðð ð ð ð �>ñ ô ð ð
$ð $ð $ð $ð $˜~ñ $ô $ð $ð,2Sð 2Sð 2Sð 2Sð 2S˜Ô*ñ 2Sô 2Sð 2Sðl,Eð ,Eð ,Eð ,Eð ,E˜Ô*ñ ,Eô ,Eð ,Eð^.9ð .9ð .9ð .9ð .9�kñ .9ô .9ð .9ðb\=ð \=ð \=ð \=ð \=�ñ \=ô \=ð \=ð~
ð 
ð 
ð 
ð 
 ñ 
ô 
ð 
ð
ð 
ð 
ð 
ð 
�{ñ 
ô 
ð 
ð8
(ð 
(ð 
(ð 
(ð 
(˜^ñ 
(ô 
(ð 
(ðð ð ð ð ˜+ñ ô ð ð0
ð 
ð 
ð 
ð 
�.ñ 
ô 
ð 
ð6--ð --ð --ð --ð --˜+ñ --ô --ð --ð`)Oð )Oð )Oð )Oð )O�~ñ )Oô )Oð )OðXYð Yð Yð Yð Y�~ñ Yô Yð Yð*Bð Bð Bð Bð B�^ñ Bô Bð Bð
1ð 1ð 1ð 1ð 1˜nñ 1ô 1ð 1ð
#ð #ð #ð #ð #˜.ñ #ô #ð #ð
(ð (ð (ð (ð (˜ñ (ô (ð (ðHð Hð Hð Hð H�nñ Hô Hð Hðð ð ð ð  ñ ô ð ð	ð 	ð 	ð 	ð 	˜^ñ 	ô 	ð 	ðð ð ð ð �~ñ ô ð ð(.ð .ð .ð .ð .˜ñ .ô .ð .ð
ð 
ð 
ð 
ð 
˜.ñ 
ô 
ð 
ðOOð OOð OOð OOð OO�kñ OOô OOð OOðd/ð /ð /ð /ð /�kñ /ô /ð /ð?1ð ?1ð ?1ð ?1ð ?1˜ñ ?1ô ?1ð ?1ðDf-ð f-ð f-ð f-ð f-�[ñ f-ô f-ð f-ðROð Oð Oð Oð O ñ Oô Oð Oð*"-ð "-ð "-ð "-ð "- Kñ "-ô "-ð "-ðJ;ð ;ð ;ð ;ð ;˜[ñ ;ô ;ð ;ð@Cð @Cð @Cð @Cð @C˜;ñ @Cô @Cð @CðF'0ð '0ð '0ð '0ð '0�{ñ '0ô '0ð '0ðT0ð 0ð 0ð 0ð 0˜kñ 0ô 0ð 0ðD0ð 0ð 0ð 0ð 0˜[ñ 0ô 0ð 0ð&8ð 8ð 8ð 8ð 8Ð+ñ 8ô 8ð 8ð
@ð 
@ð 
@ð 
@ð 
@Ð)ñ 
@ô 
@ð 
@ðAð Að Að Að AÐ)ñ Aô Að Að*&1ð &1ð &1ð &1ð &1Ð,ñ &1ô &1ð &1ðR
ð 
ð 
ð 
ð 
Ð*ñ 
ô 
ð 
ðCð Cð Cð Cð CÐ/ñ Cô Cð Cð,-ð -ð -ð -ð -˜;ñ -ô -ð -ð&7
ð 7
ð 7
ð 7
ð 7
Ð(ñ 7
ô 7
ð 7
ðtHð Hð Hð Hð H˜Kñ Hô Hð Hð2>ð >ð >ð >ð >Ð/ñ >ô >ð >ð	ð 	ð 	ð 	ð 	�iñ 	ô 	ð 	ð,1ð ,1ð ,1ð ,1ð ,1Ð0ñ ,1ô ,1ð ,1ð^ð ð ð ð Ð,ñ ô ð ð+
ð +
ð +
ð +
ð +
Ð0ñ +
ô +
ð +
ð\
ð 
ð 
ð 
ð 
Ð0ñ 
ô 
ð 
ð">ð >ð >ð >ð >Ð1ñ >ô >ð >ð,Y1ð Y1ð Y1ð Y1ð Y1˜ñ Y1ô Y1ð Y1ðx
1ð 
1ð 
1ð 
1ð 
1Ð#8ñ 
1ô 
1ð 
1ð-ð -ð -ð -ð -Ð*?ñ -ô -ð -ð$:ð :ð :ð :ð :Ð.ñ :ô :ð :ð&2ð 2ð 2ð 2ð 2Ð+ñ 2ô 2ð 2ð*1ð 1ð 1ð 1ð 1Ð/ñ 1ô 1ð 1ð 
ð 
ð 
ð 
ð 
�[ñ 
ô 
ð 
ð@ð @ð @ð @ð @�Kñ @ô @ð @ð$-ð -ð -ð -ð - +ñ -ô -ð -ð.ð .ð .ð .ð .˜ñ .ô .ð .ð$[ ð [ ð [ ð [ ð [ ˜{ñ [ ô [ ð [ ðD ð/ð /ð /ð /ð /˜^ñ /ô /ñ Ôð/ð>J
ð J
ð J
ð J
ð J
ñ J
ô J
ð J
ðZ
Eð 
Eð 
Eð 
Eð 
EØ'¨ñ
Eô 
Eð 
EðBð Bð Bð Bð BØ'¨ñBô Bð Bð8
ð 8
ð 8
ð 8
ð 8
Ð!6ñ 8
ô 8
ð 8
ðv1ð 1ð 1ð 1ð 1Ð+ñ 1ô 1ð 1ð.g)ð g)ð g)ð g)ð g)�hÔ'ñ g)ô g)ð g)ðTH1ð H1ð H1ð H1ð H1Ð$ñ H1ô H1ð H1ðX7-ð 7-ð 7-ð 7-ð 7-Ð.ñ 7-ô 7-ð 7-ðtNð Nð Nð Nð NÐ0ñ Nô Nð Nð8Hð Hð Hð Hð HÐ/ñ Hô Hð Hð*Mð Mð Mð Mð M�Kñ Mô Mð MðB<5ð <5ð <5ð <5ð <5�ñ <5ô <5ð <5ð~5ð 5ð 5ð 5ð 5Ð.ñ 5ô 5ð 5ð.ð .ð .ð .ð .�HÔ%ñ .ô .ð .ðð ð ð ð �mñ ô ð ð
ð 
ð 
ð 
ð 
˜Ô*ñ 
ô 
ð 
ðBAð Að Að Að A˜+ñ Aô Að Að:!Hð !Hð !Hð !Hð !H˜ñ !Hô !Hð !Hð !Hð !Hr;   